Remove vestigial derives (#3343)
These derives seem to be leftover vestiges of the old renderer. At least removing them doesn't seem to harm anything. edit: thanks `@forbjok` on discord for pointing this out.
This commit is contained in:
parent
6a0008f3d3
commit
f30f833406
@ -5,8 +5,6 @@ mod bevy_main;
|
||||
mod bytes;
|
||||
mod enum_variant_meta;
|
||||
mod modules;
|
||||
mod render_resource;
|
||||
mod render_resources;
|
||||
mod shader_defs;
|
||||
|
||||
use bevy_macro_utils::{derive_label, BevyManifest};
|
||||
@ -19,19 +17,6 @@ pub fn derive_bytes(input: TokenStream) -> TokenStream {
|
||||
bytes::derive_bytes(input)
|
||||
}
|
||||
|
||||
/// Derives the RenderResources trait. Each field must implement RenderResource or this will fail.
|
||||
/// You can ignore fields using `#[render_resources(ignore)]`.
|
||||
#[proc_macro_derive(RenderResources, attributes(render_resources))]
|
||||
pub fn derive_render_resources(input: TokenStream) -> TokenStream {
|
||||
render_resources::derive_render_resources(input)
|
||||
}
|
||||
|
||||
/// Derives the RenderResource trait. The type must also implement `Bytes` or this will fail.
|
||||
#[proc_macro_derive(RenderResource)]
|
||||
pub fn derive_render_resource(input: TokenStream) -> TokenStream {
|
||||
render_resource::derive_render_resource(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))]
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
pub const BEVY_ASSET: &str = "bevy_asset";
|
||||
pub const BEVY_CORE: &str = "bevy_core";
|
||||
pub const BEVY_RENDER: &str = "bevy_render";
|
||||
pub const BEVY_UTILS: &str = "bevy_utils";
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
use bevy_macro_utils::BevyManifest;
|
||||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
use syn::{parse_macro_input, DeriveInput, Path};
|
||||
|
||||
pub fn derive_render_resource(input: TokenStream) -> TokenStream {
|
||||
let ast = parse_macro_input!(input as DeriveInput);
|
||||
let manifest = BevyManifest::default();
|
||||
|
||||
let bevy_render_path: Path = manifest.get_path(crate::modules::BEVY_RENDER);
|
||||
let bevy_asset_path: Path = manifest.get_path(crate::modules::BEVY_ASSET);
|
||||
let bevy_core_path: Path = manifest.get_path(crate::modules::BEVY_CORE);
|
||||
let struct_name = &ast.ident;
|
||||
let (impl_generics, type_generics, where_clause) = &ast.generics.split_for_impl();
|
||||
|
||||
TokenStream::from(quote! {
|
||||
impl #impl_generics #bevy_render_path::renderer::RenderResource for #struct_name #type_generics #where_clause {
|
||||
fn resource_type(&self) -> Option<#bevy_render_path::renderer::RenderResourceType> {
|
||||
Some(#bevy_render_path::renderer::RenderResourceType::Buffer)
|
||||
}
|
||||
fn write_buffer_bytes(&self, buffer: &mut [u8]) {
|
||||
use #bevy_core_path::Bytes;
|
||||
self.write_bytes(buffer);
|
||||
}
|
||||
fn buffer_byte_len(&self) -> Option<usize> {
|
||||
use #bevy_core_path::Bytes;
|
||||
Some(self.byte_len())
|
||||
}
|
||||
fn texture(&self) -> Option<&#bevy_asset_path::Handle<#bevy_render_path::texture::Texture>> {
|
||||
None
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -1,183 +0,0 @@
|
||||
use bevy_macro_utils::BevyManifest;
|
||||
use proc_macro::TokenStream;
|
||||
use quote::{format_ident, quote};
|
||||
use syn::{
|
||||
parse::ParseStream, parse_macro_input, punctuated::Punctuated, Data, DataStruct, DeriveInput,
|
||||
Field, Fields, Path,
|
||||
};
|
||||
|
||||
#[derive(Default)]
|
||||
struct RenderResourceFieldAttributes {
|
||||
pub ignore: bool,
|
||||
pub buffer: bool,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
struct RenderResourceAttributes {
|
||||
pub from_self: bool,
|
||||
}
|
||||
|
||||
static RENDER_RESOURCE_ATTRIBUTE_NAME: &str = "render_resources";
|
||||
|
||||
pub fn derive_render_resources(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 attributes = ast
|
||||
.attrs
|
||||
.iter()
|
||||
.find(|a| *a.path.get_ident().as_ref().unwrap() == RENDER_RESOURCE_ATTRIBUTE_NAME)
|
||||
.map_or_else(RenderResourceAttributes::default, |a| {
|
||||
syn::custom_keyword!(from_self);
|
||||
let mut attributes = RenderResourceAttributes::default();
|
||||
a.parse_args_with(|input: ParseStream| {
|
||||
if input.parse::<Option<from_self>>()?.is_some() {
|
||||
attributes.from_self = true;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.expect("Invalid 'render_resources' attribute format.");
|
||||
|
||||
attributes
|
||||
});
|
||||
let struct_name = &ast.ident;
|
||||
let (impl_generics, type_generics, where_clause) = &ast.generics.split_for_impl();
|
||||
let struct_name_string = struct_name.to_string();
|
||||
|
||||
if attributes.from_self {
|
||||
TokenStream::from(quote! {
|
||||
impl #impl_generics #bevy_render_path::renderer::RenderResources for #struct_name #type_generics #where_clause {
|
||||
fn render_resources_len(&self) -> usize {
|
||||
1
|
||||
}
|
||||
|
||||
fn get_render_resource(&self, index: usize) -> Option<&dyn #bevy_render_path::renderer::RenderResource> {
|
||||
if index == 0 {
|
||||
Some(self)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
fn get_render_resource_name(&self, index: usize) -> Option<&str> {
|
||||
if index == 0 {
|
||||
Some(#struct_name_string)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
fn iter(&self) -> #bevy_render_path::renderer::RenderResourceIterator {
|
||||
#bevy_render_path::renderer::RenderResourceIterator::new(self)
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
let empty = Punctuated::new();
|
||||
|
||||
let fields = match &ast.data {
|
||||
Data::Struct(DataStruct {
|
||||
fields: Fields::Named(fields),
|
||||
..
|
||||
}) => &fields.named,
|
||||
Data::Struct(DataStruct {
|
||||
fields: Fields::Unit,
|
||||
..
|
||||
}) => &empty,
|
||||
_ => panic!("Expected a struct with named fields."),
|
||||
};
|
||||
let field_attributes = fields
|
||||
.iter()
|
||||
.map(|field| {
|
||||
(
|
||||
field,
|
||||
field
|
||||
.attrs
|
||||
.iter()
|
||||
.find(|a| {
|
||||
*a.path.get_ident().as_ref().unwrap() == RENDER_RESOURCE_ATTRIBUTE_NAME
|
||||
})
|
||||
.map_or_else(RenderResourceFieldAttributes::default, |a| {
|
||||
syn::custom_keyword!(ignore);
|
||||
syn::custom_keyword!(buffer);
|
||||
let mut attributes = RenderResourceFieldAttributes::default();
|
||||
a.parse_args_with(|input: ParseStream| {
|
||||
if input.parse::<Option<ignore>>()?.is_some() {
|
||||
attributes.ignore = true;
|
||||
} else if input.parse::<Option<buffer>>()?.is_some() {
|
||||
attributes.buffer = true;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.expect("Invalid 'render_resources' attribute format.");
|
||||
|
||||
attributes
|
||||
}),
|
||||
)
|
||||
})
|
||||
.collect::<Vec<(&Field, RenderResourceFieldAttributes)>>();
|
||||
let mut render_resource_names = Vec::new();
|
||||
let mut render_resource_fields = Vec::new();
|
||||
let mut render_resource_hints = Vec::new();
|
||||
for (field, attrs) in field_attributes.iter() {
|
||||
if attrs.ignore {
|
||||
continue;
|
||||
}
|
||||
|
||||
let field_ident = field.ident.as_ref().unwrap();
|
||||
let field_name = field_ident.to_string();
|
||||
render_resource_fields.push(field_ident);
|
||||
render_resource_names.push(format!("{}_{}", struct_name, field_name));
|
||||
if attrs.buffer {
|
||||
render_resource_hints
|
||||
.push(quote! {Some(#bevy_render_path::renderer::RenderResourceHints::BUFFER)})
|
||||
} else {
|
||||
render_resource_hints.push(quote! {None})
|
||||
}
|
||||
}
|
||||
|
||||
let render_resource_count = render_resource_names.len();
|
||||
let render_resource_indices = 0..render_resource_count;
|
||||
|
||||
let struct_name_uppercase = struct_name_string.to_uppercase();
|
||||
let render_resource_names_ident =
|
||||
format_ident!("{}_RENDER_RESOURCE_NAMES", struct_name_uppercase);
|
||||
let render_resource_hints_ident =
|
||||
format_ident!("{}_RENDER_RESOURCE_HINTS", struct_name_uppercase);
|
||||
|
||||
TokenStream::from(quote! {
|
||||
static #render_resource_names_ident: &[&str] = &[
|
||||
#(#render_resource_names,)*
|
||||
];
|
||||
|
||||
static #render_resource_hints_ident: &[Option<#bevy_render_path::renderer::RenderResourceHints>] = &[
|
||||
#(#render_resource_hints,)*
|
||||
];
|
||||
|
||||
impl #impl_generics #bevy_render_path::renderer::RenderResources for #struct_name #type_generics #where_clause {
|
||||
fn render_resources_len(&self) -> usize {
|
||||
#render_resource_count
|
||||
}
|
||||
|
||||
fn get_render_resource(&self, index: usize) -> Option<&dyn #bevy_render_path::renderer::RenderResource> {
|
||||
match index {
|
||||
#(#render_resource_indices => Some(&self.#render_resource_fields),)*
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_render_resource_name(&self, index: usize) -> Option<&str> {
|
||||
#render_resource_names_ident.get(index).copied()
|
||||
}
|
||||
|
||||
fn get_render_resource_hints(&self, index: usize) -> Option<#bevy_render_path::renderer::RenderResourceHints> {
|
||||
#render_resource_hints_ident.get(index).and_then(|o| *o)
|
||||
}
|
||||
|
||||
fn iter(&self) -> #bevy_render_path::renderer::RenderResourceIterator {
|
||||
#bevy_render_path::renderer::RenderResourceIterator::new(self)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user