我正在使用 GL_ARB_geometry_shader4 扩展处理几何着色器。
我的代码如下:
GLfloat vertices[] =
{
0.5,0.25,1.0,
0.5,0.75,1.0,
-0.5,0.75,1.0,
-0.5,0.25,1.0,
0.6,0.35,1.0,
0.6,0.85,1.0,
-0.6,0.85,1.0,
-0.6,0.35,1.0
};
glProgramParameteriEXT(psId, GL_GEOMETRY_INPUT_TYPE_EXT, GL_TRIANGLES);
glProgramParameteriEXT(psId, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_TRIANGLE_STRIP);
glLinkProgram(psId);
glBindAttribLocation(psId,0,"Position");
glEnableVertexAttribArray (0);
glVertexAttribPointer(0, 3, GL_FLOAT, 0, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
我的顶点着色器是:
#version 150
in vec3 Position;
void main()
{
gl_Position = vec4(Position,1.0);
}
几何着色器是:
#version 150
#extension GL_EXT_geometry_shader4 : enable
in vec4 pos[3];
void main()
{
int i;
vec4 vertex;
gl_Position = pos[0];
EmitVertex();
gl_Position = pos[1];
EmitVertex();
gl_Position = pos[2];
EmitVertex();
gl_Position = pos[0] + vec4(0.3,0.0,0.0,0.0);
EmitVertex();
EndPrimitive();
}
这段代码没有渲染任何内容。glDrawArrays() 中的模式到底应该是什么?GL_GEOMETRY_OUTPUT_TYPE_EXT 参数将如何影响 glDrawArrays() ?
我期望的是 3 个顶点将被传递给几何着色器并使用我们构造一个大小为 4 的图元(假设 GL_TRIANGLE_STRIP 需要 4 个顶点)。有人可以对此有所了解吗?