小编Got*_*ied的帖子

使用VBO的OpenGL ES iOS绘图性能比没有VBO要慢得多

我最近将当前项目中的绘图从标准绘图从内存数组更改为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)

performance opengl-es vbo ios

4
推荐指数
1
解决办法
3807
查看次数

标签 统计

ios ×1

opengl-es ×1

performance ×1

vbo ×1