From 3a809e61f52419da87f90334aeab0e82a7294c9f Mon Sep 17 00:00:00 2001 From: "rem..om" Date: Sun, 20 Jan 2013 09:00:55 +0000 Subject: [PATCH] BatchNode now properly unbatch subgraph when a Node is removed from it git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10112 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- engine/src/core/com/jme3/scene/BatchNode.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/engine/src/core/com/jme3/scene/BatchNode.java b/engine/src/core/com/jme3/scene/BatchNode.java index 8e2d64268..60d39f02c 100644 --- a/engine/src/core/com/jme3/scene/BatchNode.java +++ b/engine/src/core/com/jme3/scene/BatchNode.java @@ -247,6 +247,34 @@ public class BatchNode extends Node implements Savable { } } + //in case the detached spatial is a node, we unbatch all geometries in its subegraph + @Override + public Spatial detachChildAt(int index) { + Spatial s = super.detachChildAt(index); + if (s instanceof Node) { + unbatchSubGraph(s); + } + return s; + } + + /** + * recursively visit the subgraph and unbatch geometries + * @param s + */ + private void unbatchSubGraph(Spatial s) { + if (s instanceof Node) { + for (Spatial sp : ((Node) s).getChildren()) { + unbatchSubGraph(sp); + } + } else if (s instanceof Geometry) { + Geometry g = (Geometry) s; + if (g.isBatched()) { + g.unBatch(); + } + } + } + + private void gatherGeomerties(Map> map, Spatial n, boolean rebatch) { if (n instanceof Geometry) {