Skip to content

[提问]关于引擎帧缓冲区的问题 #273

Answered by Ol6rin
523810185 asked this question in Q&A
Discussion options

You must be logged in to vote

同学你好,这里wiki文档之前描述的确实不够准确,已经修改为更明确的内容。

GO内的组件依赖,如A、B、C、D 四个组件依次 tick,B、D两个组件都会读取A组件中的状态,C组件 tick 时会修改A组件的状态(如Motor组件更新了GO的变换)。不做任何处理的情况下会出现B组件使用的A组件的状态是这一帧更新之前的,D组件使用的A组件状态是这一帧更新之后的,会引发逻辑bug。

Piccolo引擎中解决这个问题的方案是帧缓冲区,给A组件的状态提供两个缓冲区,每一帧计算时一个缓冲区作为当帧输入缓冲区,另一个缓冲区作为当帧输出缓冲区,以保证所有依赖D组件的其他组件在这一帧获取的输入数据都是一样的。A组件tick时交换两个缓冲区,并将上一帧的输入缓冲区复制进下一帧的输出缓冲区,以保证A组件在某一帧停止更新时,不会在下一帧跳回至上一帧的状态。另一方面将被依赖的组件安排在了前面,保证不会在一帧当中交换缓冲区。

这里隐含了一个条件是,被依赖的组件组织的时候应该放在前面,否则确实应该在帧尾做交换。

Replies: 1 comment

Comment options

You must be logged in to vote
0 replies
Answer selected by Ol6rin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants
Converted from issue

This discussion was converted from issue #269 on June 22, 2022 05:00.