Added osg::State::getCurrentMode and osg::State::getCurrentAttribute().

Aded osg::clampAbove(..) and osg::clampBelow() template functions to
include/osg/Math.
This commit is contained in:
Robert Osfield 2002-05-21 08:59:26 +00:00
parent a57eae47f6
commit b8d8a8be27
3 changed files with 63 additions and 21 deletions

View File

@ -73,6 +73,12 @@ const double PI_4 = 0.78539816339744830962;
template<typename T>
inline T clampTo(T v,T minimum,T maximum) { return v<minimum?minimum:v>maximum?maximum:v; }
template<typename T>
inline T clampAbove(T v,T minimum) { return v<minimum?minimum:v; }
template<typename T>
inline T clampBelow(T v,T maximum) { return v>maximum?maximum:v; }
template<typename T>
inline T sign(T v) { return v<0?-1:1; }

View File

@ -53,20 +53,6 @@ class SG_EXPORT State : public Referenced
/** reset the state object to an empty stack.*/
void reset();
/** apply an OpenGL mode if required. */
inline const bool applyMode(const StateAttribute::GLMode mode,const bool enabled)
{
return applyMode(mode,enabled,_modeMap[mode]);
}
/** apply an attribute if required. */
inline const bool applyAttribute(const StateAttribute* attribute)
{
return applyAttribute(attribute,_attributeMap[attribute->getType()]);
}
inline void applyProjectionMatrix(const osg::Matrix* matrix)
{
if (_projection!=matrix)
@ -117,23 +103,39 @@ class SG_EXPORT State : public Referenced
ClippingVolume getClippingVolume() const;
/** apply stateset.*/
/** Apply stateset.*/
void apply(const StateSet* dstate);
/** apply the state.*/
/** Apply the state.*/
void apply();
/** mode has been set externally, update state to reflect this setting.*/
/** Apply an OpenGL mode if required. */
inline const bool applyMode(const StateAttribute::GLMode mode,const bool enabled)
{
return applyMode(mode,enabled,_modeMap[mode]);
}
/** Apply an attribute if required. */
inline const bool applyAttribute(const StateAttribute* attribute)
{
return applyAttribute(attribute,_attributeMap[attribute->getType()]);
}
/** Mode has been set externally, update state to reflect this setting.*/
void haveAppliedMode(const StateAttribute::GLMode mode,const StateAttribute::GLModeValue value);
/** mode has been set externally, therefore dirty the associated mode in osg::State
/** Mode has been set externally, therefore dirty the associated mode in osg::State
* so it is applied on next call to osg::State::apply(..)*/
void haveAppliedMode(const StateAttribute::GLMode mode);
/** attribute has been applied externally, update state to reflect this setting.*/
/** Attribute has been applied externally, update state to reflect this setting.*/
void haveAppliedAttribute(const StateAttribute* attribute);
/** attribute has been applied externally,
/** Attribute has been applied externally,
* and therefore this attribute type has been dirtied
* and will need to be re-appplied on next osg::State.apply(..).
* note, if you have an osg::StateAttribute which you have applied externally
@ -142,6 +144,12 @@ class SG_EXPORT State : public Referenced
* that only changed state will be applied.*/
void haveAppliedAttribute(const StateAttribute::Type type);
/** Get whether the current specified mode is enabled (true) or disabled (false).*/
const bool getCurrentMode(const StateAttribute::GLMode mode) const;
/** Get the current specified attribute, return NULL is one has not yet been applied.*/
const StateAttribute* getCurrentAttribute(const StateAttribute::Type type) const;
/** Set the current OpenGL context uniqueID.
Note, it is the application developers responsibility to

View File

@ -563,7 +563,6 @@ void State::haveAppliedAttribute(const StateAttribute::Type type)
if (itr!=_attributeMap.end())
{
AttributeStack& as = itr->second;
as.last_applied_attribute = 0L;
// will need to update this attribute on next apply so set it to changed.
@ -571,6 +570,35 @@ void State::haveAppliedAttribute(const StateAttribute::Type type)
}
}
const bool State::getCurrentMode(const StateAttribute::GLMode mode) const
{
ModeMap::const_iterator itr = _modeMap.find(mode);
if (itr!=_modeMap.end())
{
const ModeStack& ms = itr->second;
return ms.last_applied_value;
}
else
{
return false;
}
}
const StateAttribute* State::getCurrentAttribute(const StateAttribute::Type type) const
{
AttributeMap::const_iterator itr = _attributeMap.find(type);
if (itr!=_attributeMap.end())
{
const AttributeStack& as = itr->second;
return as.last_applied_attribute;
}
else
{
return NULL;
}
}
ClippingVolume State::getClippingVolume() const
{
ClippingVolume cv;