15 #define OSG_STATESET 1
18 #include <osg/StateAttribute>
19 #include <osg/ref_ptr>
20 #include <osg/Uniform>
26 #ifndef GL_RESCALE_NORMAL
28 #define GL_RESCALE_NORMAL 0x803A
57 virtual const char*
className()
const {
return "StateSet"; }
60 int compare(
const StateSet& rhs,
bool compareAttributeContents=
false)
const;
62 bool operator < (
const StateSet& rhs)
const {
return compare(rhs)<0; }
63 bool operator == (
const StateSet& rhs)
const {
return compare(rhs)==0; }
64 bool operator != (
const StateSet& rhs)
const {
return compare(rhs)!=0; }
71 inline const ParentList&
getParents()
const {
return _parents; }
83 inline const Node*
getParent(
unsigned int i)
const {
return _parents[i]; }
89 inline unsigned int getNumParents()
const {
return static_cast<unsigned int>(_parents.size()); }
93 virtual void computeDataVariance();
98 void setGlobalDefaults();
111 typedef std::map<StateAttribute::GLMode,StateAttribute::GLModeValue>
ModeList;
158 typedef std::map<StateAttribute::TypeMemberPair,RefAttributePair>
AttributeList;
236 void removeTextureAttribute(
unsigned int unit,
StateAttribute *attribute);
267 void removeAssociatedTextureModes(
unsigned int unit,
const StateAttribute* attribute);
282 void removeUniform(
const std::string& name);
285 void removeUniform(
Uniform* uniform);
289 Uniform* getUniform(
const std::string& name);
296 const Uniform* getUniform(
const std::string& name)
const;
300 const RefUniformPair* getUniformPair(
const std::string& name)
const;
312 typedef std::pair<std::string, StateAttribute::OverrideValue>
DefinePair;
321 DefinePair*
getDefinePair(
const std::string& defineName) { DefineList::iterator itr = _defineList.find(defineName);
return (itr!=_defineList.end()) ? &(itr->second) : 0; }
322 const DefinePair*
getDefinePair(
const std::string& defineName)
const { DefineList::const_iterator itr = _defineList.find(defineName);
return (itr!=_defineList.end()) ? &(itr->second) : 0; }
326 void removeDefine(
const std::string& defineName);
358 void setRenderingHint(
int hint);
365 INHERIT_RENDERBIN_DETAILS =0,
366 USE_RENDERBIN_DETAILS =1,
367 OVERRIDE_RENDERBIN_DETAILS =2,
368 PROTECTED_RENDERBIN_DETAILS =4,
369 OVERRIDE_PROTECTED_RENDERBIN_DETAILS = OVERRIDE_RENDERBIN_DETAILS|PROTECTED_RENDERBIN_DETAILS
373 void setRenderBinDetails(
int binNum,
const std::string& binName,RenderBinMode mode=USE_RENDERBIN_DETAILS);
376 void setRenderBinToInherit();
394 inline void setBinName(
const std::string& name) { _binName=name; }
397 inline const std::string&
getBinName()
const {
return _binName; }
428 void setUpdateCallback(
Callback* ac);
448 void setEventCallback(
Callback* ac);
469 bool checkValidityOfAssociatedModes(
State& state)
const;
472 virtual void setThreadSafeRefUnref(
bool threadSafe);
475 void compileGLObjects(
State& state)
const;
478 virtual void resizeGLObjectBuffers(
unsigned int maxSize);
481 virtual void releaseGLObjects(
State* state=0)
const;
510 if (unit>=_textureModeList.size()) _textureModeList.resize(unit+1);
511 return _textureModeList[unit];
516 if (unit>=_textureAttributeList.size()) _textureAttributeList.resize(unit+1);
517 return _textureAttributeList[unit];
520 int compareModes(
const ModeList& lhs,
const ModeList& rhs);
521 int compareAttributePtrs(
const AttributeList& lhs,
const AttributeList& rhs);
522 int compareAttributeContents(
const AttributeList& lhs,
const AttributeList& rhs);
532 const RefAttributePair* getAttributePair(
const AttributeList& attributeList,
const StateAttribute::Type type,
unsigned int member)
const;
543 void setNumChildrenRequiringUpdateTraversal(
unsigned int num);
547 void setNumChildrenRequiringEventTraversal(
unsigned int num);
const ModeList & getModeList() const
void setBinNumber(int num)
const Callback * getEventCallback() const
const TextureModeList & getTextureModeList() const
unsigned int _numChildrenRequiringUpdateTraversal
void setModeList(ModeList &ml)
const Node * getParent(unsigned int i) const
std::vector< Node * > ParentList
unsigned int getNumParents() const
unsigned int _numChildrenRequiringEventTraversal
RenderBinMode getRenderBinMode() const
Callback * getUpdateCallback()
TextureAttributeList & getTextureAttributeList()
virtual const char * libraryName() const
void setRenderBinMode(RenderBinMode mode)
Node * getParent(unsigned int i)
unsigned int getNumChildrenRequiringUpdateTraversal() const
const DefinePair * getDefinePair(const std::string &defineName) const
virtual Object * cloneType() const
AttributeList _attributeList
TextureModeList & getTextureModeList()
const ParentList & getParents() const
DefinePair * getDefinePair(const std::string &defineName)
std::pair< ref_ptr< StateAttribute >, StateAttribute::OverrideValue > RefAttributePair
std::pair< ref_ptr< Uniform >, StateAttribute::OverrideValue > RefUniformPair
std::map< std::string, DefinePair > DefineList
std::map< StateAttribute::GLMode, StateAttribute::GLModeValue > ModeList
Callback * getEventCallback()
const AttributeList & getAttributeList() const
bool requiresEventTraversal() const
unsigned int OverrideValue
std::map< StateAttribute::TypeMemberPair, RefAttributePair > AttributeList
#define META_Object(library, name)
std::vector< ModeList > TextureModeList
void setDefineList(const DefineList &dl)
const std::string & getBinName() const
DefineList & getDefineList()
bool getNestRenderBins() const
ModeList & getOrCreateTextureModeList(unsigned int unit)
void setTextureModeList(TextureModeList &tml)
bool useRenderBinDetails() const
unsigned int getNumChildrenRequiringEventTraversal() const
TextureAttributeList _textureAttributeList
UniformList & getUniformList()
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
void setUniformList(UniformList &al)
virtual const char * className() const
void setBinName(const std::string &name)
const DefineList & getDefineList() const
virtual Object * clone(const CopyOp ©op) const
void setNestRenderBins(bool val)
int getRenderingHint() const
AttributeList & getAttributeList()
const UniformList & getUniformList() const
TextureModeList _textureModeList
OSG_EXPORT bool isTextureMode(StateAttribute::GLMode mode)
std::vector< AttributeList > TextureAttributeList
Callback(const Callback &, const CopyOp &)
std::map< std::string, RefUniformPair > UniformList
AttributeList & getOrCreateTextureAttributeList(unsigned int unit)
virtual bool isSameKindAs(const Object *obj) const
std::pair< std::string, StateAttribute::OverrideValue > DefinePair
unsigned int getNumTextureAttributeLists() const
bool requiresUpdateTraversal() const
ref_ptr< Callback > _updateCallback
void setAttributeList(AttributeList &al)
unsigned int getNumTextureModeLists() const
ref_ptr< Callback > _eventCallback
const Callback * getUpdateCallback() const
const TextureAttributeList & getTextureAttributeList() const
void setTextureAttributeList(TextureAttributeList &tal)