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

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

先看总体

依然在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有问题,所以就不从这里调试了。

 

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

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值