Gizmo3D

gzNodeOptimizer.h

Go to the documentation of this file.
00001 //*****************************************************************************
00002 // File         : gzNodeOptimizer.h
00003 // Module       : 
00004 // Description  : Class definition of the gzNodeOptimizer class
00005 // Author       : Anders Modén      
00006 // Product      : Gizmo3D 2.1.1
00007 //      
00008 // Copyright © 2003- Saab Training Systems AB, Sweden   
00009 //          
00010 // NOTE:    Gizmo3D is a high performance 3D Scene Graph and effect visualisation 
00011 //          C++ toolkit for Linux, Mac OS X, Windows (Win32) and IRIX® for  
00012 //          usage in Game or VisSim development.
00013 //
00014 //
00015 // Revision History...                          
00016 //                                  
00017 // Who  Date    Description                     
00018 //                                  
00019 // AMO  011017  Created file    
00020 //
00021 //******************************************************************************
00022 #ifndef __GZ_NODE_OPTIMIZER_H__
00023 #define __GZ_NODE_OPTIMIZER_H__
00024 
00030 #include "gzNode.h"
00031 
00032 #include "gzDbFlags.h"
00033 
00034 typedef enum {  
00035                 GZ_NODE_OPTIMIZE_DEFAULT                    =   0,          // Default
00036                 GZ_NODE_OPTIMIZE_ONLY_STATES                =   (1<<0),     // Only work on state sharing
00037                 GZ_NODE_OPTIMIZE_DONT_COMBINE_NAME_ENCODED  =   (1<<1),     // Don't combine name encoded nodes
00038                 GZ_NODE_OPTIMIZE_DONT_CONCAT_GEOMETRY       =   (1<<2),     // Don't concat simillar geometry
00039                 GZ_NODE_OPTIMIZE_USE_INDEXED_GEOMETRY       =   (1<<3),     // Try to use indexed geometry
00040                 GZ_NODE_OPTIMIZE_USE_DISPLAYLIST_GEOMETRY   =   (1<<4),     // Try to use DisplayLists
00041                 GZ_NODE_OPTIMIZE_USE_BUFFERED_GEOMETRY      =   (1<<5),     // Try to use VBO
00042                 GZ_NODE_OPTIMIZE_STRIP_USER_DATA            =   (1<<6),     // Strip user data from model to save mem
00043                 GZ_NODE_OPTIMIZE_EXCLUDE_TREE               =   (1<<7),     // Excludes entire tree
00044                 GZ_NODE_OPTIMIZE_NO_PROGRESS_REPORT         =   (1<<8),     // Silent progress
00045                 GZ_NODE_OPTIMIZE_NO_BOUNDARY_CALC           =   (1<<9),     // Silent progress
00046                 GZ_NODE_OPTIMIZE_DONT_FLATTEN_GEOMETRY      =   (1<<10),    // Exclude flatten transforms into sub geometry
00047                 GZ_NODE_OPTIMIZE_DONT_CHANGE_RENDER_ORDER   =   (1<<11),    // Dont do optims that changes render order
00048                 GZ_NODE_OPTIMIZE_DONT_OPTIMIZE_GEOMETRY     =   (1<<12),    // Dont optimize or change geom primitives
00049 
00050 
00051                 } gzNodeOptimizeLevel;
00052 
00054 GZ_USE_BIT_LOGIC(gzNodeOptimizeLevel);
00055 
00056 //******************************************************************************
00057 // Class    : gzNodeOptimizer
00058 //                                  
00059 // Purpose  : Utility class to optimize scene graph data
00060 //                                  
00061 // Notes    : - 
00062 //                                  
00063 // Revision History...                          
00064 //                                  
00065 // Who  Date    Description                     
00066 //                                  
00067 // AMO  011017  Created 
00068 //                                  
00069 //******************************************************************************
00070 class gzNodeOptimizer
00071 {
00072 public:
00073 
00074     GZ_GRAPH_EXPORT gzNodeOptimizer();
00075 
00076     GZ_GRAPH_EXPORT virtual ~gzNodeOptimizer();
00077 
00079 
00087     GZ_GRAPH_EXPORT gzNode *optimize(gzNode *node , gzNodeOptimizeLevel level=GZ_NODE_OPTIMIZE_DEFAULT);
00088 
00089     GZ_GRAPH_EXPORT gzBool subOptimize(gzNode *subnode,gzNodeOptimizeLevel level=GZ_NODE_OPTIMIZE_DEFAULT);
00090 
00092 
00094     GZ_GRAPH_EXPORT gzVoid exclude(const gzString &pathName);
00095 
00097     GZ_GRAPH_EXPORT gzVoid exclude(gzNode *node);
00098 
00099     GZ_GRAPH_EXPORT gzVoid addCompileCandidate(const gzString &nodeName);
00100     GZ_GRAPH_EXPORT gzVoid removeCompileCandidate(const gzString &nodeName);
00101 
00103 
00106     GZ_GRAPH_EXPORT gzBool isExcluded(gzNode *node,gzNodeOptimizeLevel level);
00107 
00108     GZ_GRAPH_EXPORT gzBool isCompileCandidate(const gzString &nodeName);
00109 
00111     GZ_GRAPH_EXPORT gzVoid  setMaxRecursionDepth(gzULong depth);
00112 
00113     GZ_GRAPH_EXPORT gzULong getMaxRecursionDepth() const;
00114 
00115     GZ_GRAPH_EXPORT gzVoid optimizeState(gzNode *node);
00116 
00117     GZ_GRAPH_EXPORT gzVoid clearStateOptims();
00118 
00119     GZ_GRAPH_EXPORT gzVoid reportProgress(gzUByte progress);
00120 
00121     GZ_GRAPH_EXPORT gzReal getMaxCombineRadius();
00122     GZ_GRAPH_EXPORT gzVoid setMaxCombineRadius(gzReal radius);
00123 
00124     GZ_GRAPH_EXPORT gzULong getMaxCombinations();
00125     GZ_GRAPH_EXPORT gzVoid  setMaxCombinations(gzULong combs);
00126 
00127 private:
00128 
00129     gzDynamicArray<gzString>                        m_excludePaths;
00130 
00131     gzDict<gzInstanceCompareInterface,gzVoid>       m_excludeNodes;
00132 
00133     gzDict<gzString,gzVoid>                         m_compileCandidate;
00134 
00135     gzULong                                         m_maxRecursionDepth;
00136 
00137     gzRefDict<gzInstanceCompareInterface,gzState>   m_stateDict;
00138 
00139     gzRefDict<gzInstanceCompareInterface,gzState>   m_convertStateDict;
00140 
00141     gzUByte                                         m_lastProgress;
00142 
00143     gzReal                                          m_maxCombineRadius;
00144 
00145     gzULong                                         m_maxCombinations;
00146 };
00147 
00148 GZ_GRAPH_EXPORT gzNodeOptimizeLevel getNodeOptimizerFlagsFromDbFlags(const gzSerializeAdapterFlags &dbflags);
00149 
00150 #endif // __GZ_NODE_OPTIMIZER_H__

Documentation for Gizmo3D generated at Wed Feb 20 11:54:07 2008 by   Saab Training Systems AB, ¸ (c) 2003-and beyond