OpenGL 호환성, 명명 규칙 및 ARB vs EXT


14

나는 혼란스러워하는 사건에 걸려 넘어 질 때까지 OpenGL 명명 규칙과 확장이 어떻게 작동했는지에 대한 일반적인 이해를 형성했다고 생각했다.


지금까지 내 이해가 있습니다.

접미사 없음 – 예 glGenBuffers(). 이 기능은 핵심 프로파일의 일부입니다. 위키 페이지는 이 버전 1.5부터 핵심 프로필에 추가되었다고 알려줍니다.

ARB-glGenBuffersARB(). 이 기능은 표준화 된 GL_ARB_vertex_buffer_object확장 기능의 일부입니다 . 이 확장 의 사양GenBuffersARB()"새 프로 시저 및 함수"섹션에 명확하게 선언 되어 있습니다. 하드웨어가 확장을 지원하는 경우 "종속성"섹션에 1.4 이상 컨텍스트에서 액세스 할 수 있음이 나와 있습니다.

EXT - 이러한 벤더 고유의 확장과 일부 공급 업체는이 기능을 지원하지 않을 기능은 다음과 같습니다. 정점 버퍼 객체의 레지스트리에 EXT 확장자가없는 것 같습니다.


여기 내 이해가 무너지는 곳이 있습니다.

glGenFramebuffers상기로 위키 쇼 3.0 코어에 첨가 하였다.

이제 3.0보다 낮은 코어 프로파일 버전에서 프레임 버퍼 기능에 액세스하려고합니다. 확장명으로 사용하고 싶습니다. 사양 레지스트리는 ARBEXT의 두 가지 확장이 있음을 알려줍니다 .

질문 1 -ARB 확장이 존재하면 왜 EXT 확장이 존재합니까? 공급 업체별 표준보다 표준화 된 표준을 항상 선택하지 않습니까?

"새 프로 시저 및 함수"섹션에서 ARB 스펙을 보면 확장이 GenRenderbuffers()함수를 정의 함을 알 수 있습니다. 이번에는 ARB 접미사가 없습니다. GLEW에는 함수 프로토 타입이 전혀 없습니다 glGenRenderbuffersARB(). 기묘한.

그러나 EXT 사양에는 GenRenderbuffersEXT()새로운 기능 섹션에 기능이 있으며 GLEW에도 기능이 glGenRenderbuffersEXT()있습니다.

질문 2 -EXT 접미사가있는 경우 ARB 접미사가없는 이유는 무엇입니까? ARB 기능의 이름과 핵심 기능이 동일하다면 ARB에 대해 어떻게 작동합니까?

질문 3- 궁극적으로 1.4 프로파일의 프레임 버퍼 기능을 원합니다. 최대 하드웨어 호환성 범위를 갖기 위해 어떤 확장 및 기능 세트를 사용해야합니까?

답변:


9

질문 1- 일반적으로 EXT 버전은 둘 이상의 공급 업체 간의 협업으로 가장 먼저 나타납니다. ARB 확장 프로그램은 Khronos 투표 회원들 간의 자세한 논의가 필요하며 승인을 받기 전에 EXT 버전에서 변경 될 수 있습니다. GL_EXT_direct_state_access와 비교하여 많은 변경 사항이있는 GL_ARB_direct_state_access 확장을 참조하십시오.

질문 2 -GL_ARB_framebuffer_object 확장의 이슈 섹션에는 함수에 ARB 접미사가없는 이유가 설명되어 있습니다.

(8)이 확장의 새로운 토큰과 진입 점에 다른 ARB 확장과 같은 접미사가없는 이유는 무엇입니까?

   RESOLVED: Unlike most ARB extensions, this is a strict subset of
   functionality already approved in OpenGL 3.0. This extension
   exists only to support that functionality on older hardware that
   cannot implement a full OpenGL 3.0 driver. Since there are no
   possible behavior changes between the ARB extension and core
   features, source code compatibility is improved by not using
   suffixes on the extension.

질문 3 -GL 버전이 3.0 미만인 컨텍스트에서 프레임 버퍼 객체를 사용하려면 확장 문자열을 확인해야합니다.

  1. GL_ARB_framebuffer_object가 지원되는 경우 비 ARB 기능을 사용하십시오.
  2. GL_EXT_framebuffer_object 만 지원되는 경우 EXT 함수를 사용하십시오.
  3. 확장이 지원되지 않으면 pbuffers와 같은 OS 레벨 오프 스크린 렌더링으로 폴백해야합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.