opengl es-何时确定要在gl_VertexID中使用的顶点索引



我正在尝试了解gl_vertexID在顶点着色器中的行为。为此,我尝试使用两个glDrawArrays调用来渲染两个正方形。并且希望在顶点中使用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上测试它。

glDrawArrays的情况下,gl_VertexID是缓冲区内顶点的索引。您的第一个draw调用呈现范围[0,4)上的索引,因此这些是gl_VertexID将采用的值。您的第二个draw呼叫呈现范围[4,8)上的指数,这些是gl_VertexID将采用的数值。

最新更新