Introduced new osg::Object::DataVariance type of UNSPECIFIED, and changed the deafult
values of DataVariance to UNSPECIFIED to all types.
This commit is contained in:
@@ -246,8 +246,6 @@ void Drawable::flushDeletedVertexBufferObjects(unsigned int contextID,double /*c
|
||||
|
||||
Drawable::Drawable()
|
||||
{
|
||||
setDataVariance(osg::Object::STATIC);
|
||||
|
||||
_boundingBoxComputed = false;
|
||||
|
||||
// Note, if your are defining a subclass from drawable which is
|
||||
@@ -296,7 +294,10 @@ Drawable::~Drawable()
|
||||
|
||||
void Drawable::computeDataVariance()
|
||||
{
|
||||
if (getDataVariance() != UNSPECIFIED) return;
|
||||
|
||||
bool dynamic = false;
|
||||
|
||||
if (getUpdateCallback() ||
|
||||
getEventCallback() ||
|
||||
getCullCallback())
|
||||
|
||||
@@ -80,8 +80,6 @@ bool osg::isTextureMode(StateAttribute::GLMode mode)
|
||||
|
||||
StateSet::StateSet()
|
||||
{
|
||||
setDataVariance(osg::Object::STATIC);
|
||||
|
||||
_renderingHint = DEFAULT_BIN;
|
||||
|
||||
_numChildrenRequiringUpdateTraversal = 0;
|
||||
@@ -180,17 +178,18 @@ void StateSet::computeDataVariance()
|
||||
}
|
||||
|
||||
// run attribute callbacks
|
||||
|
||||
for(AttributeList::iterator itr=_attributeList.begin();
|
||||
itr!=_attributeList.end();
|
||||
++itr)
|
||||
{
|
||||
if (itr->second.first->getUpdateCallback() ||
|
||||
itr->second.first->getEventCallback() ||
|
||||
itr->second.first->getDataVariance()==DYNAMIC)
|
||||
if (itr->second.first->getDataVariance()==UNSPECIFIED &&
|
||||
(itr->second.first->getUpdateCallback() || itr->second.first->getEventCallback()))
|
||||
{
|
||||
dynamic = true;
|
||||
itr->second.first->setDataVariance(DYNAMIC);
|
||||
}
|
||||
|
||||
if (itr->second.first->getDataVariance()==DYNAMIC) dynamic = true;
|
||||
}
|
||||
|
||||
// run texture attribute callbacks.
|
||||
@@ -201,13 +200,13 @@ void StateSet::computeDataVariance()
|
||||
itr!=attributeList.end();
|
||||
++itr)
|
||||
{
|
||||
if (itr->second.first->getUpdateCallback() ||
|
||||
itr->second.first->getEventCallback() ||
|
||||
itr->second.first->getDataVariance()==DYNAMIC)
|
||||
if (itr->second.first->getDataVariance()==UNSPECIFIED &&
|
||||
(itr->second.first->getUpdateCallback() || itr->second.first->getEventCallback()))
|
||||
{
|
||||
itr->second.first->setDataVariance(DYNAMIC);
|
||||
dynamic = true;
|
||||
itr->second.first->setDataVariance(DYNAMIC);
|
||||
}
|
||||
|
||||
if (itr->second.first->getDataVariance()==DYNAMIC) dynamic = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,16 +216,17 @@ void StateSet::computeDataVariance()
|
||||
uitr != _uniformList.end();
|
||||
++uitr)
|
||||
{
|
||||
if (uitr->second.first->getUpdateCallback() ||
|
||||
uitr->second.first->getEventCallback() ||
|
||||
uitr->second.first->getDataVariance()==DYNAMIC)
|
||||
if (uitr->second.first->getDataVariance()==UNSPECIFIED &&
|
||||
(uitr->second.first->getUpdateCallback() || uitr->second.first->getEventCallback()))
|
||||
{
|
||||
uitr->second.first->setDataVariance(DYNAMIC);
|
||||
dynamic = true;
|
||||
}
|
||||
|
||||
if (uitr->second.first->getDataVariance()==DYNAMIC) dynamic = true;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
if (dynamic)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"StateSet::computeDataVariance setting to DYNAMIC"<<std::endl;
|
||||
@@ -237,7 +237,10 @@ void StateSet::computeDataVariance()
|
||||
}
|
||||
#endif
|
||||
|
||||
setDataVariance(dynamic ? DYNAMIC : STATIC);
|
||||
if (getDataVariance()==UNSPECIFIED)
|
||||
{
|
||||
setDataVariance(dynamic ? DYNAMIC : STATIC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ using namespace osg;
|
||||
Uniform::Uniform() :
|
||||
_type(UNDEFINED), _numElements(0), _modifiedCount(0)
|
||||
{
|
||||
setDataVariance(STATIC);
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +38,6 @@ Uniform::Uniform( Type type, const std::string& name, int numElements ) :
|
||||
{
|
||||
setName(name);
|
||||
setNumElements(numElements);
|
||||
setDataVariance(STATIC);
|
||||
allocateDataArray();
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ void Object::write(DataOutputStream* out)
|
||||
{
|
||||
case(osg::Object::STATIC): out->writeChar((char)0); break;
|
||||
case(osg::Object::DYNAMIC): out->writeChar((char)1); break;
|
||||
case(osg::Object::UNSPECIFIED): out->writeChar((char)2); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,6 +56,7 @@ void Object::read(DataInputStream* in){
|
||||
{
|
||||
case 0: setDataVariance(osg::Object::STATIC);break;
|
||||
case 1: setDataVariance(osg::Object::DYNAMIC);break;
|
||||
case 2: setDataVariance(osg::Object::UNSPECIFIED);break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
|
||||
@@ -41,6 +41,12 @@ bool Object_readLocalData(Object& obj, Input& fr)
|
||||
fr +=2 ;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
else if (fr[1].matchWord("UNSPECIFIED"))
|
||||
{
|
||||
obj.setDataVariance(osg::Object::UNSPECIFIED);
|
||||
fr +=2 ;
|
||||
iteratorAdvanced = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (fr.matchSequence("name %s"))
|
||||
@@ -74,8 +80,9 @@ bool Object_writeLocalData(const Object& obj, Output& fw)
|
||||
{
|
||||
switch(obj.getDataVariance())
|
||||
{
|
||||
case(osg::Object::STATIC): fw.indent() << "DataVariance STATIC" << std::endl;break;
|
||||
default: fw.indent() << "DataVariance DYNAMIC" << std::endl;break;
|
||||
case(osg::Object::STATIC): fw.indent() << "DataVariance STATIC" << std::endl;break;
|
||||
case(osg::Object::UNSPECIFIED): fw.indent() << "DataVariance UNSPECIFIED" << std::endl;break;
|
||||
default: fw.indent() << "DataVariance DYNAMIC" << std::endl;break;
|
||||
}
|
||||
|
||||
if (!obj.getName().empty()) fw.indent() << "name "<<fw.wrapString(obj.getName())<< std::endl;
|
||||
|
||||
@@ -134,6 +134,12 @@ void Optimizer::optimize(osg::Node* node, unsigned int options)
|
||||
stats.print(osg::notify(osg::NOTICE));
|
||||
}
|
||||
|
||||
if (options & STATIC_OBJECT_DETECTION)
|
||||
{
|
||||
StaticObjectDetectionVisitor sodv;
|
||||
node->accept(sodv);
|
||||
}
|
||||
|
||||
if (options & TESSELLATE_GEOMETRY)
|
||||
{
|
||||
osg::notify(osg::INFO)<<"Optimizer::optimize() doing TESSELLATE_GEOMETRY"<<std::endl;
|
||||
@@ -303,12 +309,6 @@ void Optimizer::optimize(osg::Node* node, unsigned int options)
|
||||
sv.divide();
|
||||
}
|
||||
|
||||
if (options & STATIC_OBJECT_DETECTION)
|
||||
{
|
||||
StaticObjectDetectionVisitor sodv;
|
||||
node->accept(sodv);
|
||||
}
|
||||
|
||||
if (osg::getNotifyLevel()>=osg::INFO)
|
||||
{
|
||||
stats.reset();
|
||||
@@ -789,7 +789,7 @@ class CollectLowestTransformsVisitor : public BaseOptimizerVisitor
|
||||
{
|
||||
if (transform)
|
||||
{
|
||||
if (transform->getDataVariance()==osg::Transform::DYNAMIC) _moreThanOneMatrixRequired=true;
|
||||
if (transform->getDataVariance()!=osg::Transform::STATIC) _moreThanOneMatrixRequired=true;
|
||||
else if (transform->getReferenceFrame()!=osg::Transform::RELATIVE_RF) _moreThanOneMatrixRequired=true;
|
||||
else
|
||||
{
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
BEGIN_ENUM_REFLECTOR(osg::Object::DataVariance)
|
||||
I_EnumLabel(osg::Object::DYNAMIC);
|
||||
I_EnumLabel(osg::Object::STATIC);
|
||||
I_EnumLabel(osg::Object::UNSPECIFIED);
|
||||
END_REFLECTOR
|
||||
|
||||
BEGIN_ABSTRACT_OBJECT_REFLECTOR(osg::Object)
|
||||
@@ -86,7 +87,7 @@ BEGIN_ABSTRACT_OBJECT_REFLECTOR(osg::Object)
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setDataVariance__DataVariance,
|
||||
"Set the data variance of this object. ",
|
||||
"Can be set to either STATIC for values that do not change over the lifetime of the object, or DYNAMIC for values that vary over the lifetime of the object. The DataVariance value can be used by routines such as optimzation codes that wish to share static data. ");
|
||||
"Can be set to either STATIC for values that do not change over the lifetime of the object, or DYNAMIC for values that vary over the lifetime of the object. The DataVariance value can be used by routines such as optimzation codes that wish to share static data. UNSPECIFIED is used to sepecify that the DataVariance hasn't been set yet. ");
|
||||
I_Method0(osg::Object::DataVariance, getDataVariance,
|
||||
Properties::NON_VIRTUAL,
|
||||
__DataVariance__getDataVariance,
|
||||
|
||||
Reference in New Issue
Block a user