]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/ModelRegistry.cxx
Add writeLocalData functions for internal scenegraph classes
[simgear.git] / simgear / scene / model / ModelRegistry.cxx
index 0ebdf06f6550cfe23833855c67c18c4624578955..3b5b545c4101b48cd93129b34a716c9bef01cf0d 100644 (file)
@@ -29,7 +29,6 @@
 
 #include <OpenThreads/ScopedLock>
 
-#include <osg/observer_ptr>
 #include <osg/ref_ptr>
 #include <osg/Group>
 #include <osg/NodeCallback>
@@ -258,9 +257,13 @@ public:
     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;
@@ -285,6 +288,16 @@ public:
     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);
   }
 
@@ -292,20 +305,8 @@ public:
   {
     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);
   }
 };
 
@@ -346,10 +347,10 @@ ModelRegistry::readImage(const string& fileName,
         }
         
         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;
@@ -364,10 +365,10 @@ osg::Node* DefaultCachePolicy::find(const string& fileName,
     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;
 }
@@ -463,7 +464,7 @@ string OSGSubstitutePolicy::substitute(const string& name,
 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);
@@ -472,7 +473,7 @@ BuildLeafBVHPolicy::buildBVH(const std::string& fileName, osg::Node* node)
 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);
@@ -481,7 +482,7 @@ BuildGroupBVHPolicy::buildBVH(const std::string& fileName, osg::Node* node)
 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 << "\".");
 }
 
@@ -511,7 +512,7 @@ ModelRegistry::readNode(const string& 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));
@@ -592,16 +593,7 @@ struct ACProcessPolicy {
         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;
     }
 };