Shader de géométrie pour plusieurs primitives


8

Comment puis-je créer un shader de géométrie capable de gérer plusieurs primitives? Par exemple, lors de la création d'un shader de géométrie pour des triangles, je définis une disposition comme ceci:

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

Mais si j'utilise ce shader, les lignes ou les points n'apparaîtront pas. Donc, en ajoutant:

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

Le shader sera compilé et exécuté, mais ne rendra que les lignes (ou quelle que soit la dernière primitive définie).

Alors, comment puis-je définir un shader de géométrie unique qui gérera plusieurs types de primitives? Ou n'est-ce pas possible et je dois créer plusieurs programmes de shader et modifier les programmes de shader avant de dessiner chaque type?

Réponses:


7

Je ne pense pas qu'OpenGL supporte les shaders de géométrie qui produisent plusieurs types de primitives. Je suis en fait surpris que votre deuxième bloc de code ait été compilé ... Peut-être qu'il a juste écrasé la configuration?

Vous devrez créer plusieurs shaders et basculer entre eux, au moins pour les triangles / lignes et les points. Il y a en fait une astuce que vous pouvez faire avec un shader de fragment pour recevoir des triangles, mais rendre uniquement les lignes en éliminant les fragments qui se trouvent trop à l'intérieur du triangle selon les coordonnées barycentriques. Pour l'implémentation exacte de cela, je vous renvoie à l'OpenGL Orange Book et à sa section sur les shaders de géométrie et le dessin d'un filaire (je reviendrai et éditerai après avoir retrouvé le chapitre exact).

Bon codage!


2

Il n'est pas possible de créer un programme avec des shaders de géométrie qui gèrent plusieurs types primitifs.

Cela étant dit, vous n'avez pas à faire beaucoup de travail pour prendre en charge plusieurs types primitifs. Grâce à ARB_separate_shader_objects , vous n'avez plus besoin de lier toutes vos étapes de shader. Vous pouvez avoir un programme de sommets uniquement, un programme de fragments uniquement et 2 à 3 programmes de géométrie uniquement que vous mélangez et associez ensemble. Tant qu'ils utilisent des interfaces compatibles, tout ira bien.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.