我不熟悉 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);
结果是下一个:
如您所见,两片堆叠在一起,但阴影呈现错误。什么可能导致这个奇怪的问题?
更新
我创建缓冲区的代码段:
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(background), background, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);