5 minute read

멋진 그래픽을 만들기 시작하기 전에 가장 먼저 해야 할 일은 OpenGL 컨텍스트와 그릴 응용 프로그램 창을 만드는 것입니다. 그러나 이러한 작업은 운영 체제마다 다르며 OpenGL은 의도적으로 이러한 작업에서 자신을 추상화하려고 합니다. 즉, 창을 만들고 컨텍스트를 정의하고 사용자 입력을 모두 직접 처리해야 합니다.

운 좋게도 우리가 추구하는 기능을 제공하는 라이브러리가 꽤 많이 있으며, 그 중 일부는 특별히 OpenGL을 대상으로 합니다. 이러한 라이브러리는 모든 운영 체제별 작업을 저장하고 렌더링할 창과 OpenGL 컨텍스트를 제공합니다. 더 인기 있는 라이브러리 중 일부는 GLUT, SDL, SFML 및 GLFW입니다. LearnOpenGL에서 우리는 GLFW를 사용할 것입니다. 다른 라이브러리를 자유롭게 사용하십시오. 대부분의 설정은 GLFW의 설정과 유사합니다.

GLFW

GLFW는 특히 OpenGL을 대상으로 하는 C로 작성된 라이브러리입니다. GLFW는 화면에 좋은 것을 렌더링하는 데 필요한 최소한의 필수품을 제공합니다. 이를 통해 OpenGL 컨텍스트를 생성하고, 창 매개변수를 정의하고, 사용자 입력을 처리할 수 있습니다. 이는 우리의 목적에 충분합니다.

이 장의 초점과 다음 장의 초점은 GLFW를 시작하고 실행하여 OpenGL 컨텍스트를 올바르게 생성하고 우리가 엉망으로 만들 수 있는 간단한 창을 표시하는지 확인하는 것입니다. 이 장은 검색에 대한 단계별 접근 방식을 취합니다. , GLFW 라이브러리 구축 및 연결. 우리는 이 글을 쓰는 시점에서 Microsoft Visual Studio 2019 IDE를 사용할 것입니다(프로세스는 최신 Visual Studio 버전에서도 동일합니다). Visual Studio(또는 이전 버전)를 사용하지 않는 경우 걱정하지 마십시오. 프로세스는 대부분의 다른 IDE에서 유사합니다.

Building GLFW (GLFW 구축)

GLFW는 웹 페이지의 다운로드 페이지에서 얻을 수 있습니다. GLFW에는 이미 Visual Studio 2012에서 2019년까지 미리 컴파일된 바이너리와 헤더 파일이 있지만 완전성을 위해 소스 코드에서 GLFW를 직접 컴파일합니다. 모든 라이브러리에서 미리 컴파일된 바이너리를 사용할 수 있는 것은 아니므로 오픈 소스 라이브러리를 직접 컴파일하는 과정에 대한 느낌을 주기 위한 것입니다. 그럼 소스 패키지를 다운로드 해봅시다.

(중요) 우리는 모든 라이브러리를 64비트 바이너리로 빌드할 것이므로 미리 컴파일된 바이너리를 사용하는 경우 64비트 바이너리를 가져와야 합니다.

소스 패키지를 다운로드했으면 압축을 풀고 콘텐츠를 엽니다. 우리는 몇 가지 항목에만 관심이 있습니다:

  • 컴파일 결과 라이브러리 (resulting library from compilation.)
  • 인클루드 폴더 (include folder)

소스 코드에서 라이브러리를 컴파일하면 결과 라이브러리가 CPU/OS에 완벽하게 맞춰지도록 보장합니다. 사전 컴파일된 고급 바이너리가 항상 제공되는 것은 아닙니다(때로는 사전 컴파일된 바이너리를 시스템에서 사용할 수 없음). 그러나 오픈 월드에 소스 코드를 제공할 때의 문제는 모든 사람이 애플리케이션 개발을 위해 동일한 IDE 또는 빌드 시스템을 사용하는 것은 아니라는 점입니다. 이는 제공된 프로젝트/솔루션 파일이 다른 사람의 설정과 호환되지 않을 수 있음을 의미합니다. 따라서 사람들은 주어진 .c/.cpp 및 .h/.hpp 파일을 사용하여 자신의 프로젝트/솔루션을 설정해야 하므로 번거롭습니다. 바로 이러한 이유로 CMake라는 도구가 있습니다.

