Я подумав, що сформував загальне розуміння того, як працюють угоди та розширення іменування 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. Яке розширення та який набір функцій потрібно використовувати, щоб отримати максимальне покриття сумісності обладнання?