First step of refactoring the osg::Program management in osgTerrain::GeometryPool for better performance by placing default osg::Program and shader defines on a single StateSet below the osgTerrain::Terrain
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14704 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
@@ -327,7 +327,7 @@ class OSG_EXPORT StateSet : public Object
|
||||
|
||||
|
||||
/** Set the list of defines to pass on to shaders.*/
|
||||
void setDefineList(DefineList& dl) { _defineList = dl; }
|
||||
void setDefineList(const DefineList& dl) { _defineList = dl; }
|
||||
|
||||
/** Get the list of defines to pass on to shaders.*/
|
||||
DefineList& getDefineList() { return _defineList; }
|
||||
|
||||
@@ -145,6 +145,8 @@ class OSGTERRAIN_EXPORT GeometryPool : public osg::Referenced
|
||||
typedef std::vector<LayerType> LayerTypes;
|
||||
typedef std::map<LayerTypes, osg::ref_ptr<osg::Program> > ProgramMap;
|
||||
|
||||
osg::StateSet* getRootStateSetForTerrain(Terrain* terrain);
|
||||
|
||||
virtual osg::ref_ptr<osg::Program> getOrCreateProgram(LayerTypes& layerTypes);
|
||||
|
||||
virtual osg::ref_ptr<SharedGeometry> getOrCreateGeometry(osgTerrain::TerrainTile* tile);
|
||||
@@ -153,19 +155,17 @@ class OSGTERRAIN_EXPORT GeometryPool : public osg::Referenced
|
||||
|
||||
virtual void applyLayers(osgTerrain::TerrainTile* tile, osg::StateSet* stateset);
|
||||
|
||||
void setUseGeometryShader(bool flag) { _useGeometryShader = flag; }
|
||||
bool getUseGeometryShader() const { return _useGeometryShader; }
|
||||
|
||||
protected:
|
||||
virtual ~GeometryPool();
|
||||
|
||||
bool _useGeometryShader;
|
||||
|
||||
OpenThreads::Mutex _geometryMapMutex;
|
||||
GeometryMap _geometryMap;
|
||||
|
||||
OpenThreads::Mutex _programMapMutex;
|
||||
ProgramMap _programMap;
|
||||
|
||||
osg::ref_ptr<osg::StateSet> _rootStateSet;
|
||||
bool _rootStateSetAssigned;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user