Przeglądaj źródła

Merge branch 'new_material_system' into experimental

Kirill Vainer 9 lat temu
rodzic
commit
97281de5c4

+ 31 - 0
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.