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

本文围绕OSG分页数据库展开,介绍了其数据流图,包括数据检索、存储和输出等部分,以及不同颜色图框代表的工作线程。详细阐述了线程处理的四项工作,如删除过期场景数据、获取新数据加载请求等。还提及了分页数据库的数据结构、线程设置等,最后准备让分页数据库线程正式运行。

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

先看看总体
在这里插入图片描述
流程走到了更新分页数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分页数据库的数据流图
在这里插入图片描述
先找上图的4个成员变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图中,左侧的图框表示数据的检索和输入;中间的白色图框表示用于数据存储的内存空间,而右边的图框表示存储数据的输出。此外,蓝绿色图框表示可以在DataBaseThread线程中完成的工作,而橙色图框表示由线程之外的函数完成的工作。
从上图可以看出osg的分页数据库使用线程处理的事情,抄一抄。
1,删除过期的场景数据,为了避免场景渲染的延迟,所以不在仿真循环中进行,而是采用线程来处理。过期对象的统一删除工作在这里完成,而更新遍历则负责将检索到的对象送入相应的过期对象列表。
2,获取新的数据加载请求。请求加载的可能是新的数据信息,也可能是已有的场景数据(曾经从当前页面中去除,更新又回到当前页面中),可能是本地的数据文件,也可能是来自网络,并需要把下载的数据缓存到本地磁盘。这些都需要在线程中一一加以判别。
3,编译加载的数据。有些数据如果提前编译可以有效地提升效率,例如为几何体数据创建显示列表(Display List),以及将纹理对象提前加载到纹理内存;虽然OSG同样可以在渲染时根据用户需要执行这些工作,但是势必会造成帧的延迟。如果系统配置足够高,也可以用图形设备线程GraphicsContext::getGraphicsThread完成。
4,将加载的数据合并至场景图形。将读入的数据先保存在一个列表中,并且由仿真循环负责获取和合并新节点。

看看分页数据库的几个数据结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见,这个编译对象是stateset和drawable的对应关系。
看看readwriter::options的结构体和成员变量,看看大概有什么
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
_databaseThreads有两个线程,分别处理本地文件的数据队列和网络数据队列
在这里插入图片描述
从文件名判断是本地数据还是网络数据
在这里插入图片描述
来自网络的数据也可以缓存到本地,通过设置环境变量OSG_FILE_CACHE的方法
在这里插入图片描述

现在万事俱备,可以调试进去了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行的话,应该用Pagelod了,
在这里插入图片描述
在这里插入图片描述
这次不为空
在这里插入图片描述
在这里插入图片描述
没有到期需要删除的
在这里插入图片描述
合并列表为空
在这里插入图片描述
触发osgDB::DatabasePager::DatabaseThread::run (),实际上还是在renderTraverse()时,
在这里插入图片描述
在这里插入图片描述
可以跟踪一波了。
在这里插入图片描述

准备第13天,正式分页数据库线程跑起来。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值