頂点シェーダーでの gl_vertexID の動作を理解しようとしています。そのために、2 つの glDrawArrays 呼び出しを次々に使用して 2 つの正方形をレンダリングしようとしています。頂点の gl_VertexID を次のように使用して、1 つの正方形のみに赤い色を適用します。
out vec4 color;
in vec4 tdk_Vertex;
void main(void)
{
if(gl_VertexID < 4)
{
color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
else
{
color = vec4(1.0f, 1.0f, 1.0f, 1.0f);
}
gl_Position = tdk_Vertex;
}
フラグメント シェーダーに色を渡す。
次のように座標を平方します。
static GLfloat vertices[] =
{ -0.75f, 0.25f, 0.0f, 1.0f,
-0.75f, 0.5f, 0.0, 1.0f,
-0.25f, 0.5f, 0.0f, 1.0f,
-0.25f, 0.25f, 0.0f, 1.0f,
0.25f, 0.25f, 0.0f, 1.0f,
0.25f, 0.5f, 0.0f, 1.0f,
0.75f, 0.5f, 0.0f, 1.0f,
0.75f, 0.25f, 0.0f, 1.0f};
次のように描画呼び出しを行う:
for(int i=0; i<8; i+=4)
{
glDrawArrays(GL_TRIANGLE_FAN, i, 4);
}
Nvidia カードを使用し、2 つの glDrawArrays 呼び出しを呼び出すと、予想される結果が表示されます。つまり、赤色を 1 つの正方形にレンダリングし、白色を別の正方形にレンダリングします。
したがって、この正しい動作を知りたいですか、それとも gl_VertexID インデックスが glDrawArrays 呼び出し中に生成され、両方の正方形が同じ赤色になるようにする必要がありますか?
私は2つのglDrawArrays呼び出しを使用しているので、私の理解では、仕様に従って両方の四角が赤でなければなりません:
http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_VertexID.xml
glsl 300 es でテストしたい。