Ligação OpenGL e relações entre entidades

12

Isso é principalmente uma questão de documentação. Espero que este seja o lugar certo para perguntar e não, por exemplo, programadores ou stackoverflow.

Não li a especificação OpenGL, mas, nos livros (Red Book) e em vários tutoriais, não consigo entender adequadamente como diferentes objetos e partes da API interagem e se relacionam.

Por exemplo, eu sei que se um VAO estiver vinculado, vincular um VBO e definir um atributo resultará no VBO sendo vinculado ao VAO.

Mas há muitos objetos, sua relação pode variar. Por exemplo, o VAO não tem nenhuma relação com o atual programa de sombreamento, mas o resultado das operações de desenho pode depender de ambos.

Entre todos os vários componentes do OpenGL, posso ver algumas relações como A-bind-to-B ou A-and-B-use-by-C. Todas essas relações concordam em determinar como alguém pode alterar o estado do contexto, como pode mudar as coisas, como pode salvar as coisas e otimizar.

Estou procurando recursos explicando apenas essas relações. Como um diagrama UML, um gráfico ou mesmo um documento de texto, que não se concentra nas chamadas, mas descreve de maneira compacta como os vários componentes do OpenGL interagem e se relacionam.

Você sabe onde encontrar esse recurso?

AkiRoss
fonte
3
Ótima pergunta. Eu tenho toda a minha biblioteca / mecanismo OpenGL em funcionamento sem uma resposta super clara para essa pergunta-chave.
David van brink #
1
Vincular um VBO não o vincula a um VAO. Isso é conseguido com glVertexAttribPointer(). O diagrama para objetos OpenGL seria bastante superficial e simples; na verdade, não há mais do que um punhado de objetos diferentes no OpenGL. Os VAOs usam buffers para atributos. As texturas de buffer são apoiadas por buffers. Os framebuffers possuem anexos de textura. Os comandos de desenho usam o VAO atual, o programa atual, o buffer de quadros atual, as configurações atuais do amostrador e o buffer de índice atual / buffer indireto. Você provavelmente poderia desenhar o diagrama você mesmo.
Dietrich Epp
1
Desculpe, não vou desenhar uma foto para você.
Dietrich Epp
2
Boa pergunta, e de onde estou, boa sorte em obter uma resposta abrangente sem colocar uma recompensa considerável nela.
Engenheiro de
2
O design do OpenGL é um grande argumento sobre por que você não deve usar variáveis globais ;)(toda a API é uma enorme confusão de dados global)
glampert

Respostas:

7

Então, tentei pintar meu próprio diagrama. Não é abrangente, principalmente porque não sou interessante em algumas coisas no momento, mas também porque queria que fosse legível (mesmo que não seja um gráfico formalmente especificado, acho que deveria ser facilmente legível).

Além disso, como parece ser do interesse de algumas pessoas, quero compartilhá-lo aqui para obter feedback e verificá-lo. Eu usei o wiki do OpenGL como referência para verificar a correção, mas posso ter introduzido erros.

Além disso, se as informações fornecidas não forem suficientes para você, ou deixei de fora relações importantes que merecem ser incluídas no diagrama, fique à vontade para sugeri-las e tentarei mantê-las atualizadas.

Diagrama de relação de ligação do OpenGL

Mais uma vez, sinta-se à vontade para relatar erros, problemas ou sugestões; eles são muito bem-vindos.

EDITAR

  1. Faltava relação entre desenho e atributos: os atributos devem ser ativados para serem eficazes ao renderizar
AkiRoss
fonte