前两篇说到了camera用来剔除,context用来渲染,多线程渲染就是把cpu尽可能的分配给context,如果土豪的话,在剔除过程也分配cpu。
另外,也要注意到过期请求数据不处理。
当然,首先要获取场景,摄像机和上下文
现在看下摄像机剔除
可见,camera的剔除是根据renderer的graphicsThread或者camera的线程,或者直接renderer->cull()三种方式
上下文渲染是两步,一个是runOperation,一个是swapBuffers。
下一步看看过期的请求数据。如果过期了,那就不再处理了,所以,要先判断
这里可以看到有个signalBeginFrame(),那么有没有end呢?有的,但是函数为空,所以不考虑。
绘制时已经通过 makeCurrent()绑定了上下文,那么结束时要释放。
总结下,就是
获取场景、摄像机、上下文->判断是否过期->剔除->渲染->释放上下文。
如果是多线程,就稍微复杂些。放飞自我后还要收回来,再往下一步走,需要用到block()阻塞。用栅栏堵住你们,等你们都汇集全了就可以突破这个栅栏了。
添加后流程变为
获取场景、摄像机、上下文->判断是否过期->_endDynamicDrawBlock重置->_startRenderingBarrier开启->剔除->场景绘制->_endRenderingDispatchBarrier开启->双缓存反转>_endDynamicDrawBlock开启->释放上下文。