답변:
- 참고로 둠의 qgl.h .
OpenGL은 이상한 작은 API입니다. 표준 구현에 새로운 기능이 없거나 확장 기능을 사용하려는 경우 함수 포인터로 작업해야하는 경우가 종종 있습니다. 예를 들어, 호출 glCreateShader
하고 싶지만 개발중인 OS에 충분한 새 GL 헤더가 제공되지 않는 glGetProcAddress("CreateShader")
경우 사용자 드라이버에서 함수를로드하기 위해 사용해야합니다 . 그런 다음 해당 함수 포인터를 어딘가에 저장해야합니다.
개발 환경에 특정 기능이 있어도 사용자의 시스템은 그렇지 않을 수 있습니다. 그런 다음 특정 기능은 2 ~ 3 가지 형식 (공급 업체 확장, ARB 확장, 핵심 기능)으로 제공되므로 여러 다른 이름으로 기능을 검색해야 할 수도 있습니다.
많은 GL "로더"라이브러리 (예 : GLEW )는 GL 규칙을 고수하려고합니다. 그것들은 일반적인 gl
접두사를 사용하여 "가짜"기능을 만들고 필요한 기능을 지원하는 모든 OS 또는 드라이버에서 코드를 작동하게 만듭니다. 대신 기본적으로, glFoo
실제 기능되고, 그냥 전역 함수 포인터 (초기화 또는 처음 사용시) 로더 라이브러리 검색의 FooEXT
, FooARB
그리고 Foo
그것을 구현을 발견하고 양수인까지 글로벌 포인터가. 클라이언트 코드는 일반 함수를 호출하는 것처럼 보이지만 초기화 중에 런타임에 모든 다른 플랫폼 및 드라이버를 처리하는 방식으로 마술처럼 모두 해결됩니다.
다른 라이브러리는 함수를 네임 스페이스에 넣거나 GL 표준과 약간 다릅니다. ID가 자신의 로더를 작성하거나 그들은 또는 존재하는 것과 같은하지 않았기 때문에 - 가능성 - 퀘이크 그냥 ID가 사용했을 수 있다는 다른 라이브러리를 선행합니다 ( q
에 qgl
사용한 최초의 아이디 테크 게임이었다 지진에 대한 가능성 스탠드, GL).
GL 사양은 이것이 가능한 것으로 작성되었습니다. 스펙은 접두사 없이 작성 됩니다. 사용할 접두사 ( gl
물론 일반적인 접두사)를 결정하는 것은 OpenGL의 구현입니다 . 네임 스페이스에 함수를 넣거나 고유 접두사를 사용하는 로더 라이브러리는 완전히 유효합니다.
Quake 엔진을 기반으로하는 Doom 3은 완전히 전형적이며 로더 라이브러리를 사용하여 여러 플랫폼에서 GL의 이상을 처리하고 qgl
접두사 를 사용하도록 선택할 때 정당화됩니다 .
id
되었지만 +1, 그리고 내가 잘못 쓴 것을 발견 한 것에 대한 찬사 (대문자에 대해 완전히 옳다) .