欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

调试最长的一帧(第五天)

程序员文章站 2022-03-22 15:40:10
调着比较上瘾了。没第三天那么费劲了。先看总体依然在realize()里面,不过第五天就要把这个解决了。继续跟过去...

调着比较上瘾了。没第三天那么费劲了。

先看总体

调试最长的一帧(第五天)

依然在realize()里面,不过第五天就要把这个解决了。

继续跟过去,遍历所有图形上下文设备,对于每个图像上下文指针gc,判断是否为图形窗口类,负责把鼠标焦点转到当前窗口

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

启动OSG内部定时器并开始计时
调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

找到当前视景器和所有的图形上下文设备的事件队列_eventQuue,并设定它们的启动时刻为当前时间

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

下面是关键,设置线程模型

调试最长的一帧(第五天)

 

电子书上介绍了四种线程模型。

调试最长的一帧(第五天)

1,SingleThreaded: 单线程,任何配置下可以使用,osg不会创建任何新线程来完成场景的筛选和渲染                                                           (配置低)

2,CullDrawThreadPerContext:为每个图形上下文创建一个图形线程并行渲染+分配到多CPU(如果有)+每帧结束前强制同步所有线程  (应用范围有限)

3,DrawThreadPerContext:为每个图形上下文创建一个图形线程并行渲染+分配到多CPU(如果有)+在当前帧所有线程完成前开始下一帧

4,CullThreadPerCameraDrawThreadPerContext:为每个图形上下文和每个摄像机创建图形线程并行渲染+分配到多CPU(如果有)+在当前帧所有线程完成前开始下一帧(最优)

 

电子书上介绍了单线程多处理器系统

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

先设置下线程模型为单线程,

调试最长的一帧(第五天)

好了,OK了

调试最长的一帧(第五天)

如果线程运行,则停止线程,因为这里是初始化,还在realize()

这里根据cpu的亲缘性,cpu0处理用户更新、筛选和渲染等一切事务,而使用cpu1来处理场景的两个分页数据库(DatabasePager)线程(分别用于处理本地和网络的场景数据)

调试最长的一帧(第五天)

我的是8核的,五年前的老机子

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

thread=NULL,因为局部存储区还没存东西。

调试最长的一帧(第五天)

调试最长的一帧(第五天)

获取当前视景区的场景,含图形根节点,分页数据库和分页图像库 。viewer单场景,compositer可能包含多场景

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

再熟悉了下各个类,

拉回来,以上是ViewerBase::setUpThreading()在单线程的情况,再看看多线程的情况,进入else

调试最长的一帧(第五天)

 

由于后面电子书上有,所以,只粗略看下,暂时不展开

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

继续往下走,到了realize()的尾声

 

调试最长的一帧(第五天)

 

将注释去掉,启用编译上下文

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

 

 

调试最长的一帧(第五天)

 

 

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

 

调试最长的一帧(第五天)

调试最长的一帧(第五天)

调试最长的一帧(第五天)

 

调试最长的一帧(第五天)

 

这里不做扩展了,因为不是主要流程。也说了会崩溃,

实际上,已经崩溃了

调试最长的一帧(第五天)

 

 

pbuffer有问题,所以就不从这里调试了。

调试最长的一帧(第五天)

 

第五天的内容就要结束了,

 

 

 

本文地址:https://blog.csdn.net/directx3d_beginner/article/details/111022785