Added new clear, removeAttribute, removeMode, removeTextureAttribute and

removeTextureMode method and deprecated the setToInherit equivilants.
This commit is contained in:
Robert Osfield 2004-10-07 09:40:03 +00:00
parent c27bf441e2
commit d77e6a0829
8 changed files with 97 additions and 70 deletions

View File

@ -73,24 +73,6 @@ class SG_EXPORT AutoTransform : public Transform
AutoRotateMode getAutoRotateMode() const { return _autoRotateMode; } AutoRotateMode getAutoRotateMode() const { return _autoRotateMode; }
#ifdef USE_DEPRECATED_API
void setAutoRotateToScreen(bool autoRotateToScreen)
{
setAutoRotateMode(autoRotateToScreen?ROTATE_TO_SCREEN:NO_ROTATION);
}
bool getAutoRotateToCamera() const { return _autoRotateMode==ROTATE_TO_SCREEN; }
void setAutoRotateToCamera(bool autoRotateToCamera)
{
setAutoRotateMode(autoRotateToScreen?ROTATE_TO_CAMERA:NO_ROTATION);
}
bool getAutoRotateToCamera() const { return _autoRotateMode==ROTATE_TO_SCREEN; }
#endif
void setAutoScaleToScreen(bool autoScaleToScreen) { _autoScaleToScreen = autoScaleToScreen; _matrixDirty=true; } void setAutoScaleToScreen(bool autoScaleToScreen) { _autoScaleToScreen = autoScaleToScreen; _matrixDirty=true; }
bool getAutoScaleToScreen() const { return _autoScaleToScreen; } bool getAutoScaleToScreen() const { return _autoScaleToScreen; }

View File

@ -17,7 +17,7 @@
// define USE_DEPRECATED_API is used to include in API which is being fazed out // define USE_DEPRECATED_API is used to include in API which is being fazed out
// if you can compile your apps with this turned off you are // if you can compile your apps with this turned off you are
// well placed for compatablity with future versions. // well placed for compatablity with future versions.
// #define USE_DEPRECATED_API #define USE_DEPRECATED_API
#if defined(_MSC_VER) #if defined(_MSC_VER)
#pragma warning( disable : 4244 ) #pragma warning( disable : 4244 )

View File

