我曾经使用帧和渲染缓冲区的手写初始化以及渲染循环来绘制一些动画。现在我正试图将我的东西移动到 GLKit View Controller ,但与我以前的应用程序相比,在某些情况下我的性能非常糟糕。
我的动画分为四个场景,每个场景都有自己的顶点和片段着色器、顶点和纹理数据、gl 程序等。还有一个类定义现在应该渲染哪个场景,所以它创建和销毁实例必要时。我只调用
[sceneManager draw]
我的渲染循环。
因此,转移到 GLKit 视图控制器,我将其子类化并添加了如下调用:
-(void) glkView:(GLKView *)view drawInRect:(CGRect)rect
{
if (!_myManagerInstance.animationFinished) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 1.0);
[_myManagerInstance draw];
} else {
self.paused=true;
}
}
它工作正常,但动画明显滞后(在最坏的情况下约为 15 FPS)。分析应用程序的 OpenGLES 性能显示大量冗余调用,这些调用不是来自我的代码,请参见图像。我还发现了一个有同样问题的人的这篇文章。那么,我是否以正确的方式使用 GLKit VC?还是我只是缺少一些配置?