]> 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 2e92c836ee6364acea6c555831160f0ff1544e4e..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,8 +305,8 @@ public:
   {
     if (!stateSet)
       return;
-    SGTextureStateAttributeVisitor::apply(stateSet);
     stateSet->setDataVariance(Object::STATIC);
+    SGTextureStateAttributeVisitor::apply(stateSet);
   }
 };
 
@@ -334,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;
@@ -352,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;
 }
@@ -451,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);
@@ -460,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);
@@ -469,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 << "\".");
 }
 
@@ -499,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));