diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 13d6b2697..d15564947 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -45,7 +45,7 @@ void Optimizer::reset() { } -static osg::ApplicationUsageProxy Optimizer_e0(osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_OPTIMIZER \" []\"","OFF | DEFAULT | FLATTEN_STATIC_TRANSFORMS | REMOVE_REDUNDANT_NODES | COMBINE_ADJACENT_LODS | SHARE_DUPLICATE_STATE | MERGE_GEOMETRY | MERGE_GEODES | SPATIALIZE_GROUPS | COPY_SHARED_NODES | TRISTRIP_GEOMETRY | OPTIMIZE_TEXTURE_SETTINGS | REMOVE_LOADED_PROXY_NODES | TESSELATE_GEOMETRY | CHECK_GEOMETRY"); +static osg::ApplicationUsageProxy Optimizer_e0(osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_OPTIMIZER \" []\"","OFF | DEFAULT | FLATTEN_STATIC_TRANSFORMS | REMOVE_REDUNDANT_NODES | COMBINE_ADJACENT_LODS | SHARE_DUPLICATE_STATE | MERGE_GEOMETRY | MERGE_GEODES | SPATIALIZE_GROUPS | COPY_SHARED_NODES | TRISTRIP_GEOMETRY | OPTIMIZE_TEXTURE_SETTINGS | REMOVE_LOADED_PROXY_NODES | TESSELATE_GEOMETRY | CHECK_GEOMETRY | FLATTEN_BILLBOARDS"); void Optimizer::optimize(osg::Node* node) { @@ -100,6 +100,10 @@ void Optimizer::optimize(osg::Node* node) if(str.find("~CHECK_GEOMETRY")!=std::string::npos) options ^= CHECK_GEOMETRY; else if(str.find("CHECK_GEOMETRY")!=std::string::npos) options |= CHECK_GEOMETRY; + + if(str.find("~FLATTEN_BILLBOARDS")!=std::string::npos) options ^= FLATTEN_BILLBOARDS; + else if(str.find("FLATTEN_BILLBOARDS")!=std::string::npos) options |= FLATTEN_BILLBOARDS; + } else diff --git a/src/osgWrappers/osgUtil/Optimizer.cpp b/src/osgWrappers/osgUtil/Optimizer.cpp index 1021137f8..d4433d53f 100644 --- a/src/osgWrappers/osgUtil/Optimizer.cpp +++ b/src/osgWrappers/osgUtil/Optimizer.cpp @@ -55,6 +55,7 @@ BEGIN_ENUM_REFLECTOR(osgUtil::Optimizer::OptimizationOptions) I_EnumLabel(osgUtil::Optimizer::TRISTRIP_GEOMETRY); I_EnumLabel(osgUtil::Optimizer::TESSELATE_GEOMETRY); I_EnumLabel(osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS); + I_EnumLabel(osgUtil::Optimizer::FLATTEN_BILLBOARDS); I_EnumLabel(osgUtil::Optimizer::DEFAULT_OPTIMIZATIONS); I_EnumLabel(osgUtil::Optimizer::ALL_OPTIMIZATIONS); END_REFLECTOR @@ -113,6 +114,18 @@ BEGIN_OBJECT_REFLECTOR(osgUtil::Optimizer::CopySharedSubgraphsVisitor) I_Method0(void, copySharedNodes); END_REFLECTOR +TYPE_NAME_ALIAS(std::vector< osg::NodePath >, osgUtil::Optimizer::FlattenBillboardVisitor::NodePathList); + +TYPE_NAME_ALIAS(std::map< osg::Billboard * COMMA osgUtil::Optimizer::FlattenBillboardVisitor::NodePathList >, osgUtil::Optimizer::FlattenBillboardVisitor::BillboardNodePathMap); + +BEGIN_OBJECT_REFLECTOR(osgUtil::Optimizer::FlattenBillboardVisitor) + I_BaseType(osgUtil::BaseOptimizerVisitor); + I_ConstructorWithDefaults1(IN, osgUtil::Optimizer *, optimizer, 0); + I_Method0(void, reset); + I_Method1(void, apply, IN, osg::Billboard &, billboard); + I_Method0(void, process); +END_REFLECTOR + BEGIN_OBJECT_REFLECTOR(osgUtil::Optimizer::FlattenStaticTransformsVisitor) I_BaseType(osgUtil::BaseOptimizerVisitor); I_ConstructorWithDefaults1(IN, osgUtil::Optimizer *, optimizer, 0); @@ -216,6 +229,8 @@ BEGIN_OBJECT_REFLECTOR(osgUtil::Optimizer::TextureVisitor) I_Method1(void, apply, IN, osg::Texture &, texture); END_REFLECTOR +STD_MAP_REFLECTOR(std::map< osg::Billboard * COMMA osgUtil::Optimizer::FlattenBillboardVisitor::NodePathList >); + STD_SET_REFLECTOR(std::set< osg::Group * >); STD_SET_REFLECTOR(std::set< osg::Node * >);