Liaison OpenGL et relations entre les entités

12

Il s'agit principalement d'une question de documentation. J'espère que c'est le bon endroit pour demander et non, par exemple, les programmeurs ou stackoverflow.

Je n'ai pas lu la spécification OpenGL, mais à partir de livres (Red Book) et de divers didacticiels, je ne peux pas comprendre correctement comment différents objets et parties de l'API interagissent et se relient.

Par exemple, je sais que si un VAO est lié, alors lier un VBO et définir un attribut entraînera le VBO étant lié au VAO.

Mais il existe de nombreux objets, leur relation peut varier. Par exemple, le VAO n'a aucun lien avec le programme d'ombrage actuel, mais le résultat des opérations de dessin peut dépendre des deux.

Parmi tous les différents composants OpenGL, je peux voir certaines relations comme A-binds-to-B ou A-and-B-are-used-by-C. Toutes ces relations concourent à déterminer comment on peut modifier l'état du contexte, comment changer les choses, comment les sauver ensemble et les optimiser.

Je recherche des ressources expliquant juste ces relations. Comme un diagramme UML, un graphique ou même un document texte, qui ne se concentre pas sur les appels, mais décrit de manière compacte comment les différents composants OpenGL interagissent et se relient les uns aux autres.

Savez-vous où trouver une telle ressource?

AkiRoss
la source
3
Grande question. J'ai toute ma bibliothèque / moteur OpenGL opérationnel sans réponse super claire à cette question clé.
David Van
1
La liaison d'un VBO ne la lie pas à un VAO. Ceci est plutôt réalisé avec glVertexAttribPointer(). Le diagramme des objets OpenGL serait assez superficiel et simple, il n'y a en fait pas plus d'une poignée d'objets différents dans OpenGL. Les VAO utilisent des tampons pour les attributs. Les textures de tampon sont soutenues par des tampons. Les tampons de cadre ont des attachements de texture. Les commandes de dessin utilisent le VAO actuel, le programme actuel, le tampon d'images actuel, les paramètres actuels de l'échantillonneur et le tampon d'index actuel / tampon indirect. Vous pourriez probablement dessiner le diagramme vous-même.
Dietrich Epp du
1
Désolé, je ne vais pas faire de dessin pour vous.
Dietrich Epp du
2
Bonne question, et d'où je me tiens, bonne chance pour obtenir une réponse complète sans placer une prime considérable dessus.
Ingénieur
2
La conception d'OpenGL est un excellent argument pour expliquer pourquoi vous ne devriez pas utiliser de variables globales ;)(l'ensemble de l'API est un énorme gâchis de données globales)
glampert

Réponses:

7

J'ai donc essayé de peindre mon propre diagramme. Ce n'est pas complet, principalement parce que je ne suis pas intéressé par certaines choses en ce moment, mais aussi parce que je voulais qu'il soit lisible (même si ce n'est pas un graphique formellement spécifié, je pense qu'il devrait être facilement lisible).

De plus, comme cela semble intéresser certaines personnes, je veux le partager ici pour obtenir des commentaires et les vérifier. J'ai utilisé le wiki OpenGL comme référence pour vérifier l'exactitude, mais j'ai peut-être introduit des erreurs.

De plus, si les informations fournies ne vous suffisent pas, ou si j'ai omis des relations importantes qui méritent d'être incluses dans le diagramme, n'hésitez pas à le suggérer, et j'essaierai de le tenir à jour.

Diagramme de relation de liaison OpenGL

Encore une fois, n'hésitez pas à signaler des erreurs, des problèmes ou des suggestions, ils sont les bienvenus.

ÉDITER

  1. La relation entre le dessin et les attributs était manquante: les attributs doivent être activés pour être efficaces lors du rendu
AkiRoss
la source