Skip to content

Commit 6ea5fd3

Browse files
committed
add base descriptor trait
1 parent cc201d0 commit 6ea5fd3

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

crates/bevy_render/src/render_resource/specialize.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ use super::{
22
CachedComputePipelineId, CachedRenderPipelineId, ComputePipeline, ComputePipelineDescriptor,
33
PipelineCache, RenderPipeline, RenderPipelineDescriptor,
44
};
5-
use bevy_ecs::system::Resource;
5+
use bevy_ecs::{
6+
system::Resource,
7+
world::{FromWorld, World},
8+
};
69
use bevy_utils::hashbrown::HashMap;
710
use core::hash::Hash;
811

@@ -38,8 +41,9 @@ pub trait Specialize<T: SpecializeTarget>: Send + Sync + 'static {
3841
fn specialize(&self, key: Self::Key, descriptor: &mut T::Descriptor);
3942
}
4043

41-
pub type RenderPipelineSpecializer<S> = Specializer<RenderPipeline, S>;
42-
pub type ComputePipelineSpecializer<S> = Specializer<ComputePipeline, S>;
44+
pub trait HasBaseDescriptor<T: SpecializeTarget>: Specialize<T> {
45+
fn base_descriptor(&self) -> T::Descriptor;
46+
}
4347

4448
#[derive(Resource)]
4549
pub struct Specializer<T: SpecializeTarget, S: Specialize<T>> {
@@ -77,3 +81,11 @@ impl<T: SpecializeTarget, S: Specialize<T>> Specializer<T, S> {
7781
.clone()
7882
}
7983
}
84+
85+
impl<T: SpecializeTarget, S: FromWorld + HasBaseDescriptor<T>> FromWorld for Specializer<T, S> {
86+
fn from_world(world: &mut World) -> Self {
87+
let specializer = S::from_world(world);
88+
let base_descriptor = specializer.base_descriptor();
89+
Self::new(specializer, None, base_descriptor)
90+
}
91+
}

0 commit comments

Comments
 (0)