#include <OpenThreads/ScopedLock>
-#include <osg/observer_ptr>
#include <osg/ref_ptr>
#include <osg/Group>
#include <osg/NodeCallback>
if (!texture)
return;
- // Hmm, true??
- texture->setDataVariance(osg::Object::STATIC);
+ // Do not touch dynamically generated textures.
+ if (texture->getReadPBuffer())
+ return;
+ if (texture->getDataVariance() == osg::Object::DYNAMIC)
+ return;
+ // If no image attached, we assume this one is dynamically generated
Image* image = texture->getImage(0);
if (!image)
return;
if (!texture)
return;
+ // Cannot be static if this is a render to texture thing
+ if (texture->getReadPBuffer())
+ return;
+ if (texture->getDataVariance() == osg::Object::DYNAMIC)
+ return;
+ // If no image attached, we assume this one is dynamically generated
+ Image* image = texture->getImage(0);
+ if (!image)
+ return;
+
texture->setDataVariance(Object::STATIC);
}
{
if (!stateSet)
return;
- SGTextureStateAttributeVisitor::apply(stateSet);
stateSet->setDataVariance(Object::STATIC);
- }
-};
-
-class SGAcMaterialCrippleVisitor : public SGStateAttributeVisitor {
-public:
- virtual void apply(StateSet::RefAttributePair& refAttr)
- {
- Material* material;
- material = dynamic_cast<Material*>(refAttr.first.get());
- if (!material)
- return;
- material->setColorMode(Material::AMBIENT_AND_DIFFUSE);
+ SGTextureStateAttributeVisitor::apply(stateSet);
}
};
}
if (res.loadedFromCache())
- SG_LOG(SG_IO, SG_INFO, "Returning cached image \""
+ SG_LOG(SG_IO, SG_BULK, "Returning cached image \""
<< res.getImage()->getFileName() << "\"");
else
- SG_LOG(SG_IO, SG_INFO, "Reading image \""
+ SG_LOG(SG_IO, SG_BULK, "Reading image \""
<< res.getImage()->getFileName() << "\"");
return res;
osg::Node* cached
= dynamic_cast<Node*>(registry->getFromObjectCache(fileName));
if (cached)
- SG_LOG(SG_IO, SG_INFO, "Got cached model \""
+ SG_LOG(SG_IO, SG_BULK, "Got cached model \""
<< fileName << "\"");
else
- SG_LOG(SG_IO, SG_INFO, "Reading model \""
+ SG_LOG(SG_IO, SG_BULK, "Reading model \""
<< fileName << "\"");
return cached;
}
void
BuildLeafBVHPolicy::buildBVH(const std::string& fileName, osg::Node* node)
{
- SG_LOG(SG_IO, SG_INFO, "Building leaf attached boundingvolume tree for \""
+ SG_LOG(SG_IO, SG_BULK, "Building leaf attached boundingvolume tree for \""
<< fileName << "\".");
BoundingVolumeBuildVisitor bvBuilder(true);
node->accept(bvBuilder);
void
BuildGroupBVHPolicy::buildBVH(const std::string& fileName, osg::Node* node)
{
- SG_LOG(SG_IO, SG_INFO, "Building group attached boundingvolume tree for \""
+ SG_LOG(SG_IO, SG_BULK, "Building group attached boundingvolume tree for \""
<< fileName << "\".");
BoundingVolumeBuildVisitor bvBuilder(false);
node->accept(bvBuilder);
void
NoBuildBVHPolicy::buildBVH(const std::string& fileName, osg::Node*)
{
- SG_LOG(SG_IO, SG_INFO, "Omitting boundingvolume tree for \""
+ SG_LOG(SG_IO, SG_BULK, "Omitting boundingvolume tree for \""
<< fileName << "\".");
}
ScopedLock<ReentrantMutex> lock(readerMutex);
// XXX Workaround for OSG plugin bug.
- Registry* registry = Registry::instance();
+// Registry* registry = Registry::instance();
ReaderWriter::ReadResult res;
CallbackMap::iterator iter
= nodeCallbackMap.find(getFileExtension(fileName));
transform->setDataVariance(Object::STATIC);
transform->setMatrix(m);
transform->addChild(node);
- // Ok, this step is questionable.
- // It is there to have the same visual appearance of ac objects for the
- // first cut. Osg's ac3d loader will correctly set materials from the
- // ac file. But the old plib loader used GL_AMBIENT_AND_DIFFUSE for the
- // materials that in effect igored the ambient part specified in the
- // file. We emulate that for the first cut here by changing all
- // ac models here. But in the long term we should use the
- // unchanged model and fix the input files instead ...
- SGAcMaterialCrippleVisitor matCriple;
- root->accept(matCriple);
+
return root;
}
};