GLSL gl_PrimitiveID始终为0

时间:2014-09-25 21:16:51

标签: opengl glsl shader

我试图将gl_PrimitiveID作为片段着色器中的颜色输出。但它总是等于0。

这是我的片段着色器:

void main(void)
{
    if(gl_PrimitiveID == 0)
        gl_FragColor.rgba = vec4(1, 0, 0, 1); // red for 0
    else
        gl_FragColor.rgba = vec4(0, 0, 1, 1); // blue otherwise
}

和顶点着色器

void main(void)
{
    gl_Position = ftransform();
}

三角形的输出颜色始终为红色。 我使用glDrawElements绘制三角形,并且在使用默认着色器时渲染是正确的。

我做错了什么?

以下是绘制三角形的方法:

glBindBuffer(GL_ARRAY_BUFFER, vertexPosBuffer);
glVertexPointer(3, GL_FLOAT, 0, NULL);

glBindBuffer(GL_ARRAY_BUFFER, vertexNormalBuffer);
glNormalPointer(GL_FLOAT, 0, NULL);

glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_NORMAL_ARRAY );

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer);
glDrawElements(GL_TRIANGLES, countVertices, GL_UNSIGNED_INT, (void*)0);

1 个答案:

答案 0 :(得分:0)

经过几个小时的撞击墙壁,我意识到我的顶点着色器没有附加到正确的程序ID。

仅附加了片段着色器。如果没有提供顶点着色器,gl_PrimitiveID似乎不会自动递增。

+1给安东和棘轮指示我指向正确的方向。