Myślałem, że zrozumiałem, jak działają konwencje nazewnictwa i rozszerzenia OpenGL, dopóki nie natknąłem się na przypadek, który mnie pomieszał.
Oto moje dotychczasowe zrozumienie:
Bez przyrostka - np glGenBuffers()
. Ta funkcja jest częścią podstawowego profilu. Strona wiki mówi mi, że został on dodany do profilu podstawowego począwszy od wersji 1.5.
ARB - np glGenBuffersARB()
. Ta funkcja jest częścią znormalizowanego GL_ARB_vertex_buffer_object
rozszerzenia. Spec tego rozszerzenia wyraźnie deklaruje GenBuffersARB()
w sekcji „Nowe procedury i funkcje”. Sekcja „Zależności” mówi mi, że mogę uzyskać do niej dostęp z kontekstu 1.4+, jeśli sprzęt obsługuje rozszerzenie.
EXT - są to rozszerzenia i funkcje specyficzne dla dostawców, które mogą obsługiwać tylko niektórzy dostawcy. Obiekt bufora wierzchołków nie wydaje się mieć rozszerzenia EXT w rejestrze.
Oto, gdzie moje zrozumienie się psuje:
glGenFramebuffers
, jak pokazuje wiki , został dodany do rdzenia w 3.0.
Teraz chcę uzyskać dostęp do funkcji bufora ramki w wersji profilu niższego rdzenia niż 3.0. Chcę więc użyć go jako rozszerzenia. Rejestr specyfikacji mówi mi, że dostępne są dwa rozszerzenia - ARB i EXT .
Pytanie 1 - Jeśli istnieje rozszerzenie ARB, dlaczego istnieje rozszerzenie EXT? Czy nie zawsze wybierałbyś znormalizowany zamiast specyficznego dla dostawcy?
Spojrzenie na specyfikację ARB w sekcji „Nowe procedury i funkcje” mówi mi, że rozszerzenie definiuje GenRenderbuffers()
funkcję. Tym razem brak przyrostka ARB. GLEW wcale nie ma prototypu funkcji glGenRenderbuffersARB()
. Dziwne.
Specyfikacja EXT ma jednak GenRenderbuffersEXT()
funkcję w sekcji nowych funkcji, a także GLEW glGenRenderbuffersEXT()
.
Pytanie 2 - Dlaczego nie ma przyrostka ARB, jeśli istnieje przyrostek EXT? Jak to działa dla ARB, biorąc pod uwagę, że nazwy funkcji ARB i funkcji podstawowej są takie same?
Pytanie 3 - Ostatecznie chcę, aby funkcje Framebuffer pochodziły z profilu 1.4. Jakiego rozszerzenia i zestawu funkcji powinienem użyć, aby uzyskać maksymalny zasięg kompatybilności sprzętowej?