我试图将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);
答案 0 :(得分:0)
经过几个小时的撞击墙壁,我意识到我的顶点着色器没有附加到正确的程序ID。
仅附加了片段着色器。如果没有提供顶点着色器,gl_PrimitiveID似乎不会自动递增。
+1给安东和棘轮指示我指向正确的方向。