Просмотр исходного кода

* Fixed issue where attaching scene to viewport does not force it to update

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9568 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Sha..rd 13 лет назад
Родитель
Сommit
5497fcc7e6

+ 2 - 0
engine/src/core/com/jme3/renderer/ViewPort.java

@@ -290,6 +290,7 @@ public class ViewPort {
             throw new IllegalArgumentException( "Scene cannot be null." );
         }
         sceneList.add(scene);
+        scene.forceRefresh(true, false, true);
     }
 
     /**
@@ -304,6 +305,7 @@ public class ViewPort {
             throw new IllegalArgumentException( "Scene cannot be null." );
         }
         sceneList.remove(scene);
+        scene.forceRefresh(true, false, true);
     }
 
     /**

+ 22 - 3
engine/src/core/com/jme3/scene/Spatial.java

@@ -117,8 +117,9 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
      * Refresh flag types
      */
     protected static final int RF_TRANSFORM = 0x01, // need light resort + combine transforms
-            RF_BOUND = 0x02,
-            RF_LIGHTLIST = 0x04; // changes in light lists          
+                               RF_BOUND = 0x02,
+                               RF_LIGHTLIST = 0x04; // changes in light lists 
+    
     protected CullHint cullHint = CullHint.Inherit;
     protected BatchHint batchHint = BatchHint.Inherit;
     /** 
@@ -213,7 +214,6 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
     protected void setBoundRefresh() {
         refreshFlags |= RF_BOUND;
 
-        // XXX: Replace with a recursive call?
         Spatial p = parent;
         while (p != null) {
             if ((p.refreshFlags & RF_BOUND) != 0) {
@@ -224,6 +224,25 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
             p = p.parent;
         }
     }
+    
+    /**
+     * (Internal use only) Forces a refresh of the given types of data.
+     * 
+     * @param transforms Refresh world transform based on parents'
+     * @param bounds Refresh bounding volume data based on child nodes
+     * @param lights Refresh light list based on parents'
+     */
+    public void forceRefresh(boolean transforms, boolean bounds, boolean lights) {
+        if (transforms) {
+            setTransformRefresh();
+        }
+        if (bounds) {
+            setBoundRefresh();
+        }
+        if (lights) {
+            setLightListRefresh();
+        }
+    }
 
     /**
      * <code>checkCulling</code> checks the spatial with the camera to see if it