很久没更新了,这段时间, 把osgdb抄了一遍。以前分析的很多都是osgdb的内容,因为不熟啊,所以索性抄一遍。以便把精力集中在osgearth上。
依照惯例,先感谢
学习链接来于https://blog.csdn.net/hankern/article/details/83933347
好好学习,好好调试就是对博主最大的尊重了。博主都已经列出来了,再不好好调试学习,就说不过去了。
继续调试。
这节主要是两部分
1,如何创建插件
2,如何加载插件。
这里的插件就是.earth。
先看1,如何创建插件,调试过去
上节也是调到了这里createLibraryNameForFile()
这里就是看如何创建.earth加载插件
找扩展名
找到了扩展名earth,先归为小写
如果在_extAliasMap里,则直接创建
_extAliasMap的内容有什么呢?
从下面可以发现是如何添加的
什么时候添加的?先设置个断点。回头再看。
然后就继续往下走,
没有找到,则创建
组合起来
接下来就是如何加载
先在_dList里寻找,这里是空
然后加载插件全名
先找文件夹
在这些文件夹里找插件
查看是unix还是windows形式,即左划还是右双斜
转换成windows形式
格式转换后,再次进入该函数,
查看是否插件存在
下一步就是进行加载osgearthd.dll了
执行动态库中的注册代码
注册代码是个静态函数的宏
及执行RegisterReaderWriterProxy的构造函数
这个T是个模板,加载的是.osgdb_earthd.dll.
然后添加到_rwList中
_rwList有很多,是什么时候加载的呢?重新启动
先看以前的_extAliasMap,初始化时机
总结下,这节主要是进行了创建osgdb_osgearthd.dll,并且加载。
再次感谢@hankern