我的问题是关于 opengl 中的游戏循环设计。
我相信游戏循环可以通过 3 个主要步骤来消除
- 接受输入 - 它可能来自用户点击屏幕或系统警报,或其他任何内容。
- 做逻辑
- 更新 View
为简单起见,我们只关注第 2 步和第 3 步。
我认为将它们并行运行或将它们混合到一个步骤中是错误的。 我举个例子。
Lats 说你正在创建一个 war 游戏,你需要在屏幕上绘制 100 个战斗的士兵,逻辑将是更新他们的位置,更新背景区域,然后你需要绘制结果。在更新另一名士兵的位置之前,您不能开始绘制一名士兵。
所以根据这个简单的步骤,很明显第2步和第3步需要同步一些,并且第2步必须在第3步之前完成。
现在告诉我如何在多个线程和多个进程上运行游戏循环? opnegl 使用多核吗?怎么办?
编辑:使用多线程的一种方法是预先计算游戏逻辑,或者换句话说,使用向量。但是向量有两个很大的缺点,这使得它们几乎不被推荐使用。
- 有时你不想改变你的向量,所以你做了很多计算但你不会使用它们
- 在大多数情况下,您试图达到 60+ FPS,这意味着游戏循环需要 16 毫秒,切换线程需要某种同步,任何同步都不利于性能,据我所知,即使是简单的处理程序。 android 中的 post()(只需将任务添加到队列以在其他线程上运行它)可能最多需要 3 毫秒(帧速率时间的 18%),因此除非您的计算需要更长的时间,否则不要这样做!目前,我还没有发现任何事情需要花费如此多的时间。
最佳答案
Now tell me how it is possible to run game loop on more then one thread
多核计算的思想是并行化,即将计算密集型任务拆分为可以并行处理的独立工作集。正如您自己发现的那样,游戏的并行化空间非常小。
在游戏中使用多核的通常方法是将 I/O 与逻辑操作并行化。 IE。在一个线程中进行所有网络和用户交互,在另一个线程中进行 AI 和场景管理。声音通常也会被平行化。
Does OpenGL use multiCore? How?
OpenGL 规范没有指定这一点。但是一些实现可能会选择使用多个内核。尽管这不太可能。为什么?因为它会产生不必要的缓存管理开销。
关于android - 如何在 opengl 游戏循环中使用双核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445585/