Struct bevy::render::render_resource::SpecializedMeshPipelines
source · pub struct SpecializedMeshPipelines<S>where
S: SpecializedMeshPipeline,{ /* private fields */ }
Implementations§
source§impl<S> SpecializedMeshPipelines<S>where
S: SpecializedMeshPipeline,
impl<S> SpecializedMeshPipelines<S>where
S: SpecializedMeshPipeline,
sourcepub fn specialize(
&mut self,
cache: &PipelineCache,
specialize_pipeline: &S,
key: <S as SpecializedMeshPipeline>::Key,
layout: &Hashed<InnerMeshVertexBufferLayout>
) -> Result<CachedRenderPipelineId, SpecializedMeshPipelineError>
pub fn specialize( &mut self, cache: &PipelineCache, specialize_pipeline: &S, key: <S as SpecializedMeshPipeline>::Key, layout: &Hashed<InnerMeshVertexBufferLayout> ) -> Result<CachedRenderPipelineId, SpecializedMeshPipelineError>
Examples found in repository?
examples/shader/shader_instancing.rs (line 138)
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
fn queue_custom(
transparent_3d_draw_functions: Res<DrawFunctions<Transparent3d>>,
custom_pipeline: Res<CustomPipeline>,
msaa: Res<Msaa>,
mut pipelines: ResMut<SpecializedMeshPipelines<CustomPipeline>>,
pipeline_cache: Res<PipelineCache>,
meshes: Res<RenderAssets<Mesh>>,
render_mesh_instances: Res<RenderMeshInstances>,
material_meshes: Query<Entity, With<InstanceMaterialData>>,
mut views: Query<(&ExtractedView, &mut RenderPhase<Transparent3d>)>,
) {
let draw_custom = transparent_3d_draw_functions.read().id::<DrawCustom>();
let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples());
for (view, mut transparent_phase) in &mut views {
let view_key = msaa_key | MeshPipelineKey::from_hdr(view.hdr);
let rangefinder = view.rangefinder3d();
for entity in &material_meshes {
let Some(mesh_instance) = render_mesh_instances.get(&entity) else {
continue;
};
let Some(mesh) = meshes.get(mesh_instance.mesh_asset_id) else {
continue;
};
let key = view_key | MeshPipelineKey::from_primitive_topology(mesh.primitive_topology);
let pipeline = pipelines
.specialize(&pipeline_cache, &custom_pipeline, key, &mesh.layout)
.unwrap();
transparent_phase.add(Transparent3d {
entity,
pipeline,
draw_function: draw_custom,
distance: rangefinder
.distance_translation(&mesh_instance.transforms.transform.translation),
batch_range: 0..1,
dynamic_offset: None,
});
}
}
}
Trait Implementations§
source§impl<S> Default for SpecializedMeshPipelines<S>where
S: SpecializedMeshPipeline,
impl<S> Default for SpecializedMeshPipelines<S>where
S: SpecializedMeshPipeline,
source§fn default() -> SpecializedMeshPipelines<S>
fn default() -> SpecializedMeshPipelines<S>
Returns the “default value” for a type. Read more
impl<S> Resource for SpecializedMeshPipelines<S>
Auto Trait Implementations§
impl<S> Freeze for SpecializedMeshPipelines<S>
impl<S> RefUnwindSafe for SpecializedMeshPipelines<S>
impl<S> Send for SpecializedMeshPipelines<S>
impl<S> Sync for SpecializedMeshPipelines<S>
impl<S> Unpin for SpecializedMeshPipelines<S>
impl<S> UnwindSafe for SpecializedMeshPipelines<S>
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
Return the
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates
Self
using data from the given World
.