pub enum Msaa {
Off = 1,
Sample2 = 2,
Sample4 = 4,
Sample8 = 8,
}
Expand description
Component for configuring the number of samples for Multi-Sample Anti-Aliasing
for a Camera
.
Defaults to 4 samples. A higher number of samples results in smoother edges.
Some advanced rendering features may require that MSAA is disabled.
Note that the web currently only supports 1 or 4 samples.
Variants§
Implementations§
Source§impl Msaa
impl Msaa
Sourcepub fn samples(&self) -> u32
pub fn samples(&self) -> u32
Examples found in repository?
examples/shader/custom_shader_instancing.rs (line 145)
126fn queue_custom(
127 transparent_3d_draw_functions: Res<DrawFunctions<Transparent3d>>,
128 custom_pipeline: Res<CustomPipeline>,
129 mut pipelines: ResMut<SpecializedMeshPipelines<CustomPipeline>>,
130 pipeline_cache: Res<PipelineCache>,
131 meshes: Res<RenderAssets<RenderMesh>>,
132 render_mesh_instances: Res<RenderMeshInstances>,
133 material_meshes: Query<(Entity, &MainEntity), With<InstanceMaterialData>>,
134 mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent3d>>,
135 views: Query<(&ExtractedView, &Msaa)>,
136) {
137 let draw_custom = transparent_3d_draw_functions.read().id::<DrawCustom>();
138
139 for (view, msaa) in &views {
140 let Some(transparent_phase) = transparent_render_phases.get_mut(&view.retained_view_entity)
141 else {
142 continue;
143 };
144
145 let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples());
146
147 let view_key = msaa_key | MeshPipelineKey::from_hdr(view.hdr);
148 let rangefinder = view.rangefinder3d();
149 for (entity, main_entity) in &material_meshes {
150 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(*main_entity)
151 else {
152 continue;
153 };
154 let Some(mesh) = meshes.get(mesh_instance.mesh_asset_id) else {
155 continue;
156 };
157 let key =
158 view_key | MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
159 let pipeline = pipelines
160 .specialize(&pipeline_cache, &custom_pipeline, key, &mesh.layout)
161 .unwrap();
162 transparent_phase.add(Transparent3d {
163 entity: (entity, *main_entity),
164 pipeline,
165 draw_function: draw_custom,
166 distance: rangefinder.distance_translation(&mesh_instance.translation),
167 batch_range: 0..1,
168 extra_index: PhaseItemExtraIndex::None,
169 indexed: true,
170 });
171 }
172 }
173}
More examples
examples/shader/custom_phase_item.rs (line 343)
292 fn specialize(&self, msaa: Self::Key) -> RenderPipelineDescriptor {
293 RenderPipelineDescriptor {
294 label: Some("custom render pipeline".into()),
295 layout: vec![],
296 push_constant_ranges: vec![],
297 vertex: VertexState {
298 shader: self.shader.clone(),
299 shader_defs: vec![],
300 entry_point: "vertex".into(),
301 buffers: vec![VertexBufferLayout {
302 array_stride: size_of::<Vertex>() as u64,
303 step_mode: VertexStepMode::Vertex,
304 // This needs to match the layout of [`Vertex`].
305 attributes: vec![
306 VertexAttribute {
307 format: VertexFormat::Float32x3,
308 offset: 0,
309 shader_location: 0,
310 },
311 VertexAttribute {
312 format: VertexFormat::Float32x3,
313 offset: 16,
314 shader_location: 1,
315 },
316 ],
317 }],
318 },
319 fragment: Some(FragmentState {
320 shader: self.shader.clone(),
321 shader_defs: vec![],
322 entry_point: "fragment".into(),
323 targets: vec![Some(ColorTargetState {
324 // Ordinarily, you'd want to check whether the view has the
325 // HDR format and substitute the appropriate texture format
326 // here, but we omit that for simplicity.
327 format: TextureFormat::bevy_default(),
328 blend: None,
329 write_mask: ColorWrites::ALL,
330 })],
331 }),
332 primitive: PrimitiveState::default(),
333 // Note that if your view has no depth buffer this will need to be
334 // changed.
335 depth_stencil: Some(DepthStencilState {
336 format: CORE_3D_DEPTH_FORMAT,
337 depth_write_enabled: false,
338 depth_compare: CompareFunction::Always,
339 stencil: default(),
340 bias: default(),
341 }),
342 multisample: MultisampleState {
343 count: msaa.samples(),
344 mask: !0,
345 alpha_to_coverage_enabled: false,
346 },
347 zero_initialize_workgroup_memory: false,
348 }
349 }
examples/2d/mesh2d_manual.rs (line 397)
375pub fn queue_colored_mesh2d(
376 transparent_draw_functions: Res<DrawFunctions<Transparent2d>>,
377 colored_mesh2d_pipeline: Res<ColoredMesh2dPipeline>,
378 mut pipelines: ResMut<SpecializedRenderPipelines<ColoredMesh2dPipeline>>,
379 pipeline_cache: Res<PipelineCache>,
380 render_meshes: Res<RenderAssets<RenderMesh>>,
381 render_mesh_instances: Res<RenderColoredMesh2dInstances>,
382 mut transparent_render_phases: ResMut<ViewSortedRenderPhases<Transparent2d>>,
383 views: Query<(&RenderVisibleEntities, &ExtractedView, &Msaa)>,
384) {
385 if render_mesh_instances.is_empty() {
386 return;
387 }
388 // Iterate each view (a camera is a view)
389 for (visible_entities, view, msaa) in &views {
390 let Some(transparent_phase) = transparent_render_phases.get_mut(&view.retained_view_entity)
391 else {
392 continue;
393 };
394
395 let draw_colored_mesh2d = transparent_draw_functions.read().id::<DrawColoredMesh2d>();
396
397 let mesh_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples())
398 | Mesh2dPipelineKey::from_hdr(view.hdr);
399
400 // Queue all entities visible to that view
401 for (render_entity, visible_entity) in visible_entities.iter::<Mesh2d>() {
402 if let Some(mesh_instance) = render_mesh_instances.get(visible_entity) {
403 let mesh2d_handle = mesh_instance.mesh_asset_id;
404 let mesh2d_transforms = &mesh_instance.transforms;
405 // Get our specialized pipeline
406 let mut mesh2d_key = mesh_key;
407 let Some(mesh) = render_meshes.get(mesh2d_handle) else {
408 continue;
409 };
410 mesh2d_key |= Mesh2dPipelineKey::from_primitive_topology(mesh.primitive_topology());
411
412 let pipeline_id =
413 pipelines.specialize(&pipeline_cache, &colored_mesh2d_pipeline, mesh2d_key);
414
415 let mesh_z = mesh2d_transforms.world_from_local.translation.z;
416 transparent_phase.add(Transparent2d {
417 entity: (*render_entity, *visible_entity),
418 draw_function: draw_colored_mesh2d,
419 pipeline: pipeline_id,
420 // The 2d render items are sorted according to their z value before rendering,
421 // in order to get correct transparency
422 sort_key: FloatOrd(mesh_z),
423 // This material is not batched
424 batch_range: 0..1,
425 extra_index: PhaseItemExtraIndex::None,
426 extracted_index: usize::MAX,
427 indexed: mesh.indexed(),
428 });
429 }
430 }
431 }
432}
examples/shader/custom_render_phase.rs (line 519)
500fn queue_custom_meshes(
501 custom_draw_functions: Res<DrawFunctions<Stencil3d>>,
502 mut pipelines: ResMut<SpecializedMeshPipelines<StencilPipeline>>,
503 pipeline_cache: Res<PipelineCache>,
504 custom_draw_pipeline: Res<StencilPipeline>,
505 render_meshes: Res<RenderAssets<RenderMesh>>,
506 render_mesh_instances: Res<RenderMeshInstances>,
507 mut custom_render_phases: ResMut<ViewSortedRenderPhases<Stencil3d>>,
508 mut views: Query<(&ExtractedView, &RenderVisibleEntities, &Msaa)>,
509 has_marker: Query<(), With<DrawStencil>>,
510) {
511 for (view, visible_entities, msaa) in &mut views {
512 let Some(custom_phase) = custom_render_phases.get_mut(&view.retained_view_entity) else {
513 continue;
514 };
515 let draw_custom = custom_draw_functions.read().id::<DrawMesh3dStencil>();
516
517 // Create the key based on the view.
518 // In this case we only care about MSAA and HDR
519 let view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
520 | MeshPipelineKey::from_hdr(view.hdr);
521
522 let rangefinder = view.rangefinder3d();
523 // Since our phase can work on any 3d mesh we can reuse the default mesh 3d filter
524 for (render_entity, visible_entity) in visible_entities.iter::<Mesh3d>() {
525 // We only want meshes with the marker component to be queued to our phase.
526 if has_marker.get(*render_entity).is_err() {
527 continue;
528 }
529 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(*visible_entity)
530 else {
531 continue;
532 };
533 let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id) else {
534 continue;
535 };
536
537 // Specialize the key for the current mesh entity
538 // For this example we only specialize based on the mesh topology
539 // but you could have more complex keys and that's where you'd need to create those keys
540 let mut mesh_key = view_key;
541 mesh_key |= MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
542
543 let pipeline_id = pipelines.specialize(
544 &pipeline_cache,
545 &custom_draw_pipeline,
546 mesh_key,
547 &mesh.layout,
548 );
549 let pipeline_id = match pipeline_id {
550 Ok(id) => id,
551 Err(err) => {
552 error!("{}", err);
553 continue;
554 }
555 };
556 let distance = rangefinder.distance_translation(&mesh_instance.translation);
557 // At this point we have all the data we need to create a phase item and add it to our
558 // phase
559 custom_phase.add(Stencil3d {
560 // Sort the data based on the distance to the view
561 sort_key: FloatOrd(distance),
562 entity: (*render_entity, *visible_entity),
563 pipeline: pipeline_id,
564 draw_function: draw_custom,
565 // Sorted phase items aren't batched
566 batch_range: 0..1,
567 extra_index: PhaseItemExtraIndex::None,
568 indexed: mesh.indexed(),
569 });
570 }
571 }
572}
examples/shader/specialized_mesh_pipeline.rs (line 343)
274fn queue_custom_mesh_pipeline(
275 pipeline_cache: Res<PipelineCache>,
276 custom_mesh_pipeline: Res<CustomMeshPipeline>,
277 (mut opaque_render_phases, opaque_draw_functions): (
278 ResMut<ViewBinnedRenderPhases<Opaque3d>>,
279 Res<DrawFunctions<Opaque3d>>,
280 ),
281 mut specialized_mesh_pipelines: ResMut<SpecializedMeshPipelines<CustomMeshPipeline>>,
282 views: Query<(
283 &RenderVisibleEntities,
284 &ExtractedView,
285 &Msaa,
286 Has<NoIndirectDrawing>,
287 Has<OcclusionCulling>,
288 )>,
289 (render_meshes, render_mesh_instances): (
290 Res<RenderAssets<RenderMesh>>,
291 Res<RenderMeshInstances>,
292 ),
293 param: StaticSystemParam<<MeshPipeline as GetBatchData>::Param>,
294 mut phase_batched_instance_buffers: ResMut<
295 PhaseBatchedInstanceBuffers<Opaque3d, <MeshPipeline as GetBatchData>::BufferData>,
296 >,
297 mut phase_indirect_parameters_buffers: ResMut<PhaseIndirectParametersBuffers<Opaque3d>>,
298 mut change_tick: Local<Tick>,
299) {
300 let system_param_item = param.into_inner();
301
302 let UntypedPhaseBatchedInstanceBuffers {
303 ref mut data_buffer,
304 ref mut work_item_buffers,
305 ref mut late_indexed_indirect_parameters_buffer,
306 ref mut late_non_indexed_indirect_parameters_buffer,
307 ..
308 } = phase_batched_instance_buffers.buffers;
309
310 // Get the id for our custom draw function
311 let draw_function_id = opaque_draw_functions
312 .read()
313 .id::<DrawSpecializedPipelineCommands>();
314
315 // Render phases are per-view, so we need to iterate over all views so that
316 // the entity appears in them. (In this example, we have only one view, but
317 // it's good practice to loop over all views anyway.)
318 for (view_visible_entities, view, msaa, no_indirect_drawing, gpu_occlusion_culling) in
319 views.iter()
320 {
321 let Some(opaque_phase) = opaque_render_phases.get_mut(&view.retained_view_entity) else {
322 continue;
323 };
324
325 // Create *work item buffers* if necessary. Work item buffers store the
326 // indices of meshes that are to be rendered when indirect drawing is
327 // enabled.
328 let work_item_buffer = gpu_preprocessing::get_or_create_work_item_buffer::<Opaque3d>(
329 work_item_buffers,
330 view.retained_view_entity,
331 no_indirect_drawing,
332 gpu_occlusion_culling,
333 );
334
335 // Initialize those work item buffers in preparation for this new frame.
336 gpu_preprocessing::init_work_item_buffers(
337 work_item_buffer,
338 late_indexed_indirect_parameters_buffer,
339 late_non_indexed_indirect_parameters_buffer,
340 );
341
342 // Create the key based on the view. In this case we only care about MSAA and HDR
343 let view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
344 | MeshPipelineKey::from_hdr(view.hdr);
345
346 // Set up a slot to hold information about the batch set we're going to
347 // create. If there are any of our custom meshes in the scene, we'll
348 // need this information in order for Bevy to kick off the rendering.
349 let mut mesh_batch_set_info = None;
350
351 // Find all the custom rendered entities that are visible from this
352 // view.
353 for &(render_entity, visible_entity) in
354 view_visible_entities.get::<CustomRenderedEntity>().iter()
355 {
356 // Get the mesh instance
357 let Some(mesh_instance) = render_mesh_instances.render_mesh_queue_data(visible_entity)
358 else {
359 continue;
360 };
361
362 // Get the mesh data
363 let Some(mesh) = render_meshes.get(mesh_instance.mesh_asset_id) else {
364 continue;
365 };
366
367 // Specialize the key for the current mesh entity
368 // For this example we only specialize based on the mesh topology
369 // but you could have more complex keys and that's where you'd need to create those keys
370 let mut mesh_key = view_key;
371 mesh_key |= MeshPipelineKey::from_primitive_topology(mesh.primitive_topology());
372
373 // Initialize the batch set information if this was the first custom
374 // mesh we saw. We'll need that information later to create the
375 // batch set.
376 if mesh_batch_set_info.is_none() {
377 mesh_batch_set_info = Some(MeshBatchSetInfo {
378 indirect_parameters_index: phase_indirect_parameters_buffers
379 .buffers
380 .allocate(mesh.indexed(), 1),
381 is_indexed: mesh.indexed(),
382 });
383 }
384 let mesh_info = mesh_batch_set_info.unwrap();
385
386 // Allocate some input and output indices. We'll need these to
387 // create the *work item* below.
388 let Some(input_index) =
389 MeshPipeline::get_binned_index(&system_param_item, visible_entity)
390 else {
391 continue;
392 };
393 let output_index = data_buffer.add() as u32;
394
395 // Finally, we can specialize the pipeline based on the key
396 let pipeline_id = specialized_mesh_pipelines
397 .specialize(
398 &pipeline_cache,
399 &custom_mesh_pipeline,
400 mesh_key,
401 &mesh.layout,
402 )
403 // This should never with this example, but if your pipeline specialization
404 // can fail you need to handle the error here
405 .expect("Failed to specialize mesh pipeline");
406
407 // Bump the change tick so that Bevy is forced to rebuild the bin.
408 let next_change_tick = change_tick.get() + 1;
409 change_tick.set(next_change_tick);
410
411 // Add the mesh with our specialized pipeline
412 opaque_phase.add(
413 Opaque3dBatchSetKey {
414 draw_function: draw_function_id,
415 pipeline: pipeline_id,
416 material_bind_group_index: None,
417 vertex_slab: default(),
418 index_slab: None,
419 lightmap_slab: None,
420 },
421 // The asset ID is arbitrary; we simply use [`AssetId::invalid`],
422 // but you can use anything you like. Note that the asset ID need
423 // not be the ID of a [`Mesh`].
424 Opaque3dBinKey {
425 asset_id: AssetId::<Mesh>::invalid().untyped(),
426 },
427 (render_entity, visible_entity),
428 mesh_instance.current_uniform_index,
429 // This example supports batching, but if your pipeline doesn't
430 // support it you can use `BinnedRenderPhaseType::UnbatchableMesh`
431 BinnedRenderPhaseType::BatchableMesh,
432 *change_tick,
433 );
434
435 // Create a *work item*. A work item tells the Bevy renderer to
436 // transform the mesh on GPU.
437 work_item_buffer.push(
438 mesh.indexed(),
439 PreprocessWorkItem {
440 input_index: input_index.into(),
441 output_or_indirect_parameters_index: if no_indirect_drawing {
442 output_index
443 } else {
444 mesh_info.indirect_parameters_index
445 },
446 },
447 );
448 }
449
450 // Now if there were any meshes, we need to add a command to the
451 // indirect parameters buffer, so that the renderer will end up
452 // enqueuing a command to draw the mesh.
453 if let Some(mesh_info) = mesh_batch_set_info {
454 phase_indirect_parameters_buffers
455 .buffers
456 .add_batch_set(mesh_info.is_indexed, mesh_info.indirect_parameters_index);
457 }
458 }
459}
pub fn from_samples(samples: u32) -> Msaa
Trait Implementations§
Source§impl Component for Msaa
impl Component for Msaa
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
A constant indicating the storage type used for this component.
Source§type Mutability = Mutable
type Mutability = Mutable
A marker type to assist Bevy with determining if this component is
mutable, or immutable. Mutable components will have [
Component<Mutability = Mutable>
],
while immutable components will instead have [Component<Mutability = Immutable>
]. Read moreSource§fn register_required_components(
requiree: ComponentId,
components: &mut ComponentsRegistrator<'_>,
required_components: &mut RequiredComponents,
inheritance_depth: u16,
recursion_check_stack: &mut Vec<ComponentId>,
)
fn register_required_components( requiree: ComponentId, components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, inheritance_depth: u16, recursion_check_stack: &mut Vec<ComponentId>, )
Registers required components.
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§fn map_entities<M>(this: &mut Msaa, mapper: &mut M)where
M: EntityMapper,
fn map_entities<M>(this: &mut Msaa, mapper: &mut M)where
M: EntityMapper,
Maps the entities on this component using the given
EntityMapper
. This is used to remap entities in contexts like scenes and entity cloning.
When deriving Component
, this is populated by annotating fields containing entities with #[entities]
Read moreSource§fn register_component_hooks(hooks: &mut ComponentHooks)
fn register_component_hooks(hooks: &mut ComponentHooks)
👎Deprecated since 0.16.0: Use the individual hook methods instead (e.g.,
Component::on_add
, etc.)Called when registering this component, allowing mutable access to its
ComponentHooks
.Source§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§impl Enum for Msaa
impl Enum for Msaa
Source§fn field(&self, __name_param: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, __name_param: &str) -> Option<&(dyn PartialReflect + 'static)>
Returns a reference to the value of the field (in the current variant) with the given name. Read more
Source§fn field_at(
&self,
__index_param: usize,
) -> Option<&(dyn PartialReflect + 'static)>
fn field_at( &self, __index_param: usize, ) -> Option<&(dyn PartialReflect + 'static)>
Returns a reference to the value of the field (in the current variant) at the given index.
Source§fn field_mut(
&mut self,
__name_param: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, __name_param: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
Returns a mutable reference to the value of the field (in the current variant) with the given name. Read more
Source§fn field_at_mut(
&mut self,
__index_param: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, __index_param: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
Returns a mutable reference to the value of the field (in the current variant) at the given index.
Source§fn index_of(&self, __name_param: &str) -> Option<usize>
fn index_of(&self, __name_param: &str) -> Option<usize>
Returns the index of the field (in the current variant) with the given name. Read more
Source§fn name_at(&self, __index_param: usize) -> Option<&str>
fn name_at(&self, __index_param: usize) -> Option<&str>
Returns the name of the field (in the current variant) with the given index. Read more
Source§fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
fn iter_fields(&self) -> VariantFieldIter<'_> ⓘ
Returns an iterator over the values of the current variant’s fields.
Source§fn variant_name(&self) -> &str
fn variant_name(&self) -> &str
The name of the current variant.
Source§fn variant_index(&self) -> usize
fn variant_index(&self) -> usize
The index of the current variant.
Source§fn variant_type(&self) -> VariantType
fn variant_type(&self) -> VariantType
The type of the current variant.
Source§fn to_dynamic_enum(&self) -> DynamicEnum
fn to_dynamic_enum(&self) -> DynamicEnum
Creates a new
DynamicEnum
from this enum.Source§fn clone_dynamic(&self) -> DynamicEnum
fn clone_dynamic(&self) -> DynamicEnum
👎Deprecated since 0.16.0: use
to_dynamic_enum
insteadSource§fn is_variant(&self, variant_type: VariantType) -> bool
fn is_variant(&self, variant_type: VariantType) -> bool
Returns true if the current variant’s type matches the given one.
Source§fn variant_path(&self) -> String
fn variant_path(&self) -> String
Returns the full path to the current variant.
Source§impl ExtractComponent for Msaa
impl ExtractComponent for Msaa
Source§type QueryData = &'static Msaa
type QueryData = &'static Msaa
ECS
ReadOnlyQueryData
to fetch the components to extract.Source§type QueryFilter = ()
type QueryFilter = ()
Filters the entities with additional constraints.
Source§fn extract_component(
item: <<Msaa as ExtractComponent>::QueryData as QueryData>::Item<'_>,
) -> Option<<Msaa as ExtractComponent>::Out>
fn extract_component( item: <<Msaa as ExtractComponent>::QueryData as QueryData>::Item<'_>, ) -> Option<<Msaa as ExtractComponent>::Out>
Defines how the component is transferred into the “render world”.
Source§impl From<Msaa> for MeshPipelineViewLayoutKey
impl From<Msaa> for MeshPipelineViewLayoutKey
Source§fn from(value: Msaa) -> MeshPipelineViewLayoutKey
fn from(value: Msaa) -> MeshPipelineViewLayoutKey
Converts to this type from the input type.
Source§impl FromReflect for Msaa
impl FromReflect for Msaa
Source§fn from_reflect(__param0: &(dyn PartialReflect + 'static)) -> Option<Msaa>
fn from_reflect(__param0: &(dyn PartialReflect + 'static)) -> Option<Msaa>
Constructs a concrete instance of
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Attempts to downcast the given value to
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl GetOwnership for &Msaa
impl GetOwnership for &Msaa
Source§impl GetOwnership for &mut Msaa
impl GetOwnership for &mut Msaa
Source§impl GetOwnership for Msaa
impl GetOwnership for Msaa
Source§impl GetTypeRegistration for Msaa
impl GetTypeRegistration for Msaa
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
Returns the default
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Registers other types needed by this type. Read more
Source§impl IntoReturn for &Msaa
impl IntoReturn for &Msaa
Source§impl IntoReturn for &mut Msaa
impl IntoReturn for &mut Msaa
Source§impl IntoReturn for Msaa
impl IntoReturn for Msaa
Source§impl PartialOrd for Msaa
impl PartialOrd for Msaa
Source§impl PartialReflect for Msaa
impl PartialReflect for Msaa
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
__value_param: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, __value_param: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Returns a zero-sized enumeration of “kinds” of type. Read more
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Returns an immutable enumeration of “kinds” of type. Read more
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Returns a mutable enumeration of “kinds” of type. Read more
Source§fn reflect_owned(self: Box<Msaa>) -> ReflectOwned
fn reflect_owned(self: Box<Msaa>) -> ReflectOwned
Returns an owned enumeration of “kinds” of type. Read more
Source§fn try_into_reflect(
self: Box<Msaa>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Msaa>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Attempts to cast this type to a boxed, fully-reflected value.
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Attempts to cast this type to a fully-reflected value.
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Attempts to cast this type to a mutable, fully-reflected value.
Source§fn into_partial_reflect(self: Box<Msaa>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Msaa>) -> Box<dyn PartialReflect>
Casts this type to a boxed, reflected value. Read more
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Casts this type to a reflected value. Read more
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Casts this type to a mutable, reflected value. Read more
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Returns a hash of the value (which includes the type). Read more
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Returns a “partial equality” comparison result. Read more
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Debug formatter for the value. Read more
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Attempts to clone
Self
using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Applies a reflected value to this value. Read more
Source§fn clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
👎Deprecated since 0.16.0: to clone reflected values, prefer using
reflect_clone
. To convert reflected values to dynamic ones, use to_dynamic
.Clones
Self
into its dynamic representation. Read moreSource§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Indicates whether or not this type is a dynamic type. Read more
Source§impl Reflect for Msaa
impl Reflect for Msaa
Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Returns the value as a
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Msaa>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Msaa>) -> Box<dyn Reflect>
Casts this type to a boxed, fully-reflected value.
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Casts this type to a fully-reflected value.
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Casts this type to a mutable, fully-reflected value.
Source§impl TypePath for Msaa
impl TypePath for Msaa
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Returns the fully qualified path of the underlying type. Read more
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Returns a short, pretty-print enabled path to the type. Read more
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
impl Copy for Msaa
impl Eq for Msaa
impl StructuralPartialEq for Msaa
Auto Trait Implementations§
impl Freeze for Msaa
impl RefUnwindSafe for Msaa
impl Send for Msaa
impl Sync for Msaa
impl Unpin for Msaa
impl UnwindSafe for Msaa
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
Source§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )
Source§fn register_required_components(
components: &mut ComponentsRegistrator<'_>,
required_components: &mut RequiredComponents,
)
fn register_required_components( components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, )
Registers components that are required by the components in this
Bundle
.Source§fn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>),
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )
Source§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
fn get_components( self, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
See
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
See
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
See
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
See
Typed::type_info
.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.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> 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 default()
.
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
Returns a reference to the value specified by
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
Returns a mutable reference to the value specified by
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
Returns a statically typed reference to the value specified by
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
Returns a statically typed mutable reference to the value specified by
path
. Read moreSource§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<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> 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.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian()
.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.