Dla odniesienia - qgl.h Doom3 .
OpenGL to dziwny mały API. Często musisz pracować ze wskaźnikami funkcji, ponieważ w standardowej implementacji brakuje nowej funkcjonalności lub dlatego, że chcesz pracować z rozszerzeniami. Na przykład, jeśli chcesz zadzwonić glCreateShader
, ale system operacyjny, na którym pracujesz, nie jest wyposażony w wystarczającą liczbę nowych nagłówków GL, musisz go użyć glGetProcAddress("CreateShader")
, aby załadować funkcję ze sterownika użytkownika. A potem musisz gdzieś zapisać ten wskaźnik funkcji.
Nawet jeśli środowisko programistyczne ma określoną funkcję, komputery użytkowników mogą nie. A potem pewna funkcja może występować w 2-3 formach (rozszerzenie dostawcy, rozszerzenie ARB, funkcja podstawowa), więc może być konieczne wyszukiwanie funkcji pod kilkoma różnymi nazwami.
Wiele bibliotek „ładujących” GL (takich jak GLEW ) próbuje trzymać się konwencji GL. Tworzą „fałszywe” funkcje ze zwykłym gl
prefiksem i starają się magicznie sprawić, że Twój kod działa tylko na dowolnym systemie operacyjnym lub sterowniku, który obsługuje niezbędne funkcje. Zasadniczo, zamiast glFoo
bycia rzeczywista funkcja, to tylko globalny wskaźnik funkcji i biblioteka ładowarka (podczas inicjalizacji lub pierwszego użycia) wyszukiwania FooEXT
, FooARB
i Foo
dopóki nie znajdzie implementację, a następnie przypisuje że do globalnego wskaźnika. Kod klienta wygląda tak, jakby po prostu wywoływał zwykłą funkcję, ale magicznie wszystko zostaje rozwiązane w czasie wykonywania podczas inicjowania w sposób, który obsługuje wszystkie platformy i sterowniki.
Inne biblioteki umieszczają funkcje w przestrzeniach nazw lub w inny sposób różnią się nieco od normy GL. id napisał własną ładowarkę, albo dlatego, że nie lubią tych, które istniały lub - częściej - Quake tylko wyprzedza wszelkie inne biblioteki, która mogła wykorzystać id (the q
w qgl
prawdopodobnych podpórek Quake, która była pierwsza gra id Tech do użytku GL).
Specyfikacja GL jest napisana z taką możliwością. Specyfikacja jest napisana bez prefiksów; to implementacja OpenGL decyduje o tym, którego prefiksu użyć ( gl
oczywiście jest to typowy). Biblioteki modułu ładującego, które umieszczają funkcje w przestrzeniach nazw lub używają własnych prefiksów, są całkowicie poprawne.
Doom 3, oparty na silniku Quake, jest całkowicie typowy i uzasadniony w używaniu biblioteki modułu ładującego do radzenia sobie z osobliwościami GL na wielu platformach oraz w wyborze użycia qgl
prefiksu.
id
źle napisałem (masz całkowitą rację co do wielkich liter), chociaż en.wikipedia.org/wiki/Id_Tech jest nadal pisany spacją, we wszystkich źródłach, jakie mogłem znaleźć.