Skip to main content

Renderer

Struct Renderer 

Source
pub struct Renderer { /* private fields */ }
Expand description

The main renderer responsible for GPU rendering operations.

The renderer manages the complete rendering pipeline including:

  • GPU context (device, queue, surface)
  • Resource management (buffers, textures, bind groups)
  • Pipeline caching (shader compilation, PSO creation)
  • Frame rendering (scene extraction, command submission)

§Lifecycle

  1. Create with Renderer::new (no GPU resources allocated)
  2. Initialize GPU with Renderer::init
  3. Render frames with Renderer::begin_frame
  4. Clean up with Renderer::maybe_prune

Implementations§

Source§

impl Renderer

Source

pub fn new( init_config: RendererInitConfig, settings: RendererSettings, ) -> Renderer

Phase 1: Create configuration (no GPU resources yet).

This only stores the render settings. GPU resources are allocated when init is called.

§Arguments
  • init_config - Static GPU/device configuration (consumed at init time)
  • settings - Runtime rendering settings (can be changed later via update_settings)
Source

pub fn size(&self) -> (u32, u32)

Returns the current surface size in pixels as (width, height).

Source

pub async fn init<W>( &mut self, window: W, width: u32, height: u32, ) -> Result<(), Error>
where W: HasWindowHandle + HasDisplayHandle + Send + Sync + 'static,

Phase 2: Initialize GPU context with window handle.

This method:

  1. Creates the wgpu instance and adapter
  2. Requests a device with required features/limits
  3. Configures the surface for presentation
  4. Initializes resource manager and pipeline cache
Source

pub fn resize(&mut self, width: u32, height: u32)

Source

pub fn begin_frame<'a>( &'a mut self, scene: &'a mut Scene, camera: &'a RenderCamera, assets: &'a AssetServer, frame_time: FrameTime, ) -> Option<FrameComposer<'a>>

Begins building a new frame for rendering.

Returns a FrameComposer that provides a chainable API for configuring the render pipeline via custom pass hooks.

§Usage
// Method 1: Use default built-in passes
if let Some(composer) = renderer.begin_frame(scene, camera, assets, time) {
    composer.render();
}

// Method 2: With custom hooks (e.g., UI overlay)
if let Some(composer) = renderer.begin_frame(scene, camera, assets, time) {
    composer
        .add_custom_pass(HookStage::AfterPostProcess, |graph, bb| {
            ui_pass.target_tex = bb.surface_out;
            graph.add_pass(&mut ui_pass);
        })
        .render();
}
§Returns

Returns Some(FrameComposer) if frame preparation succeeds, or None if rendering should be skipped (e.g., window size is 0).

Source

pub fn maybe_prune(&mut self)

Performs periodic resource cleanup.

Should be called after each frame to release unused GPU resources. Uses internal heuristics to avoid expensive cleanup every frame.

Source

pub fn render_path(&self) -> &RenderPath

Returns the current RenderPath.

Source

pub fn settings(&self) -> &RendererSettings

Returns a reference to the current runtime renderer settings.

Source

pub fn init_config(&self) -> &RendererInitConfig

Returns a reference to the init-time configuration.

Source

pub fn update_settings(&mut self, new_settings: RendererSettings)

Applies new runtime settings, performing an internal diff to update only the parts that actually changed.

This is the single entry point for all runtime configuration changes. Callers (UI panels, scripting layers, etc.) should maintain their own RendererSettings instance, mutate it, and pass it here.

Source

pub fn set_render_path(&mut self, path: RenderPath)

Switches the active render path at runtime.

Convenience wrapper around update_settings for changing only the render path.

Source

pub fn device(&self) -> Option<&Device>

Returns a reference to the wgpu Device.

Useful for external plugins to initialize GPU resources.

Source

pub fn queue(&self) -> Option<&Queue>

Returns a reference to the wgpu Queue.

Useful for external plugins to submit commands.

Source

pub fn surface_format(&self) -> Option<TextureFormat>

Returns the surface texture format.

Useful for external plugins to configure render pipelines.

Source

pub fn wgpu_ctx(&self) -> Option<&WgpuContext>

Returns a reference to the WgpuContext.

For external plugins that need access to low-level GPU resources. Only available after renderer initialization.

Source

pub fn dump_graph_mermaid(&self) -> Option<String>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

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>

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)

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)

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more