remove dead code: ShaderDefs derive (#3490)
# Objective - remove some dead code and see if someone isn't happy about it Co-authored-by: François <8672791+mockersf@users.noreply.github.com>
This commit is contained in:
parent
db68704231
commit
d8d3fdf2cf
@ -5,7 +5,6 @@ mod bevy_main;
|
||||
mod bytes;
|
||||
mod enum_variant_meta;
|
||||
mod modules;
|
||||
mod shader_defs;
|
||||
|
||||
use bevy_macro_utils::{derive_label, BevyManifest};
|
||||
use proc_macro::TokenStream;
|
||||
@ -17,13 +16,6 @@ pub fn derive_bytes(input: TokenStream) -> TokenStream {
|
||||
bytes::derive_bytes(input)
|
||||
}
|
||||
|
||||
/// Derives the ShaderDefs trait. Each field must implement ShaderDef or this will fail.
|
||||
/// You can ignore fields using `#[shader_defs(ignore)]`.
|
||||
#[proc_macro_derive(ShaderDefs, attributes(shader_def))]
|
||||
pub fn derive_shader_defs(input: TokenStream) -> TokenStream {
|
||||
shader_defs::derive_shader_defs(input)
|
||||
}
|
||||
|
||||
/// Generates a dynamic plugin entry point function for the given `Plugin` type.
|
||||
#[proc_macro_derive(DynamicPlugin)]
|
||||
pub fn derive_dynamic_plugin(input: TokenStream) -> TokenStream {
|
||||
|
||||
@ -1,3 +1,2 @@
|
||||
pub const BEVY_CORE: &str = "bevy_core";
|
||||
pub const BEVY_RENDER: &str = "bevy_render";
|
||||
pub const BEVY_UTILS: &str = "bevy_utils";
|
||||
|
||||
@ -1,65 +0,0 @@
|
||||
use bevy_macro_utils::BevyManifest;
|
||||
use inflector::Inflector;
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::{parse_macro_input, Data, DataStruct, DeriveInput, Fields, Path};
|
||||
|
||||
static SHADER_DEF_ATTRIBUTE_NAME: &str = "shader_def";
|
||||
|
||||
pub fn derive_shader_defs(input: TokenStream) -> TokenStream {
|
||||
let ast = parse_macro_input!(input as DeriveInput);
|
||||
let bevy_render_path: Path = BevyManifest::default().get_path(crate::modules::BEVY_RENDER);
|
||||
|
||||
let fields = match &ast.data {
|
||||
Data::Struct(DataStruct {
|
||||
fields: Fields::Named(fields),
|
||||
..
|
||||
}) => &fields.named,
|
||||
_ => panic!("Expected a struct with named fields."),
|
||||
};
|
||||
|
||||
let shader_def_idents = fields
|
||||
.iter()
|
||||
.filter(|f| {
|
||||
f.attrs
|
||||
.iter()
|
||||
.any(|a| *a.path.get_ident().as_ref().unwrap() == SHADER_DEF_ATTRIBUTE_NAME)
|
||||
})
|
||||
.map(|f| f.ident.as_ref().unwrap())
|
||||
.collect::<Vec<&syn::Ident>>();
|
||||
let struct_name = &ast.ident;
|
||||
let struct_name_pascal_case = ast.ident.to_string().to_pascal_case();
|
||||
let shader_defs = shader_def_idents
|
||||
.iter()
|
||||
.map(|i| format!("{}_{}", struct_name_pascal_case, i).to_uppercase());
|
||||
|
||||
let shader_defs_len = shader_defs.len();
|
||||
let shader_def_indices = 0..shader_defs_len;
|
||||
|
||||
let generics = ast.generics;
|
||||
let (impl_generics, ty_generics, _where_clause) = generics.split_for_impl();
|
||||
|
||||
TokenStream::from(quote! {
|
||||
impl #impl_generics #bevy_render_path::shader::ShaderDefs for #struct_name #ty_generics {
|
||||
fn shader_defs_len(&self) -> usize {
|
||||
#shader_defs_len
|
||||
}
|
||||
|
||||
fn get_shader_def(&self, index: usize) -> Option<&str> {
|
||||
use #bevy_render_path::shader::ShaderDef;
|
||||
match index {
|
||||
#(#shader_def_indices => if self.#shader_def_idents.is_defined() {
|
||||
Some(#shader_defs)
|
||||
} else {
|
||||
None
|
||||
},)*
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn iter_shader_defs(&self) -> #bevy_render_path::shader::ShaderDefIterator {
|
||||
#bevy_render_path::shader::ShaderDefIterator::new(self)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user