ViewerBase::renderingTraversals()的简易理解

本文探讨了图形渲染过程中相机剔除、上下文渲染的步骤,强调了过期请求数据的处理,并介绍了多线程渲染中如何协调资源。在流程中,从获取场景、摄像机、上下文开始,经过剔除、渲染,到释放上下文,特别提到了双缓存反转和使用栅栏同步技术确保数据完整。对于多线程优化,使用了block()进行阻塞,确保所有操作完成后再继续执行。
摘要由CSDN通过智能技术生成

前两篇说到了camera用来剔除,context用来渲染,多线程渲染就是把cpu尽可能的分配给context,如果土豪的话,在剔除过程也分配cpu。
另外,也要注意到过期请求数据不处理。

当然,首先要获取场景,摄像机和上下文
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在看下摄像机剔除
在这里插入图片描述
可见,camera的剔除是根据renderer的graphicsThread或者camera的线程,或者直接renderer->cull()三种方式

上下文渲染是两步,一个是runOperation,一个是swapBuffers。
在这里插入图片描述
在这里插入图片描述

下一步看看过期的请求数据。如果过期了,那就不再处理了,所以,要先判断
在这里插入图片描述

这里可以看到有个signalBeginFrame(),那么有没有end呢?有的,但是函数为空,所以不考虑。

绘制时已经通过 makeCurrent()绑定了上下文,那么结束时要释放。
在这里插入图片描述

总结下,就是
获取场景、摄像机、上下文->判断是否过期->剔除->渲染->释放上下文。

如果是多线程,就稍微复杂些。放飞自我后还要收回来,再往下一步走,需要用到block()阻塞。用栅栏堵住你们,等你们都汇集全了就可以突破这个栅栏了。

在这里插入图片描述

添加后流程变为
获取场景、摄像机、上下文->判断是否过期->_endDynamicDrawBlock重置->_startRenderingBarrier开启->剔除->场景绘制->_endRenderingDispatchBarrier开启->双缓存反转>_endDynamicDrawBlock开启->释放上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值