|
1 | 1 | use crate::parsing::{Input, NodeFnAttributes, ParsedField, ParsedFieldType, ParsedNodeFn, RegularParsedField}; |
2 | 2 | use crate::shader_nodes::{CodegenShaderEntryPoint, ShaderNodeType}; |
3 | 3 | use convert_case::{Case, Casing}; |
| 4 | +use proc_macro_crate::FoundCrate; |
4 | 5 | use proc_macro2::{Ident, Span, TokenStream}; |
5 | 6 | use quote::{ToTokens, format_ident, quote}; |
6 | 7 | use std::borrow::Cow; |
@@ -105,14 +106,24 @@ impl CodegenShaderEntryPoint for PerPixelAdjust { |
105 | 106 | let struct_name = format_ident!("{}", fn_name.to_string().to_case(Case::Pascal)); |
106 | 107 | let mod_name = fn_name.clone(); |
107 | 108 |
|
| 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 | + |
108 | 115 | let fields = parsed |
109 | 116 | .fields |
110 | 117 | .iter() |
111 | 118 | .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 | + }), |
114 | 124 | ..f.clone() |
115 | 125 | }), |
| 126 | + ParsedFieldType::Regular(RegularParsedField { gpu_image: false, .. }) => Ok(f.clone()), |
116 | 127 | ParsedFieldType::Node { .. } => Err(syn::Error::new_spanned(&f.pat_ident, "PerPixelAdjust shader nodes cannot accept other nodes as generics")), |
117 | 128 | }) |
118 | 129 | .collect::<syn::Result<_>>()?; |
@@ -146,7 +157,7 @@ impl CodegenShaderEntryPoint for PerPixelAdjust { |
146 | 157 | }), |
147 | 158 | implementations: Default::default(), |
148 | 159 | }, |
149 | | - output_type: parsed.output_type.clone(), |
| 160 | + output_type: raster_gpu, |
150 | 161 | is_async: true, |
151 | 162 | fields, |
152 | 163 | body, |
|
0 commit comments