当涉及到线程时,我有点新手,所以任何指向正确方向的指针都会有很大的帮助。我的游戏具有相当重的更新功能和相当重的绘图功能。我假设绘制函数中的大部分权重将在GPU上发生。因此,我想在绘图发生时开始计算下一帧的更新。现在,我的游戏循环非常简单:
Game->Update1();
Game->Update2();
Game->Draw();
Update1()
更新不改变游戏状态的变量,因此它可以独立于Draw运行。也就是说,两者之间的数据不应该打架。它也是CPU处理的主要部分。
Update2()
更新了Draw需要的变量,并且它非常快,因此使它与Draw()
串行运行似乎是正确的。另外,我认为Draw()
功能在CPU上很轻,在GPU上很重。
我想要发生的是,当GPU忙于处理所有Draw功能时,下一帧的Update1()可以使用CPU来准备下一帧的更新。看起来我并没有自动获得这个功能 - Draw循环似乎需要一段时间并阻止所有内容,直到它完成,这不太理想。
这样做的正确方法是什么?这已经发生了,我只是没有正确地观察它?
答案 0 :(得分:0)
这取决于Draw()包含的内容,你应该自动获得CPU-GPU并行性,除非Draw()内部的一些调用在CPU和GPU之间同步。一个简单的例子是使用glReadPixels。