将OpenGL调用与iPhone上的更新分开

时间:2010-08-03 00:53:28

标签: iphone multithreading opengl-es

当涉及到线程时,我有点新手,所以任何指向正确方向的指针都会有很大的帮助。我的游戏具有相当重的更新功能和相当重的绘图功能。我假设绘制函数中的大部分权重将在GPU上发生。因此,我想在绘图发生时开始计算下一帧的更新。现在,我的游戏循环非常简单:

Game->Update1();
Game->Update2();
Game->Draw();

Update1()更新不改变游戏状态的变量,因此它可以独立于Draw运行。也就是说,两者之间的数据不应该打架。它也是CPU处理的主要部分。

Update2()更新了Draw需要的变量,并且它非常快,因此使它与Draw()串行运行似乎是正确的。另外,我认为Draw()功能在CPU上很轻,在GPU上很重。

我想要发生的是,当GPU忙于处理所有Draw功能时,下一帧的Update1()可以使用CPU来准备下一帧的更新。看起来我并没有自动获得这个功能 - Draw循环似乎需要一段时间并阻止所有内容,直到它完成,这不太理想。

这样做的正确方法是什么?这已经发生了,我只是没有正确地观察它?

1 个答案:

答案 0 :(得分:0)

这取决于Draw()包含的内容,你应该自动获得CPU-GPU并行性,除非Draw()内部的一些调用在CPU和GPU之间同步。一个简单的例子是使用glReadPixels。