【发布时间】:2014-09-25 21:16:51
【问题描述】:
我正在尝试将 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);
【问题讨论】:
-
您的其他着色器阶段在哪里?特别是几何,如果你有的话。
-
要到达片段着色器,它必须在其他着色器中通过。您的着色器中是否还有任何编译链接错误?
-
@Andon 我将我的顶点着色器添加到原始帖子中。我没有任何几何着色器。
-
@ratchetfreak 如果不存在几何着色器,则
gl_PrimitiveID由实现填充。 -
@ratchetfreak 没有编译和链接错误。我不明白。 This documentation 表示 gl_PrimitiveID 是当前由 this 渲染的基元的索引。我假设 glDrawElements 是集合的一部分。但我错了或错过了一个 gl 电话。