Refactored osgUtil::ShaderGen to use #pragma(tic) shader composition.
This commit is contained in:
@@ -26,57 +26,19 @@
|
||||
namespace osgUtil
|
||||
{
|
||||
|
||||
class OSGUTIL_EXPORT ShaderGenCache : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
enum StateMask
|
||||
{
|
||||
BLEND = 1,
|
||||
LIGHTING = 2,
|
||||
FOG = 4,
|
||||
DIFFUSE_MAP = 8, //< Texture in unit 0
|
||||
NORMAL_MAP = 16 //< Texture in unit 1 and vertex attribute array 6
|
||||
};
|
||||
|
||||
typedef std::map<int, osg::ref_ptr<osg::StateSet> > StateSetMap;
|
||||
|
||||
ShaderGenCache() {};
|
||||
|
||||
void setStateSet(int stateMask, osg::StateSet *program);
|
||||
osg::StateSet *getStateSet(int stateMask) const;
|
||||
osg::StateSet *getOrCreateStateSet(int stateMask);
|
||||
|
||||
protected:
|
||||
osg::StateSet *createStateSet(int stateMask) const;
|
||||
mutable OpenThreads::Mutex _mutex;
|
||||
StateSetMap _stateSetMap;
|
||||
|
||||
};
|
||||
|
||||
class OSGUTIL_EXPORT ShaderGenVisitor : public osg::NodeVisitor
|
||||
{
|
||||
public:
|
||||
ShaderGenVisitor();
|
||||
ShaderGenVisitor(ShaderGenCache *stateCache);
|
||||
|
||||
void setStateCache(ShaderGenCache *stateCache) { _stateCache = stateCache; }
|
||||
ShaderGenCache *getStateCache() const { return _stateCache.get(); }
|
||||
/// assign default uber program to specified StateSet - typically the root node of the scene graph or the view's Camera
|
||||
void assignUberProgram(osg::StateSet *stateSet);
|
||||
|
||||
/// Top level state set applied as the first one.
|
||||
void setRootStateSet(osg::StateSet *stateSet);
|
||||
osg::StateSet *getRootStateSet() const { return _rootStateSet.get(); }
|
||||
void apply(osg::Node& node);
|
||||
|
||||
void apply(osg::Node &node);
|
||||
void apply(osg::Drawable &drawable);
|
||||
|
||||
void reset();
|
||||
void remapStateSet(osg::StateSet* stateSet);
|
||||
|
||||
protected:
|
||||
void update(osg::Drawable *drawable);
|
||||
|
||||
osg::ref_ptr<ShaderGenCache> _stateCache;
|
||||
osg::ref_ptr<osg::State> _state;
|
||||
osg::ref_ptr<osg::StateSet> _rootStateSet;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user