diff --git a/engine/src/core/com/jme3/renderer/ViewPort.java b/engine/src/core/com/jme3/renderer/ViewPort.java index c4f2c5c89..2c96665c2 100644 --- a/engine/src/core/com/jme3/renderer/ViewPort.java +++ b/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); } /** diff --git a/engine/src/core/com/jme3/scene/Spatial.java b/engine/src/core/com/jme3/scene/Spatial.java index a5e72ebfd..b4157ab55 100644 --- a/engine/src/core/com/jme3/scene/Spatial.java +++ b/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(); + } + } /** * checkCulling checks the spatial with the camera to see if it