@@ -12,40 +12,39 @@ public interface RenderListProvider extends SortItemsProvider {
12
12
13
13
default SortedRenderLists createRenderLists (Viewport viewport ) {
14
14
var sectionPos = viewport .getChunkCoord ();
15
- var renderLists = this .getUnsortedRenderLists ();
16
-
17
- // sort the regions by distance to fix rare region ordering bugs if necessary
18
- if (!this .orderIsSorted ()) {
19
- var cameraX = sectionPos .getX () >> RenderRegion .REGION_WIDTH_SH ;
20
- var cameraY = sectionPos .getY () >> RenderRegion .REGION_HEIGHT_SH ;
21
- var cameraZ = sectionPos .getZ () >> RenderRegion .REGION_LENGTH_SH ;
22
-
23
- var size = renderLists .size ();
24
- var sortItems = this .ensureSortItemsOfLength (size );
25
-
26
- for (var i = 0 ; i < size ; i ++) {
27
- var region = renderLists .get (i ).getRegion ();
28
- var x = Math .abs (region .getX () - cameraX );
29
- var y = Math .abs (region .getY () - cameraY );
30
- var z = Math .abs (region .getZ () - cameraZ );
31
- sortItems [i ] = (x + y + z ) << 16 | i ;
32
- }
33
-
34
- IntArrays .unstableSort (sortItems , 0 , size );
35
-
36
- var sorted = new ObjectArrayList <ChunkRenderList >(size );
37
- for (var i = 0 ; i < size ; i ++) {
38
- var key = sortItems [i ];
39
- var renderList = renderLists .get (key & 0xFFFF );
40
- sorted .add (renderList );
41
- }
42
- renderLists = sorted ;
15
+ var unsorted = this .getUnsortedRenderLists ();
16
+
17
+ // sort the regions by distance to fix rare region ordering problems.
18
+ // regions need to be sorted even when the order is generated by a correctly traversed section tree
19
+ // but sections don't need to be sorted within regions
20
+ var cameraX = sectionPos .getX () >> RenderRegion .REGION_WIDTH_SH ;
21
+ var cameraY = sectionPos .getY () >> RenderRegion .REGION_HEIGHT_SH ;
22
+ var cameraZ = sectionPos .getZ () >> RenderRegion .REGION_LENGTH_SH ;
23
+
24
+ var size = unsorted .size ();
25
+ var sortItems = this .ensureSortItemsOfLength (size );
26
+
27
+ for (var i = 0 ; i < size ; i ++) {
28
+ var region = unsorted .get (i ).getRegion ();
29
+ var x = Math .abs (region .getX () - cameraX );
30
+ var y = Math .abs (region .getY () - cameraY );
31
+ var z = Math .abs (region .getZ () - cameraZ );
32
+ sortItems [i ] = (x + y + z ) << 16 | i ;
43
33
}
44
34
45
- for (var list : renderLists ) {
35
+ IntArrays .unstableSort (sortItems , 0 , size );
36
+
37
+ var sorted = new ObjectArrayList <ChunkRenderList >(size );
38
+ for (var i = 0 ; i < size ; i ++) {
39
+ var key = sortItems [i ];
40
+ var renderList = unsorted .get (key & 0xFFFF );
41
+ sorted .add (renderList );
42
+ }
43
+
44
+ for (var list : sorted ) {
46
45
list .prepareForRender (sectionPos , this );
47
46
}
48
47
49
- return new SortedRenderLists (renderLists );
48
+ return new SortedRenderLists (sorted );
50
49
}
51
50
}
0 commit comments