目前流程是:
osgViewer::viewBase:: frame()
{
viewerInit();[
//创建帧事件,并将漫游器与事件和视口相关联
-> osgViewer::Viewer::ViewerInit()
-> osgViewer::View::Init();
->(1)osgGA::EventQueue::createEvent();
(2)osgGA::MatrixManipulator::Init();
->(2.1)各种漫游器::init()
]
isRealized();[
//获取图形上下文数组。再遍历上下文数组,只要有一个准备好就Ok
-> osgViewer::Viewer::isRealized();
->(1)osgViewer::Viewer::getContexts().
->(1.1)osg::camera::getGraphicsContext()
->(1.2)osg::View::getNumSlaves()
->(1.3)osg::View::getSlave()
->(1.4)LessGraphicsContext()->osg::GraphicContext::getTraits()
->(2)osg::GraphicContext::isRealized()
->(2.1)->(1)
->(2.2)osg::GraphicsContext::isRealized()
->osg::GraphicsContext::isRealizedImplementation()
->(2.2.1)osgViewer::GraphicsWindow::isRealizedImplementation()
->(2.2.1.1)osgViewer:: GraphicsWindowWin32 ::isRealizedImplementation()
->(2.2.1.2) osgViewer::GraphicsWindowEmbedded ::isRealizedImplementation()
->(2.2.2)osgViewer::PixelBufferWin32::isRealizedImplementation()
-
]
realize(); [
//建立视口和相关的线程
->osgViewer::Viewer::realize()
->(1) osgViewer::Viewer::setCameraWithFocus()
->(2)osgViewer::Viewer::getContexts()
->(3)osgViewer::Viewer::readConfiguration()
->(3.1)osgDB::readObjectFile(const std::string& filename)
->(3.1.1)osg::Object* readObjectFile(const std::string& filename,const ReaderWriter::Options* options);
->(3.1.2)osgDB::Registry* osgDB::Registry::instance(bool erase);
->(3.1.3)ReaderWriter::Options* osgDB::getOptions();
->(3.2)osgViewer::Viewer::take()
->(4)待续
]
advance(simulationTime);
eventTraversal();
updateTraversal();
renderingTraversals();
}
接下来分析,从文件中读取osg::object*指针,有效则获取osg::object指针,无效则报错
Object* osgDB::readObjectFile(const std::string& filename,const ReaderWriter::Options* options)
{
ReaderWriter::ReadResult rr = Registry::instance()->readObject(filename,options);
if (rr.validObject()) return rr.takeObject();
if (rr.error()) notify(WARN) << rr.message() << std::endl;
return NULL;
}
涉及到了几个函数
ReaderWriter::ReadResult readObject(const std::string& fileName,const ReaderWriter::Options* options);
ReaderWriter::ReadResult::validObject()
ReaderWriter::ReadResult::takeObject()
ReaderWriter::ReadResult::error()
ReaderWriter::ReadResult::message()
目前流程是:
osgViewer::viewBase:: frame()
{
viewerInit();[
//创建帧事件,并将漫游器与事件和视口相关联
-> osgViewer::Viewer::ViewerInit()
-> osgViewer::View::Init();
->(1)osgGA::EventQueue::createEvent();
(2)osgGA::MatrixManipulator::Init();
->(2.1)各种漫游器::init()
]
isRealized();[
//获取图形上下文数组。再遍历上下文数组,只要有一个准备好就Ok
-> osgViewer::Viewer::isRealized();
->(1)osgViewer::Viewer::getContexts().
->(1.1)osg::camera::getGraphicsContext()
->(1.2)osg::View::getNumSlaves()
->(1.3)osg::View::getSlave()
->(1.4)LessGraphicsContext()->osg::GraphicContext::getTraits()
->(2)osg::GraphicContext::isRealized()
->(2.1)->(1)
->(2.2)osg::GraphicsContext::isRealized()
->osg::GraphicsContext::isRealizedImplementation()
->(2.2.1)osgViewer::GraphicsWindow::isRealizedImplementation()
->(2.2.1.1)osgViewer:: GraphicsWindowWin32 ::isRealizedImplementation()
->(2.2.1.2) osgViewer::GraphicsWindowEmbedded ::isRealizedImplementation()
->(2.2.2)osgViewer::PixelBufferWin32::isRealizedImplementation()
-
]
realize(); [
//建立视口和相关的线程
->osgViewer::Viewer::realize()
->(1) osgViewer::Viewer::setCameraWithFocus()
->(2)osgViewer::Viewer::getContexts()
->(3)osgViewer::Viewer::readConfiguration()
->(3.1)osgDB::readObjectFile(const std::string& filename)
->(3.1.1)osg::Object* readObjectFile(const std::string& filename,const ReaderWriter::Options* options);
->(3.1.1.1)ReaderWriter::ReadResult readObject(const std::string& fileName,const ReaderWriter::Options* options);
->(3.1.1.2)ReaderWriter::ReadResult::validObject()
->(3.1.1.3)ReaderWriter::ReadResult::takeObject()
->(3.1.1.4)ReaderWriter::ReadResult::error()
->(3.1.1.5)ReaderWriter::ReadResult::message()
->(3.1.2)osgDB::Registry* osgDB::Registry::instance(bool erase);
->(3.1.3)ReaderWriter::Options* osgDB::getOptions();
->(3.2)osgViewer::Viewer::take()
->(4)待续
]
advance(simulationTime);
eventTraversal();
updateTraversal();
renderingTraversals();
}