|
|
@@ -12,6 +12,10 @@ function painterSortStable( a, b ) {
|
|
|
|
|
|
return a.material.id - b.material.id;
|
|
|
|
|
|
+ } else if ( a.materialVariant !== b.materialVariant ) {
|
|
|
+
|
|
|
+ return a.materialVariant - b.materialVariant;
|
|
|
+
|
|
|
} else if ( a.z !== b.z ) {
|
|
|
|
|
|
return a.z - b.z;
|
|
|
@@ -66,6 +70,15 @@ function WebGLRenderList() {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ function materialVariant( object ) {
|
|
|
+
|
|
|
+ let variant = 0;
|
|
|
+ if ( object.isInstancedMesh ) variant += 2;
|
|
|
+ if ( object.isSkinnedMesh ) variant += 1;
|
|
|
+ return variant;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
|
|
|
|
|
|
let renderItem = renderItems[ renderItemsIndex ];
|
|
|
@@ -77,6 +90,7 @@ function WebGLRenderList() {
|
|
|
object: object,
|
|
|
geometry: geometry,
|
|
|
material: material,
|
|
|
+ materialVariant: materialVariant( object ),
|
|
|
groupOrder: groupOrder,
|
|
|
renderOrder: object.renderOrder,
|
|
|
z: z,
|
|
|
@@ -91,6 +105,7 @@ function WebGLRenderList() {
|
|
|
renderItem.object = object;
|
|
|
renderItem.geometry = geometry;
|
|
|
renderItem.material = material;
|
|
|
+ renderItem.materialVariant = materialVariant( object );
|
|
|
renderItem.groupOrder = groupOrder;
|
|
|
renderItem.renderOrder = object.renderOrder;
|
|
|
renderItem.z = z;
|