2012-04-02 10 views
0

Ich schreibe einen GLSL-Geometrie-Shader, und ich versuche, das Eingangslayout zu verwenden, aber es funktioniert nicht. Mein erster Pass obwohl Test des lines Eingang Layout mit adaequat:GLSL-Geometrieshader mit lines_adjacency

// GLSL GEOMETRY SHADER 
#version 410 

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

void main() 
{ 
    gl_Position = gl_in[0].gl_Position; 
    EmitVertex(); 
    gl_Position = gl_in[1].gl_Position; 
    EmitVertex(); 
    EndPrimitive(); 
} 

aber wenn ich zu lines_adjacency Eingangsschaltern macht es nichts ziehen:

// GLSL GEOMETRY SHADER 
#version 410 

layout (lines_adjacency) in; 
layout (line_strip, max_vertices = 2) out; 

void main() 
{ 
    gl_Position = gl_in[1].gl_Position; 
    EmitVertex(); 
    gl_Position = gl_in[2].gl_Position; 
    EmitVertex(); 
    EndPrimitive(); 
} 

Ich weiß, ich bin nicht wirklich mit Die Nachbarschaft weist hier hin, aber ich werde sie irgendwann brauchen. Ich bin ein GLSL-Neuling, also würde jede Hilfe geschätzt, danke.

Antwort

2

Sie haben Ihre Eingabevertices geändert, um Adjazenzdaten anzugeben, richtig? Da OpenGL Ihre Vertex-Daten nicht analysieren, um herauszufinden, was an was angrenzt. Die Adjazenztypen existieren, um Sie zu erlauben, den Shader über benachbarte Informationen zu informieren. Also müssen Sie diese Daten bereitstellen.

Kurz gesagt, Sie können nicht mit den exakt gleichen Attributen und Indexdaten mit einem Adjazenzgeometrie-Shader rendern. Vergessen Sie nicht, dass Ihre glDraw* Anrufe GL_LINES_ADJACENCY anstelle von GL_LINES verwenden müssen.

+0

Ich ging in vier Punkten als ein GL_LINE_STRIP, ich nahm an, dass würde Nähe bedeuten. Ich wusste nichts über GL_LINES_ADJACENCY, ich werde das als nächstes versuchen. – atb