很久没更新了,这段时间, 把osgdb抄了一遍。以前分析的很多都是osgdb的内容,因为不熟啊,所以索性抄一遍。以便把精力集中在osgearth上。
依照惯例,先感谢
学习链接来于https://blog.youkuaiyun.com/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
本文详细介绍了如何在osgEarth中创建和加载.earth插件的过程。首先,通过检查文件扩展名并将其转换为小写,然后在_extAliasMap中查找。如果找不到,会创建新的插件,如osgdb_osgearthd.dll。接着,通过遍历指定的文件夹,根据操作系统类型转换路径格式,搜索并加载插件,如osgearthd.dll。最后,执行动态库中的注册代码,将插件添加到_rwList中。整个过程涉及动态库加载、文件查找和注册等关键步骤。
1614

被折叠的 条评论
为什么被折叠?



