我有一些 OpenGL 2.1 渲染代码,在使用 nVidia 卡/驱动程序或开源 AMD 驱动程序时效果很好,但在使用官方 fglrx 驱动程序时不起作用。它只是显示一个灰色屏幕(glClear 颜色)并且不绘制任何东西。
gDEBugger 显示 glDrawElements 给出错误 GL_INVALID_OPERATION。根据此页面(What can cause glDrawArrays to generate a GL_INVALID_OPERATION error?)有很多半记录的可能导致此错误的原因。着色器编译得很好,缓冲区大小也应该很好,而且我没有使用几何着色器(显然)。这只是一个简单的立方体绘制调用,只有一个顶点属性。代码如下。
glUseProgram(r->program->getProgram());
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, r->texture->glID );
glUniform1i(r->program->getUniform("texture").location, GL_TEXTURE0);
glUniform4f(r->program->getUniform("colour").location, r->colour.x, r->colour.y, r->colour.z, r->colour.w);
glBindBuffer(GL_ARRAY_BUFFER, r->vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, r->ibo);
glVertexAttribPointer(
r->program->getAttribute("position").location, // attribute
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
sizeof(GLfloat)*3, // stride
reinterpret_cast<void*>(0) // array buffer offset
);
glEnableVertexAttribArray(r->program->getAttribute("position").location);
glUniformMatrix4fv(r->program->getUniform("modelToCameraMatrix").location, 1, GL_FALSE, glm::value_ptr(modelToCameraMatrix));
glDrawElements(
r->mesh->mode, // mode
r->mesh->nrOfInds, // count
GL_UNSIGNED_SHORT, // type
reinterpret_cast<void*>(0) // element array buffer offset
);
我不知道发生了什么或可能导致此错误的原因。如果有人对 fglrx 驱动程序而不是任何其他驱动程序可能导致这种情况的原因有任何指示,我会很高兴听到它。如果您需要更多代码,我当然会很乐意提供。