@@ -22,13 +22,11 @@ use bevy::{
2222 } ,
2323 shader:: Shader as ShaderAsset ,
2424} ;
25- use bevy_naga_reflect:: dynamic_shader:: DynamicShader ;
25+ use bevy_naga_reflect:: { dynamic_shader:: DynamicShader , reflect :: ParameterCategory } ;
2626
2727use crate :: material:: custom:: { Shader , apply_reflect_field, find_param_containing_field} ;
2828use processing_core:: error:: { ProcessingError , Result } ;
2929
30- const INPUT_TEXTURE : & str = "screen_texture" ;
31- const INPUT_SAMPLER : & str = "texture_sampler" ;
3230const F_RESOLUTION : & str = "resolution" ;
3331const F_TEXEL_SIZE : & str = "texel_size" ;
3432const F_PASS_INDEX : & str = "pass_index" ;
@@ -343,14 +341,35 @@ fn run_pass(
343341 fill_system ( & mut shader, F_PASS_COUNT , & passes) ;
344342 let has_pass_index = find_param_containing_field ( & shader, F_PASS_INDEX ) . is_some ( ) ;
345343
344+ // wesl mangles the imported `processing::filter` bindings, so the screen
345+ // texture and sampler are bound by their reflected (mangled) names, found by
346+ // category in group 0.
347+ let ( input_texture, input_sampler) = {
348+ let reflection = shader. reflection ( ) ;
349+ let mut texture = None ;
350+ let mut sampler = None ;
351+ for param in reflection. parameters ( ) . filter ( |p| p. group ( ) == 0 ) {
352+ match param. category ( ) {
353+ ParameterCategory :: Texture => texture = param. name ( ) . map ( String :: from) ,
354+ ParameterCategory :: Sampler => sampler = param. name ( ) . map ( String :: from) ,
355+ _ => { }
356+ }
357+ }
358+ ( texture, sampler)
359+ } ;
360+
346361 for pass in 0 ..passes {
347362 if has_pass_index {
348363 let _ = apply_reflect_field ( & mut shader, F_PASS_INDEX , & pass) ;
349364 }
350365
351366 let post_process = view_target. post_process_write ( ) ;
352- shader. insert_texture_view ( INPUT_TEXTURE , post_process. source . clone ( ) ) ;
353- shader. insert_sampler ( INPUT_SAMPLER , filter_sampler. 0 . clone ( ) ) ;
367+ if let Some ( name) = & input_texture {
368+ shader. insert_texture_view ( name, post_process. source . clone ( ) ) ;
369+ }
370+ if let Some ( name) = & input_sampler {
371+ shader. insert_sampler ( name, filter_sampler. 0 . clone ( ) ) ;
372+ }
354373
355374 let reflection = shader. reflection ( ) ;
356375 let mut bind_groups = Vec :: new ( ) ;
0 commit comments