我正在为2D游戏编写单线程游戏引擎。现在我的游戏循环看起来像这样粗鲁:
我正在使用OpenGL进行渲染。我想知道游戏循环中的'渲染场景'步骤位置。在“渲染场景”步骤的末尾有一个SwapBuffers()调用,因此CPU被阻塞,直到所有渲染完成。你对这个游戏循环有什么看法:
这种方法将带来更好的CPU和GPU之间的并行性。我是对的吗?
答案 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都是可接受的)