硬件:iPad2
软件:OpenGL ES 2.0 C++
glDrawElements似乎占用了约25%的CPU。使得每帧CPU为18毫秒,GPU为10毫秒。
当我不使用索引缓冲区而是使用glDrawArrays时,速度更快,且glDrawArrays几乎不在分析器中显示出来。其他所有内容都相同,因为我必须在没有索引缓冲区的情况下在VBO中复制顶点。
到目前为止:
- 两种方法之间的状态改变几乎相同
- 顶点结构是两个浮点数(8字节)。
- 索引缓冲区为16位(也尝试过32位)
- 对于两个缓冲区均为GL_STATIC_DRAW
- 缓冲区在加载后不会更改
- 同一个VBO和索引缓冲区多次渲染每一帧,具有不同的偏移量和大小
- 没有OpenGL错误
因此,看起来它正在进行某种软件回退。但是我无法弄清楚什么会导致OpenGL回退。