Имам малко код за изобразяване на 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, а не с който и да е друг драйвер, ще се радвам да го чуя. Ако имате нужда от още код, с радост ще го осигуря, разбира се.