RenderPassInstance

Struct RenderPassInstance 

Source
pub struct RenderPassInstance<'a> {
    pub label: String,
    /* private fields */
}
Expand description

RAII wrapper over wgpu::RenderPass with guard rails to prevent draws without required state (pipeline + vertex/index buffers).

§Example

use wde_wgpu::{
    buffer::Buffer,
    render_pass::RenderPass,
    render_pipeline::RenderPipeline,
};

let mut pass = RenderPassInstance::new("example", render_pass);
pass
    .set_pipeline(pipeline).unwrap()
    .set_vertex_buffer(0, vbo)
    .set_index_buffer(ibo)
    .draw_indexed(0..36, 0..1)
    .unwrap();

Supported operations include standard draws, indexed draws, and indirect versions of both. Errors are returned if mandatory state (pipeline, vertex/index buffers) is missing.

Fields§

§label: String

Implementations§

Source§

impl<'a> RenderPassInstance<'a>

Source

pub fn new(label: &str, render_pass: RenderPass<'a>) -> RenderPassInstance<'a>

Create a new render pass.

§Arguments
  • label - The label of the render pass.
  • render_pass - The render pass to create.
Source

pub fn set_pipeline( &mut self, pipeline: &'a RenderPipeline, ) -> Result<&mut RenderPassInstance<'a>, RenderError>

Set the pipeline of the render pass. The bind groups of the pipeline are also set.

§Arguments
  • pipeline - The pipeline to set.
§Errors
  • RenderError::PipelineNotInitialized - The pipeline is not initialized.
Source

pub fn set_vertex_buffer( &mut self, binding: u32, buffer: &'a Buffer, ) -> &mut RenderPassInstance<'a>

Set a vertex buffer of the render pass.

§Arguments
  • binding - The binding of the vertex buffer.
  • buffer - The buffer to set.
Source

pub fn set_index_buffer( &mut self, buffer: &'a Buffer, ) -> &mut RenderPassInstance<'a>

Set the index buffer of the render pass.

§Arguments
  • buffer - The buffer to set.
Source

pub fn set_scissor_rect( &mut self, x: u32, y: u32, width: u32, height: u32, ) -> &mut RenderPassInstance<'a>

Set the scissor rect of the render pass.

§Arguments
  • x - X coordinate of the scissor rect.
  • y - Y coordinate of the scissor rect.
  • width - Width of the scissor rect.
  • height - Height of the scissor rect.
Source

pub fn set_push_constants( &mut self, stages: ShaderStages, data: &[u8], ) -> &mut RenderPassInstance<'a>

Set push constants of the render pass.

§Arguments
  • stages - The shader stages to set the push constants for.
  • data - The data to set.
Source

pub fn set_bind_group( &mut self, binding: u32, bind_group: &'a BindGroup, ) -> &mut RenderPassInstance<'a>

Set a bind group of the render pass at a binding.

§Arguments
  • binding - The binding of the bind group.
  • bind_group - The bind group to set.
Source

pub fn draw( &mut self, vertices: Range<u32>, instances: Range<u32>, ) -> Result<(), RenderError>

Draws primitives from the active vertex buffers.

§Arguments
  • vertices - Range of vertices to draw.
  • instances - Range of instances to draw.
§Errors
  • RenderError::PipelineNotSet - The pipeline is not set.
Source

pub fn draw_indexed( &mut self, indices: Range<u32>, instance_index: Range<u32>, ) -> Result<(), RenderError>

Draws primitives from the active vertex buffers as indexed triangles.

§Arguments
  • indices - Range of indices to draw.
  • instance_index - Indice of the instance to draw.
§Errors
  • RenderError::PipelineNotSet - The pipeline is not set.
Source

pub fn multi_draw_indirect( &mut self, buffer: &'a Buffer, offset: u64, count: u32, ) -> Result<(), RenderError>

Draws primitives from the active vertex buffers. The draw is indirect, meaning the draw arguments are read from a buffer.

§Arguments
  • buffer - The buffer to read the draw arguments from.
  • offset - The first draw argument to read.
  • count - The number of draw arguments to read.
§Errors
  • RenderError::PipelineNotSet - The pipeline is not set.
  • RenderError::MissingVertexBuffer - The vertex buffer is not set.
Source

pub fn multi_draw_indexed_indirect( &mut self, buffer: &'a Buffer, offset: u64, count: u32, ) -> Result<(), RenderError>

Draws primitives from the active vertex buffers as indexed triangles. The draw is indirect, meaning the draw arguments are read from a buffer.

§Arguments
  • buffer - The buffer to read the draw arguments from.
  • offset - The first draw argument to read.
  • count - The number of draw arguments to read.
§Errors
  • RenderError::PipelineNotSet - The pipeline is not set.
  • RenderError::MissingVertexBuffer - The vertex buffer is not set.
  • RenderError::MissingIndexBuffer - The index buffer is not set.
Source

pub fn forget_lifetime(self) -> RenderPassInstance<'static>

Forgets the lifetime of the render pass. This is used to return the inner wgpu::RenderPass when needed.

Source

pub fn into_inner(self) -> RenderPass<'a>

Consumes the render pass and returns the inner wgpu::RenderPass.

Trait Implementations§

Source§

impl Debug for RenderPassInstance<'_>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for RenderPassInstance<'a>

§

impl<'a> !RefUnwindSafe for RenderPassInstance<'a>

§

impl<'a> Send for RenderPassInstance<'a>

§

impl<'a> Sync for RenderPassInstance<'a>

§

impl<'a> Unpin for RenderPassInstance<'a>

§

impl<'a> !UnwindSafe for RenderPassInstance<'a>

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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: 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.
§

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.
§

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.
§

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.
§

impl<T> Downcast for T
where T: 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.
§

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.
§

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.
§

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.
§

impl<T> DowncastSend for T
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

§

const WITNESS: W = W::MAKE

A constant of the type witness
§

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

§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
§

impl<T> Instrument for T

§

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

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

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

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
§

impl<T> IntoResult<T> for T

§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
§

impl<A> Is for A
where A: Any,

§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
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.
§

impl<T> Upcast<T> for T

§

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

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> ConditionalSend for T
where T: Send,

§

impl<T> Settings for T
where T: 'static + Send + Sync,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,