スポンサーリンク
前回のプログラム
https://suzulang.com/glsl-9-geometry-shader-4-triangle-to-triangle
の、C++側をそのままにして、ジオメトリシェーダを以下のものに置き換える。
#version 460 layout (triangles) in; //入力は三角形 layout (triangle_strip) out; //出力も三角形 layout (max_vertices = 4) out; //四点出力 //geometry shaderへの入力は配列で受け取らなければいけない //ただし名前はvertex shader側のoutと一致させる in vec4 vertexColor[]; // 出力は普通。名前はfragment shader側のinと一致させる out vec4 vColor; void main() {
gl_Position = gl_in[0].gl_Position; vColor = vertexColor[0]; EmitVertex();
gl_Position = gl_in[1].gl_Position; vColor = vertexColor[1]*0.2; EmitVertex();
gl_Position = gl_in[2].gl_Position; vColor = vertexColor[2]*0.2; EmitVertex();
//第四頂点 gl_Position = vec4(-0.8,0.8,0,1); vColor = vec4(1,1,1,1); EmitVertex();
EndPrimitive(); }
C++側では三頂点しか指定していないのに三角形が二枚出力されている。
GL_GEOMETRY_VERTICES_OUTはジオメトリシェーダから出力する可能性のある最大長点数を指定するはずだが、なぜか前回の
をそのままにしておいても四つ目の頂点を出力できた。何か意味を取り違えているのだろうか。