单线程游戏和渲染

时间:2012-05-20 11:37:24

标签: game-loop

我正在为2D游戏编写单线程游戏引擎。现在我的游戏循环看起来像这样粗鲁:

  1. 更新游戏逻辑
  2. 更新物理
  3. 处理碰撞
  4. 渲染场景
  5. 我正在使用OpenGL进行渲染。我想知道游戏循环中的'渲染场景'步骤位置。在“渲染场景”步骤的末尾有一个SwapBuffers()调用,因此CPU被阻塞,直到所有渲染完成。你对这个游戏循环有什么看法:

    1. 渲染场景(上一帧)
    2. 逻辑,物理,碰撞
    3. 交换缓冲区
    4. 这种方法将带来更好的CPU和GPU之间的并行性。我是对的吗?

3 个答案:

答案 0 :(得分:2)

我知道这已经得到了回答,但我还有一些事要补充。

你在这里提到的

Render scene (previous frame)
Logic, physics, collisions
Swap buffers

可能会提高帧速率,但也会增加延迟。当用户按下按钮时,结果将首先在最好的情况下超过两帧,最差的情况下最多4帧。

更好的游戏循环是:

-Handle Input, move character etc. (This takes virtually no time)
-Render
-Do the heavy calculations (AI, physics)
-Swap Buffers

答案 1 :(得分:1)

实际上并没有太大的区别。 有很多方法可以让游戏循环,最重要的是将3个主要主题分开。

- 输入
编辑逻辑
-Render

每个人之间的时间总是一样的,因为他们并没有被并行执行。

答案 2 :(得分:1)

我在想,由于渲染在OpenGL中异步发生,在GPU上,当CPU更新逻辑/物理/等时,GPU应该可以完成渲染。交换缓冲区等待直到执行所有命令,因此最后执行此操作可能会提供更好的性能。

唯一可以确定的方法是尝试它。如果CPU是瓶颈,无论如何都无关紧要。 (GPU渲染速度比CPU发送命令更快 - 这可能发生在高FPS,在这种情况下,它通常不被称为游戏玩家的“瓶颈”,因为无论如何FPS都是可接受的)