pub struct MeshVertexAttribute {
pub name: &'static str,
pub id: MeshVertexAttributeId,
pub format: VertexFormat,
}Available on crate feature
bevy_mesh only.Fields§
§name: &'static strThe friendly name of the vertex attribute
id: MeshVertexAttributeIdThe unique id of the vertex attribute. This will also determine sort ordering when generating vertex buffers. Built-in / standard attributes will use “close to zero” indices. When in doubt, use a random / very large u64 to avoid conflicts.
format: VertexFormatThe format of the vertex attribute.
Implementations§
Source§impl MeshVertexAttribute
impl MeshVertexAttribute
Sourcepub const fn new(
name: &'static str,
id: u64,
format: VertexFormat,
) -> MeshVertexAttribute
pub const fn new( name: &'static str, id: u64, format: VertexFormat, ) -> MeshVertexAttribute
Examples found in repository?
More examples
examples/2d/mesh2d_manual.rs (line 111)
66fn star(
67 mut commands: Commands,
68 // We will add a new Mesh for the star being created
69 mut meshes: ResMut<Assets<Mesh>>,
70) {
71 // Let's define the mesh for the object we want to draw: a nice star.
72 // We will specify here what kind of topology is used to define the mesh,
73 // that is, how triangles are built from the vertices. We will use a
74 // triangle list, meaning that each vertex of the triangle has to be
75 // specified. We set `RenderAssetUsages::RENDER_WORLD`, meaning this mesh
76 // will not be accessible in future frames from the `meshes` resource, in
77 // order to save on memory once it has been uploaded to the GPU.
78 let mut star = Mesh::new(
79 PrimitiveTopology::TriangleList,
80 RenderAssetUsages::RENDER_WORLD,
81 );
82
83 // Vertices need to have a position attribute. We will use the following
84 // vertices (I hope you can spot the star in the schema).
85 //
86 // 1
87 //
88 // 10 2
89 // 9 0 3
90 // 8 4
91 // 6
92 // 7 5
93 //
94 // These vertices are specified in 3D space.
95 let mut v_pos = vec![[0.0, 0.0, 0.0]];
96 for i in 0..10 {
97 // The angle between each vertex is 1/10 of a full rotation.
98 let a = i as f32 * PI / 5.0;
99 // The radius of inner vertices (even indices) is 100. For outer vertices (odd indices) it's 200.
100 let r = (1 - i % 2) as f32 * 100.0 + 100.0;
101 // Add the vertex position.
102 v_pos.push([r * ops::sin(a), r * ops::cos(a), 0.0]);
103 }
104 // Set the position attribute
105 star.insert_attribute(Mesh::ATTRIBUTE_POSITION, v_pos);
106 // And a RGB color attribute as well. A built-in `Mesh::ATTRIBUTE_COLOR` exists, but we
107 // use a custom vertex attribute here for demonstration purposes.
108 let mut v_color: Vec<u32> = vec![LinearRgba::BLACK.as_u32()];
109 v_color.extend_from_slice(&[LinearRgba::from(YELLOW).as_u32(); 10]);
110 star.insert_attribute(
111 MeshVertexAttribute::new("Vertex_Color", 1, VertexFormat::Uint32),
112 v_color,
113 );
114
115 // Now, we specify the indices of the vertex that are going to compose the
116 // triangles in our star. Vertices in triangles have to be specified in CCW
117 // winding (that will be the front face, colored). Since we are using
118 // triangle list, we will specify each triangle as 3 vertices
119 // First triangle: 0, 2, 1
120 // Second triangle: 0, 3, 2
121 // Third triangle: 0, 4, 3
122 // etc
123 // Last triangle: 0, 1, 10
124 let mut indices = vec![0, 1, 10];
125 for i in 2..=10 {
126 indices.extend_from_slice(&[0, i, i - 1]);
127 }
128 star.insert_indices(Indices::U32(indices));
129
130 // We can now spawn the entities for the star and the camera
131 commands.spawn((
132 // We use a marker component to identify the custom colored meshes
133 ColoredMesh2d,
134 // The `Handle<Mesh>` needs to be wrapped in a `Mesh2d` for 2D rendering
135 Mesh2d(meshes.add(star)),
136 ));
137
138 commands.spawn(Camera2d);
139}Sourcepub const fn at_shader_location(
&self,
shader_location: u32,
) -> VertexAttributeDescriptor
pub const fn at_shader_location( &self, shader_location: u32, ) -> VertexAttributeDescriptor
Examples found in repository?
examples/shader_advanced/custom_vertex_attribute.rs (line 81)
74 fn specialize(
75 _pipeline: &MaterialPipeline,
76 descriptor: &mut RenderPipelineDescriptor,
77 layout: &MeshVertexBufferLayoutRef,
78 _key: MaterialPipelineKey<Self>,
79 ) -> Result<(), SpecializedMeshPipelineError> {
80 let vertex_layout = layout.0.get_layout(&[
81 Mesh::ATTRIBUTE_POSITION.at_shader_location(0),
82 ATTRIBUTE_BLEND_COLOR.at_shader_location(1),
83 ])?;
84 descriptor.vertex.buffers = vec![vertex_layout];
85 Ok(())
86 }More examples
examples/gltf/custom_gltf_vertex_attribute.rs (line 89)
82 fn specialize(
83 _pipeline: &Material2dPipeline,
84 descriptor: &mut RenderPipelineDescriptor,
85 layout: &MeshVertexBufferLayoutRef,
86 _key: Material2dKey<Self>,
87 ) -> Result<(), SpecializedMeshPipelineError> {
88 let vertex_layout = layout.0.get_layout(&[
89 Mesh::ATTRIBUTE_POSITION.at_shader_location(0),
90 Mesh::ATTRIBUTE_COLOR.at_shader_location(1),
91 ATTRIBUTE_BARYCENTRIC.at_shader_location(2),
92 ])?;
93 descriptor.vertex.buffers = vec![vertex_layout];
94 Ok(())
95 }examples/gltf/gltf_extension_mesh_2d.rs (line 140)
133 fn specialize(
134 _pipeline: &Material2dPipeline,
135 descriptor: &mut RenderPipelineDescriptor,
136 layout: &MeshVertexBufferLayoutRef,
137 _key: Material2dKey<Self>,
138 ) -> Result<(), SpecializedMeshPipelineError> {
139 let vertex_layout = layout.0.get_layout(&[
140 Mesh::ATTRIBUTE_POSITION.at_shader_location(0),
141 Mesh::ATTRIBUTE_COLOR.at_shader_location(1),
142 ATTRIBUTE_BARYCENTRIC.at_shader_location(2),
143 ])?;
144 descriptor.vertex.buffers = vec![vertex_layout];
145 Ok(())
146 }examples/shader_advanced/custom_render_phase.rs (line 220)
202 fn specialize(
203 &self,
204 key: Self::Key,
205 layout: &MeshVertexBufferLayoutRef,
206 ) -> Result<RenderPipelineDescriptor, SpecializedMeshPipelineError> {
207 let mut shader_defs = Vec::new();
208 // We will only use the position of the mesh in our shader so we only need to specify that
209 let mut vertex_attributes = Vec::new();
210 if layout.0.contains(Mesh::ATTRIBUTE_POSITION) {
211 // Handle compressed vertex positions.
212 if layout
213 .0
214 .get_attribute_compression()
215 .contains(MeshAttributeCompressionFlags::COMPRESS_POSITION)
216 {
217 shader_defs.push("VERTEX_POSITIONS_COMPRESSED".into());
218 }
219 // Make sure this matches the shader location
220 vertex_attributes.push(Mesh::ATTRIBUTE_POSITION.at_shader_location(0));
221 }
222 // This will automatically generate the correct `VertexBufferLayout` based on the vertex attributes
223 let vertex_buffer_layout = layout.0.get_layout(&vertex_attributes)?;
224 let view_layout = self
225 .mesh_pipeline
226 .get_view_layout(MeshPipelineViewLayoutKey::from(key));
227 Ok(RenderPipelineDescriptor {
228 label: Some("Specialized Mesh Pipeline".into()),
229 // We want to reuse the data from bevy so we use the same bind groups as the default
230 // mesh pipeline
231 layout: vec![
232 // Bind group 0 is the view uniform
233 view_layout.main_layout,
234 // Bind group 1 is empty
235 view_layout.empty_layout,
236 // Bind group 2 is the mesh uniform
237 self.mesh_pipeline.mesh_layouts.model_only.clone(),
238 ],
239 vertex: VertexState {
240 shader: self.shader_handle.clone(),
241 shader_defs: shader_defs.clone(),
242 buffers: vec![vertex_buffer_layout],
243 ..default()
244 },
245 fragment: Some(FragmentState {
246 shader: self.shader_handle.clone(),
247 shader_defs,
248 targets: vec![Some(ColorTargetState {
249 format: key.target_format(),
250 blend: None,
251 write_mask: ColorWrites::ALL,
252 })],
253 ..default()
254 }),
255 primitive: PrimitiveState {
256 topology: key.primitive_topology(),
257 strip_index_format: key.strip_index_format(),
258 cull_mode: Some(Face::Back),
259 ..default()
260 },
261 // It's generally recommended to specialize your pipeline for MSAA,
262 // but it's not always possible
263 ..default()
264 })
265 }examples/shader_advanced/specialized_mesh_pipeline.rs (line 233)
215 fn specialize(
216 &self,
217 mesh_key: Self::Key,
218 layout: &MeshVertexBufferLayoutRef,
219 ) -> Result<RenderPipelineDescriptor, SpecializedMeshPipelineError> {
220 let mut shader_defs = Vec::new();
221 // Define the vertex attributes based on a standard bevy [`Mesh`]
222 let mut vertex_attributes = Vec::new();
223 if layout.0.contains(Mesh::ATTRIBUTE_POSITION) {
224 // Handle compressed vertex positions.
225 if layout
226 .0
227 .get_attribute_compression()
228 .contains(MeshAttributeCompressionFlags::COMPRESS_POSITION)
229 {
230 shader_defs.push("VERTEX_POSITIONS_COMPRESSED".into());
231 }
232 // Make sure this matches the shader location
233 vertex_attributes.push(Mesh::ATTRIBUTE_POSITION.at_shader_location(0));
234 }
235 if layout.0.contains(Mesh::ATTRIBUTE_COLOR) {
236 shader_defs.push("VERTEX_COLORS".into());
237 // Make sure this matches the shader location
238 vertex_attributes.push(Mesh::ATTRIBUTE_COLOR.at_shader_location(1));
239 }
240 // This will automatically generate the correct `VertexBufferLayout` based on the vertex attributes
241 let vertex_buffer_layout = layout.0.get_layout(&vertex_attributes)?;
242
243 let view_layout = self
244 .mesh_pipeline
245 .get_view_layout(MeshPipelineViewLayoutKey::from(mesh_key));
246
247 Ok(RenderPipelineDescriptor {
248 label: Some("Specialized Mesh Pipeline".into()),
249 layout: vec![
250 view_layout.main_layout,
251 view_layout.empty_layout,
252 self.mesh_pipeline.mesh_layouts.model_only.clone(),
253 ],
254 vertex: VertexState {
255 shader: self.shader_handle.clone(),
256 shader_defs: shader_defs.clone(),
257 // Customize how to store the meshes' vertex attributes in the vertex buffer
258 buffers: vec![vertex_buffer_layout],
259 ..default()
260 },
261 fragment: Some(FragmentState {
262 shader: self.shader_handle.clone(),
263 shader_defs,
264 targets: vec![Some(ColorTargetState {
265 // This isn't required, but bevy supports rendering different formats
266 // so it's generally recommended to specialize the pipeline for that
267 format: mesh_key.target_format(),
268 // For this example we only use opaque meshes,
269 // but if you wanted to use alpha blending you would need to set it here
270 blend: None,
271 write_mask: ColorWrites::ALL,
272 })],
273 ..default()
274 }),
275 primitive: PrimitiveState {
276 topology: mesh_key.primitive_topology(),
277 strip_index_format: mesh_key.strip_index_format(),
278 front_face: FrontFace::Ccw,
279 cull_mode: Some(Face::Back),
280 polygon_mode: PolygonMode::Fill,
281 ..default()
282 },
283 // Note that if your view has no depth buffer this will need to be
284 // changed.
285 depth_stencil: Some(DepthStencilState {
286 format: CORE_3D_DEPTH_FORMAT,
287 depth_write_enabled: Some(true),
288 depth_compare: Some(CompareFunction::GreaterEqual),
289 stencil: default(),
290 bias: default(),
291 }),
292 // It's generally recommended to specialize your pipeline for MSAA,
293 // but it's not always possible
294 multisample: MultisampleState {
295 count: mesh_key.msaa_samples(),
296 ..default()
297 },
298 ..default()
299 })
300 }Trait Implementations§
Source§impl Clone for MeshVertexAttribute
impl Clone for MeshVertexAttribute
Source§fn clone(&self) -> MeshVertexAttribute
fn clone(&self) -> MeshVertexAttribute
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for MeshVertexAttribute
Source§impl Debug for MeshVertexAttribute
impl Debug for MeshVertexAttribute
Source§impl From<MeshVertexAttribute> for MeshVertexAttributeId
impl From<MeshVertexAttribute> for MeshVertexAttributeId
Source§fn from(attribute: MeshVertexAttribute) -> MeshVertexAttributeId
fn from(attribute: MeshVertexAttribute) -> MeshVertexAttributeId
Converts to this type from the input type.
Source§impl PartialEq for MeshVertexAttribute
impl PartialEq for MeshVertexAttribute
impl StructuralPartialEq for MeshVertexAttribute
Auto Trait Implementations§
impl Freeze for MeshVertexAttribute
impl RefUnwindSafe for MeshVertexAttribute
impl Send for MeshVertexAttribute
impl Sync for MeshVertexAttribute
impl Unpin for MeshVertexAttribute
impl UnsafeUnpin for MeshVertexAttribute
impl UnwindSafe for MeshVertexAttribute
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<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> 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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
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>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn 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>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which 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)
Converts
&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)
Converts
&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> 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T> HitDataExtra for T
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> InitializeFromFunction<T> for T
impl<T> InitializeFromFunction<T> for T
Source§fn initialize_from_function(f: fn() -> T) -> T
fn initialize_from_function(f: fn() -> T) -> T
Create an instance of this type from an initialization function
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Converts this type into the system output type.
Source§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> PatchTemplate for Twhere
T: Template,
impl<T> PatchTemplate for Twhere
T: Template,
Source§fn patch_template<F>(func: F) -> TemplatePatch<F, T>
fn patch_template<F>(func: F) -> TemplatePatch<F, T>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Settings for T
Source§impl<Ret> SpawnIfAsync<(), Ret> for Ret
impl<Ret> SpawnIfAsync<(), Ret> for Ret
Source§impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
Source§fn super_from(input: T) -> O
fn super_from(input: T) -> O
Convert from a type to another type.
Source§impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
Source§fn super_into(self) -> O
fn super_into(self) -> O
Convert from a type to another type.
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
Uses this template and the given
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clones this template. See
Clone.Source§impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
fn to_sample_(self) -> U
Source§impl<T> TypeData for T
impl<T> TypeData for T
Source§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
Creates a type-erased clone of
self.