В моем игровом движке я рисую фреймбуфер перед рисованием на фактический экран, а затем использую шейдер пост-обработки, чтобы рисовать фактический фреймбуфер. Тем не менее, есть проблема, с которой я сталкиваюсь с драйверами AMD, где мой квадрат работает неправильно.Почему драйвер AMD полностью отображает полноэкранные квадратики?
Код работает как ожидалось на графических процессорах Nvidia и Intel в нескольких операционных системах. Вот пример: http://i.stack.imgur.com/5fiJk.png Он был воспроизведен в трех системах с различным процессором AMD и не был замечен в системах, отличных от AMD.
Код, который создал четверной здесь:
static int data[] = {
0, 0,
0, 1,
1, 1,
1, 0
};
GLuint vao, vbo;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), &data, GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_INT, GL_FALSE, 0, NULL);
glVertexAttribPointer(1, 2, GL_INT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
/* code which draws it */
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
Я пробовал другие варианты, такие как использование двух независимых треугольников, но ничего до сих пор не работает. Я полностью потерял, почему это поведение произойдет в драйверах AMD.
Использование поплавков исправило проблему. Я не сразу понял, что вы подразумеваете, что я должен использовать поплавки из-за ошибки драйвера. –
//, зачем кому-то отправлять их как GL_INT в первую очередь? –