Show
Ignore:
Timestamp:
10/22/10 18:35:28 (3 years ago)
Author:
robert
Message:

Added support for enable VBO's and doing simplification.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osganalysis/osganalysis.cpp

    r11848 r11849  
    2020#include <osgViewer/Viewer> 
    2121#include <osgViewer/ViewerEventHandlers> 
     22 
    2223#include <osgDB/ReadFile> 
     24 
    2325#include <osgGA/TrackballManipulator> 
     26 
    2427#include <osgUtil/IncrementalCompileOperation> 
     28#include <osgUtil/Simplifier> 
     29 
     30class StripStateVisitor : public osg::NodeVisitor 
     31{ 
     32public: 
     33    StripStateVisitor(bool useStateSets, bool useDisplayLists, bool useVBO): 
     34        osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN), 
     35        _useStateSets(useStateSets), 
     36        _useDisplayLists(useDisplayLists), 
     37        _useVBO(useVBO) {} 
     38 
     39    bool _useStateSets; 
     40    bool _useDisplayLists; 
     41    bool _useVBO; 
     42 
     43    void apply(osg::Node& node) 
     44    { 
     45        if (!_useStateSets && node.getStateSet()) node.setStateSet(0); 
     46        traverse(node); 
     47    } 
     48 
     49    void apply(osg::Geode& node) 
     50    { 
     51        if (!_useStateSets && node.getStateSet()) node.setStateSet(0); 
     52        for(unsigned int i = 0; i<node.getNumDrawables(); ++i) 
     53        { 
     54            process(*node.getDrawable(i)); 
     55        } 
     56 
     57        traverse(node); 
     58    } 
     59 
     60    void process(osg::Drawable& drawable) 
     61    { 
     62        if (!_useStateSets && drawable.getStateSet()) 
     63        { 
     64            drawable.setStateSet(0); 
     65        } 
     66 
     67        drawable.setUseDisplayList(_useDisplayLists); 
     68        drawable.setUseVertexBufferObjects(_useVBO); 
     69    } 
     70}; 
    2571 
    2672class SceneGraphProcessor : public osg::Referenced 
     
    3884        while (arguments.read("--vbo")) { modifyDrawableSettings = true; useVBO = true;  } 
    3985        while (arguments.read("--dl")) { modifyDrawableSettings = true; useDisplayLists = true;  } 
    40         while (arguments.read("--simplify", simplificatioRatio)) {} 
     86 
     87        while (arguments.read("-s", simplificatioRatio)) {} 
    4188 
    4289        while (arguments.read("--build-mipmaps")) { modifyTextureSettings = true; buildImageMipmaps = true; } 
    4390        while (arguments.read("--compress")) { modifyTextureSettings = true; compressImages = true; } 
    4491        while (arguments.read("--disable-mipmaps")) { modifyTextureSettings = true; disableMipmaps = true; } 
     92 
     93        OSG_NOTICE<<"simplificatioRatio="<<simplificatioRatio<<std::endl; 
    4594    } 
    4695 
     
    54103 
    55104        OSG_NOTICE<<"SceneGraphProcessor::process("<<node<<") : "<<node->getName()<<std::endl; 
     105 
     106        if (simplificatioRatio < 1.0) 
     107        { 
     108            OSG_NOTICE<<"Running simplifier with simplification ratio="<<simplificatioRatio<<std::endl; 
     109            float maxError = 4.0f; 
     110            osgUtil::Simplifier simplifier(simplificatioRatio, maxError); 
     111            node->accept(simplifier); 
     112        } 
     113 
     114        if (modifyDrawableSettings || modifyTextureSettings) 
     115        { 
     116            OSG_NOTICE<<"Running StripStateVisitor"<<std::endl; 
     117            StripStateVisitor ssv(true, useDisplayLists, useVBO); 
     118            node->accept(ssv); 
     119        } 
     120 
    56121 
    57122        return node; 
     
    76141    bool useVBO; 
    77142    bool useDisplayLists; 
    78     bool simplificatioRatio; 
     143    float simplificatioRatio; 
    79144 
    80145    bool modifyTextureSettings;