问题描述
我正在尝试使用几何着色器生成一个简单的形状,但该形状渲染了两次,我不知道为什么。
首先我们有一个非常简单的顶点着色器
#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,1.0);
gl_Position = gl_in[0].gl_Position + vec4( -1.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);
EmitVertex();
//GREEN BottOM RIGHT
FragOut.color = vec4(0.0,1.0,1.0);
gl_Position = gl_in[0].gl_Position + vec4( 1.0,0.0);
EmitVertex();
EndPrimitive();
}
最后是一个简单的片段着色器
#version 150
in FragData {
vec4 color;
} FragIn;
out vec4 fragColor;
void main() {
fragColor = FragIn.color;
}
结果应该是一个三角形,但正在渲染两个三角形:
解决方法
Geometry Shader 对每个原语执行一次。 rect()
由 2 个三角形组成,因此几何着色器执行两次并生成 2 个 triangle_strip
图元。
绘制单个 POINTS
基元而不是矩形:
beginShape(POINTS);
vertex(x,y);
endShape();
请注意,您需要更改 Primitive input specification:
layout (triangles) in;
layout (points) in;