2017-08-09 143 views
0

所以我在我的程序中有三個着色器。我是否需要通過幾何着色器將顏色傳遞給片段着色器?

頂點:

#version 330 core 
in vec2 Inpoint; 
in vec2 texCoords; 

out vec2 TexCoords; 

uniform mat4 model; 
uniform mat4 projection; 

void main() 
{ 
    TexCoords = texCoords; 
    gl_Position = projection * model * vec4(Inpoint, 0.0, 1.0); 
} 

幾何:

#version 330 core 

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

void main() 
{ 
    int i; 

    for (i = 0; i < gl_in.length(); i++) 
    { 
     gl_Position = gl_in[i].gl_Position; 
     EmitVertex(); 
    } 
    EndPrimitive(); 
} 

最後片段着色器:

#version 330 core 
in vec2 TexCoords; 
out vec4 color; 

uniform sampler2D image; 
uniform vec3 spriteColor; 

void main() 
{  
    color = vec4(spriteColor, 1.0) * texture(image, TexCoords); 
} 

現在沒有幾何着色器,一切都顯示就好了。但是,只要我包含幾何着色器,一切都會變壞...。

它表現得像它沒有得到紋理的和絃。

所以,問題是,幾何着色器是否需要將數據通過自身傳遞給片段着色器?我的意思是幾何着色器基本上什麼都不做,所以它不應該。除非我錯過了一些巨大的錯誤。

我試圖添加一個傳遞,但它抱怨說,一切都需要是一個數組,並且即使當我把它做成一個數組時,它也不是很正常。

回答

4

引用GLSL 3.30 specs 4.3.1 Inputs

片段着色器輸入得到每片段的值,典型地來自前一級的輸出

具有幾何着色器內插 是前一階段。所以是的,你的FS使用你的GS的輸入並且只能從它那裏輸入。