Je pensais avoir acquis une compréhension générale du fonctionnement des conventions de dénomination et des extensions OpenGL, jusqu'à ce que je tombe sur un cas qui m'a dérouté.
Voici ma compréhension jusqu'à présent:
Pas de suffixe - par exemple glGenBuffers()
. Cette fonction fait partie du profil principal. La page wiki me dit que cela a été ajouté au profil principal à partir de la version 1.5.
ARB - par exemple glGenBuffersARB()
. Cette fonction fait partie de l' GL_ARB_vertex_buffer_object
extension standardisée . La spécification de cette extension déclare clairement GenBuffersARB()
dans la section "Nouvelles procédures et fonctions". La section "Dépendances" me dit que je peux potentiellement y accéder à partir d'un contexte 1.4+, si le matériel prend en charge l'extension.
EXT - Il s'agit d'extensions et de fonctions spécifiques au fournisseur que seuls certains fournisseurs peuvent prendre en charge. L'objet tampon Vertex ne semble pas avoir d'extension EXT dans le registre.
Voici où ma compréhension tombe en panne:
glGenFramebuffers
, comme le montre le wiki , a été ajouté au noyau en 3.0.
Maintenant, je veux accéder aux fonctionnalités du tampon de trame à une version de profil de base inférieure à 3.0. Je veux donc l'utiliser comme extension. Le registre des spécifications m'indique qu'il existe deux extensions disponibles - ARB et EXT .
Question 1 - Si une extension ARB existe, pourquoi existe-t-il une extension EXT? Ne choisiriez-vous pas toujours celui standardisé plutôt que celui spécifique au fournisseur?
Un coup d'œil à la spécification ARB dans la section "Nouvelles procédures et fonctions" m'indique que l'extension définit la GenRenderbuffers()
fonction. Pas de suffixe ARB cette fois. GLEW n'a pas du tout de prototype de fonction glGenRenderbuffersARB()
. Bizarre.
La spécification EXT a cependant une GenRenderbuffersEXT()
fonction dans la nouvelle section des fonctions, et GLEW aussi glGenRenderbuffersEXT()
.
Question 2 - Pourquoi aucun suffixe ARB s'il y a un suffixe EXT? Comment cela fonctionne-t-il pour ARB, étant donné que les noms de la fonction ARB et de la fonction principale sont les mêmes?
Question 3 - Je veux finalement des fonctionnalités Framebuffer à partir d'un profil 1.4. Quelle extension et quel ensemble de fonctions dois-je utiliser pour obtenir une couverture de compatibilité matérielle maximale?