Struct bevy_pbr::MeshPipeline
source · pub struct MeshPipeline {
pub dummy_white_gpu_image: GpuImage,
pub clustered_forward_buffer_binding_type: BufferBindingType,
pub mesh_layouts: MeshLayouts,
pub per_object_buffer_batch_size: Option<u32>,
pub binding_arrays_are_usable: bool,
/* private fields */
}
Fields§
§dummy_white_gpu_image: GpuImage
§clustered_forward_buffer_binding_type: BufferBindingType
§mesh_layouts: MeshLayouts
§per_object_buffer_batch_size: Option<u32>
MeshUniform
s are stored in arrays in buffers. If storage buffers are available, they
are used and this will be None
, otherwise uniform buffers will be used with batches
of this many MeshUniform
s, stored at dynamic offsets within the uniform buffer.
Use code like this in custom shaders:
##ifdef PER_OBJECT_BUFFER_BATCH_SIZE
@group(1) @binding(0) var<uniform> mesh: array<Mesh, #{PER_OBJECT_BUFFER_BATCH_SIZE}u>;
##else
@group(1) @binding(0) var<storage> mesh: array<Mesh>;
##endif // PER_OBJECT_BUFFER_BATCH_SIZE
binding_arrays_are_usable: bool
Whether binding arrays (a.k.a. bindless textures) are usable on the current render device.
This affects whether reflection probes can be used.
Implementations§
source§impl MeshPipeline
impl MeshPipeline
pub fn get_image_texture<'a>( &'a self, gpu_images: &'a RenderAssets<Image>, handle_option: &Option<Handle<Image>> ) -> Option<(&'a TextureView, &'a Sampler)>
pub fn get_view_layout( &self, layout_key: MeshPipelineViewLayoutKey ) -> &BindGroupLayout
Trait Implementations§
source§impl Clone for MeshPipeline
impl Clone for MeshPipeline
source§fn clone(&self) -> MeshPipeline
fn clone(&self) -> MeshPipeline
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl FromWorld for MeshPipeline
impl FromWorld for MeshPipeline
source§fn from_world(world: &mut World) -> Self
fn from_world(world: &mut World) -> Self
Creates
Self
using data from the given World
.source§impl GetBatchData for MeshPipeline
impl GetBatchData for MeshPipeline
type Param = (Res<'static, RenderMeshInstances>, Res<'static, RenderLightmaps>)
§type CompareData = (MaterialBindGroupId, AssetId<Mesh>, Option<AssetId<Image>>)
type CompareData = (MaterialBindGroupId, AssetId<Mesh>, Option<AssetId<Image>>)
Data used for comparison between phase items. If the pipeline id, draw
function id, per-instance data buffer dynamic offset and this data
matches, the draws can be batched.
§type BufferData = MeshUniform
type BufferData = MeshUniform
The per-instance data to be inserted into the
GpuArrayBuffer
containing these data for all instances.source§fn get_batch_data(
(mesh_instances, lightmaps): &SystemParamItem<'_, '_, Self::Param>,
entity: Entity
) -> Option<(Self::BufferData, Option<Self::CompareData>)>
fn get_batch_data( (mesh_instances, lightmaps): &SystemParamItem<'_, '_, Self::Param>, entity: Entity ) -> Option<(Self::BufferData, Option<Self::CompareData>)>
Get the per-instance data to be inserted into the
GpuArrayBuffer
.
If the instance can be batched, also return the data used for
comparison when deciding whether draws can be batched, else return None
for the CompareData
.source§impl SpecializedMeshPipeline for MeshPipeline
impl SpecializedMeshPipeline for MeshPipeline
type Key = MeshPipelineKey
fn specialize( &self, key: Self::Key, layout: &MeshVertexBufferLayout ) -> Result<RenderPipelineDescriptor, SpecializedMeshPipelineError>
impl Resource for MeshPipeline
Auto Trait Implementations§
impl RefUnwindSafe for MeshPipeline
impl Send for MeshPipeline
impl Sync for MeshPipeline
impl Unpin for MeshPipeline
impl UnwindSafe for MeshPipeline
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.