У меня есть немного кода рендеринга OpenGL 2.1, который отлично работает при использовании карты/драйвера nVidia или драйвера AMD с открытым исходным кодом, но не работает при использовании официального драйвера fglrx. Он просто отображает серый экран (цвет glClear) и ничего не рисует.
gDEBugger показывает, что glDrawElements выдает ошибку GL_INVALID_OPERATION. Согласно этой странице (что может привести к тому, что glDrawArrays генерировать ошибку GL_INVALID_OPERATION?) есть много полудокументированных возможных причин этой ошибки. Шейдер компилируется нормально, и размер буфера тоже должен быть хорошим, и я не использую геометрические шейдеры (очевидно). Это просто вызов отрисовки куба только с одним атрибутом вершины. Код ниже.
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, а не с каким-либо другим драйвером, я был бы рад это услышать. Если вам нужно больше кода, я с радостью предоставлю его, конечно.