2017-10-09 5 views
2

Ich habe OpenGL (eigentlich OpenTK) für einen Monat oder so gelernt, und ich habe angefangen mit Geometrieshadern zu spielen. Ich habe ursprünglich einen viel komplizierteren Shader geschrieben, der nicht funktionierte, also habe ich alles aus einem einfachen Passthrough-Shader entfernt, was immer noch nicht funktioniert.GLSL Passthrough Geometrie Shader

Vertex Shader:

#version 420 core 

layout (location = 0) in vec3 position; 

uniform mat4 transform; 

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

Geometry 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); 
} 

Es sollte ein weißes Quadrat in der rechten unteren Ecke des Fensters ziehen und ohne der Geometrie Shader, tut es, was ich wo bin Ich erwarte es. Mit dem Geometry Shader wird nichts wiedergegeben. Info-Logs zeigen alles Kompilieren und Links gut.

Was fehlt mir?

+2

kann keine offensichtlichen Fehler erkennen, aber haben Sie nach Kompilierungs- und Verbindungsfehlern für Shader gesucht? – Rabbid76

+0

Ja, ich habe nach jeder Kompilation und nach der Verknüpfung überprüft; keine Fehler. –

+0

Probieren Sie 'Layout (triangle_strip, max_vertices = 3) aus;' – Rabbid76

Antwort

0

Für die Ausgabe muss eine max_vertices-Deklaration vorhanden sein. Die Zahl muss eine Kompilierzeitkonstante sein und definiert die maximale Anzahl von Scheitelpunkten, die von einem einzelnen Aufruf des GS geschrieben werden. Es darf nicht größer sein als der implementierungsdefinierte Grenzwert von MAX_GEOMETRY_OUTPUT_VERTICES

+0

Yup, das hat den Trick gemacht. Warum erscheint dieser Fehler nicht in den Compile/Link-Infologs? –

+0

Wenn nicht angegeben, muss ein Standardwert vorhanden sein. Es ist seltsam, aber ich denke, es sollte einen Fehler werfen, können Sie Code teilen, wo Sie Shader kompilieren? –