我试图用几何着色器生成一个简单的形状,但是这个形状渲染了两次,我不知道为什么。
首先我们有一个非常简单的顶点着色器
#version 150
in vec4 position;
void main() {
gl_Position = position;
}
然后是一个几何着色器,生成一个简单的三角形。
#version 150
layout (triangles) in;
layout (triangle_strip, max_vertices = 5) out;
out FragData {
vec4 color;
} FragOut;
void main(){
//RED TOP LEFT
FragOut.color = vec4(1.0, 0.0, 0.0, 1.0);
gl_Position = gl_in[0].gl_Position + vec4( -1.0, 0.0, 0.0, 0.0);
EmitVertex();
//BLUE BOTTOM LEFT
FragOut.color = vec4(0., 0., 1., 1.);
gl_Position = gl_in[0].gl_Position + vec4( -1.0, -1.0, 0.0, 0.0);
EmitVertex();
//GREEN BOTTOM RIGHT
FragOut.color = vec4(0.0, 1.0, 0.0, 1.0);
gl_Position = gl_in[0].gl_Position + vec4( 1.0, -1.0, 0.0, 0.0);
EmitVertex();
EndPrimitive();
}
最后是一个简单的片段着色器
#version 150
in FragData {
vec4 color;
} FragIn;
out vec4 fragColor;
void main() {
fragColor = FragIn.color;
}
结果应该是一个三角形,但正在渲染两个三角形:
Here's the result
1条答案
按热度按时间eiee3dmh1#
每个图元执行一次Geometry Shader,一个
rect()
由2个三角形组成,因此几何着色器执行两次,生成2个triangle_strip
图元。绘制单个
POINTS
图元而不是矩形:请注意,您需要更改原语输入规范:
layout (triangles) in;