我最近将当前项目中的绘图从标准绘图从内存数组更改为VBO.令我惊讶的是,帧速率从60fps显着下降到30fps,绘制了1200次8次的模型.进行进一步的分析表明,与使用内存绘制相比,使用VBO时glDrawElements需要10倍的时间.
我真的很困惑为什么会这样.有谁知道可能导致性能下降的原因是什么?
我正在测试运行iOS 6.1.2的iPhone 5.
我已经将我的VBO处理分离到一个函数中,我在函数的顶部静态创建一个顶点/索引缓冲区.我可以使用#ifdef USE_VBO在普通和VBO渲染之间切换
- (void)drawDuck:(Toy*)toy reflection:(BOOL)reflection
{
ModelOBJ* model = _duck[0].model;
int stride = sizeof(ModelOBJ::Vertex);
#define USE_VBO
#ifdef USE_VBO
static bool vboInitialized = false;
static unsigned int vbo, ibo;
if (!vboInitialized) {
vboInitialized = true;
// Generate VBO
glGenBuffers(1, &vbo);
int numVertices = model->getNumberOfVertices();
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, stride*numVertices, model->getVertexBuffer(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
// Generate index buffer
glGenBuffers(1, &ibo);
int numIndices = model->getNumberOfIndices();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned short)*numIndices, model->getIndexBuffer(), GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
#endif
[self setupDuck:toy reflection:reflection]; …Run Code Online (Sandbox Code Playgroud)