Android 如何在opengl游戏循环中使用双核?
我的问题是关于opengl中的游戏循环设计 我相信游戏循环可以分为三个主要步骤Android 如何在opengl游戏循环中使用双核?,android,opengl-es,core-graphics,game-loop,Android,Opengl Es,Core Graphics,Game Loop,我的问题是关于opengl中的游戏循环设计 我相信游戏循环可以分为三个主要步骤 接受输入-它可能来自用户单击屏幕或系统警报或其他任何内容 做逻辑 更新视图 为了简单起见,让我们只关注第2步和第3步 我认为以并行顺序运行它们或将它们混合到一个步骤中是错误的。 我给你举个例子 Lats说你正在创建一个战争游戏,你需要在屏幕上绘制100名士兵在战斗,逻辑是更新他们的位置,更新背景区域,然后你需要绘制结果。在更新另一名士兵的位置之前,不能开始绘制一名士兵 因此,根据这些简单的步骤,很明显步骤2和步骤3需
OpenGL规范没有规定这一点。但是一些实现可能会选择使用多个核心。尽管这不太可能。为什么?因为它会产生不必要的缓存管理开销。我将尝试以图形方式解释,为什么两个线程(一个用于渲染,一个用于逻辑)更好,并且不会导致不一致s: 您建议的单线程设计将按如下方式运行:
logic |-----| |-----|
graphics |-----| |-----| and so forth.
但由于您有多个CPU,您应该使用它们。这意味着,在第一次逻辑完成后,图形可以呈现该游戏状态。同时,可以计算下一个逻辑步骤:
logic |-----||-----||-----|
graphics |-----||-----| and so forth.
如您所见,通过这种方式,您的性能几乎可以翻一番:当然会有一些开销,但无论如何,它会比单线程版本快
此外,您可以假设游戏逻辑计算渲染线程所需的时间比计算渲染线程所需的时间要少:这使得线程处理变得非常简单,因为您可以在逻辑线程中等待渲染线程的回调,以向渲染线程提供新的指令,然后计算下一个逻辑步骤。我将尝试以图形方式解释,为什么2线程(一个用于渲染,一个用于逻辑)要好得多,不会导致不一致: 您建议的单线程设计将按如下方式运行:
logic |-----| |-----|
graphics |-----| |-----| and so forth.
但由于您有多个CPU,您应该使用它们。这意味着,在第一次逻辑完成后,图形可以呈现该游戏状态。同时,可以计算下一个逻辑步骤:
logic |-----||-----||-----|
graphics |-----||-----| and so forth.
如您所见,通过这种方式,您的性能几乎可以翻一番:当然会有一些开销,但无论如何,它会比单线程版本快
此外,您可以假设游戏逻辑计算渲染线程所需的时间比计算渲染线程所需的时间要少:这使得线程处理变得非常简单,因为您可以在逻辑线程中等待渲染线程的回调,以向渲染线程提供新的指令,然后计算下一个逻辑步骤。这个问题可能是最好的答案。这个问题可能是最好的答案。说得好,但你只说了显而易见的一点,今天大多数电脑甚至手机都有不止一个内核(你今天在苹果电脑上甚至可以找到12个内核),计算机工程师致力于为我们提供更多的内核。我们,开发人员,以及当时要求最多的游戏开发人员,并不总是能够使用它。我想让人们了解这一点,了解真正的性能是什么,有没有可能有这么多的工程师免费使用内核……P.S SP3有7个内核,它是一个游戏控制台。@Ba