@@ -2015,31 +2015,48 @@ public void RenderStatic(RenderState state, Span<MultidrawEntry> entries)
20152015
20162016 GetUniformData ( in state , false , shader , out var vertexUniformData , out var fragmentUniformData ) ;
20172017
2018- var size = indirectCommandInstance ;
2018+ var commandCount = 0 ;
20192019
20202020 foreach ( var entry in entries )
20212021 {
2022- size += entry . transforms . Count ;
2022+ if ( entry . transforms . Count == 0 )
2023+ {
2024+ continue ;
2025+ }
2026+
2027+ commandCount ++ ;
2028+ }
2029+
2030+ if ( indirectCommandPosition + commandCount > indirectCommands . Length )
2031+ {
2032+ Array . Resize ( ref indirectCommands , indirectCommandPosition + commandCount ) ;
20232033 }
20242034
2025- var targetSize = indirectCommands . Length ;
2035+ var instanceCount = 0 ;
20262036
2027- while ( targetSize < size )
2037+ foreach ( var entry in entries )
20282038 {
2029- targetSize *= 2 ;
2039+ instanceCount += entry . transforms . Count ;
20302040 }
20312041
2032- if ( targetSize > indirectCommands . Length )
2042+ if ( indirectCommandInstance + instanceCount > indirectEntityIndices . Length )
20332043 {
2034- Array . Resize ( ref indirectCommands , targetSize ) ;
2035- Array . Resize ( ref indirectEntityIndices , targetSize ) ;
2044+ Array . Resize ( ref indirectEntityIndices , indirectCommandInstance + instanceCount ) ;
20362045 }
20372046
2047+ var commandIndex = 0 ;
2048+
20382049 for ( var i = 0 ; i < entries . Length ; i ++ )
20392050 {
2040- ref var command = ref indirectCommands [ indirectCommandPosition + i ] ;
20412051 ref var entry = ref entries [ i ] ;
20422052
2053+ if ( entry . transforms . Count == 0 )
2054+ {
2055+ continue ;
2056+ }
2057+
2058+ ref var command = ref indirectCommands [ indirectCommandPosition + commandIndex ++ ] ;
2059+
20432060 var indices = ( uint ) entry . entries . indicesEntry . length ;
20442061 var instances = ( uint ) entry . transforms . Count ;
20452062 var firstInstance = ( uint ) indirectCommandInstance ;
@@ -2067,7 +2084,7 @@ public void RenderStatic(RenderState state, Span<MultidrawEntry> entries)
20672084
20682085 ref var entityIndex = ref indirectEntityIndices [ indirectCommandInstance ++ ] ;
20692086
2070- var index = ( uint ) ( entry . transforms [ j ] . Entity . Identifier . ID - 1 ) ; ;
2087+ var index = ( uint ) ( entry . transforms [ j ] . Entity . Identifier . ID - 1 ) ;
20712088
20722089 if ( ! needsIndirectBufferUpdate )
20732090 {
@@ -2080,9 +2097,9 @@ public void RenderStatic(RenderState state, Span<MultidrawEntry> entries)
20802097
20812098 AddCommand ( new SDLGPURenderStaticCommand ( this , state , pipeline , state . vertexTextures , state . fragmentTextures ,
20822099 state . shaderInstance . entityTransformsBufferBinding , vertexUniformData , fragmentUniformData , state . shaderInstance . attributes ,
2083- indirectCommandPosition , entries . Length ) ) ;
2100+ indirectCommandPosition , commandIndex ) ) ;
20842101
2085- indirectCommandPosition += entries . Length ;
2102+ indirectCommandPosition += commandIndex ;
20862103 }
20872104
20882105 public void RenderTransient < T > ( Span < T > vertices , VertexLayout layout , Span < ushort > indices , RenderState state )
0 commit comments