--- q:/_xxx/Comp/intern/opensg/Source/System/GraphOp/OSGDotFileGeneratorGraphOp.cpp 2013-09-09 10:01:21.121446700 +0200 +++ d:/_xxx/Comp/intern/opensg/Source/System/GraphOp/OSGDotFileGeneratorGraphOp.cpp 2013-10-08 13:23:21.972362300 +0200 @@ -57,6 +57,7 @@ #include "OSGLightChunk.h" #include "OSGChunkMaterial.h" #include "OSGSwitchMaterial.h" +#include "OSGMultiPassMaterial.h" #include "OSGGeometry.h" /*! \class OSG::DotFileGeneratorGraphOp @@ -317,11 +318,12 @@ { CloseGroup(); - HandleMaterial (core, core_info); - HandleLight (core, core_info); - HandleTransform (core, core_info); - HandleGeometry (core, core_info); - HandleAttachment(core, core_info); + HandleMaterial (core, core_info); + HandleLight (core, core_info); + HandleVisitSubTree (core, core_info); + HandleTransform (core, core_info); + HandleGeometry (core, core_info); + HandleAttachment (core, core_info); } HandleAttachment(node, node_info); @@ -382,6 +384,7 @@ HandleChunkMaterial(mat, mat_info); HandleSwitchMaterial(mat, mat_info); + HandleMultiPassMaterial(mat, mat_info); } } @@ -582,6 +585,29 @@ } } +void DotFileGeneratorGraphOp::HandleVisitSubTree( NodeCore * const core, + const Info & info) +{ + VisitSubTree *visitSubTree = dynamic_cast(core); + + if(visitSubTree) + { + Node *subTreeRoot = visitSubTree->getSubTreeRoot(); + + if(subTreeRoot) + { + OpenGroup(true); + + const Info& visit_sub_tree_info = CoreInfo(visitSubTree); + const Info& sub_tree_root_info = NodeInfo(subTreeRoot); + + DefineSimpleEdge(visit_sub_tree_info, sub_tree_root_info); + + CloseGroup(); + } + } +} + void DotFileGeneratorGraphOp::HandleBeaconedChunk( StateChunk * const chunk, const Info & info ) @@ -652,6 +678,48 @@ HandleChunkMaterial(mat, mat_info); HandleSwitchMaterial(mat, mat_info); + HandleMultiPassMaterial(mat, mat_info); + } + } + } +} + +void DotFileGeneratorGraphOp::HandleMultiPassMaterial( + Material * const material, + const Info & info ) +{ + MultiPassMaterial *multiPassMat = dynamic_cast(material); + + if(multiPassMat) + { + UInt32 num = multiPassMat->editMFMaterials()->size(); + + for(UInt32 i = 0; i < num; ++i) + { + Material *mat = multiPassMat->getMaterials(i); + + if(mat) + { + bool suppressed = isSuppressed(mat->getType()); + + if(suppressed) + continue; + + OpenGroup(true); + + std::stringstream label; + label << "label=" << i; + + const Info &mat_info = MaterialInfo(mat); + + DefineMaterial(mat_info); + DefineSimpleEdge(info, mat_info, true, label.str()); + + CloseGroup(); + + HandleChunkMaterial(mat, mat_info); + HandleSwitchMaterial(mat, mat_info); + HandleMultiPassMaterial(mat, mat_info); } } }