Quick Comparison
OpenGL은 렌더링 API입니다. 창·입력은 GLFW 또는 freeglut, 함수 진입점은 GLAD 또는 GLEW, 벡터·행렬 계산은 필요할 때 GLM으로 준비합니다. 같은 역할의 라이브러리를 모두 연결할 필요는 없습니다.
| 필요한 일 | 선택지 | OpenGL을 대신하는가 |
|---|---|---|
| 창·컨텍스트·입력 | GLFW, GLUT/freeglut | 운영체제 연결을 담당하며 렌더링 API 자체는 아님 |
| GL 함수 로딩 | GLAD, GLEW | 사용할 함수 포인터를 준비하며 드라이버 기능을 추가하지 않음 |
| 벡터·행렬 계산 | GLM | CPU 수학 계산이며 GPU 업로드는 별도 |
| 구형 보조 함수 해석 | GLU | 투영·곡면 등의 유틸리티이며 GLUT과 다름 |
GLUT·freeglut·GLFW
GLUT은 간단한 OpenGL 예제를 운영체제에 덜 의존하게 만들기 위한 도구입니다. 화면 갱신·입력 처리 함수를 등록하고 메인 루프에 제어를 넘기는 방식이 대표적입니다. 원본 GLUT과 이를 대체·확장하는 freeglut은 구분해야 합니다. 원본에 없는 freeglut의 루프 종료·컨텍스트 요청 기능을 GLUT 공통 기능이라고 쓰면 오래된 환경에서 컴파일되지 않습니다.
GLFW는 창·컨텍스트·입력을 제공하고, 애플리케이션이 루프를 직접 작성하기 쉽습니다. freeglut도 현대 Core 컨텍스트를 요청할 수 있으므로 freeglut 사용 여부가 고정 기능 렌더링 여부를 결정하지는 않습니다. GLFW에서도 지원되는 구형 컨텍스트를 사용할 수 있습니다.
| 상황 | 먼저 고를 방식 | 확인할 비용 |
|---|---|---|
| GLUT 콜백으로 작성된 강의 예제 실행 | freeglut로 기존 흐름 유지 | 원본 GLUT과 달라진 종료·도형 함수의 조건 |
| 새 3.3 Core 예제 작성 | GLFW + GLAD 2 | 셰이더·정점·자원 처리는 직접 작성 |
| 기존 GLEW 프로젝트 수정 | 기존 로더 유지 | GLAD 헤더·로더를 중복 도입하지 않음 |
| 게임 엔진·UI 툴킷에 통합 | 기존 창·컨텍스트 관리 사용 | GLFW 창을 다시 만들기보다 기존 수명·스레드 계약 확인 |
실행 흐름 선택
기존 GLUT 예제의 콜백 구조를 유지하려면 freeglut, 애플리케이션이 직접 루프를 구성하려면 GLFW를 먼저 비교합니다. 단계별 대응은 프레임 표시, 콜백 등록·종료는 freeglut 실행에 있습니다.
GLAD·GLEW·GLM·GLU의 경계
함수 로더는 현재 컨텍스트가 생긴 뒤 초기화합니다. 헤더가 최신이어도 실행 환경에 없는 함수는 호출할 수 없습니다. GLAD 1의 glad/glad.h·gladLoadGLLoader와 GLAD 2의 glad/gl.h·gladLoadGL를 섞지 않습니다. 기본 예제는 GLAD 2를 사용합니다.
GLM은 glm::mat4 같은 수학 타입을 제공하지만 glUniformMatrix4fv를 호출하거나 컨텍스트를 만들지는 않습니다. GLU의 gluPerspective처럼 구형 행렬 상태와 연결된 코드는 현대 Core 예제에 그대로 붙이지 않습니다. 투영 행렬을 계산해 셰이더에 전달하는 별도 경로가 필요합니다.
glutSolidTeapot 같은 도형 도우미를 호출할 수 있다는 사실만으로 해당 코드가 Core에서도 유효하다고 가정하지 않습니다. 도우미 구현과 요구되는 셰이더·속성 조건을 확인하고, 새 기본 예제는 직접 만든 삼각형 데이터로 시작합니다.
참고 링크
3 sources