Doom 3 소스 코드에서 모든 OpenGL 함수 호출 앞에 "q"가 붙는 이유는 무엇입니까?


42

Doom 3 소스 코드에서 모든 OpenGL 호출 앞에 "q"가 붙는 이유는 무엇입니까? 그것들은 사용자 정의 함수입니까 아니면 다른 라이브러리입니까? 그렇다면 OpenGL보다 왜 사용합니까? 모든 Google 검색에는 Qt OpenGL 모듈이 제공됩니다 .Qt OpenGL 모듈과 관련이 없다고 가정합니다.

답변:


62

- 참고로 둠의 qgl.h .

OpenGL은 이상한 작은 API입니다. 표준 구현에 새로운 기능이 없거나 확장 기능을 사용하려는 경우 함수 포인터로 작업해야하는 경우가 종종 있습니다. 예를 들어, 호출 glCreateShader하고 싶지만 개발중인 OS에 충분한 새 GL 헤더가 제공되지 않는 glGetProcAddress("CreateShader")경우 사용자 드라이버에서 함수를로드하기 위해 사용해야합니다 . 그런 다음 해당 함수 포인터를 어딘가에 저장해야합니다.

개발 환경에 특정 기능이 있어도 사용자의 시스템은 그렇지 않을 수 있습니다. 그런 다음 특정 기능은 2 ~ 3 가지 형식 (공급 업체 확장, ARB 확장, 핵심 기능)으로 제공되므로 여러 다른 이름으로 기능을 검색해야 할 수도 있습니다.

많은 GL "로더"라이브러리 (예 : GLEW )는 GL 규칙을 고수하려고합니다. 그것들은 일반적인 gl접두사를 사용하여 "가짜"기능을 만들고 필요한 기능을 지원하는 모든 OS 또는 드라이버에서 코드를 작동하게 만듭니다. 대신 기본적으로, glFoo실제 기능되고, 그냥 전역 함수 포인터 (초기화 또는 처음 사용시) 로더 라이브러리 검색의 FooEXT, FooARB그리고 Foo그것을 구현을 발견하고 양수인까지 글로벌 포인터가. 클라이언트 코드는 일반 함수를 호출하는 것처럼 보이지만 초기화 중에 런타임에 모든 다른 플랫폼 및 드라이버를 처리하는 방식으로 마술처럼 모두 해결됩니다.

다른 라이브러리는 함수를 네임 스페이스에 넣거나 GL 표준과 약간 다릅니다. ID가 자신의 로더를 작성하거나 그들은 또는 존재하는 것과 같은하지 않았기 때문에 - 가능성 - 퀘이크 그냥 ID가 사용했을 수 있다는 다른 라이브러리를 선행합니다 ( qqgl사용한 최초의 아이디 테크 게임이었다 지진에 대한 가능성 스탠드, GL).

GL 사양은 이것이 가능한 것으로 작성되었습니다. 스펙은 접두사 없이 작성 됩니다. 사용할 접두사 ( gl물론 일반적인 접두사)를 결정하는 것은 OpenGL의 구현입니다 . 네임 스페이스에 함수를 넣거나 고유 접두사를 사용하는 로더 라이브러리는 완전히 유효합니다.

Quake 엔진을 기반으로하는 Doom 3은 완전히 전형적이며 로더 라이브러리를 사용하여 여러 플랫폼에서 GL의 이상을 처리하고 qgl접두사 를 사용하도록 선택할 때 정당화됩니다 .


en.wikipedia.org/wiki/Id_Tech 는 내가 찾을 수있는 모든 소스에서 여전히 공백으로 작성 id되었지만 +1, 그리고 내가 잘못 쓴 것을 발견 한 것에 대한 찬사 (대문자에 대해 완전히 옳다) .
vaxquis 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.