1

私のゲームエンジンでは、実際の画面に描画する前にフレームバッファーに描画し、その後、後処理シェーダーを使用して実際のフレームバッファーに描画します。ただし、AMDドライバーで発生している問題があり、クワッドが正しくレンダリングされません。

このコードは、複数のオペレーティングシステムのNvidiaとIntelGPUの両方で期待どおりに機能します。次に例を示します。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);

2つの独立した三角形を使用するなど、他のオプションを試しましたが、これまでのところ何も機能していません。この動作がAMDドライバーで発生する理由について私は完全に迷っています。

4

1 に答える 1

3

次に、それらをとして送信するのを停止しますGL_INT。すでに位置ごとに8バイトを使用しているためGL_FLOAT、浮動小数点値を使用することもできます。スペースを節約したい場合は、GL_SHORTまたはを使用してくださいGL_BYTE

はい、これは技術的にはドライバーのバグです。ただし、を使用しても何も得られませんGL_INT

于 2013-02-24T04:14:57.570 に答える