OpenGL vinculante y relaciones entre entidades


12

Esto es principalmente una pregunta de documentación. Espero que este sea el lugar adecuado para preguntar y no, por ejemplo, programadores o stackoverflow.

No leí la especificación OpenGL, pero de los libros (Libro Rojo) y varios tutoriales, no puedo comprender adecuadamente cómo interactúan y se relacionan los diferentes objetos y partes de la API.

Por ejemplo, sé que si un VAO está vinculado, entonces vincular un VBO y establecer un atributo dará como resultado que el VBO esté vinculado al VAO.

Pero hay muchos objetos, su relación puede variar. Por ejemplo, el VAO no tiene ninguna relación con el programa de sombreado actual, pero el resultado de las operaciones de dibujo puede depender de ambos.

Entre todos los diversos componentes OpenGL, puedo ver algunas relaciones como A-binds-to-B o A-and-B-are-used-by-C. Todas estas relaciones coinciden en determinar cómo se puede alterar el estado del contexto, cómo se pueden cambiar las cosas, cómo se pueden guardar las cosas juntas y optimizarlas.

Estoy buscando recursos que expliquen solo estas relaciones. Al igual que un diagrama UML, un gráfico o incluso un documento de texto, que no se centra en las llamadas, sino que describe de forma compacta cómo interactúan y se relacionan entre sí los diversos componentes de OpenGL.

¿Sabes dónde encontrar ese recurso?


3
Gran pregunta Tengo toda mi biblioteca / motor OpenGL funcionando sin una respuesta súper clara a esa pregunta clave.
David van Brink

1
Vincular un VBO no lo vincula a un VAO. En cambio, esto se logra con glVertexAttribPointer(). El diagrama para objetos OpenGL sería bastante superficial y simple, en realidad no hay más que un puñado de objetos diferentes en OpenGL. Los VAO usan buffers para los atributos. Las texturas de los búferes están respaldadas por búferes. Los Framebuffers tienen accesorios de textura. Los comandos de dibujo utilizan el VAO actual, el programa actual, el framebuffer actual, la configuración actual del muestreador y el buffer de índice actual / buffer indirecto. Probablemente puedas dibujar el diagrama tú mismo.
Dietrich Epp

1
Lo siento, no voy a hacerte un dibujo.
Dietrich Epp

2
Buena pregunta, y desde mi punto de vista, buena suerte para obtener una respuesta integral sin ponerle una recompensa considerable.
Ingeniero

2
El diseño de OpenGL es un gran argumento sobre por qué no debe usar variables globales ;)(toda la API es un gran desastre de datos globales)
glampert

Respuestas:


7

Entonces, intenté pintar mi propio diagrama. No es exhaustivo, principalmente porque no estoy interesado en algunas cosas en este momento, sino también porque quería que fuera legible (incluso si no es un gráfico formalmente especificado, creo que debería ser fácilmente legible).

Además, dado que parece ser de interés para algunas personas, quiero compartirlo aquí para obtener comentarios y hacer que lo revisen. Utilicé el wiki de OpenGL como referencia para verificar la corrección, pero es posible que haya introducido errores.

Además, si la información provista no es suficiente para usted, o si dejé de lado las relaciones importantes que vale la pena incluir en el diagrama, no dude en sugerirlo e intentaré mantenerlo actualizado.

Diagrama de relación de enlace de OpenGL

Una vez más, no dude en informar errores, problemas o sugerencias, son bienvenidos.

EDITAR

  1. Faltaba la relación entre el dibujo y los atributos: los atributos deben estar habilitados para que sean efectivos al renderizar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.