スポンサーリンク

GLSLを試す (9) Geometry Shader(5)- 三角形一枚から三角形二枚

前回のプログラム

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はジオメトリシェーダから出力する可能性のある最大長点数を指定するはずだが、なぜか前回の

glProgramParameteri(*ProgramID, GL_GEOMETRY_VERTICES_OUT, 3);

をそのままにしておいても四つ目の頂点を出力できた。何か意味を取り違えているのだろうか。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: