[英]How is it possible to use dual core in opengl game loop?
我的问题是关于opengl中的游戏循环设计。
我相信游戏循环可以通过3个主要步骤完成
为简单起见,我们只关注第2步和第3步。
我认为以并行顺序运行它们或将它们混合到一个步骤中是错误的。 我举一个例子。
老兄说,您正在创建一个战争游戏,您需要在屏幕上绘制100名战士,逻辑将是更新其位置,更新背景区域,然后绘制结果。 在更新另一位士兵的位置之前,您不能开始绘制一位士兵。
因此,根据这些简单的步骤,很明显,步骤2和3需要以某种方式进行同步,并且步骤2必须在步骤3之前完成。
现在告诉我,如何可能在一个以上线程和一个以上进程上运行游戏循环? opnegl是否使用multiCore? 怎么样?
编辑:使用多线程的一种方法是预先计算游戏逻辑,或者换句话说,使用向量。 但是向量有两个很大的缺点,使它们几乎不被推荐使用。
现在告诉我如何在一个以上的线程上运行游戏循环
多核计算的思想是并行化,即将计算密集型任务拆分为可以并行处理的独立工作集。 正如您发现的那样,游戏的并行化空间极少。
在游戏中使用多个内核的通常方法是将I / O与逻辑操作并行化。 即在一个线程中进行所有网络和用户交互,在另一个线程中进行AI和场景管理。 声音通常也被并行化。
OpenGL是否使用multiCore? 怎么样?
OpenGL规范未指定。 但是某些实现可能选择利用多个内核。 尽管这不太可能。 为什么? 因为这会产生不必要的缓存管理开销。
我将尝试以图形方式进行解释,为什么2个线程(一个用于渲染,一个用于逻辑)更好,并且不会导致不一致:
您建议的单线程设计将如下运行:
logic |-----| |-----|
graphics |-----| |-----| and so forth.
但是,如果您有多个cpus,则应该利用它们。 这意味着,在逻辑第一次完成后,图形即可呈现该游戏状态。 同时,可以计算下一个逻辑步骤:
logic |-----||-----||-----|
graphics |-----||-----| and so forth.
如您所见,您几乎可以通过这种方式将性能提高一倍:当然会有一些开销,但是无论如何它都会比单线程版本更快。
此外,您可以假设游戏逻辑将比渲染线程花费更少的时间:这使线程变得相当容易,因为您可以在逻辑线程中等待从renderthread进行的回调,从而为渲染线程提供新的指令并然后计算下一个逻辑步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.