Intento implementar una simulación de tela basada en la posición usando tesselation de hardware. Esto significa que solo quiero cargar un quad de control en la tarjeta gráfica y luego usar el teselado y el sombreado de geometría para crear los nodos en la tela.
Esta idea sigue el papel:
Huynh, David, "Simulación de tela utilizando teselación de hardware" (2011). Tesis. Instituto de Tecnología de Rochester http://scholarworks.rit.edu/theses/265/
Sé cómo usar la teselación para crear los puntos simulados. Lo que no sé es cómo almacenar la información calculada en un framebuffer.
La geometría y también los sombreadores de evaluación de teselación tienen información necesaria para los cálculos por vértice. Pero, ¿pueden escribir directamente en el framebuffer?
El fragment-shader que conozco puede escribir en el framebuffer, pero mi información se interpolaría y ya no sabría qué escribir en qué posición.
fuente
Respuestas:
Basándome en el comentario de "ratchet freak", investigué Transform Feedback Buffers y resolví mi problema de esa manera.
Ahora genero los puntos simulados en la CPU y los pongo en un objeto VertexBufferObject. Genero un segundo VBO para los puntos (junto con algunos otros para la velocidad). La conectividad de la tela se da como un atributo de vértice en ivec4.
Usando los buffers de feedback de transformación y un truco de doble buffer usando los dos VBOs, siempre puedo leer desde el último paso (usando la información de conectividad) y escribir en otro buffer. Esto es para resolver problemas con la concurrencia.
Los cálculos se realizan en el sombreador de vértices como GL_POINTS. Vinculando la salida del primer sombreador a otro sombreador regular usando un buffer de índice adicional para generar triángulos, puedo sin problemas renderizar la tela de la forma que quiera.
Esta idea sigue el ejemplo del búfer de feedback de transformación realizado en el libro "OpenGL Superbible" http://www.openglsuperbible.com/
fuente