Quick Flow
GLFW 라이브러리 + GLAD 2 생성 파일 준비
→ GLFW 초기화 → GL 3.3 Core 요청 → 창 생성
→ 현재 컨텍스트 설정 → gladLoadGL → 실제 3.3 지원 확인
→ GL 자원 생성·렌더링 → GL 자원 정리 → 창 파괴 → GLFW 종료기준은 C++17, CMake 3.20 이상, GLFW 3.4, GLAD 2.0.8입니다. 기본 GLAD 생성 대상은 gl:core=3.3이며 GLAD의 자체 로더 대신 GLFW의 함수 조회를 사용합니다.
파일과 빌드
같은 디렉터리에 CMakeLists.txt, frame.cpp, triangle.cpp를 저장합니다. GLFW 3.4의 개발 헤더·라이브러리와 CMake 패키지 설정 파일을 먼저 설치합니다. 설치 경로가 기본 검색 경로 밖이면 CMake의 CMAKE_PREFIX_PATH에 지정합니다.
GLAD는 별도 Python 가상환경에서 생성합니다. 터미널 명령의 python은 해당 가상환경의 Python입니다.
python -m pip install glad2==2.0.8
python -m glad --api gl:core=3.3 --extensions '' --out-path glad --reproducible c
cmake -S . -B build -DGLAD_DIR=./glad
cmake --build build --config Release--extensions ''는 이 시작 예제에 필요하지 않은 확장을 넣지 않는 선택입니다. 이후 상위 버전·확장 예제는 GLAD 생성 옵션부터 그 요구에 맞춰 바꿉니다. Windows PowerShell에서 빈 인수 전달이 달라지면 GLAD의 생성 옵션을 확인하거나 웹 생성기를 사용합니다.
생성된 glad/include/glad/gl.h, glad/include/KHR/khrplatform.h, glad/src/gl.c가 필요합니다. 헤더만 복사하면 GLAD 전역 함수 포인터의 정의가 없어 링크 오류가 납니다. CMake는 gl.c를 C 소스로 컴파일해 예제와 연결합니다. Visual Studio 같은 다중 구성 생성기는 실행 파일을 build/Release에 둘 수 있습니다.
초기화의 핵심 순서
다음은 초기화 구간입니다. 전체 종료·프레임 코드는 프레임 실행의 완결 예제를 사용합니다.
#include <glad/gl.h>
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
// main 안에서 실행합니다.
if (!glfwInit()) return 1;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL", nullptr, nullptr);
if (!window) {
glfwTerminate();
return 1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGL(glfwGetProcAddress) || !GLAD_GL_VERSION_3_3) {
glfwDestroyWindow(window);
glfwTerminate();
return 1;
}GLFW_INCLUDE_NONE은 GLFW가 운영체제의 GL 헤더를 중복 포함하지 않게 합니다. 로더 초기화 전에 glGenBuffers 같은 함수를 호출하지 않습니다. GLAD가 반환한 0은 로딩 실패이고, GLAD_GL_VERSION_3_3은 실제 컨텍스트가 기준 버전을 제공하는지 확인합니다.
환경별 실패 지점
| 증상 | 먼저 확인할 곳 |
|---|---|
glad/gl.h를 찾지 못함 | GLAD 2 생성 결과와 include 경로 |
| GLAD 심벌 링크 오류 | gl.c가 빌드에 포함됐는지 |
| GLFW 패키지를 찾지 못함 | 런타임 파일만 설치했는지, CMake 검색 경로 |
| 창 생성 실패 | GLFW 오류 콜백, 요청 버전·프로파일, 드라이버·화면 연결 |
| 함수 호출에서 충돌 | 현재 컨텍스트·로딩 결과·호출 버전 |
macOS의 기본 OpenGL 구현에서 4.3 이상을 요청해 이 예제를 확장할 수 있다고 가정하지 않습니다. 지원 버전은 실제 조회합니다. 원격·헤드리스 Linux 환경은 일반 데스크톱과 창 시스템 조건이 다릅니다. GLFW 자체가 GPU 드라이버를 설치하지는 않습니다.
구형 예제와의 차이
1.x 호출을 실행하려면 Core 3.3 요청을 그대로 둔 채 glBegin만 추가해서는 안 됩니다. 지원되는 레거시 컨텍스트와 그에 맞는 로더 헤더가 필요합니다. GLAD를 Compatibility 대상으로 생성해도 실행 컨텍스트가 Core라면 제거된 기능을 쓸 수 없습니다. 컨텍스트와 헤더 양쪽의 조건을 맞춥니다.
참고 링크
3 sources