我正在寻求通过在每次渲染调用之前减少场景图遍历开销来提高性能。我对多线程软件设计不是很有经验,所以在阅读了几篇关于多线程渲染的文章后,我不确定如何解决这个问题:
我的渲染引擎是完全确定的,并根据传入的转换指令在每个新帧上按顺序渲染帧。我目前看到线程场景图更新例程如下所示:
- - - - - - - 中央处理器 - - - - - - - - - - - - - - - - - - --|--------GPU--------|----帧数----|
更新第 0 帧变换(生成线程) | GL 渲染调用 | 第 0 帧
更新第 1 帧变换(生成线程)| GL 渲染调用 | 第一帧
更新第 2 帧变换(生成线程)| GL 渲染调用 | 第 2 帧
………………
_
…………………………………………………………………………
在第一次绘制调用之前,我开始在单独的步骤中更新第一个(第 1 帧)帧并继续进行渲染调用。在该调用结束时,我启动新线程以更新第 2 帧,检查第 1 帧的线程是否已完成以及是否是的,我调用下一个渲染调用。依此类推。这就是我看到这种情况发生的方式。我有两个问题:
1.设计这种系统是否正确(简单)的方式?
2.由于场景图更新线程没有与下一次渲染调用的开始同步完成更新,渲染循环停止的可能性有多大?
我知道这里的一些人会说这取决于特定的场景图树复杂性,但我想知道它在现实中通常是如何进行的以及这种设计的主要缺点是什么/