GLSL直通几何着色器
GLSL Passthrough Geometry Shader
我已经学习 OpenGL(实际上是 OpenTK)一个月左右了,并且开始玩几何着色器。我最初写了一个更复杂的着色器,但没有用,所以我把所有东西都剥离了一个简单的直通着色器,它仍然没有用。
顶点着色器:
#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);
}
它应该在 window 的右下角绘制一个白色方块,并且 没有 几何着色器,它确实如此,这正是我所期望的。使用几何着色器,它什么也不渲染。信息日志显示一切编译和链接正常。
我错过了什么?
输出必须有一个max_vertices
声明。该数字必须是一个编译时常量,它定义了 GS 的单次调用将写入的最大顶点数。它可能不大于 MAX_GEOMETRY_OUTPUT_VERTICES
的实现定义限制
我已经学习 OpenGL(实际上是 OpenTK)一个月左右了,并且开始玩几何着色器。我最初写了一个更复杂的着色器,但没有用,所以我把所有东西都剥离了一个简单的直通着色器,它仍然没有用。
顶点着色器:
#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);
}
它应该在 window 的右下角绘制一个白色方块,并且 没有 几何着色器,它确实如此,这正是我所期望的。使用几何着色器,它什么也不渲染。信息日志显示一切编译和链接正常。
我错过了什么?
输出必须有一个max_vertices
声明。该数字必须是一个编译时常量,它定义了 GS 的单次调用将写入的最大顶点数。它可能不大于 MAX_GEOMETRY_OUTPUT_VERTICES