Я подумав, що сформував загальне розуміння того, як працюють угоди та розширення іменування OpenGL, поки я не натрапив на справу, яка мене бентежила.
Ось моє розуміння поки що:
Немає суфікса - напр glGenBuffers()
. Ця функція є частиною основного профілю. Сторінка wiki повідомляє мені, що це було додано до основного профілю, починаючи з версії 1.5.
ARB - напр glGenBuffersARB()
. Ця функція є частиною стандартизованого GL_ARB_vertex_buffer_object
розширення. Специфікації даного розширення чітко заявляє GenBuffersARB()
в розділі «Нові процедури і функції». Розділ "Залежності" говорить мені, що я можу отримати доступ до цього з контексту 1.4+, якщо обладнання підтримує розширення.
EXT - Це розширення, що стосуються конкретного постачальника, та функції, які можуть підтримувати лише деякі постачальники. Об'єкт буфера вершин, схоже, не має розширення EXT у реєстрі.
Ось де моє розуміння порушується:
glGenFramebuffers
, як показує вікі , було додано до ядра в 3.0.
Тепер я хочу отримати доступ до функцій буфера кадру у нижчій версії основного профілю, ніж 3.0. Тому я хочу використовувати це як розширення. Реєстр специфікацій підказує мені, що є два доступних розширення - ARB та EXT .
Питання 1 - Якщо розширення ARB існує, чому існує розширення EXT? Чи не завжди ви вибирали б стандартизований, а не конкретний для постачальника?
Погляд на специфікацію ARB у розділі "Нові процедури та функції" говорить мені, що розширення визначає GenRenderbuffers()
функцію. Цього разу немає суфікса ARB. GLEW взагалі не має прототипу функції glGenRenderbuffersARB()
. Дивно.
Однак у специфікації EXT є GenRenderbuffersEXT()
функція в новому розділі функцій, а також GLEW glGenRenderbuffersEXT()
.
Запитання 2 - Чому немає суфікса ARB, якщо є суфікс EXT? Як це працює для ARB, враховуючи, що назви функції ARB та основна функція однакові?
Питання 3 - Я в кінцевому рахунку хочу, щоб функції Framebuffer були з профілю 1.4. Яке розширення та який набір функцій потрібно використовувати, щоб отримати максимальне покриття сумісності обладнання?