일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- vertex sahder
- qtspim stack
- 시작
- 튜링기계
- git
- Qtspim
- 자동판결
- vertex
- 멀티프로세스
- .sln
- glDrawArrays
- fetching
- superbible
- interface block
- multi process
- 프로젝트 여러개
- OpenGL
- turingmachine
- shader
- visualstudip
- fragment
- 정의
- glfw
- vertexarrayobject
- 수리명제
- 솔루션에프로젝트추가
- VAO
- Tutorial
- 파일생성 명령어
- 하나의 솔루션
- Today
- Total
공사중
OpenGL이 뭐지? : openGL, GLFW, GLAD 의미 본문
먼저 openGL은 우리가 그래픽과 이미지를 그릴 수 있게 도와주는 API(Application Programming Interface)입니다. 하지만 openGL은 그 자체로는 API가 아니라 specification입니다. specification은 건물을 지을 때 사용하는 청사진으로 비유를 할 수 있으며, 그 자체로서 기능이 구현된 것이 아니라 기능들이 어떤 특성을 가져야하는지 명시해놓은 것이라고 볼 수 있습니다.
specification으로서의 openGL은 그래픽을 그릴 때 사용하는 함수들이 어떤 Input/Output을 가져야하며, 어떤 방식으로 실행되어야하는지에 대한 부분을 특정합니다. 따라서 이 specification으로서의 openGL을 어떻게 implmentation(구현)하는지는 개발자에게 달려있습니다.
openGL의 libraries를 개발하는 사람은 그래픽 카드를 생산하는 사람입니다. 우리가 사는 각각의 그래픽 카드는 해당 그래픽카드에서 특정된 openGL의 버전을 지원합니다. OS에서 openGL이 실행되면 그래픽 카드 생산자가 만들어놓은 libraries와 개발자가 많들어 놓은 libraires가 함께 돌아갑니다. 이와 같은 이유로 openGL이 에러가 나면 대부분 그래픽카드의 문제로 볼 수 있고, 이는 그래픽 카드의 드라이브를 업데이트하는 것으로 상당부분 에러를 제거할 수 있습니다. 우리는 GLFW와 GLAD를 사용할 것입니다. 이들이 왜 필요한지도 알아보겠습니다.
-GLFW library-
그래픽을 그리기 위해서는 window, context, handler를 만들어야하지만 OS 마다 이들을 만드는 방법이 다릅니다. 그래서 openGL은 이들을 만드는 방법을 플랫폼과 상관없는 추상화된 방법을 제공합니다. 모든 OS에서 사용할 수 있는 specificatino을 정의한다는 뜻입니다. 그런데 OS마다 차이가 없는 방법으로 제공되기 때문에 편리하지만 context와 handler를 정의하는 것을 개발자가 직접 해야한다는 단점이 있습니다.
openGL은 이런 수고(각 플랫폼 별로 같은 일을 하기 위해서 다른 코드를 작성해야하는)를 덜어주기 위해서 GLFW를 사용할 것입니다.
GLFW는 free, Open Source, multi-platform library for OpenGL, OpenGS and Vulkan application development입니다. GLFW는 window를 띄우거나 context를 만들거나 surfaces를 다루거나 Input을 받기 위한 플랫폼에 맞는 기능을 제공합니다.
-GLAD library-
OpenGL은 standard/specification(예를 들어 청사진/설계도)일 뿐이어서, 실제로 OpenGL을 implementation(예를 들어 집짓기/지어진 집들)하는 것은 개발자에게 달려있다고 합니다. 따라서 개발자마다 각기 다른 implementation을 가지고 있고 이들로 인해서 openGL은 수 많은 버전을 가지고 있습니다. 따라서 흩어진 이들 함수들의 위치들은 compile time에는 알 수가 없고, runtime에서 알 수 있다고(needs to be queied) 합니다. 그래서 함수들이 저장된 위치를 retrieve하는 것은 개발자의 업무이고, 이렇게 함수의 포인터(위치)를 나중에 사용하기 위해서 함수 포인터에 저장해두어야 한다고 합니다 . 그런데 Retrieve를 하는 과정은 OS마다 차이가 있습니다. 예를 들어 Window 에서는 아래와 같은 코드가 있을 수 있습니다. (예시일뿐 전혀 이해할 필요 없음)
// 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);
이런 Retrieve를 위한 코드들은 복잡하고 불변합니다. 그래서 이런 Retrieve를 위한 과정을 간편하게 해주는 것이 GLAD library입니다.
정리하면 추상화되어서 제공되는 openGL의 specification을 OS에 상관없이 쉽게 implementation하게 도와주는 것이 GLFW와 GLAD입니다. 차이점은 GLFW는 window와 context 등을 만드는데 도움을 주고, GLAD는 흩어진 function의 위치를 찾아 함수포인터를 가져올 때에 도움을 준다는 점입니다.
'개발 | OpenGL > LearnOpenGL' 카테고리의 다른 글
window 띄우기 (0) | 2019.02.17 |
---|---|
How to add third party libraries to project (0) | 2019.02.17 |