mirror of
https://github.com/bevyengine/bevy
synced 2025-02-16 14:08:32 +00:00
Remove Handle<T>
trait implementations that are dependent on Component
(#15749)
# Objective - Another step towards #15716 - Remove trait implementations that are dependent on `Handle<T>` being a `Component` ## Solution - Remove unused `ExtractComponent` trait implementation for `Handle<T>` - Remove unused `ExtractInstance` trait implementation for `AssetId` - Although the `ExtractInstance` trait wasn't used, the `AssetId`s were being stored inside of `ExtractedInstances` which has an `ExtractInstance` trait bound on its contents. I've upgraded the `RenderMaterialInstances` type alias to be its own resource, identical to `ExtractedInstances<AssetId<M>>` to get around that with minimal breakage. ## Testing Tested `many_cubes`, rendering did not explode
This commit is contained in:
parent
123a19afa9
commit
e19c53ebbd
3 changed files with 12 additions and 30 deletions
|
@ -18,6 +18,7 @@ use bevy_core_pipeline::{
|
||||||
};
|
};
|
||||||
use bevy_derive::{Deref, DerefMut};
|
use bevy_derive::{Deref, DerefMut};
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
|
entity::EntityHashMap,
|
||||||
prelude::*,
|
prelude::*,
|
||||||
system::{lifetimeless::SRes, SystemParamItem},
|
system::{lifetimeless::SRes, SystemParamItem},
|
||||||
};
|
};
|
||||||
|
@ -25,7 +26,6 @@ use bevy_reflect::std_traits::ReflectDefault;
|
||||||
use bevy_reflect::Reflect;
|
use bevy_reflect::Reflect;
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
camera::TemporalJitter,
|
camera::TemporalJitter,
|
||||||
extract_instances::ExtractedInstances,
|
|
||||||
extract_resource::ExtractResource,
|
extract_resource::ExtractResource,
|
||||||
mesh::{Mesh3d, MeshVertexBufferLayoutRef, RenderMesh},
|
mesh::{Mesh3d, MeshVertexBufferLayoutRef, RenderMesh},
|
||||||
render_asset::{PrepareAssetError, RenderAsset, RenderAssetPlugin, RenderAssets},
|
render_asset::{PrepareAssetError, RenderAsset, RenderAssetPlugin, RenderAssets},
|
||||||
|
@ -276,7 +276,7 @@ where
|
||||||
if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
|
if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
|
||||||
render_app
|
render_app
|
||||||
.init_resource::<DrawFunctions<Shadow>>()
|
.init_resource::<DrawFunctions<Shadow>>()
|
||||||
.init_resource::<ExtractedInstances<AssetId<M>>>()
|
.init_resource::<RenderMaterialInstances<M>>()
|
||||||
.add_render_command::<Shadow, DrawPrepass<M>>()
|
.add_render_command::<Shadow, DrawPrepass<M>>()
|
||||||
.add_render_command::<Transmissive3d, DrawMaterial<M>>()
|
.add_render_command::<Transmissive3d, DrawMaterial<M>>()
|
||||||
.add_render_command::<Transparent3d, DrawMaterial<M>>()
|
.add_render_command::<Transparent3d, DrawMaterial<M>>()
|
||||||
|
@ -490,7 +490,15 @@ impl<P: PhaseItem, M: Material, const I: usize> RenderCommand<P> for SetMaterial
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type RenderMaterialInstances<M> = ExtractedInstances<AssetId<M>>;
|
/// Stores all extracted instances of a [`Material`] in the render world.
|
||||||
|
#[derive(Resource, Deref, DerefMut)]
|
||||||
|
pub struct RenderMaterialInstances<M: Material>(pub EntityHashMap<AssetId<M>>);
|
||||||
|
|
||||||
|
impl<M: Material> Default for RenderMaterialInstances<M> {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self(Default::default())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub const fn alpha_mode_pipeline_key(alpha_mode: AlphaMode, msaa: &Msaa) -> MeshPipelineKey {
|
pub const fn alpha_mode_pipeline_key(alpha_mode: AlphaMode, msaa: &Msaa) -> MeshPipelineKey {
|
||||||
match alpha_mode {
|
match alpha_mode {
|
||||||
|
|
|
@ -7,12 +7,10 @@ use crate::{
|
||||||
Extract, ExtractSchedule, Render, RenderApp, RenderSet,
|
Extract, ExtractSchedule, Render, RenderApp, RenderSet,
|
||||||
};
|
};
|
||||||
use bevy_app::{App, Plugin};
|
use bevy_app::{App, Plugin};
|
||||||
use bevy_asset::{Asset, Handle};
|
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
component::Component,
|
component::Component,
|
||||||
prelude::*,
|
prelude::*,
|
||||||
query::{QueryFilter, QueryItem, ReadOnlyQueryData},
|
query::{QueryFilter, QueryItem, ReadOnlyQueryData},
|
||||||
system::lifetimeless::Read,
|
|
||||||
};
|
};
|
||||||
use core::{marker::PhantomData, ops::Deref};
|
use core::{marker::PhantomData, ops::Deref};
|
||||||
|
|
||||||
|
@ -197,17 +195,6 @@ impl<C: ExtractComponent> Plugin for ExtractComponentPlugin<C> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Asset> ExtractComponent for Handle<T> {
|
|
||||||
type QueryData = Read<Handle<T>>;
|
|
||||||
type QueryFilter = ();
|
|
||||||
type Out = Handle<T>;
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn extract_component(handle: QueryItem<'_, Self::QueryData>) -> Option<Self::Out> {
|
|
||||||
Some(handle.clone_weak())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// This system extracts all components of the corresponding [`ExtractComponent`], for entities that are synced via [`crate::sync_world::SyncToRenderWorld`].
|
/// This system extracts all components of the corresponding [`ExtractComponent`], for entities that are synced via [`crate::sync_world::SyncToRenderWorld`].
|
||||||
fn extract_components<C: ExtractComponent>(
|
fn extract_components<C: ExtractComponent>(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
|
|
|
@ -7,13 +7,12 @@
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
|
||||||
use bevy_app::{App, Plugin};
|
use bevy_app::{App, Plugin};
|
||||||
use bevy_asset::{Asset, AssetId, Handle};
|
|
||||||
use bevy_derive::{Deref, DerefMut};
|
use bevy_derive::{Deref, DerefMut};
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
entity::EntityHashMap,
|
entity::EntityHashMap,
|
||||||
prelude::Entity,
|
prelude::Entity,
|
||||||
query::{QueryFilter, QueryItem, ReadOnlyQueryData},
|
query::{QueryFilter, QueryItem, ReadOnlyQueryData},
|
||||||
system::{lifetimeless::Read, Query, ResMut, Resource},
|
system::{Query, ResMut, Resource},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{prelude::ViewVisibility, Extract, ExtractSchedule, RenderApp};
|
use crate::{prelude::ViewVisibility, Extract, ExtractSchedule, RenderApp};
|
||||||
|
@ -134,15 +133,3 @@ fn extract_visible<EI>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<A> ExtractInstance for AssetId<A>
|
|
||||||
where
|
|
||||||
A: Asset,
|
|
||||||
{
|
|
||||||
type QueryData = Read<Handle<A>>;
|
|
||||||
type QueryFilter = ();
|
|
||||||
|
|
||||||
fn extract(item: QueryItem<'_, Self::QueryData>) -> Option<Self> {
|
|
||||||
Some(item.id())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue