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

本文介绍了分页数据库加载过程中的关键步骤,包括跟踪DatabasePager::DatabaseThread::run()函数、处理HTTP网络文件缓存、加载请求、预编译StateSet与Drawable对象等。此外还讨论了文件格式对加载的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在因为要进行 DatabasePager::DatabaseThread::run()的跟踪,已经在renderingTraversals()流程了。
在这里插入图片描述
整个流程如下
在这里插入图片描述
可见,场景剔除影响到了分页数据库的变化,
在这里插入图片描述
跟踪
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果请求加载的文件来自HTTP网络且已经设置了OSG_FILE_CACHE,则本地文件处理线程将尝试建立同名的文件缓存路径
在这里插入图片描述
每次循环开始时,阻塞数据处理线程,避免无谓的系统消耗,知道updateBlock函数在外面执行才被放行,继续下面的代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到updateBlock()已经调用了,几种情形下可能执行updateBlock()
1,ReadQueue对象中的数据请求列表被修改,例如新的数据加载请求被传入,请求被取出,列表被重置。
在这里插入图片描述

2,ReadQueue对象中的弃用对象列表被修改,例如有新的过期对象被送入,对象被删除,列表被重置。
3,执行了DatabasePager::setDatabasePagerThreadPause函数,当线程被重新启动时,会自动检查线程是否应当被唤醒。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
从当前线程对应的ReadQueue对象(_fileRequestQueue或者_httpRequestQueue)队列中取出并清除第一个数据加载请求(DatabaseRequest),
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上应该是第12天的内容,下边才是第13天的内容,失误了。

下一步就处理这个请求
很多帧之前的请求不处理
在这里插入图片描述
判断请求加载的文件是否来自HTTP网络,且已经设置了系统变量OSG_FILE_CACHE,那么本地文件处理线程将尝试建立同名的文件缓存路径,并将请求转交给网络文件处理线程的_httpRequestQueue处理
在这里插入图片描述
在这里插入图片描述
使用DatabaseThread::dpReadRefNodeFile加载文件,线程安全。加载的过程可长可短,由于是在数据处理线程中完成的,因此不会影响到主场景的渲染。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一切顺利的话,现在所有需要预编译的对象(StateSet与Drawable)都已经记录到图形设备-编译对象的映射表_dataToCompileMap中了。这里OSG将需要编译的对象复制到每个GraphicsContext图形设备的对应映射像中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置是否执行对象的预编译。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将映射表_dataToCompileMap中所有的StateSet和Drawable对象,并依次执行StateSet::compileGLObjects和Drawable::compileGLObjects函数。待编译列表中的对象在预编译完成后会转存到待合并列表中。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
第13天结束了,但是有个问题,那就是pagelod的每个文件名应该是插件可以读取的。而这里是随便写的,所以会出现问题。
在这里插入图片描述
换成.osg格式的用户名放入pagelod
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这次正常加载了,说明pagelod确实要挂接可以读取插件的后缀名
在这里插入图片描述
发现有文件没有找到的错误,确实,没这些文件
在这里插入图片描述
要事先把这些文件写到硬盘里。
在这里插入图片描述

可以看到有文件写入
在这里插入图片描述
现在重新加载
发现只有一个,有误
在这里插入图片描述
更正后ok
这次加载上了
在这里插入图片描述
这次加载的数据有效了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对状态,几何体和kdtree分别apply
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
已经成功加入待合并列表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里,第13天的内容应该结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值