私は OpenGL に詳しくありませんが、他の人のコードを改善する必要があります。問題は、ドローコールごとに頂点データをコピーし、CPU を集中的に使用する作業を引き起こすことです。今、VBOを使用するように書き直そうとしています。新しいコードが描画されていますが、奇妙なサイズの問題があります。ジグソー ピースは大きく、古いコードとまったく同じ場合もあります。
VBO は、GPU メモリ内で一度だけバッファを作成することを理解しています。しかし、私は明らかに何かが間違っています。私はこのコードでレンダリングされた作品を持っている見てください:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, background);
glEnableVertexAttribArray(0);
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indicies)/sizeof(indicies[0]), GL_UNSIGNED_BYTE, indicies);
そして、次のコードでシャドーします:
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indicies)/sizeof(indicies[0]), GL_UNSIGNED_BYTE, indicies);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
結果は次のとおりです。
ご覧のとおり、2 つのピースが重ねられていますが、影が正しくレンダリングされていません。この奇妙な問題の原因は何ですか?
更新
バッファを作成するコードの一部:
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(background), background, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);