在我的游戏引擎中,我在绘制到实际屏幕之前绘制到帧缓冲区,然后使用后期处理着色器绘制到实际的帧缓冲区。但是,我的AMD驱动程序存在一个问题,我的四边形渲染不正确。
代码在多个操作系统上的Nvidia和Intel GPU上都能正常运行。这是一个例子:http://i.stack.imgur.com/5fiJk.png 它已在具有不同AMD gpus的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驱动程序中会出现这种行为。
答案 0 :(得分:2)
然后停止以GL_INT
发送它们。您已经在每个位置使用8个字节,因此您也可以使用GL_FLOAT
和浮点值。如果您想节省空间,请使用GL_SHORT
或GL_BYTE
。
是的,这在技术上是一个驱动程序错误。但是你没有使用GL_INT
获得任何东西。