android - 如何在 opengl 游戏循环中使用双核?

标签 android opengl-es core-graphics game-loop

我的问题是关于 opengl 中的游戏循环设计。

我相信游戏循环可以通过 3 个主要步骤来消除

  1. 接受输入 - 它可能来自用户点击屏幕或系统警报,或其他任何内容。
  2. 做逻辑
  3. 更新 View

为简单起见,我们只关注第 2 步和第 3 步。

我认为将它们并行运行或将它们混合到一个步骤中是错误的。 我举个例子。

Lats 说你正在创建一个 war 游戏,你需要在屏幕上绘制 100 个战斗的士兵,逻辑将是更新他们的位置,更新背景区域,然后你需要绘制结果。在更新另一名士兵的位置之前,您不能开始绘制一名士兵。

所以根据这个简单的步骤,很明显第2步和第3步需要同步一些,并且第2步必须在第3步之前完成。

现在告诉我如何在多个线程和多个进程上运行游戏循环? opnegl 使用多核吗?怎么办?

编辑:使用多线程的一种方法是预先计算游戏逻辑,或者换句话说,使用向量。但是向量有两个很大的缺点,这使得它们几乎不被推荐使用。

  1. 有时你不想改变你的向量,所以你做了很多计算但你不会使用它们
  2. 在大多数情况下,您试图达到 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/

相关文章:

android - Tegra 3 设备上的 OpenGL 扩展

android - GLSL - 用于图像处理/混合的 fragment 着色器

android - 绘制基本三角形时的拼图效果

ios - 平滑 Core Graphics 曲线

iphone - 将 CGColorRef 作为指针存储在 NSArray 中

java - Android OnKeyListener 未注册 Enter 和搜索键。

android - 如何在 Flutter 中删除 Firebase 云消息传递 token

iphone - 使用返回值管理 CoreGraphics/CoreText 中的内存

java - 更改默认布局时应用程序崩溃说,不幸的是应用程序已停止

android - 让 Kotlin Serializer 与 Retrofit 一起工作