查看: 3746|回复: 1

请教osg插件问题

[复制链接]

该用户从未签到

发表于 2009-3-22 14:31:51 | 显示全部楼层 |阅读模式
今天想仔细阅读一下osg如何利用各种插件的。碰到了一些问题。
主要就是关于ogs各种插件是如何在osg里面注册的?
读取一定格式的文件,它是如何找到所需要的插件的。
我在下边这段代码上设置断点。
REGISTER_OSGPLUGIN(osg, OSGReaderWriter)
一路跟过来但是没有看到它是如何到达此处的。
还有
define REGISTER_OSGPLUGIN(ext, classname) \
    extern "C" void osgdb_##ext(void) {} \
    static osgDB::RegisterReaderWriterProxy<classname> g_proxy_##classname;
这段代码怎么讲?  ##代表什么意思?
那位能给说明一下么?
多谢了

大概明白了:
上边的可以翻译成
void osgdb_osg(void){}
static osgDB::RegisterReaderWriterProxy<OSGReaderWriter> g_proxy_OSGReaderWriter;

然后进入
template<class T>
class RegisterReaderWriterProxy
{
    public:
        RegisterReaderWriterProxy()
        {
            if (Registry::instance())
            {
                _rw = new T;
                Registry::instance()->addReaderWriter(_rw.get());
            }
        }

        ~RegisterReaderWriterProxy()
        {
            if (Registry::instance())
            {
                Registry::instance()->removeReaderWriter(_rw.get());
            }
        }
        
        T* get() { return _rw.get(); }
        
    protected:
        osg::ref_ptr<T> _rw;
};

:loveliness:
进行注册。。。。

[ 本帖最后由 kangsite 于 2009-3-22 15:24 编辑 ]

该用户从未签到

发表于 2009-3-22 17:35:07 | 显示全部楼层
嗯,楼主说得不错,大致就是这个过程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表