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

2023-11-04

先看看总体
在这里插入图片描述
流程走到了更新分页数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分页数据库的数据流图
在这里插入图片描述
先找上图的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天,正式分页数据库线程跑起来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试最长的一帧(第12天) 的相关文章

  • 第二天(七)osg::Object* readObjectFile_const std::string& filename_const ReaderWriter::Options* options

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • 调试最长的一帧(第19天)

    这个主要是理论了 抄一抄 最常用到场景管理方式时场景节点树结构 场景树顶点的叶节点osg Geode包含了各种需要渲染的几何体的顶点和渲染状态信息 而组节点osg Group及其派生出的各种特殊功能节点则作为场景树的各个枝节节点 它们也可以
  • osg传递数组到shader,(以qedl为例)

    一 对float类型的数组 osg ref ptrosg FloatArray m dampingPixelDist 赋值 void ccBilateralFilter updateDampingTable m dampingPixelDi
  • qedl中的fixDepth()简化

    如果将PerspectiveMode的设置为1 则会传递zNear和Zfar 在fixDepth 中 而将perspectiveMode 0 则大大简化fixDepth float fixDepth float depth return c
  • osg fbo(一),生成颜色缓冲区图片

    由于工作需要 重新捡了下shader 很明显 fbo是重中之重 好记性不如烂笔头 先记录下 1 生成一个颜色纹理 为了省事 可以将纹理宽高 屏幕宽高 osg ref ptr
  • 调试最长的一帧(第七天)

    先看看总体进展 eventTraversal函数的任务 在每帧仿真过程中 取出已经发生的所有事件 摒弃哪些对场景不会有助益的 比如 在视口外的鼠标事件 依次交付给各个事件处理器 最后清空现有的事件队列 等待下一帧的到来 在View的几个成员
  • SingleThreaded是如何进入cull_draw()的?

    正如以前所说 单线程模式是通过cull draw 进行剔除绘制的 如何进入的呢 其实很简单 逆推下 最后 回到梦开始的地方
  • 调试最长的一帧(第22天)

    先看看全流程 先抄一抄节点访问器NodeVisitor的工作原理 当我们执行节点的accept NodeVisitor nv 函数时 当前节点自动调哟个NodeVisitor apply方法 将自身的信息传递给节点访问器nv 由它负责执行相
  • 调试最长的一帧(第八天)

    先看看总体进度 先获取所有的图形上下文 然后进行checkEvents 请求分发消息并通过takeEvents 获取交互事件 再交由GUIEventHandler处理交互事件 中间的步骤 在checkeEvents里面 消息分发函数 消息处
  • ViewerBase::renderingTraversals()的简易理解

    前两篇说到了camera用来剔除 context用来渲染 多线程渲染就是把cpu尽可能的分配给context 如果土豪的话 在剔除过程也分配cpu 另外 也要注意到过期请求数据不处理 当然 首先要获取场景 摄像机和上下文 现在看下摄像机剔除
  • 调试最长的一帧(第16天)

    终于到达绘制了 先看总体流程阶段 然而 从并行堆栈上看 已经有渲染线程开启了 跟着电子书走 先是介绍 抄一抄 加深印象 osg的场景渲染过程可以简单地分为三个阶段 用户APP阶段 更新用户数据 负责场景对象的运动和管理等 筛选cull阶段
  • 分页数据库其实就是两个生产者与消费者

    再次看osg 最长的一帧 因为分页数据库适合于PagedLod和ProxyNode 一般调试还得准备数据 比较麻烦 突然想起 和我以前封装的引擎类似 分页数据库就是几个生产者与消费者 回过头来看这个图 看似复杂 实际上并不复杂 如果简化 只
  • 调试最长的一帧(第20天)

    电子书上给了个例子 抄一抄 加深下印象 也验证下以前的想法对不对 对于场景实例 其中 ss 加上数字代号来标识这些Stateset对象 后面括号中的两个参数分别表示setRenderBinDetails的两个设置项 表示空字串 R 表示 R
  • 第二天(八)osg::Object* readObjectFile(const std::string& filename,const ReaderWriter::Options* options)

    目前流程是 osgViewer viewBase frame viewerInit 创建帧事件 并将漫游器与事件和视口相关联 gt osgViewer Viewer ViewerInit gt osgViewer View Init gt
  • osgfbo(六)从pass的角度考虑,改写fbo(二)

    什么是pass 这个问题 看似简单 也让我头疼 看了osgdefered pass定义为osg Camera 杨石兴的osg视频教程定义为osg Group 我认为一个passRoot可以定义为一个Group 包含三部分 到目前pass为止
  • 调试最长的一帧(第三天)

    先看看整体 以及进度 第三天的内容 主要讲根据窗口参数建立图形上下文设备 建立一个全屏显示的图形设备 这个WindowingSystemInterface是纯虚基类 也就是下一步就要父类调用子类了 获取或新建显示设置 各成员变量 成员变量的
  • 调试最长的一帧(第21天)

    看看全流程 主要讲sceneview cull 跟过去 重点在cullstage 状态树与渲染树的构建都是在pushStateSet和popStateSet函数中完成的 而CullVisitor apply函数 在遍历节点时调用 则负责根据
  • 调试最长的一帧(第十天)

    依照惯例 先看总体流程 到了更新回调 一边抄一边记忆 OSG更新回调的作用与事件回调有类似之处 由专门的访问器对象 updateVisitor负责场景图形更新遍历 所有的节点和Drawable几何体对象都可以使用setUpdateCallb
  • osg fbo(四),将颜色缓冲区图片中的牛通过shader变绿

    osg fbo 三 中 把整个屏幕变绿了 因为是把shader添加到了颜色缓冲区图片上了 如果只想把牛变绿 就需要把shader添加到原始场景根中 即 osg ref ptr
  • osgFBO(十二)深度纹理与颜色纹理混合

    前面涉及到了深度纹理和颜色纹理 由于qedl中 也要两者混合 所以 要考虑到两者混合 这里只是简单将其相加 一 设置纹理 采样颜色纹理 osg ref ptrosg Texture2D texColor createFloatRectang

