Skip to content

01. 개발환경 세팅과 윈도우 열기


목차

  • 주의사항
  • OpenGL 개발 권장 사양
  • 사용할 언어 / 라이브러리
  • GLFW 윈도우 열기

주의사항

  1. 이 지식의 구렁텅이의 OpenGL 코스에 올라오는 코드들은 모두 Windows 11에서 검증이 완료된 코드입니다.
  2. Windows + Visual Studio 26이 아닌 타 플랫폼에 대한 설명은 적지 않습니다.
  3. 자세한 검증용 PC 스펙은 아래를 참고해주세요.

  • 운영체제 : Windows 11
  • CPU : Intel Core i7 13650HX
  • 그래픽카드 : GeForce RTX 5060 Laptop
  • RAM : DDR5 32GB

OpenGL 개발 권장 사양

GL은 벌칸과 다르게 매우 오랫동안 사용된 규격이라서 웬만한 드라이버는 다 지원하지만,

중요한 점은 이 코스에서는 DSA (Direct State Access)라는 기능을 사용할 것이고,

DSA 기능은 OpenGL 4.5 부터 정식으로 지원됩니다.

따라서 자신의 그래픽카드가 OpenGL 4.5 이상을 지원하는지 꼭 확인해주세요.

또 RAM은 클수록 좋지만, 그래픽스 개발에 최소 16GB 는 확보하시는 것을 추천드립니다.

마지막으로 혹시 Nvidia 제품군을 사용하신다면,

NVIDIA 제어판 - 3D 설정 관리 - OpenGL GDI 호환성호환 선호 로 설정해주세요.

이에 대해서는 3. 윈도우 입력과 OpenGL 에서의 멀티스레딩 에서 재차 언급하겠습니다.

사용할 언어 / 라이브러리

이 코스에서는 기본적으로 C++ 20을 사용합니다.

C++ 20에만 있는 기능(span, ranges, concepts, coroutine 등) 들을 주로 사용하진 않지만, 가끔 등장할 예정입니다.

사용할 라이브러리는 다음과 같습니다.

(사용 방법을 알고 있다면 GLFW대신 SDL / SFML / RGFW, GLAD 대신 GLEW, GL3W나 커스텀 로더 등을 써도 무관합니다.)

위의 라이브러리 파일들을 타겟 플랫폼 (x64 / x86) 과 원하는 링킹 형태를 고려해서 사전에 받아놔 주세요.

GLAD의 경우 API 항목에 gl을 Version 4.6 으로, Profile 항목을 Core 를 선택한 채로 받아 주세요.


현재 당장 필요한 라이브러리는 GLFW, GLAD 2개 뿐입니다.

나머지들은 중간에 소개와 함께 차근차근 사용하도록 하겠습니다.

GLFW 윈도우 열기

GLFW란?

GLFW는 OpenGL 개발에 필요한 창 열기이벤트 핸들링 을 크로스 플랫폼으로 추상화해주는 라이브러리입니다.

GLFW/glfw3.h 헤더를 통해서 크로스 플랫폼 GLFW 기능들을 모두 사용할 수 있고,

GLFW/glfw3native.h 헤더에선 GLFW_EXPOSE_NATIVE_WIN32 같은 매크로를 정의해서 HWND 같은 플랫폼 독립적인 핸들을 가져와 쓸 수 있습니다.

게임 엔진을 개발할 것이 아니라면, GLFW에 대해서는 창을 나타내는 GLFWwindow 와 그에 따른 함수 몇 개만 알고 있으면 충분합니다.

꼭 필요한 함수들은 다음과 같습니다.

// GLFW를 초기화. 프로그램 시작할때 한 번 부른다.
void glfwInit();

// GLFW 창을 생성.
GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);

// window에 대한 GL Context 를 현재 스레드로 설정
void glfwMakeContextCurrent(GLFWwindow* window);

// 사용자가 window를 닫으려고 했는지 반환
int glfwWindowShouldClose(GLFWwindow* window);

// window의 두 버퍼를 교체
void glfwSwapBuffers(GLFWwindow* window);

// GLFW내에 쌓인 전역 이벤트들을 전송
void glfwPollEvents();

// GLFW 창을 삭제.
void glfwDestroyWindow(GLFWwindow* window);

// GLFW를 종료. 프로그램 종료할 때 한 번 부른다.
void glfwTerminate();

GL Context와 더블 버퍼링, 이벤트 전송에 대한 자세한 내용은 3. 윈도우 입력과 OpenGL 에서의 멀티스레딩 에서 확인해 주세요.

GLAD란?

위에서 언급했다시피, OpenGL은 '라이브러리' 가 아니라, 규격이고, 드라이버 안에 사양대로 정의되어 있습니다. 그래서 저희가 쓸 OpenGL 기능(=이름이 gl로 시작하는 함수들의 위치)들을 런타임에 불러와야 합니다.

그 수고를 덜어주는 라이브러리가 GLAD입니다. 밑의 함수 2개만 알고 계시면 됩니다.

// 현재 스레드에 GL Context 가 설정되어 있다는 가정 하에,
//      현재 스레드에 GL 함수들을 로딩 (실패 시 0 반환)
int gladLoadGL();

// 인자로 받은 프로시저를 기반으로 GL함수들을 로딩 (실패 시 0 반환)
int gladLoadGLLoader(GLADloadproc proc);

예제 실행하기

아래 코드를 복사한 후, 실행했을 때 창이 잘 열리고 닫히는지 확인해 주세요.

#include <glad/glad.h>
#include <glfw/glfw3.h>

#include <cassert>

int main() {
    glfwInit(); // GLFW 초기화

    // 창 생성
    GLFWwindow* window = glfwCreateWindow(1280, 720, "OpenGL", nullptr, nullptr);

    // 현재 스레드에 GL Context 설정
    glfwMakeContextCurrent(window);

    // GL 함수 로딩
    assert(gladLoadGL() != 0);

    // 사용자가 창을 닫을 때까지
    while (glfwWindowShouldClose(window) == false) {
        // 전역 이벤트들을 전송
        glfwPollEvents();
        // 버퍼 교체
        glfwSwapBuffers(window);
    }

    // 창 삭제
    glfwDestroyWindow(window);

    glfwTerminate(); // GLFW 종료
}

OpenGL 이란 이름의 창이 뜨면 성공입니다.

만약 컴파일이 안 된다면 라이브러리 링커를 확인해보시고,

런타임에 에러가 난다면 GLAD 설정 관련일 가능성이 높으니 GLAD 설정을 다시 확인해주세요.

다음 게시글에서는 그래픽스 프로그래밍에서의 Hello, world라고 할 수 있는 삼각형을 출력해보겠습니다.