2017-10-09 2 views
2

J'ai appris OpenGL (en fait OpenTK) depuis environ un mois et j'ai commencé à jouer avec des shaders de géométrie. J'ai d'abord écrit un shader beaucoup plus compliqué, qui n'a pas fonctionné, j'ai donc tout dépouillé d'un simple shader passthrough, ce qui ne marche toujours pas.GLSL Passthrough Geometry Shader

Vertex Shader:

#version 420 core 

layout (location = 0) in vec3 position; 

uniform mat4 transform; 

void main() 
{ 
    gl_Position = transform * vec4(position, 1); 
} 

Géométrie Shader:

#version 420 core 

layout (triangles) in; 
layout (triangle_strip) out; 

void main() 
{ 
    int i; 
    for(i = 0; i < gl_in.length(); i++) 
    { 
     gl_Position = gl_in[i].gl_Position; 

     EmitVertex(); 
    } 

    EndPrimitive(); 
} 

Fragment Shader:

#version 420 core 

layout (binding = 0) uniform sampler2D diffuse; 

layout(location = 0) out vec4 color; 

void main() 
{ 
    color = vec4(1, 1, 1, 1); 
} 

Il devrait dessiner un carré blanc en bas à droite de la fenêtre, et sans le shader de la géométrie, c'est ce que je veux Je m'attends à Avec le Shader Geometry, il ne rend rien. Les journaux d'information montrent tout compile et liens bien.

Qu'est-ce qui me manque?

+2

ne peut pas voir d'erreurs évidentes, mais avez-vous vérifié la compilation de shader et les erreurs de liaison? – Rabbid76

+0

Oui, j'ai vérifié après chaque compilation et après la liaison; pas d'erreurs –

+0

Essayez 'layout (triangle_strip, max_vertices = 3) out;' – Rabbid76

Répondre

0

Il doit y avoir une déclaration max_vertices pour la sortie. Le nombre doit être une constante à la compilation, et il définit le nombre maximum de sommets qui seront écrits par un seul appel du GS. Il peut être pas plus grand que la limite définie par l'implémentation de

+0

Yup, ça a fait l'affaire. Pourquoi cette erreur n'apparaît-elle pas dans les infologs de compilation/liaison? –

+0

Il doit y avoir une valeur par défaut pour cela lorsqu'il n'est pas fourni. Son étrange mais je pense qu'il devrait jeter une erreur pouvez-vous partager le code où vous compilez les shaders? –