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) {