我的问题是关于opengl中的游戏循环设计。
我相信游戏循环可以通过3个主要步骤来实现
为了简单起见,我们只关注第2步和第3步。
我认为以并行顺序运行它们或将它们混合到一个步骤是错误的。 我举个例子。
Lats说你正在创造一个战争游戏,你需要在屏幕上绘制100名战士,逻辑将更新他们的位置,更新背景区域,然后你需要绘制结果。在更新另一名士兵的位置之前,你无法开始画一名士兵。
所以按照这个简单的步骤,很明显第2步和第3步需要同步一些,第2步必须在第3步之前完成。
现在告诉我如何在多个线程上运行游戏循环,以及多个进程? opnegl使用multiCore吗?怎么样?
编辑:使用多线程的一种方法是预先计算游戏逻辑,或者换句话说使用向量。但是矢量中存在两个很大的缺点,使得它们几乎不被推荐使用。
答案 0 :(得分:3)
现在告诉我如何在多个线程上运行游戏循环
多核计算的想法是并行化,即将计算密集型任务分成可以并行处理的独立工作集。正如你自己发现的那样,游戏的并行化空间非常小。
在游戏中使用多核的常用方法是将I / O与逻辑运算并行化。即在一个线程中进行所有网络和用户交互,在另一个线程中进行AI和场景管理。声音通常也会被平行化。
OpenGL是否使用multiCore?怎么样?
OpenGL规范没有指明这一点。但是一些实现可能选择使用多个核。虽然这不太可能。为什么?因为它会产生不必要的缓存管理开销。
答案 1 :(得分:2)
我将尝试以图形方式解释,为什么2个线程,一个用于渲染,一个用于逻辑更好,并且不会导致不一致:
您建议的单线程设计运行如下:
logic |-----| |-----|
graphics |-----| |-----| and so forth.
但是因为你有多个cpus,你应该使用它们。这意味着,在逻辑第一次完成之后,图形可以呈现该游戏状态。同时,可以计算下一个逻辑步骤:
logic |-----||-----||-----|
graphics |-----||-----| and so forth.
如您所见,您可以通过这种方式将性能提高一倍:当然会有一些开销,但无论如何它都会比单线程版本更快。
此外,您可以假设,游戏逻辑将花费更少的时间来计算渲染线程:这使得线程非常简单,因为您可以在逻辑线程中等待来自renderthread的回调以提供渲染线程新指令然后计算下一个逻辑步骤。