Sombreador de geometría para múltiples primitivas

8

¿Cómo puedo crear un sombreador de geometría que pueda manejar múltiples primitivas? Por ejemplo, al crear un sombreador de geometría para triángulos, defino un diseño como este:

layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;

Pero si uso este sombreador, las líneas o puntos no aparecerán. Entonces agregando:

layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;
layout(lines) in;
layout(line_strip, max_vertices=2) out;

El sombreador compilará y se ejecutará, pero solo renderizará líneas (o lo que sea la última primitiva definida).

Entonces, ¿cómo defino un sombreador de geometría único que manejará múltiples tipos de primitivas? ¿O no es posible y necesito crear múltiples programas de sombreado y cambiar los programas de sombreado antes de dibujar cada tipo?

MichaelHouse
fuente

Respuestas:

7

No creo que OpenGL admita sombreadores de geometría que generen múltiples tipos de primitivas. De hecho, me sorprende que tu segundo bloque de código se haya compilado ... ¿Tal vez simplemente sobrescribió la configuración?

Tendrá que crear múltiples sombreadores y cambiar entre ellos, al menos para triángulos / líneas y puntos. En realidad, hay un truco que puede hacer con un sombreador de fragmentos para recibir triángulos, pero renderiza solo líneas descartando fragmentos que caen demasiado dentro del triángulo de acuerdo con las coordenadas barcéntricas. Para la implementación exacta de eso, lo remitiría al Libro Naranja de OpenGL y su sección sobre sombreadores de geometría y dibujando una estructura alámbrica (volveré y editaré después de localizar el capítulo exacto).

¡Feliz codificación!

kevintodisco
fuente
2

No es posible crear un programa con sombreadores de geometría que manejen múltiples tipos primitivos.

Dicho esto, no tiene que hacer mucho trabajo para admitir múltiples tipos primitivos. Gracias a ARB_separate_shader_objects , ya no tienes que vincular todas tus etapas de sombreador. Puede tener un programa de solo vértice, un programa de solo fragmento y 2-3 programas de solo geometría que mezcle y combine. Mientras usen interfaces compatibles, estará bien.

Nicol Bolas
fuente