|
今天想仔细阅读一下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 编辑 ] |
|