pub struct ViewportRenderer { /* private fields */ }Expand description
High-level renderer wrapping all GPU resources and providing framework-agnostic
prepare() and paint() methods.
Implementations§
Source§impl ViewportRenderer
impl ViewportRenderer
Sourcepub fn pick_scene_gpu(
&mut self,
device: &Device,
queue: &Queue,
cursor: Vec2,
frame: &FrameData,
) -> Option<GpuPickHit>
pub fn pick_scene_gpu( &mut self, device: &Device, queue: &Queue, cursor: Vec2, frame: &FrameData, ) -> Option<GpuPickHit>
GPU object-ID pick: renders the scene to an offscreen R32Uint texture
and reads back the single pixel under cursor.
This is O(1) in mesh complexity — every object is rendered with a flat
u32 ID, and only one pixel is read back. For triangle-level queries
(barycentric scalar probe, exact world position), use the CPU
crate::interaction::picking::pick_scene path instead.
The pipeline is lazily initialized on first call — zero overhead when this method is never invoked.
§Arguments
device— wgpu devicequeue— wgpu queuecursor— cursor position in viewport-local pixels (top-left origin)frame— current frame data (camera, scene_items, viewport_size)
§Returns
Some(GpuPickHit) if an object is under the cursor, None if empty space.
Source§impl ViewportRenderer
impl ViewportRenderer
Sourcepub fn paint(&self, render_pass: &mut RenderPass<'static>, frame: &FrameData)
pub fn paint(&self, render_pass: &mut RenderPass<'static>, frame: &FrameData)
Issue draw calls for the viewport. Call inside a wgpu::RenderPass.
This method requires a 'static render pass (as provided by egui’s
CallbackTrait). For non-static render passes (iced, manual wgpu),
use paint_to.
Sourcepub fn paint_to<'rp>(
&'rp self,
render_pass: &mut RenderPass<'rp>,
frame: &FrameData,
)
pub fn paint_to<'rp>( &'rp self, render_pass: &mut RenderPass<'rp>, frame: &FrameData, )
Issue draw calls into a render pass with any lifetime.
Identical to paint but accepts a render pass with a
non-'static lifetime, making it usable from iced, raw wgpu, or any
framework that creates its own render pass.
Sourcepub fn render(
&mut self,
device: &Device,
queue: &Queue,
output_view: &TextureView,
frame: &FrameData,
) -> CommandBuffer
pub fn render( &mut self, device: &Device, queue: &Queue, output_view: &TextureView, frame: &FrameData, ) -> CommandBuffer
High-level HDR render method. Handles the full post-processing pipeline: scene → HDR texture → (bloom) → (SSAO) → tone map → output_view.
When frame.post_process.enabled is false, falls back to a simple LDR render
pass targeting output_view directly.
Returns a CommandBuffer ready to submit.
Sourcepub fn render_offscreen(
&mut self,
device: &Device,
queue: &Queue,
frame: &FrameData,
width: u32,
height: u32,
) -> Vec<u8> ⓘ
pub fn render_offscreen( &mut self, device: &Device, queue: &Queue, frame: &FrameData, width: u32, height: u32, ) -> Vec<u8> ⓘ
Render a frame to an offscreen texture and return raw RGBA bytes.
Creates a temporary wgpu::Texture render target of the given dimensions,
runs all render passes (shadow, scene, post-processing) into it via
render(), then copies the result back to CPU memory.
No OS window or wgpu::Surface is required. The caller is responsible for
initialising the wgpu adapter with compatible_surface: None and for
constructing a valid FrameData (including viewport_size matching
width/height).
Returns width * height * 4 bytes in RGBA8 layout. The caller encodes to
PNG/EXR independently — no image codec dependency in this crate.
Source§impl ViewportRenderer
impl ViewportRenderer
Sourcepub fn new(device: &Device, target_format: TextureFormat) -> Self
pub fn new(device: &Device, target_format: TextureFormat) -> Self
Create a new renderer with default settings (no MSAA). Call once at application startup.
Sourcepub fn with_sample_count(
device: &Device,
target_format: TextureFormat,
sample_count: u32,
) -> Self
pub fn with_sample_count( device: &Device, target_format: TextureFormat, sample_count: u32, ) -> Self
Create a new renderer with the specified MSAA sample count (1, 2, or 4).
When using MSAA (sample_count > 1), the caller must create multisampled color and depth textures and use them as render pass attachments with the final surface texture as the resolve target.
Sourcepub fn resources(&self) -> &ViewportGpuResources
pub fn resources(&self) -> &ViewportGpuResources
Access the underlying GPU resources (e.g. for mesh uploads).
Sourcepub fn last_frame_stats(&self) -> FrameStats
pub fn last_frame_stats(&self) -> FrameStats
Performance counters from the last completed frame.
Sourcepub fn resources_mut(&mut self) -> &mut ViewportGpuResources
pub fn resources_mut(&mut self) -> &mut ViewportGpuResources
Mutable access to the underlying GPU resources (e.g. for mesh uploads).
Auto Trait Implementations§
impl Freeze for ViewportRenderer
impl !RefUnwindSafe for ViewportRenderer
impl Send for ViewportRenderer
impl Sync for ViewportRenderer
impl Unpin for ViewportRenderer
impl UnsafeUnpin for ViewportRenderer
impl !UnwindSafe for ViewportRenderer
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
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>
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>
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)
&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)
&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<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>
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 moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.