Чому всі виклики функцій OpenGL мають префікс "q" у вихідному коді Doom 3?


42

Чому кожен виклик OpenGL має префікс "q" у вихідному коді Doom 3? Це користувацькі функції чи інша бібліотека, і якщо так, то навіщо це використовувати через OpenGL? Будь-який пошук Google пропонує модуль Qt OpenGL, який, я вважаю, не має нічого спільного з цим.

Відповіді:


62

Для довідки - qgl.h Doom3 .

OpenGL - це незвичайний API. Вам часто потрібно працювати з покажчиками функцій або тому, що в стандартній реалізації відсутня нова функціональність, або тому, що ви хочете працювати з розширеннями. Наприклад, якщо ви хочете зателефонувати glCreateShader, але ОС, на якій ви розробляєтесь, не постачається з новими достатньо новими заголовками GL, ви повинні використовувати glGetProcAddress("CreateShader")для завантаження функції з драйвера користувача. І тоді ви повинні десь зберігати цей покажчик функції.

Навіть якщо у вашому середовищі розробки є певна функція, машини користувачів можуть не виконувати. І тоді певна функція може виходити в 2-3 формах (розширення постачальника, розширення ARB, основна функція), і тому вам, можливо, доведеться шукати функцію під кількома різними іменами.

Багато бібліотек GL "завантажувачів" (наприклад, GLEW ) намагаються дотримуватися конвенцій GL. Вони створюють "фальшиві" функції зі звичайним gl-prefix і намагаються магічно змусити ваш код просто працювати на будь-якій ОС або драйвері, який підтримує необхідні функції. За суті, замість того , щоб glFooбути реальною функцією, це просто глобальний покажчик функції і бібліотеки завантажувача (під час ініціалізації або першого використання) пошук FooEXT, FooARBі Fooдо тих пір , поки не знайде реалізацію , а потім привласнює , що глобальний покажчик. Клієнтський код виглядає так, що він просто викликає звичайну функцію, але магічно все вирішується під час виконання під час ініціалізації таким чином, що стосується всіх різних платформ і драйверів там.

Інші бібліотеки розміщують функції в просторах імен або іншим чином трохи відрізняються від норми GL. Ідентифікатор написав свій власний завантажувач, або тому , що вони не схожі на тих , які існували або - швидше - Quake просто передують будь-яку іншу бібліотеку, ідентифікатор міг би використовуватися ( qв qglймовірних стендах для Quake, який був першою ID Tech грою використання GL).

Спеціалізація GL написана з можливістю. Специфікація пишеться без префіксів; саме реалізація OpenGL визначає, який префікс використовувати ( glзвичайно, звичайний). Бібліотеки навантажувачів, які розміщують функції в просторах імен або використовують власні префікси, є повністю дійсними.

Doom 3, заснований на двигуні Quake, цілком типовий і виправданий у використанні бібліотеки завантажувачів для вирішення диваків GL на кількох платформах та у виборі використовувати qglпрефікс.


+1, і kudos for spotting Я написав idпогано (ви абсолютно праві щодо капіталізації), хоча en.wikipedia.org/wiki/Id_Tech все ще написано з пробілом, у всіх джерелах, які я міг знайти.
vaxquis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.