diff --git a/src/osgPlugins/osg/CameraNode.cpp b/src/osgPlugins/osg/CameraNode.cpp index a0fac32e3..fbf43744c 100644 --- a/src/osgPlugins/osg/CameraNode.cpp +++ b/src/osgPlugins/osg/CameraNode.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -64,6 +65,15 @@ bool CameraNode_readLocalData(Object& obj, Input& fr) } } + if (fr.matchSequence("transformOrder %w")) + { + if (fr[1].matchWord("PRE_MULTIPLE")) camera.setTransformOrder(osg::CameraNode::PRE_MULTIPLE); + else if (fr[1].matchWord("POST_MULTIPLE")) camera.setTransformOrder(osg::CameraNode::POST_MULTIPLE); + + fr += 2; + iteratorAdvanced = true; + } + Matrix matrix; if (readMatrix(matrix,fr,"ProjectionMatrix")) { @@ -77,6 +87,16 @@ bool CameraNode_readLocalData(Object& obj, Input& fr) iteratorAdvanced = true; } + if (fr.matchSequence("renderOrder %w")) + { + if (fr[1].matchWord("PRE_RENDER")) camera.setRenderOrder(osg::CameraNode::PRE_RENDER); + else if (fr[1].matchWord("NESTED_RENDER")) camera.setRenderOrder(osg::CameraNode::NESTED_RENDER); + else if (fr[1].matchWord("POST_RENDER")) camera.setRenderOrder(osg::CameraNode::POST_RENDER); + + fr += 2; + iteratorAdvanced = true; + } + return iteratorAdvanced; } @@ -98,8 +118,23 @@ bool CameraNode_writeLocalData(const Object& obj, Output& fw) fw.writeObject(*camera.getViewport()); } + fw.indent()<<"transformOrder "; + switch(camera.getTransformOrder()) + { + case(osg::CameraNode::PRE_MULTIPLE): fw <<"PRE_MULTIPLE"< bool readMatrix(osg::Matrix& matrix, osgDB::Input& fr, const char* keyword) { bool iteratorAdvanced = false; - if (fr[0].matchWord(keyword) && fr[1].matchWord("{")) + if (fr[0].matchWord(keyword) && fr[1].isOpenBracket()) { + osg::notify(osg::NOTICE)<<"found keyword "<