Struct re_renderer::PickingLayerProcessor
source · pub struct PickingLayerProcessor {
pub picking_target: Arc<DynamicResource<GpuTextureHandle, TextureDesc, GpuTextureInternal>>,
picking_depth_target: Arc<DynamicResource<GpuTextureHandle, TextureDesc, GpuTextureInternal>>,
readback_buffer: Mutex<GpuReadbackBuffer>,
bind_group_0: GpuBindGroup,
depth_readback_workaround: Option<DepthReadbackWorkaround>,
}
Expand description
Manages the rendering of the picking layer pass, its render targets & readback buffer.
The view builder creates this for every frame that requests a picking result.
Fields§
§picking_target: Arc<DynamicResource<GpuTextureHandle, TextureDesc, GpuTextureInternal>>
§picking_depth_target: Arc<DynamicResource<GpuTextureHandle, TextureDesc, GpuTextureInternal>>
§readback_buffer: Mutex<GpuReadbackBuffer>
§bind_group_0: GpuBindGroup
§depth_readback_workaround: Option<DepthReadbackWorkaround>
Implementations§
source§impl PickingLayerProcessor
impl PickingLayerProcessor
sourcepub const PICKING_LAYER_FORMAT: TextureFormat = wgpu::TextureFormat::Rgba32Uint
pub const PICKING_LAYER_FORMAT: TextureFormat = wgpu::TextureFormat::Rgba32Uint
The texture format used for the picking layer.
sourcepub const PICKING_LAYER_DEPTH_FORMAT: TextureFormat = wgpu::TextureFormat::Depth32Float
pub const PICKING_LAYER_DEPTH_FORMAT: TextureFormat = wgpu::TextureFormat::Depth32Float
The depth format used for the picking layer - f32 makes it easiest to deal with retrieved depth and is guaranteed to be copyable.
pub const PICKING_LAYER_MSAA_STATE: MultisampleState = _
pub const PICKING_LAYER_DEPTH_STATE: Option<DepthStencilState> = ViewBuilder::MAIN_TARGET_DEFAULT_DEPTH_STATE
sourcepub fn new<T: 'static + Send + Sync>(
ctx: &RenderContext,
view_name: &DebugLabel,
screen_resolution: UVec2,
picking_rect: RectInt,
frame_uniform_buffer_content: &FrameUniformBuffer,
enable_picking_target_sampling: bool,
readback_identifier: GpuReadbackIdentifier,
readback_user_data: T
) -> Self
pub fn new<T: 'static + Send + Sync>( ctx: &RenderContext, view_name: &DebugLabel, screen_resolution: UVec2, picking_rect: RectInt, frame_uniform_buffer_content: &FrameUniformBuffer, enable_picking_target_sampling: bool, readback_identifier: GpuReadbackIdentifier, readback_user_data: T ) -> Self
New picking layer for a given screen.
Note that out-of-bounds rectangles are allowed, the picking layer will not be clipped to the screen. This means that the content of the picking layer rectangle will behave as-if the screen was bigger, containing valid picking data. It’s up to the user when interpreting the picking data to do any required clipping.
enable_picking_target_sampling
should be enabled only for debugging purposes.
It allows to sample the picking layer texture in a shader.
pub fn begin_render_pass<'a>( &'a self, view_name: &DebugLabel, encoder: &'a mut CommandEncoder ) -> RenderPass<'a>
pub fn end_render_pass( &self, encoder: &mut CommandEncoder, render_pipelines: &StaticResourcePoolReadLockAccessor<'_, GpuRenderPipelineHandle, RenderPipeline> ) -> Result<(), PickingLayerError>
sourcepub fn next_readback_result<T: 'static + Send + Sync>(
ctx: &RenderContext,
identifier: GpuReadbackIdentifier
) -> Option<PickingResult<T>>
pub fn next_readback_result<T: 'static + Send + Sync>( ctx: &RenderContext, identifier: GpuReadbackIdentifier ) -> Option<PickingResult<T>>
Returns the oldest received picking results for a given identifier and user data type.
It is recommended to call this method repeatedly until it returns None
to ensure that all
pending data is flushed.
Ready data that hasn’t been retrieved for more than a frame will be discarded.
See also crate::view_builder::ViewBuilder::schedule_picking_rect
Auto Trait Implementations§
impl !Freeze for PickingLayerProcessor
impl !RefUnwindSafe for PickingLayerProcessor
impl Send for PickingLayerProcessor
impl Sync for PickingLayerProcessor
impl Unpin for PickingLayerProcessor
impl !UnwindSafe for PickingLayerProcessor
Blanket Implementations§
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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>
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 more