スポンサーリンク
前回のプログラム
https://suzulang.com/glsl-9-geometry-shader-1
C++側、vertex shader,fragment shaderはそのまま、geometry shaderだけを書き換える。
#version 460 layout (points) in; //入力は頂点単位元々 layout (points) out; //出力も頂点単位 layout (max_vertices = 3) out; //geometry shaderへの入力は配列で受け取らなければいけない //ただし名前はvertex shader側のoutと一致させる in vec4 vertexColor[]; // 出力は普通。名前はfragment shader側のinと一致させる out vec4 vColor; void main() { // 元々入ってきた頂点 gl_Position = gl_in[0].gl_Position; gl_PointSize=20.0; vColor = vertexColor[0]; EmitVertex(); // 頂点をラスタライザへ送る // ジオメトリシェーダで生成する頂点 gl_Position = gl_in[0].gl_Position; // 元々の頂点の座標を取得 gl_Position.x += 0.2; // 少し右へずらす gl_PointSize=10.0; // 頂点サイズも変える vColor = vertexColor[0]; // 色は同じものを使う EmitVertex(); // 頂点をラスタライザへ送る EndPrimitive(); }