@@ -353,6 +353,7 @@ pub(crate) fn apply_render_buffer_mesh_pipeline_override(
353353 if !crate :: particles:: is_generated_billboard_mesh_asset_id ( mesh_asset_id) {
354354 return ;
355355 }
356+ batch_key. uses_render_buffer_billboard = true ;
356357 if let RasterPipelineKind :: EmbeddedStem ( stem) = & batch_key. pipeline
357358 && stem. as_ref ( ) . starts_with ( "billboardunlit" )
358359 {
@@ -424,6 +425,7 @@ fn batch_key_from_resolved(
424425 pipeline : r. pipeline . clone ( ) ,
425426 shader_asset_id : r. shader_asset_id ,
426427 shader_specialization : r. shader_specialization ,
428+ uses_render_buffer_billboard : false ,
427429 material_asset_id,
428430 property_block_slot0 : property_block_id,
429431 skinned,
@@ -787,13 +789,52 @@ mod ui_rect_clip_tests {
787789 panic ! ( "expected embedded billboard pipeline" ) ;
788790 } ;
789791 assert_eq ! ( stem. as_ref( ) , "billboardunlit_default" ) ;
792+ assert ! ( key. uses_render_buffer_billboard) ;
790793 assert ! ( key. embedded_needs_uv0) ;
791794 assert ! ( key. embedded_needs_color) ;
792795 assert ! ( key. embedded_needs_tangent) ;
793796 assert ! ( key. embedded_raw_tangent_payload) ;
794797 assert ! ( key. embedded_raw_normal_payload) ;
795798 }
796799
800+ #[ test]
801+ fn generated_billboard_mesh_marks_existing_billboard_pipeline_as_render_buffer ( ) {
802+ let mut store = MaterialPropertyStore :: new ( ) ;
803+ store. set_shader_asset_for_material ( 7 , 99 ) ;
804+ let dict = MaterialDictionary :: new ( & store) ;
805+ let mut router = MaterialRouter :: new ( RasterPipelineKind :: Null ) ;
806+ router. set_shader_pipeline (
807+ 99 ,
808+ RasterPipelineKind :: EmbeddedStem ( Arc :: from ( "billboardunlit_default" ) ) ,
809+ ) ;
810+ let ids = MaterialPipelinePropertyIds :: new ( & PropertyIdRegistry :: new ( ) ) ;
811+ let resolved =
812+ resolve_material_batch ( 7 , None , & dict, & router, & ids, ShaderPermutation :: default ( ) ) ;
813+ let mut key = batch_key_from_resolved (
814+ 7 ,
815+ None ,
816+ false ,
817+ RasterFrontFace :: Clockwise ,
818+ RasterPrimitiveTopology :: TriangleList ,
819+ & resolved,
820+ ) ;
821+ let mesh_asset_id = crate :: particles:: billboard_render_buffer_mesh_asset_id ( 3 ) . unwrap ( ) ;
822+
823+ assert ! ( !key. uses_render_buffer_billboard) ;
824+
825+ apply_render_buffer_mesh_pipeline_override (
826+ & mut key,
827+ mesh_asset_id,
828+ ShaderPermutation :: default ( ) ,
829+ ) ;
830+
831+ assert ! ( key. uses_render_buffer_billboard) ;
832+ assert_eq ! (
833+ key. shader_specialization,
834+ MaterialShaderSpecializationKey :: disabled( )
835+ ) ;
836+ }
837+
797838 #[ test]
798839 fn generated_billboard_mesh_preserves_transparent_material_class ( ) {
799840 let registry = PropertyIdRegistry :: new ( ) ;
@@ -946,5 +987,6 @@ mod ui_rect_clip_tests {
946987 ) ;
947988
948989 assert_eq ! ( key. pipeline, original) ;
990+ assert ! ( !key. uses_render_buffer_billboard) ;
949991 }
950992}
0 commit comments