위 내용 요약

  • 미리 컴파일된 바이너리를 사용하지 않고 소스 코드에서 라이브러리를 컴파일하면 생길 수 있는 문제점이 있다.
    • 모든 사람이 동일한 IDE나 빌드 시스템을 사용하는 것이 아니다.
    • 그렇기 때문에 제공된 프로젝트, 솔루션 파일이 다른 사람의 설정과 호환과 맞지 않을 수 있다. (제공된 프로젝트, 솔루션 파일은 빌드를 했을 때 나온 결과물이 다를 수 있다는 뜻으로 받아 들였다.)
    • 그래서 주어진 c,cpp / h,hpp 파일을 통해 자신의 프로젝트/솔루션을 설정해야하는데 이것이 번거롭다.
    • 그래서 이러한 부분을 해결하기 위해 사용하는 것이 CMake라는 툴이다.

CMake

CMake는 미리 정의된 CMake 스크립트를 사용하여 소스 코드 파일 모음에서 사용자가 선택한 프로젝트/솔루션 파일(예: Visual Studio, Code::Blocks, Eclipse)을 생성할 수 있는 도구입니다. 이를 통해 라이브러리를 컴파일하는 데 사용할 수 있는 GLFW의 소스 패키지에서 Visual Studio 2019 프로젝트 파일을 생성할 수 있습니다. 먼저 다운로드 페이지에서 다운로드할 수 있는 CMake를 다운로드하여 설치해야 합니다.

CMake가 설치되면 명령줄에서 또는 GUI를 통해 CMake를 실행하도록 선택할 수 있습니다. 우리는 일을 지나치게 복잡하게 만들려고 하지 않기 때문에 GUI를 사용할 것입니다. CMake에는 소스 코드 폴더와 바이너리에 대한 대상(destination) 폴더가 필요합니다. 소스 코드 폴더의 경우 다운로드한 GLFW 소스 패키지의 루트 폴더를 선택하고, 빌드 폴더의 경우 새로운 build라는 폴더를 생성한 다음 해당 디렉토리를 선택합니다.

cmake

소스 및 대상 폴더가 설정되면 configure 버튼을 클릭하여 CMake가 필요한 설정과 소스 코드를 읽을 수 있도록 합니다. 그런 다음 프로젝트에 대한 생성기를 선택해야 하며 Visual Studio 2019를 사용하고 있으므로 Visual Studio 16 옵션(Visual Studio 2019는 Visual Studio 16이라고도 함)을 선택합니다. 그런 다음 CMake는 결과 라이브러리를 구성하기 위해 가능한 빌드 옵션을 표시합니다. 기본값으로 두고 구성을 다시 클릭하여 설정을 저장할 수 있습니다. 설정이 완료되면 Generate를 클릭하면 결과 프로젝트 파일이 빌드 폴더에 생성됩니다.

Compilation

이제 빌드 폴더에서 GLFW.sln이라는 파일을 찾을 수 있으며 Visual Studio 2019로 엽니다. CMake는 이미 적절한 구성 설정이 포함된 프로젝트 파일을 생성했으므로 솔루션을 빌드하기만 하면 됩니다. CMake는 64비트 라이브러리로 컴파일되도록 솔루션을 자동으로 구성해야 합니다. 이제 빌드 솔루션을 누르십시오. 이렇게 하면 build/src/Debug에서 glfw3.lib라는 이름의 컴파일된 라이브러리 파일을 찾을 수 있습니다.

라이브러리를 생성한 후에는 IDE가 OpenGL 프로그램에 대한 라이브러리와 포함 파일을 찾을 위치를 알고 있는지 확인해야 합니다. 이를 수행하는 데에는 두 가지 일반적인 접근 방식이 있습니다.

  1. IDE/컴파일러의 /lib 및 /include 폴더를 찾아 GLFW의 include 폴더 내용을 IDE의 /include 폴더에 추가하고 마찬가지로 glfw3.lib를 IDE의 /lib 폴더에 추가합니다. 이것은 효과가 있지만 권장되는 접근 방식은 아닙니다. 라이브러리를 추적하고 파일을 포함하는 것은 어렵고 IDE/컴파일러를 새로 설치하면 이 프로세스를 처음부터 다시 수행해야 합니다.
  2. 또 다른 접근 방식(권장)은 IDE/컴파일러에서 참조할 수 있는 타사 라이브러리의 모든 헤더 파일/라이브러리를 포함하는 선택한 위치에 새 디렉터리 집합을 만드는 것입니다. 예를 들어, OpenGL 프로젝트에 대한 모든 라이브러리와 헤더 파일을 각각 저장하는 Libs 및 Include 폴더가 포함된 단일 폴더를 만들 수 있습니다. 이제 모든 타사 라이브러리가 단일 위치(여러 컴퓨터에서 공유할 수 있음) 내에 구성됩니다. 그러나 요구 사항은 새 프로젝트를 만들 때마다 해당 디렉터리를 찾을 위치를 IDE에 알려야 한다는 것입니다.

