在我的游戏引擎中,我在绘制到实际屏幕之前先绘制到帧缓冲区,然后使用后处理着色器绘制到实际帧缓冲区。但是,我在使用 AMD 驱动程序时遇到了一个问题,我的 quad 渲染不正确。
该代码可以在多个操作系统的 Nvidia 和 Intel GPU 上按预期工作。这是一个示例: http: //i.stack.imgur.com/5fiJk.png 它已在具有不同 AMD gpu 的 3 个系统上复制,并且在非 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 驱动程序中。