11use crate :: parsing:: { Input , NodeFnAttributes , ParsedField , ParsedFieldType , ParsedNodeFn , RegularParsedField } ;
22use crate :: shader_nodes:: { CodegenShaderEntryPoint , ShaderNodeType } ;
33use convert_case:: { Case , Casing } ;
4+ use proc_macro_crate:: FoundCrate ;
45use proc_macro2:: { Ident , Span , TokenStream } ;
56use quote:: { ToTokens , format_ident, quote} ;
67use std:: borrow:: Cow ;
@@ -105,14 +106,24 @@ impl CodegenShaderEntryPoint for PerPixelAdjust {
105106 let struct_name = format_ident ! ( "{}" , fn_name. to_string( ) . to_case( Case :: Pascal ) ) ;
106107 let mod_name = fn_name. clone ( ) ;
107108
109+ let gcore = match & parsed. crate_name {
110+ FoundCrate :: Itself => format_ident ! ( "crate" ) ,
111+ FoundCrate :: Name ( name) => format_ident ! ( "{name}" ) ,
112+ } ;
113+ let raster_gpu = syn:: parse2 :: < Type > ( quote ! ( #gcore:: table:: Table <#gcore:: raster_types:: Raster <#gcore:: raster_types:: GPU >>) ) ?;
114+
108115 let fields = parsed
109116 . fields
110117 . iter ( )
111118 . map ( |f| match & f. ty {
112- ParsedFieldType :: Regular ( reg) => Ok ( ParsedField {
113- ty : ParsedFieldType :: Regular ( RegularParsedField { gpu_image : false , ..reg. clone ( ) } ) ,
119+ ParsedFieldType :: Regular ( reg @ RegularParsedField { gpu_image : true , .. } ) => Ok ( ParsedField {
120+ ty : ParsedFieldType :: Regular ( RegularParsedField {
121+ ty : raster_gpu. clone ( ) ,
122+ ..reg. clone ( )
123+ } ) ,
114124 ..f. clone ( )
115125 } ) ,
126+ ParsedFieldType :: Regular ( RegularParsedField { gpu_image : false , .. } ) => Ok ( f. clone ( ) ) ,
116127 ParsedFieldType :: Node { .. } => Err ( syn:: Error :: new_spanned ( & f. pat_ident , "PerPixelAdjust shader nodes cannot accept other nodes as generics" ) ) ,
117128 } )
118129 . collect :: < syn:: Result < _ > > ( ) ?;
@@ -146,7 +157,7 @@ impl CodegenShaderEntryPoint for PerPixelAdjust {
146157 } ) ,
147158 implementations : Default :: default ( ) ,
148159 } ,
149- output_type : parsed . output_type . clone ( ) ,
160+ output_type : raster_gpu ,
150161 is_async : true ,
151162 fields,
152163 body,
@@ -166,3 +177,18 @@ enum ParamType {
166177 Image { binding : u32 } ,
167178 Uniform ,
168179}
180+
181+ #[ test]
182+ fn bla ( ) -> syn:: Result < ( ) > {
183+ let gcore = quote ! ( graphene_core) ;
184+ // let raster_gpu = quote!(#gcore::table::Table<#gcore::raster_types::Raster<#gcore::raster_types::GPU>>);
185+ // let verbatim = Type::Verbatim(raster_gpu.to_token_stream());
186+
187+ // let gcore = match &parsed.crate_name {
188+ // FoundCrate::Itself => quote!("crate"),
189+ // FoundCrate::Name(name) => quote!(#name),
190+ // };
191+ let raster_gpu = syn:: parse2 :: < Type > ( quote ! ( #gcore:: table:: Table <#gcore:: raster_types:: Raster <#gcore:: raster_types:: GPU >>) ) ?;
192+ println ! ( "{}" , & raster_gpu. to_token_stream( ) . to_string( ) ) ;
193+ Ok ( ( ) )
194+ }
0 commit comments