⚫ Compatibility (호환성)
- OpenGL 3.0에서는 버전이 업그레이드됨에 따라 더 이상 사용되지 않는 함수들을 점진적으로 제거하는 deprecation
구식화
model을 도입
- 다음 버전에 사라질 함수를 미리 표시해둬서 개발자들이 지양하도록
- 호환성과 관련하여 고려해야할 사항 (프로파일 선택)
- Comparibility profile: 이전 기능과의 호환성 유지
- Core profile: 특정 버전의 OpenGL을 위해 코드 작성, 이전 버전 기능을 사용하지 않는 경우
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
⚫ OpenGL Library
1. GLFW
- OpenGL context를 생성하여 렌더링할 window 생성, 입력 이벤트 처리 등 OpenGL 애플리케이션의 귀찮은 구현들을 쉽게 해주는 라이브러리
- GLFW 다운 (헤더파일, 라이브러리파일)
- include directory에 GLFW 라이브러리 헤더파일 추가
- 라이브러리 파일(glfw3.lib)을 링크
- 이러한 기능이 OpenGL에 포함 안되있는 이유: 보통 OS, 시스템과 관련된 기능이라 독립적으로 구현하기 위해 분리
2. GLAD
- OpenGL의 최신 기능에 액세스하기 위해 사용되는 라이브러리 로더
- OpenGL은 다양한 버전의 드라이버를 가짐
- 대부분의 함수의 위치는 compile-time에는 몰라서 run-time에 쿼리되야함
- 즉, run-time에 필요한 함수를 찾아 연결(Linking)해주는 작업을 간단하게 해줌
- GLAD 사이트에서 Language, OpenGL Version, Profile을 선택하여 환경에 맞는 라이브러리 다운
- include directory에 생성된 GLAD 라이브러리 파일 추가
- glad.c파일을 프로젝트에 추가
- 소스코드
#include <glad/glad.h>
를 추가하여 같이 빌드되도록 함
3. GLM
- OpenGL Mathematics
- Pre-made mathematics libraries
- Header-only library
- GLM 다운
- include directory에 GLM 라이브러리 추가
- 필요한 기능만 include (내용이 많아서)
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
- GLM의 클래스와 함수는 모두 glm namespace에 정의되어 있으므로, 이를 사용하여 필요한 클래스, 함수에 접근할 수 있음
📃 example code (p.8-9)
📃 Hello Window (p.10-13)
- Callback은 또 다른 함수 호출 방법으로, 조건이 맞을 때 호출한다 (ex-화면 크기 바뀔 떄, 마우스 클릭 할 때...)
⚫ Shader Program
- 쉐이더는 실행 중인 OpenGL 프로그램 안에서만 컴파일, 링킹될 수 있음
- 컴파일, 링킹, 실행은 위 코드에서 while문 전(렌더링 시작 전)에 한번만
1. Compiling a Shader
- Shader Object를 생성
- Shader Object에 Source code(a string or set of strings) 제공
- Shader Object가 코드 컴파일
📃 Compiling a Shader (p.15)
- 소스코드 = 쉐이더
2. Linking a Shader Program
- 에러 확인 후 없으면 Linking
- 쉐이더들을 하나의 shader program으로 링크
- shader program object 생성
- 각 shader object를 shader program object에 attach (OpenGL에게 이 shader program에는 이러한 shader들이 사용되어야한다고 알려줌)
- shader program object에게 링크를 요청하여 shader들을 함께 링크
📃 Linking a Shader Program (p.17)
3. Using a Shader Program
- object를 렌더링할 때 shader program을 사용