我是 iPhone 上 openGL 编程和多线程的新手,我正在尝试编写一个小型 openGL 游戏,但我面临一个小性能问题。
游戏将图形渲染为单独的 openGL 视图(我现在使用 ES 1.1),我的渲染引擎根据用户的方向更新图形(如指南针)。在经历了人们在网上的经历后,我决定:
- 在单独的线程上运行所有与 openGL 相关的操作(线程之间没有与 openGL 相关的操作)。
- 在主线程上从位置服务运行回调
使用委托在位置控制器和我的 openGLViews 之间传达航向更新。
-(void)loadGame{ //other loading operations [self loadThreads]; [graphicsThread start]; } -(void)loadThreads{ //graphics thread is an ivar graphicsThread = [[NSThread alloc] initWithTarget:self selector:@selector(loadGameViews) object:Nil]; //load other thread related stuff } -(void)loadGameViews{ //create and load all openGLViews }
编辑 :
-(void)loadGameViews{
//create and load all openGLViews
[self.openGLView performSelector:@selector(startAnimation) onThread:graphicsThread withObject:NULL waitUntilDone:NO];
}
该代码工作正常,但我注意到帧速率(在 iPad 上测试)下降到 40 FPS(在单线程上运行时,iot 为 60)。我想知道:
- 如果 40 FPS 是游戏可接受的帧速率。
- 如果我的线程逻辑是正确的(或者有更好的方法吗?)
- 如果有办法将我的帧速率提高到 60 FPS