随机推荐

  • SpringBoot整合Dubbo

    Dubbo简介 Dubbo是Alibaba开源的分布式服务框架 它最大的特点是按照分业务的架构 使用这种方式可以使各个业务之间解耦合 或者最大限度地松耦合 简单来说Dubbo 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SO
  • nsight 初级使用指南

    1 安装 没有什么特殊设置 2 打开vs 编译生成你需要分析的 exe 在vs上方菜单 有nsight menu choose Start Graphics Debugging 3 在弹出对话框中选择 ok或connect unsecure
  • 云服务器文件传送,云服务器文件传送

    云服务器文件传送 内容精选 换一换 ISO是一种光盘映像文件 通过特定的压缩方式 将大量的数据文件统一为一个后缀名为iso的映像文件 ISO文件可以理解为从光盘中复制出来的数据文件 所以ISO文件无法直接使用 需要利用一些工具进行解压后才能
  • 熟悉数据结构(一)【JavaScript】

    文章目录 1 剑指 Offer 05 替换空格 2 剑指 Offer 06 从尾到头打印链表 3 剑指 Offer 09 用两个栈实现队列 4 剑指 Offer 20 表示数值的字符串 5 剑指 Offer 24 反转链表 1 剑指 Off
  • 114. 二叉树展开为链表-二叉树

    https leetcode cn com problems flatten binary tree to linked list 解题思路 本题观察最后链表从头至尾的顺序正好是前序遍历的结果 所以考虑将前序遍历结果进行存储然后再进行相应的
  • win10注册mysql服务_win10下搭建MySQL服务

    1 下载MySQL安装包 滑动到页面底部 官网提供了不同电脑位数 32 64位 的下载版本 我的电脑是win10 64位的 选择对应版本下载解压包 如果你没有注册登录下载页面时 官网会提示你注册一个账号进行下载 当然你也可以选择just s
  • 【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC,拥挤距离与皮尔逊系数法结合实现回归与分类预测

    MATLAB第63期 基于MATLAB的改进敏感性分析方法IPCC 拥挤距离与皮尔逊系数法结合实现回归与分类预测 思路 考虑拥挤距离指标与PCC皮尔逊相关系数法相结合 对回归或分类数据进行降维 通过SVM支持向量机交叉验证得到平均指标 来判
  • 如何炸开(分解)CAD多重插入块

    新建一个空白文本文档 然后将下面 红色 代码复制到里面并保存 将文件名以及后缀名改成unlk lsp defun c unlk en ent setq en entsel n请选择被加密的图形 if en if cdr assoc 0 se
  • ES按资源类型统计个数

    一 目标 统计各类型资源的个数 输出详细报表 http 10 10 6 225 9200 dsideal db t resource info mapping properties RESOURCE FORMAT type text fie
  • Qt编写的遮罩层窗体

    PS 亲测有效 转 http www qtcn org bbs read htm tid 62394 html 最近接了个私活 需要在弹框的窗体背后遮罩原有主窗体 使得突出显示弹窗窗体 突然想到之前写过一个全局截屏的东东 原理一致 拿来改改
  • 转 C++输入输出文件流

    https blog csdn net qq 29924041 article details 74360461 C 学习 在C 中的文件输入和文件输出 简介 在C语言中 我们有fread和fwrite用于文件的输入和输出 在java中我们
  • Hands-On Hyperledger Fabric——Raft共识算法

    文章目录 分布式系统的Raft算法 选举阶段 选举规则与过程 选举的特殊情况 网络分区情况的处理 成员变更 数据同步阶段 日志与状态机 提交阶段的事务一致性问题 租约解决脑裂 总结 本文参考Raft算法实现动画 在fabric1 4 1的版
  • python爬虫之爬取微信公众号文章中的图片

    python爬虫之爬取微信公众号文章中的图片 实现的功能 需要用到的库 需要对html一些标签有一定的了解 代码设计思想 源代码 提示 实现的功能 输入想要爬取微信公众号文章的链接 爬取成功后会输出文件夹已经创建 代码创建位置在D test
  • H3C 三层交换机 设置俩vlan不能相互通讯,只能访问某个端口,且其中一个vlan不能上网...

    三层交换机 S5500与 路由器ER5200G2 相关配置 设定3个VLAN VLAN10 VLAN20 VLAN30 VLAN10与VLAN30相互互通 但是与VLAN20不通 项目需求三层交换机 创建三个VLAN vlan 10 192
  • matlab求系统稳定时k的范围,Matlab大作业

    一 通过举例说明运用MATLAB 判别控制系统稳定的所有方法 稳定是控制系统是否能进行工作的首要条件 一般来说 稳定性成为区分系统是否有用的标志 从实际应用的角度来看 可以认为只有稳定的系统才有用 而线性系统稳定的充分必要条件是 特征方程的
  • vscode配置远程ssh环境

    安装 Oracle VM VirtualBox 安装ubuntu ubuntu上安装ssh sever 百度搜索 ubuntu 18 04上安装ssh sever 58条消息 安装Ubuntu18 04并配置ssh服务 ubuntu18 0
  • WIN7 64位 VS2013下载

    下载网址 https msdn itellyou cn 复制到迅雷进行下载
  • SVG脚本编程介绍

    SVG脚本编程介绍 一 人气 13720 Svg脚本编程简介 一 本文主要介绍SVG的脚本编程 并分别给出放大 缩小 查询 鼠标事件等实例 一 SVG简介 SVG 全称为Scalable Vector Graphics 可伸缩矢量图形 它是
  • stm32之DS18B20

    DS18B20与stm32之间也是通过单总线进行数据的传输的 单总线协议在DHT11中已经介绍过 虽说这两者外设都是单总线 但时序电路却很不一样 DS18B20是更为麻烦一点的 DS18B20 举例 原码补码反码转换 原码反码补码转换 王小
  • 调试最长的一帧(第12天)

    先看看总体 流程走到了更新分页数据库 分页数据库的数据流图 先找上图的4个成员变量 上图中 左侧的图框表示数据的检索和输入 中间的白色图框表示用于数据存储的内存空间 而右边的图框表示存储数据的输出 此外 蓝绿色图框表示可以在DataBase