@@ -12,6 +12,10 @@ function painterSortStable( a, b ) {
1212
1313 return a . material . id - b . material . id ;
1414
15+ } else if ( a . materialVariant !== b . materialVariant ) {
16+
17+ return a . materialVariant - b . materialVariant ;
18+
1519 } else if ( a . z !== b . z ) {
1620
1721 return a . z - b . z ;
@@ -66,6 +70,15 @@ function WebGLRenderList() {
6670
6771 }
6872
73+ function materialVariant ( object ) {
74+
75+ let variant = 0 ;
76+ if ( object . isInstancedMesh ) variant += 2 ;
77+ if ( object . isSkinnedMesh ) variant += 1 ;
78+ return variant ;
79+
80+ }
81+
6982 function getNextRenderItem ( object , geometry , material , groupOrder , z , group ) {
7083
7184 let renderItem = renderItems [ renderItemsIndex ] ;
@@ -77,6 +90,7 @@ function WebGLRenderList() {
7790 object : object ,
7891 geometry : geometry ,
7992 material : material ,
93+ materialVariant : materialVariant ( object ) ,
8094 groupOrder : groupOrder ,
8195 renderOrder : object . renderOrder ,
8296 z : z ,
@@ -91,6 +105,7 @@ function WebGLRenderList() {
91105 renderItem . object = object ;
92106 renderItem . geometry = geometry ;
93107 renderItem . material = material ;
108+ renderItem . materialVariant = materialVariant ( object ) ;
94109 renderItem . groupOrder = groupOrder ;
95110 renderItem . renderOrder = object . renderOrder ;
96111 renderItem . z = z ;
0 commit comments