Просмотр исходного кода

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

Nehon 11 лет назад
Родитель
Сommit
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);
+
+
         }
     }
 }