1

在我的游戏引擎中,我在绘制到实际屏幕之前先绘制到帧缓冲区,然后使用后处理着色器绘制到实际帧缓冲区。但是,我在使用 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 驱动程序中。

4

1 回答 1

3

然后停止将它们发送为GL_INT. 您已经在每个位置使用 8 个字节,因此您也可以使用GL_FLOAT浮点值。如果您想节省空间,请使用GL_SHORTGL_BYTE

是的,这在技术上是一个驱动程序错误。但是你并没有通过使用获得任何东西GL_INT

于 2013-02-24T04:14:57.570 回答