【发布时间】:2013-04-28 20:43:44
【问题描述】:
我正在寻求通过减少每次渲染调用之前的场景图遍历开销来提高性能。我对多线程软件设计不是很有经验,所以在阅读了关于多线程渲染的 couple 文章后,我不确定如何解决这个问题:
我的渲染引擎是完全确定性的,并根据传入的转换指令在每个新帧上按顺序渲染帧。我目前看到线程场景图更新例程如下所示:
-------------CPU-------------------------------- --|--------GPU--------|----帧数----|
更新第 0 帧变换(生成线程)| GL 渲染调用 |第 0 帧
更新第 1 帧变换(生成线程)| GL 渲染调用 |第一帧
更新第 2 帧变换(生成线程)| GL 渲染调用 |第 2 帧
...
.......
.......
在第一次绘制调用之前,我开始在单独的步骤中更新第一个(第 1 帧)帧并继续进行渲染调用。在该调用结束时,我启动新线程以更新第 2 帧,检查第 1 帧的线程是否为完成,如果为真,我调用下一个渲染调用。依此类推。 这就是我看到这种情况发生的方式。我有两个问题:
1.设计这种系统的方法是否正确(简单)?
2.由于场景图更新线程未与下一次渲染调用的开始同步完成更新,渲染循环停止的可能性有多大?
我知道这里的一些人会说这取决于特定的场景图树复杂性,但我想知道它在现实中通常如何进行以及这种设计的主要缺点是什么/
【问题讨论】:
-
人们说这取决于复杂性,因为它确实取决于复杂性。没有“通常”的情况,因为它依赖的东西太多了。如果您尝试更新一个巨大而复杂的场景,那么您更有可能必须等待它完成更新才能进行绘制。但是,它(几乎)总是比简单地使用单线程方法更快,所以我想说这真的没关系。
-
是的,我明白了,这是有道理的......
标签: multithreading opengl