@ -57,14 +57,19 @@ class SG_EXPORT StateSet : public Object
bool operator == (const StateSet& rhs) const { return compare(rhs)==0; } bool operator == (const StateSet& rhs) const { return compare(rhs)==0; }
bool operator != (const StateSet& rhs) const { return compare(rhs)!=0; } bool operator != (const StateSet& rhs) const { return compare(rhs)!=0; }
/** set all the modes to on or off so that it defines a /** Set all the modes to on or off so that it defines a
complete state, typically used for a default global state.*/ complete state, typically used for a default global state.*/
void setGlobalDefaults(); void setGlobalDefaults();
/** set all the modes to inherit, typically used to signify #ifdef USE_DEPRECATED_API
/** Set all the modes to inherit, typically used to signify
nodes which inherit all of their modes for the global state.*/ nodes which inherit all of their modes for the global state.*/
void setAllToInherit(); void setAllToInherit() { clear(); }
#endif
/** Clear the StateSet of all modes and attributes.*/
void clear();
/** merge this stateset with stateset rhs, this overrides /** merge this stateset with stateset rhs, this overrides
* the rhs if OVERRIDE is specified, otherwise rhs takes precedence.*/ * the rhs if OVERRIDE is specified, otherwise rhs takes precedence.*/
void merge(const StateSet& rhs); void merge(const StateSet& rhs);
@ -72,14 +77,18 @@ class SG_EXPORT StateSet : public Object
/** a container to map GLModes to their respective GLModeValues.*/ /** a container to map GLModes to their respective GLModeValues.*/
typedef std::map<StateAttribute::GLMode,StateAttribute::GLModeValue> ModeList; typedef std::map<StateAttribute::GLMode,StateAttribute::GLModeValue> ModeList;
/** set this StateSet to contain specified GLMode and value.*/ /** Set this StateSet to contain specified GLMode and value.*/
void setMode(StateAttribute::GLMode mode, StateAttribute::GLModeValue value); void setMode(StateAttribute::GLMode mode, StateAttribute::GLModeValue value);
/** set this StateSet to inherit specified GLMode type from parents. #ifdef USE_DEPRECATED_API
/** Set this StateSet to inherit specified GLMode type from parents.
* Has the effect of deleting any GLMode of specified type from StateSet.*/ * Has the effect of deleting any GLMode of specified type from StateSet.*/
void setModeToInherit(StateAttribute::GLMode mode); void setModeToInherit(StateAttribute::GLMode mode) { removeMode(mode); }
#endif
/** Remove mode from StateSet.*/
void removeMode(StateAttribute::GLMode mode);
/** get specified GLModeValue for specified GLMode. /** Get specified GLModeValue for specified GLMode.
* returns INHERIT if no GLModeValue is contained within StateSet.*/ * returns INHERIT if no GLModeValue is contained within StateSet.*/
StateAttribute::GLModeValue getMode(StateAttribute::GLMode mode) const; StateAttribute::GLModeValue getMode(StateAttribute::GLMode mode) const;
@ -91,28 +100,36 @@ class SG_EXPORT StateSet : public Object
/** simple pairing between an attribute and its override flag.*/ /** Simple pairing between an attribute and its override flag.*/
typedef std::pair<ref_ptr<StateAttribute>,StateAttribute::OverrideValue> RefAttributePair; typedef std::pair<ref_ptr<StateAttribute>,StateAttribute::OverrideValue> RefAttributePair;
/** a container to map StateAttribyte::Types to their respective RefAttributePair.*/ /** a container to map StateAttribyte::Types to their respective RefAttributePair.*/
typedef std::map<StateAttribute::Type,RefAttributePair> AttributeList; typedef std::map<StateAttribute::Type,RefAttributePair> AttributeList;
/** set this StateSet to contain specified attribute and override flag.*/ /** Set this StateSet to contain specified attribute and override flag.*/
void setAttribute(StateAttribute *attribute, StateAttribute::OverrideValue value=StateAttribute::OFF); void setAttribute(StateAttribute *attribute, StateAttribute::OverrideValue value=StateAttribute::OFF);
/** set this StateSet to contain specified attribute and set the associated GLMode's to specified value.*/ /** Set this StateSet to contain specified attribute and set the associated GLMode's to specified value.*/
void setAttributeAndModes(StateAttribute *attribute, StateAttribute::GLModeValue value=StateAttribute::ON); void setAttributeAndModes(StateAttribute *attribute, StateAttribute::GLModeValue value=StateAttribute::ON);
/** set this StateSet to inherit specified attribute type from parents.
* has the effect of deleting any state attributes of specified type from StateSet.*/
void setAttributeToInherit(StateAttribute::Type type);
/** get specified StateAttribute for specified type. #ifdef USE_DEPRECATED_API
/** Set this StateSet to inherit specified attribute type from parents.
* has the effect of deleting any state attributes of specified type from StateSet.*/
void setAttributeToInherit(StateAttribute::Type type) { removeAttribute(type); }
#endif
/** remove attribute of specified type from StateSet.*/
void removeAttribute(StateAttribute::Type type);
/** remove attribute from StateSet.*/
void removeAttribute(StateAttribute *attribute);
/** Get specified StateAttribute for specified type.
* Returns NULL if no type is contained within StateSet.*/ * Returns NULL if no type is contained within StateSet.*/
StateAttribute* getAttribute(StateAttribute::Type type); StateAttribute* getAttribute(StateAttribute::Type type);
/** get specified const StateAttribute for specified type. /** Get specified const StateAttribute for specified type.
* Returns NULL if no type is contained within const StateSet.*/ * Returns NULL if no type is contained within const StateSet.*/
const StateAttribute* getAttribute(StateAttribute::Type type) const; const StateAttribute* getAttribute(StateAttribute::Type type) const;
/** get specified RefAttributePair for specified type. /** Get specified RefAttributePair for specified type.
* Returns NULL if no type is contained within StateSet.*/ * Returns NULL if no type is contained within StateSet.*/
const RefAttributePair* getAttributePair(StateAttribute::Type type) const; const RefAttributePair* getAttributePair(StateAttribute::Type type) const;
@ -126,13 +143,18 @@ class SG_EXPORT StateSet : public Object
typedef std::vector<ModeList> TextureModeList; typedef std::vector<ModeList> TextureModeList;
/** set this StateSet to contain specified GLMode and value.*/ /** Set this StateSet to contain specified GLMode and value.*/
void setTextureMode(unsigned int unit,StateAttribute::GLMode mode, StateAttribute::GLModeValue value); void setTextureMode(unsigned int unit,StateAttribute::GLMode mode, StateAttribute::GLModeValue value);
/** set this StateSet to inherit specified GLMode type from parents.
* has the effect of deleting any GLMode of specified type from StateSet.*/
void setTextureModeToInherit(unsigned int unit,StateAttribute::GLMode mode);
/** get specified GLModeValue for specified GLMode. #ifdef USE_DEPRECATED_API
/** Set this StateSet to inherit specified GLMode type from parents.
* has the effect of deleting any GLMode of specified type from StateSet.*/
void setTextureModeToInherit(unsigned int unit,StateAttribute::GLMode mode) { removeTextureMode(unit,mode); }
#endif
/** Remove texture mode from StateSet.*/
void removeTextureMode(unsigned int unit,StateAttribute::GLMode mode);
/** Get specified GLModeValue for specified GLMode.
* returns INHERIT if no GLModeValue is contained within StateSet.*/ * returns INHERIT if no GLModeValue is contained within StateSet.*/
StateAttribute::GLModeValue getTextureMode(unsigned int unit,StateAttribute::GLMode mode) const; StateAttribute::GLModeValue getTextureMode(unsigned int unit,StateAttribute::GLMode mode) const;
@ -145,23 +167,32 @@ class SG_EXPORT StateSet : public Object
typedef std::vector<AttributeList> TextureAttributeList; typedef std::vector<AttributeList> TextureAttributeList;
/** set this StateSet to contain specified attribute and override flag.*/ /** Set this StateSet to contain specified attribute and override flag.*/
void setTextureAttribute(unsigned int unit,StateAttribute *attribute, StateAttribute::OverrideValue value=StateAttribute::OFF); void setTextureAttribute(unsigned int unit,StateAttribute *attribute, StateAttribute::OverrideValue value=StateAttribute::OFF);
/** set this StateSet to contain specified attribute and set the associated GLMode's to specified value.*/ /** Set this StateSet to contain specified attribute and set the associated GLMode's to specified value.*/
void setTextureAttributeAndModes(unsigned int unit,StateAttribute *attribute, StateAttribute::GLModeValue value=StateAttribute::ON); void setTextureAttributeAndModes(unsigned int unit,StateAttribute *attribute, StateAttribute::GLModeValue value=StateAttribute::ON);
/** set this StateSet to inherit specified attribute type from parents.
* Has the effect of deleting any state attributes of specified type from StateSet.*/
void setTextureAttributeToInherit(unsigned int unit,StateAttribute::Type type);
/** get specified Texture related StateAttribute for specified type. #ifdef USE_DEPRECATED_API
/** Set this StateSet to inherit specified attribute type from parents.
* Has the effect of deleting any state attributes of specified type from StateSet.*/
void setTextureAttributeToInherit(unsigned int unit,StateAttribute::Type type) { removeTextureAttribute(unit,type); }
#endif
/** remove texture attribute of specified type from StateSet.*/
void removeTextureAttribute(unsigned int unit, StateAttribute::Type type);
/** remove texture attribute from StateSet.*/
void removeTextureAttribute(unsigned int unit, StateAttribute *attribute);
/** Get specified Texture related StateAttribute for specified type.
* Returns NULL if no type is contained within StateSet.*/ * Returns NULL if no type is contained within StateSet.*/
StateAttribute* getTextureAttribute(unsigned int unit,StateAttribute::Type type); StateAttribute* getTextureAttribute(unsigned int unit,StateAttribute::Type type);
/** get specified Texture related const StateAttribute for specified type. /** Get specified Texture related const StateAttribute for specified type.
* Returns NULL if no type is contained within const StateSet.*/ * Returns NULL if no type is contained within const StateSet.*/
const StateAttribute* getTextureAttribute(unsigned int unit,StateAttribute::Type type) const; const StateAttribute* getTextureAttribute(unsigned int unit,StateAttribute::Type type) const;
/** get specified Texture related RefAttributePair for specified type. /** Get specified Texture related RefAttributePair for specified type.
* Returns NULL if no type is contained within StateSet.*/ * Returns NULL if no type is contained within StateSet.*/
const RefAttributePair* getTextureAttributePair(unsigned int unit,StateAttribute::Type type) const; const RefAttributePair* getTextureAttributePair(unsigned int unit,StateAttribute::Type type) const;
@ -183,14 +214,14 @@ class SG_EXPORT StateSet : public Object
TRANSPARENT_BIN = 2 TRANSPARENT_BIN = 2
}; };
/** set the RenderingHint of the StateSet. /** Set the RenderingHint of the StateSet.
* RenderingHint is used by osgUtil::Renderer to determine which * RenderingHint is used by osgUtil::Renderer to determine which
* draw bin to drop associated osg::Drawables in. For opaque * draw bin to drop associated osg::Drawables in. For opaque
* objects OPAQUE_BIN would typical used, which TRANSPARENT_BIN * objects OPAQUE_BIN would typical used, which TRANSPARENT_BIN
* should be used for objects which need to be depth sorted.*/ * should be used for objects which need to be depth sorted.*/
void setRenderingHint(int hint); void setRenderingHint(int hint);
/** get the RenderingHint of the StateSet.*/ /** Get the RenderingHint of the StateSet.*/
inline int getRenderingHint() const { return _renderingHint; } inline int getRenderingHint() const { return _renderingHint; }
enum RenderBinMode enum RenderBinMode
@ -201,22 +232,22 @@ class SG_EXPORT StateSet : public Object
ENCLOSE_RENDERBIN_DETAILS ENCLOSE_RENDERBIN_DETAILS
}; };
/** set the render bin details.*/ /** Set the render bin details.*/
void setRenderBinDetails(int binNum,const std::string& binName,RenderBinMode mode=USE_RENDERBIN_DETAILS); void setRenderBinDetails(int binNum,const std::string& binName,RenderBinMode mode=USE_RENDERBIN_DETAILS);
/** set the render bin details to inherit.*/ /** Set the render bin details to inherit.*/
void setRenderBinToInherit(); void setRenderBinToInherit();
/** get the render bin mode.*/ /** Get the render bin mode.*/
inline RenderBinMode getRenderBinMode() const { return _binMode; } inline RenderBinMode getRenderBinMode() const { return _binMode; }
/** get whether the render bin details are set and should be used.*/ /** Get whether the render bin details are set and should be used.*/
inline bool useRenderBinDetails() const { return _binMode!=INHERIT_RENDERBIN_DETAILS; } inline bool useRenderBinDetails() const { return _binMode!=INHERIT_RENDERBIN_DETAILS; }
/** get the render bin number.*/ /** Get the render bin number.*/
inline int getBinNumber() const { return _binNum; } inline int getBinNumber() const { return _binNum; }
/** get the render bin name.*/ /** Get the render bin name.*/
inline const std::string& getBinName() const { return _binName; } inline const std::string& getBinName() const { return _binName; }

