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:
Robert Osfield
2015-02-20 15:02:43 +00:00
parent 5c023d1f76
commit afbf20eba9
6 changed files with 106 additions and 78 deletions

View File

@@ -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; }

View File

@@ -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;
};