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 bytes;
|
||||||
mod enum_variant_meta;
|
mod enum_variant_meta;
|
||||||
mod modules;
|
mod modules;
|
||||||
mod render_resource;
|
|
||||||
mod render_resources;
|
|
||||||
mod shader_defs;
|
mod shader_defs;
|
||||||
|
|
||||||
use bevy_macro_utils::{derive_label, BevyManifest};
|
use bevy_macro_utils::{derive_label, BevyManifest};
|
||||||
@ -19,19 +17,6 @@ pub fn derive_bytes(input: TokenStream) -> TokenStream {
|
|||||||
bytes::derive_bytes(input)
|
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.
|
/// Derives the ShaderDefs trait. Each field must implement ShaderDef or this will fail.
|
||||||
/// You can ignore fields using `#[shader_defs(ignore)]`.
|
/// You can ignore fields using `#[shader_defs(ignore)]`.
|
||||||
#[proc_macro_derive(ShaderDefs, attributes(shader_def))]
|
#[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_CORE: &str = "bevy_core";
|
||||||
pub const BEVY_RENDER: &str = "bevy_render";
|
pub const BEVY_RENDER: &str = "bevy_render";
|
||||||
pub const BEVY_UTILS: &str = "bevy_utils";
|
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