Mavericks を実行している Intel HD 4000 グラフィックスを搭載した Macbook Pro でジオメトリ シェーダーを試しています。EndPrimitive()
通話中に奇妙な動作に気付きました。ここに私のジオメトリシェーダーがあります:
#version 150 core
layout(points) in;
layout(triangle_strip, max_vertices = 512) out;
void main() {
vec4 start_pos = gl_in[0].gl_Position + vec4(-0.5, -0.5, 0.0, 0.0);
vec4 bottom_vertex = start_pos;
for (int i = 0; i < 17; ++i) {
bottom_vertex = start_pos + vec4(float(i) * float(1.0 / 16.0), 0.0, 0.0, 0.0);
gl_Position = bottom_vertex;
EmitVertex();
gl_Position = bottom_vertex + vec4(0.0, 1.0/16.0, 0.0, 0.0);
EmitVertex();
}
//EndPrimitive();
}
プログラムはglfw
、OpenGL 3.2 コア コンテキストを使用および要求します。で 1 つの頂点のみを描画し[0, 0]
ます。私の目標は、最終的にジオメトリ シェーダーが複数の三角形ストリップで構成される正方形のグリッドを出力するようにすることです。シェーダーはそのままで、グリッドの 1 行を出力します。結果は次のとおりです。
その時点で、現在のトライアングル ストリップ プリミティブを終了し、次の行のために新しいプリミティブを開始したいと考えています。EndPrimitive()
ただし、上記のシェーダーで呼び出しのコメントを外すだけで、結果が台無しになります。
について何か誤解していEndPrimitive()
ますか? 私の理解では、現在のトライアングル ストリップを終了し、新しいトライアングル ストリップを開始する必要があります。ループの後は何もしていないので、シェーダーの結果はループのEndPrimitive()
有無にかかわらず同じになるはずです。
また、今は別の実装でテストすることはできません。私の実装にバグがあるのでしょうか? この問題を特定するためにできることはありますか?