我试图了解 gl_vertexID 在顶点着色器中的行为。为此,我尝试使用两个 glDrawArrays 调用一个接一个地渲染 2 个正方形。并希望在顶点中使用 gl_VertexID 仅将红色应用于一个正方形:
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 卡,并调用两个 glDrawArrays 调用正在显示预期的结果,即将一个正方形渲染为红色,将另一个渲染为白色。
因此,想知道在 glDrawArrays 调用期间是否应该生成正确的行为或 gl_VertexID 索引,以便两个正方形具有相同的红色?
我正在使用 2 个 glDrawArrays 调用,所以我的理解是根据规范,两个方块都应该是红色的:
http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_VertexID.xml
想为 glsl 300 es 测试它。