【问题标题】:Why is the AMD driver rendering fullscreen quads incorrectly?为什么 AMD 驱动程序渲染全屏四边形不正确?
【发布时间】:2013-02-09 11:53:09
【问题描述】:

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

【问题讨论】:

    标签: c opengl gpu amd-processor


    【解决方案1】:

    然后停止以GL_INT 发送它们。您已经在每个位置使用 8 个字节,因此您不妨使用 GL_FLOAT 和浮点值。如果要节省空间,请使用GL_SHORT 或GL_BYTE。

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

    【讨论】:

    • 使用浮点数解决了这个问题。由于驱动程序错误,我没有立即意识到您的意思是我应该使用浮点数。
    • // ,为什么有人首先将它们作为 GL_INT 发送?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多