فهرست منبع

Revert back to merge sort for geometry sorting.
Some issues have been reported, and are difficult to track as they happen randomly.

Nehon 11 سال پیش
والد
کامیت
04f8956992
1فایلهای تغییر یافته به همراه11 افزوده شده و 9 حذف شده
  1. 11 9
      jme3-core/src/main/java/com/jme3/renderer/queue/GeometryList.java

+ 11 - 9
jme3-core/src/main/java/com/jme3/renderer/queue/GeometryList.java

@@ -33,7 +33,7 @@ package com.jme3.renderer.queue;
 
 import com.jme3.renderer.Camera;
 import com.jme3.scene.Geometry;
-import com.jme3.util.ListSort;
+import com.jme3.util.SortUtil;
 
 /**
  * This class is a special purpose list of {@link Geometry} objects for render
@@ -47,8 +47,8 @@ public class GeometryList {
 
     private static final int DEFAULT_SIZE = 32;
 
-    private Geometry[] geometries;    
-    private ListSort listSort;
+    private Geometry[] geometries;
+    private Geometry[] geometries2;
     private int size;
     private GeometryComparator comparator;
 
@@ -60,9 +60,9 @@ public class GeometryList {
      */
     public GeometryList(GeometryComparator comparator) {
         size = 0;
-        geometries = new Geometry[DEFAULT_SIZE];      
+        geometries = new Geometry[DEFAULT_SIZE];
+        geometries2 = new Geometry[DEFAULT_SIZE];
         this.comparator = comparator;
-        listSort = new ListSort<Geometry>();
     }
 
     public void setComparator(GeometryComparator comparator) {
@@ -118,6 +118,8 @@ public class GeometryList {
             Geometry[] temp = new Geometry[size * 2];
             System.arraycopy(geometries, 0, temp, 0, size);
             geometries = temp; // original list replaced by double-size list
+
+            geometries2 = new Geometry[size * 2];
         }
         geometries[size++] = g;
     }
@@ -139,10 +141,10 @@ public class GeometryList {
     public void sort() {
         if (size > 1) {
             // sort the spatial list using the comparator
-            if(listSort.getLength() != size){
-                listSort.allocateStack(size);
-            }                       
-            listSort.sort(geometries,comparator);
+            System.arraycopy(geometries, 0, geometries2, 0, size);
+            SortUtil.msort(geometries2, geometries, 0, size-1, comparator);
+
+
         }
     }
 }