GLSL直通几何着色器
问题描述:
我一直在学习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呃期望。使用几何着色器,它不渲染任何东西。信息日志显示一切编译和链接正常。
我错过了什么?
答
输出必须有一个max_vertices声明。该数字必须是编译时常量,并且它定义了一次调用GS将写入的最大顶点数。它可能不大于实现定义的极限MAX_GEOMETRY_OUTPUT_VERTICES
+0
是的,那是不可能的。为什么在编译/链接信息中不显示该错误? –
+0
未提供时,必须有一些默认值。它的奇怪,但我认为它应该会抛出一些错误,你可以在编译着色器的地方分享代码吗? –
看不到任何明显的错误,但是您是否检查了着色器编译和链接错误? – Rabbid76
是的,我在每次编译和链接后都检查过;没有错误。 –
尝试'布局(triangle_strip,max_vertices = 3);' – Rabbid76