2017-10-09 76 views
2

我一直在学习OpenGL(实际上是OpenTK)一个月左右,我开始玩几何着色器。我原本写了一个更复杂的着色器,但它并不起作用,所以我已将所有东西都剥离了一个简单的直通着色器,但仍然无法使用。GLSL直通几何着色器

顶点着色器:

#version 420 core 

layout (location = 0) in vec3 position; 

uniform mat4 transform; 

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

几何着色器:

#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(); 
} 

片段着色器:

#version 420 core 

layout (binding = 0) uniform sampler2D diffuse; 

layout(location = 0) out vec4 color; 

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

应该吸取在窗口右下角的白色正方形,没有几何着色器,它确实,这就是我wo呃期望。使用几何着色器,它不渲染任何东西。信息日志显示一切编译和链接正常。

我错过了什么?

+2

看不到任何明显的错误,但是您是否检查了着色器编译和链接错误? – Rabbid76

+0

是的,我在每次编译和链接后都检查过;没有错误。 –

+0

尝试'布局(triangle_strip,max_vertices = 3);' – Rabbid76

回答

0

输出必须有一个max_vertices声明。该数字必须是编译时常量,并且它定义了一次调用GS将写入的最大顶点数。它可能不大于实现定义的极限MAX_GEOMETRY_OUTPUT_VERTICES

+0

是的,那是不可能的。为什么在编译/链接信息中不显示该错误? –

+0

未提供时,必须有一些默认值。它的奇怪,但我认为它应该会抛出一些错误,你可以在编译着色器的地方分享代码吗? –