Rilegatura OpenGL e relazioni tra entità


12

Questa è principalmente una domanda di documentazione. Spero che questo sia il posto giusto da chiedere e non, ad esempio, programmatori o stackoverflow.

Non ho letto la specifica OpenGL, ma dai libri (Red Book) e vari tutorial, non riesco a capire correttamente come diversi oggetti e parti dell'API interagiscono e si relazionano.

Ad esempio, so che se un VAO è associato, l'associazione di un VBO e l'impostazione di un attributo comporteranno l'associazione del VBO al VAO.

Ma ci sono molti oggetti, la loro relazione può variare. Ad esempio, il VAO non è completamente correlato all'attuale programma di ombreggiatura, ma il risultato delle operazioni di disegno può dipendere da entrambi.

Tra tutti i vari componenti OpenGL, posso vedere alcune relazioni come A-binds-to-B o A-and-B-are-used-by-C. Tutte queste relazioni concorrono a determinare come si può modificare lo stato del contesto, come si possono cambiare le cose, come si possono salvare le cose insieme e ottimizzare.

Sto cercando risorse che spieghino proprio queste relazioni. Come un diagramma UML, un grafico o persino un documento di testo, che non si concentra sulle chiamate, ma descrive in modo compatto come i vari componenti OpenGL interagiscono e si relazionano tra loro.

Sai dove trovare una tale risorsa?


3
Ottima domanda Ho tutto il mio motore / libreria OpenGL attivo e funzionante senza una risposta super chiara a quella domanda chiave.
David Van

1
Associare un VBO non lo associa a un VAO. Questo si ottiene invece con glVertexAttribPointer(). Il diagramma per gli oggetti OpenGL sarebbe abbastanza semplice e superficiale, in realtà non ci sono più di una manciata di oggetti diversi in OpenGL. I VAO utilizzano i buffer per gli attributi. Le trame buffer sono supportate da buffer. I framebuffer hanno allegati texture. I comandi di disegno utilizzano l'attuale VAO, il programma corrente, il framebuffer corrente, le impostazioni correnti del campionatore e il buffer dell'indice corrente / buffer indiretto. Probabilmente potresti disegnare il diagramma da solo.
Dietrich Epp,

1
Scusa, non ho intenzione di disegnare un'immagine per te.
Dietrich Epp,

2
Bella domanda, e da dove mi trovo, buona fortuna per ottenere una risposta completa senza mettere una considerevole taglia su di essa.
Ingegnere,

2
Il design di OpenGL è un ottimo argomento sul perché non dovresti usare variabili globali ;)(l'intera API è un enorme casino di dati globali)
glampert

Risposte:


7

Quindi, ho provato a dipingere il mio diagramma. Non è completo, soprattutto perché non sono interessante in alcune cose in questo momento, ma anche perché volevo che fosse leggibile (anche se non è un grafico specificato formalmente, penso che dovrebbe essere facilmente leggibile).

Inoltre, poiché sembra essere di interesse per alcune persone, voglio condividerlo qui per ottenere un feedback e farlo controllare. Ho usato il wiki OpenGL come riferimento per verificare la correttezza, ma potrei aver introdotto degli errori.

Inoltre, se le informazioni fornite non sono sufficienti per te, o ho lasciato fuori relazioni importanti che sono degne di essere incluse nel diagramma, sentiti libero di suggerirle e cercherò di mantenerle aggiornate.

Diagramma di relazione di legame OpenGL

Ancora una volta, sentiti libero di segnalare errori, problemi o suggerimenti, sono i benvenuti.

MODIFICARE

  1. Mancava la relazione tra disegno e attributi: gli attributi devono essere abilitati per essere efficaci durante il rendering
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.