Pensé que había formado una comprensión general de cómo funcionaban las convenciones y extensiones de nomenclatura de OpenGL, hasta que me topé con un caso que me confundió.
Aquí está mi entendimiento hasta ahora:
Sin sufijo , por ejemplo glGenBuffers()
. Esta función es parte del perfil central. La página wiki me dice que esto se agregó al perfil principal a partir de la versión 1.5.
ARB - por ejemplo glGenBuffersARB()
. Esta función es parte de la GL_ARB_vertex_buffer_object
extensión estandarizada . La especificación de esta extensión declara claramente GenBuffersARB()
en la sección "Nuevos procedimientos y funciones". La sección "Dependencias" me dice que potencialmente puedo acceder a esto desde un contexto 1.4+, si el hardware admite la extensión.
EXT : estas son extensiones y funciones específicas del proveedor que solo algunos proveedores pueden admitir. El objeto de búfer Vertex no parece tener una extensión EXT en el registro.
Aquí es donde se rompe mi comprensión:
glGenFramebuffers
, como muestra la wiki , se agregó al núcleo en 3.0.
Ahora quiero acceder a las funciones de frame buffer en una versión de perfil de núcleo inferior a 3.0. Entonces quiero usarlo como una extensión. El registro de especificaciones me dice que hay dos extensiones disponibles: ARB y EXT .
Pregunta 1 - Si existe una extensión ARB, ¿por qué existe una extensión EXT? ¿No elegirías siempre la estandarizada sobre la específica del proveedor?
Una mirada a la especificación ARB en la sección "Nuevos procedimientos y funciones" me dice que la extensión define la GenRenderbuffers()
función. No hay sufijo ARB esta vez. GLEW no tiene un prototipo de función para glGenRenderbuffersARB()
nada. Extraño.
Sin embargo, la especificación EXT tiene una GenRenderbuffersEXT()
función en la sección de nuevas funciones, y GLEW también glGenRenderbuffersEXT()
.
Pregunta 2 : ¿Por qué no hay sufijo ARB si hay un sufijo EXT? ¿Cómo funciona esto para ARB, dado que los nombres de la función ARB y la función central son los mismos?
Pregunta 3 : en última instancia, quiero las funciones de Framebuffer de un perfil 1.4. ¿Qué extensión y qué conjunto de funciones debo usar para obtener la máxima cobertura de compatibilidad de hardware?