我不熟悉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);