View File

@ -121,7 +121,7 @@ void ClipNode::setStateSetModes(StateSet& stateset,const StateAttribute::GLModeV
void ClipNode::setLocalStateSetModes(const StateAttribute::GLModeValue value) void ClipNode::setLocalStateSetModes(const StateAttribute::GLModeValue value)
{ {
if (!_stateset) _stateset = new StateSet; if (!_stateset) _stateset = new StateSet;
_stateset->setAllToInherit(); _stateset->clear();
setStateSetModes(*_stateset,value); setStateSetModes(*_stateset,value);
} }

View File

@ -54,7 +54,7 @@ void LightSource::setStateSetModes(StateSet& stateset,StateAttribute::GLModeValu
void LightSource::setLocalStateSetModes(StateAttribute::GLModeValue value) void LightSource::setLocalStateSetModes(StateAttribute::GLModeValue value)
{ {
if (!_stateset) _stateset = new StateSet; if (!_stateset) _stateset = new StateSet;
_stateset->setAllToInherit(); _stateset->clear();
setStateSetModes(*_stateset,value); setStateSetModes(*_stateset,value);
} }

View File

@ -192,7 +192,7 @@ void State::popStateSet()
void State::captureCurrentState(StateSet& stateset) const void State::captureCurrentState(StateSet& stateset) const
{ {
// empty the stateset first. // empty the stateset first.
stateset.setAllToInherit(); stateset.clear();
for(ModeMap::const_iterator mitr=_modeMap.begin(); for(ModeMap::const_iterator mitr=_modeMap.begin();
mitr!=_modeMap.end(); mitr!=_modeMap.end();

View File

@ -368,7 +368,7 @@ void StateSet::setGlobalDefaults()
} }
void StateSet::setAllToInherit() void StateSet::clear()
{ {
_renderingHint = DEFAULT_BIN; _renderingHint = DEFAULT_BIN;
@ -513,7 +513,7 @@ void StateSet::setMode(StateAttribute::GLMode mode, StateAttribute::GLModeValue
} }
} }
void StateSet::setModeToInherit(StateAttribute::GLMode mode) void StateSet::removeMode(StateAttribute::GLMode mode)
{ {
if (!s_textureGLModeSet.isTextureMode(mode)) if (!s_textureGLModeSet.isTextureMode(mode))
{ {
@ -525,7 +525,7 @@ void StateSet::setModeToInherit(StateAttribute::GLMode mode)
notify(NOTICE)<<" assuming setTextureModeToInherit(unit=0,mode) instead."<<std::endl; notify(NOTICE)<<" assuming setTextureModeToInherit(unit=0,mode) instead."<<std::endl;
notify(NOTICE)<<" please change calling code to use appropriate call."<<std::endl; notify(NOTICE)<<" please change calling code to use appropriate call."<<std::endl;
setTextureModeToInherit(0,mode); removeTextureMode(0,mode);
} }
} }
@ -573,7 +573,7 @@ void StateSet::setAttributeAndModes(StateAttribute *attribute, StateAttribute::G
{ {
if (value&StateAttribute::INHERIT) if (value&StateAttribute::INHERIT)
{ {
setAttributeToInherit(attribute->getType()); removeAttribute(attribute->getType());
} }
else else
{ {
@ -592,7 +592,7 @@ void StateSet::setAttributeAndModes(StateAttribute *attribute, StateAttribute::G
} }
} }
void StateSet::setAttributeToInherit(StateAttribute::Type type) void StateSet::removeAttribute(StateAttribute::Type type)
{ {
AttributeList::iterator itr = _attributeList.find(type); AttributeList::iterator itr = _attributeList.find(type);
if (itr!=_attributeList.end()) if (itr!=_attributeList.end())
@ -602,6 +602,20 @@ void StateSet::setAttributeToInherit(StateAttribute::Type type)
} }
} }
void StateSet::removeAttribute(StateAttribute* attribute)
{
if (!attribute) return;
AttributeList::iterator itr = _attributeList.find(attribute->getType());
if (itr!=_attributeList.end())
{
if (itr->second.first != attribute) return;
setAssociatedModes(itr->second.first.get(),StateAttribute::INHERIT);
_attributeList.erase(itr);
}
}
StateAttribute* StateSet::getAttribute(StateAttribute::Type type) StateAttribute* StateSet::getAttribute(StateAttribute::Type type)
{ {
return getAttribute(_attributeList,type); return getAttribute(_attributeList,type);
@ -633,7 +647,7 @@ void StateSet::setTextureMode(unsigned int unit,StateAttribute::GLMode mode, Sta
} }
} }
void StateSet::setTextureModeToInherit(unsigned int unit,StateAttribute::GLMode mode) void StateSet::removeTextureMode(unsigned int unit,StateAttribute::GLMode mode)
{ {
if (s_textureGLModeSet.isTextureMode(mode)) if (s_textureGLModeSet.isTextureMode(mode))
{ {
@ -646,7 +660,7 @@ void StateSet::setTextureModeToInherit(unsigned int unit,StateAttribute::GLMode
notify(NOTICE)<<" assuming setModeToInherit(unit=0,mode) instead."<<std::endl; notify(NOTICE)<<" assuming setModeToInherit(unit=0,mode) instead."<<std::endl;
notify(NOTICE)<<" please change calling code to use appropriate call."<<std::endl; notify(NOTICE)<<" please change calling code to use appropriate call."<<std::endl;
setModeToInherit(mode); removeMode(mode);
} }
} }
@ -696,7 +710,7 @@ void StateSet::setTextureAttributeAndModes(unsigned int unit,StateAttribute *att
{ {
if (value&StateAttribute::INHERIT) if (value&StateAttribute::INHERIT)
{ {
setTextureAttributeToInherit(unit,attribute->getType()); removeTextureAttribute(unit,attribute->getType());
} }
else else
{ {
@ -715,7 +729,7 @@ void StateSet::setTextureAttributeAndModes(unsigned int unit,StateAttribute *att
} }
void StateSet::setTextureAttributeToInherit(unsigned int unit,StateAttribute::Type type) void StateSet::removeTextureAttribute(unsigned int unit,StateAttribute::Type type)
{ {
if (unit>=_textureAttributeList.size()) return; if (unit>=_textureAttributeList.size()) return;
AttributeList& attributeList = _textureAttributeList[unit]; AttributeList& attributeList = _textureAttributeList[unit];

View File

@ -432,7 +432,7 @@ osg::StateSet* ConvertFromInventor::getStateSet(SoCallbackAction* action)
osg::StateSet* stateSet = new osg::StateSet; osg::StateSet* stateSet = new osg::StateSet;
// Inherit modes from the global state // Inherit modes from the global state
stateSet->setAllToInherit(); stateSet->clear();
SbColor ambient, diffuse, specular, emission; SbColor ambient, diffuse, specular, emission;
float shininess, transparency; float shininess, transparency;