2013-04-17 103 views
4

此時我有一個工作頂點和片段着色器。如果我完全刪除了幾何着色器,那麼我將在每個頂點獲得具有顏色的期望立方體。但是添加了幾何着色器後,幾乎不顯示幾何圖形。glsl通過幾何着色器問題

頂點着色器:

#version 330 core 

layout(location = 0) in vec3 vertexPosition_modelspace; 
layout(location = 1) in vec3 vertexColor; 

out VertexData 
{ 
    vec3 color; 
} vertex; 

uniform mat4 MVP; 

void main(){  

    gl_Position = MVP * vec4(vertexPosition_modelspace,1); 
    vertex.color = vertexColor; 
} 

幾何着色器:

#version 330 

precision highp float; 

in VertexData 
{ 
    vec3 color; 
} vertex[]; 

out vec3 fragmentColor; 

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

void main(void) 
{ 
    for (int i = 0; i > gl_in.length(); i++) { 

     gl_Position = gl_in[i].gl_Position; 
     fragmentColor = vertex[i].color; 
     EmitVertex(); 
    } 

    EndPrimitive(); 
} 

片段着色器:

#version 330 core 

in vec3 fragmentColor; 

out vec3 color; 

void main(){ 
    color = fragmentColor; 
} 

我的顯卡支持OpenGL 3.3,從我可以告訴。正如我所說。它沒有幾何着色器。作爲數據,我傳入兩個GLfloat數組,每個數組都是頂點或頂點顏色。

+0

當然,通常的問題是:着色器編譯和程序鏈接,如果不是信息日誌說什麼? –

回答

6
for (int i = 0; i > gl_in.length(); i++) //note the '>' 

這個循環條件從一開始就是錯誤的,所以你永遠不會發射任何頂點。你最可能的意思是i < gl_in.length()

+1

我覺得很愚蠢。我已經花了一個星期的時間試圖找出這個問題。我從來沒有想過檢查我的循環邏輯。謝謝。 – APalmer