diff --git a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java index 84007913f..0aec00236 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java +++ b/jme3-core/src/main/java/com/jme3/renderer/RenderManager.java @@ -585,6 +585,37 @@ public class RenderManager { renderGeometry(gl.get(i)); } } + + public void renderGeometryListNew(GeometryList gl) { + int size = gl.size(); + int pass = 0; + + // Keep rendering geometries in the list + // checking each time if they need more passes. + // Geometries which need more passes are added to the beginning + // of the list and then another pass is executed. + // In the end, all geometries will have their passes rendered. + while (true) { + int writeIdx = 0; + for (int i = 0; i < size; i++) { + Geometry obj = gl.get(i); + renderGeometry(obj); + boolean morePasses = true; + if (morePasses) { + // Geometry wants to be rendered again. + // Move it to the beginning of the list. + gl.set(writeIdx++, obj); + } + } + // No geometries were written to the beginning of the list - + // all passes are finished. + if (writeIdx == 0) { + return; + } + pass++; + size = writeIdx; + } + } /** * Preloads a scene for rendering.