필요한 파일이 선택한 위치에 저장되면 첫 번째 OpenGL GLFW 프로젝트 생성을 시작할 수 있습니다.

Our first project

먼저 Visual Studio를 열고 새 프로젝트를 생성해 보겠습니다. 여러 옵션이 제공되는 경우 C++를 선택하고 빈 프로젝트를 선택합니다(프로젝트에 적절한 이름을 지정하는 것을 잊지 마십시오). 64비트에서 모든 작업을 수행할 것이고 프로젝트의 기본값은 32비트이므로 디버그 옆 상단의 드롭다운을 x86에서 x64로 변경해야 합니다.

x64

Linking

프로젝트에서 GLFW를 사용하려면 라이브러리를 프로젝트와 연결해야 합니다. 이것은 링커 설정에서 glfw3.lib를 사용하도록 지정하여 수행할 수 있지만 우리 프로젝트는 타사 라이브러리를 다른 디렉토리에 저장하기 때문에 glfw3.lib를 찾을 위치를 아직 모릅니다. 따라서 먼저 이 디렉토리를 프로젝트에 추가해야 합니다.

라이브러리 및 포함 파일을 찾아야 할 때 이 디렉토리를 고려하도록 IDE에 지시할 수 있습니다. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭한 다음 아래 이미지와 같이 VC++ 디렉터리로 이동합니다.

Lking 요약

  • CMake로 빌드해서 만들어낸 glfw3.lib파일과 각종 파일들을 연동시키기 위해 경로를 세팅해주는 작업.
  • lib파일은 정적 라이브러리. dll은 동적 라이브러리 파일

vc_directories

GLAD

OpenGL은 API가 아닌, standard/specification이기 때문에 특정 그래픽카드가 지원하는 드라이버에 specification(사양)을 구현하는 것은 드라이버 제조업체에 달려있습니다. 그렇기 때문에 OpenGL 드라이버는 많은 버전을 가지고 있고, functions(기능?함수?)의 대부분의 위치는 컴파일 타임에 알 수 없고 런타임에 질의하는 것이 필요합니다. 그 다음 필요한 함수들의 위치를 검색하고 나중에 사용할 수 있도록 함수 포인터에 저장하는 것이 개발자의 작업입니다. 이러한 위치를 검색하는 것은 OS마다 다릅니다. Winodw에서는 다음과 같이 표시됩니다.

// define the function's prototype
typedef void (*GL_GENBUFFERS) (GLsizei, GLuint*);
// find the function and assign it to a function pointer
GL_GENBUFFERS glGenBuffers  = (GL_GENBUFFERS)wglGetProcAddress("glGenBuffers");
// function can now be called as normal
unsigned int buffer;
glGenBuffers(1, &buffer);

보시다시피 코드가 복잡한 것을 확인할 수 있습니다. 그리고 아마 필요할 수도 있지만 선언되지 않은 각 함수에 대해서 이러한 작업을 하는 것은 번거로운 프로세스입니다. 감사하게도 이런 목적을 위한 적합한 GLAD라는 인기있고 가장 최신인 라이브러리가 있습니다.

GLAD 설정

  1. Web Service 으로 이동
  2. Language C++ 선택
  3. API Section에 gl verison을 3.3(아니면 그 이상)으로 선택
  4. Profile을 Core로 선택
  5. Options에 Generate a loader 선택
  6. GENERATE 버튼 클릭
  7. glad.zip파일 다운
  8. include폴더에 있는 glad, KHR 폴더를 본인이 세팅해준 OpenGL 라이브러리 includes경로에 넣음.
  9. glad.c파일을 프로젝트에 추가. (visual studio에 소스파일추가)

위의 절차를 끝내면 glad세팅은 완료된 것입니다.