pub struct RenderBundleEncoder<'a> { /* private fields */ }
Available on crate feature wgpu only.
Expand description

Encodes a series of GPU operations into a reusable “render bundle”.

It only supports a handful of render commands, but it makes them reusable. It can be created with Device::create_render_bundle_encoder. It can be executed onto a CommandEncoder using RenderPass::execute_bundles.

Executing a RenderBundle is often more efficient than issuing the underlying commands manually.

Corresponds to WebGPU GPURenderBundleEncoder.

Implementations§

§

impl<'a> RenderBundleEncoder<'a>

pub fn finish(self, desc: &RenderBundleDescriptor<Option<&str>>) -> RenderBundle

Finishes recording and returns a RenderBundle that can be executed in other render passes.

pub fn set_bind_group( &mut self, index: u32, bind_group: &'a BindGroup, offsets: &[u32] )

Sets the active bind group for a given bind group index. The bind group layout in the active pipeline when any draw() function is called must match the layout of this bind group.

If the bind group have dynamic offsets, provide them in the binding order.

pub fn set_pipeline(&mut self, pipeline: &'a RenderPipeline)

Sets the active render pipeline.

Subsequent draw calls will exhibit the behavior defined by pipeline.

pub fn set_index_buffer( &mut self, buffer_slice: BufferSlice<'a>, index_format: IndexFormat )

Sets the active index buffer.

Subsequent calls to draw_indexed on this RenderBundleEncoder will use buffer as the source index buffer.

pub fn set_vertex_buffer(&mut self, slot: u32, buffer_slice: BufferSlice<'a>)

Assign a vertex buffer to a slot.

Subsequent calls to draw and draw_indexed on this RenderBundleEncoder will use buffer as one of the source vertex buffers.

The slot refers to the index of the matching descriptor in VertexState::buffers.

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

Draws primitives from the active vertex buffer(s).

The active vertex buffers can be set with RenderBundleEncoder::set_vertex_buffer. Does not use an Index Buffer. If you need this see RenderBundleEncoder::draw_indexed

Panics if vertices Range is outside of the range of the vertices range of any set vertex buffer.

vertices: The range of vertices to draw. instances: Range of Instances to draw. Use 0..1 if instance buffers are not used. E.g.of how its used internally

for instance_id in instance_range {
    for vertex_id in vertex_range {
        let vertex = vertex[vertex_id];
        vertex_shader(vertex, vertex_id, instance_id);
    }
}

pub fn draw_indexed( &mut self, indices: Range<u32>, base_vertex: i32, instances: Range<u32> )

Draws indexed primitives using the active index buffer and the active vertex buffer(s).

The active index buffer can be set with RenderBundleEncoder::set_index_buffer. The active vertex buffer(s) can be set with RenderBundleEncoder::set_vertex_buffer.

Panics if indices Range is outside of the range of the indices range of any set index buffer.

indices: The range of indices to draw. base_vertex: value added to each index value before indexing into the vertex buffers. instances: Range of Instances to draw. Use 0..1 if instance buffers are not used. E.g.of how its used internally

for instance_id in instance_range {
    for index_index in index_range {
        let vertex_id = index_buffer[index_index];
        let adjusted_vertex_id = vertex_id + base_vertex;
        let vertex = vertex[adjusted_vertex_id];
        vertex_shader(vertex, adjusted_vertex_id, instance_id);
    }
}

pub fn draw_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64 )

Draws primitives from the active vertex buffer(s) based on the contents of the indirect_buffer.

The active vertex buffers can be set with RenderBundleEncoder::set_vertex_buffer.

The structure expected in indirect_buffer must conform to DrawIndirectArgs.

pub fn draw_indexed_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64 )

Draws indexed primitives using the active index buffer and the active vertex buffers, based on the contents of the indirect_buffer.

The active index buffer can be set with RenderBundleEncoder::set_index_buffer, while the active vertex buffers can be set with RenderBundleEncoder::set_vertex_buffer.

The structure expected in indirect_buffer must conform to DrawIndexedIndirectArgs.

§

impl<'a> RenderBundleEncoder<'a>

Features::PUSH_CONSTANTS must be enabled on the device in order to call these functions.

pub fn set_push_constants( &mut self, stages: ShaderStages, offset: u32, data: &[u8] )

Set push constant data.

Offset is measured in bytes, but must be a multiple of PUSH_CONSTANT_ALIGNMENT.

Data size must be a multiple of 4 and must have an alignment of 4. For example, with an offset of 4 and an array of [u8; 8], that will write to the range of 4..12.

For each byte in the range of push constant data written, the union of the stages of all push constant ranges that covers that byte must be exactly stages. There’s no good way of explaining this simply, so here are some examples:

For the given ranges:
- 0..4 Vertex
- 4..8 Fragment

You would need to upload this in two set_push_constants calls. First for the Vertex range, second for the Fragment range.

For the given ranges:
- 0..8  Vertex
- 4..12 Fragment

You would need to upload this in three set_push_constants calls. First for the Vertex only range 0..4, second for the Vertex | Fragment range 4..8, third for the Fragment range 8..12.

Trait Implementations§

§

impl<'a> Debug for RenderBundleEncoder<'a>

§

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

Formats the value using the given formatter. Read more
§

impl<'a> RenderEncoder<'a> for RenderBundleEncoder<'a>

§

fn set_bind_group( &mut self, index: u32, bind_group: &'a BindGroup, offsets: &[u32] )

Sets the active bind group for a given bind group index. The bind group layout in the active pipeline when any draw() function is called must match the layout of this bind group. Read more
§

fn set_pipeline(&mut self, pipeline: &'a RenderPipeline)

Sets the active render pipeline. Read more
§

fn set_index_buffer( &mut self, buffer_slice: BufferSlice<'a>, index_format: IndexFormat )

Sets the active index buffer. Read more
§

fn set_vertex_buffer(&mut self, slot: u32, buffer_slice: BufferSlice<'a>)

Assign a vertex buffer to a slot. Read more
§

fn draw(&mut self, vertices: Range<u32>, instances: Range<u32>)

Draws primitives from the active vertex buffer(s). Read more
§

fn draw_indexed( &mut self, indices: Range<u32>, base_vertex: i32, instances: Range<u32> )

Draws indexed primitives using the active index buffer and the active vertex buffers. Read more
§

fn draw_indirect(&mut self, indirect_buffer: &'a Buffer, indirect_offset: u64)

Draws primitives from the active vertex buffer(s) based on the contents of the indirect_buffer. Read more
§

fn draw_indexed_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: u64 )

Draws indexed primitives using the active index buffer and the active vertex buffers, based on the contents of the indirect_buffer. Read more
§

fn set_push_constants(&mut self, stages: ShaderStages, offset: u32, data: &[u8])

wgt::Features::PUSH_CONSTANTS must be enabled on the device in order to call this function. Read more

Auto Trait Implementations§

§

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

§

impl<'a> !Send for RenderBundleEncoder<'a>

§

impl<'a> !Sync for RenderBundleEncoder<'a>

§

impl<'a> Unpin for RenderBundleEncoder<'a>

§

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

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
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, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar> ) -> T

Converts self into C, using the provided parameters.
source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
§

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>

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromAngle<T> for T

source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
§

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, U> IntoAngle<U> for T
where U: FromAngle<T>,

source§

fn into_angle(self) -> U

Performs a conversion into T.
source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar> ) -> T

Converts self into C, using the provided parameters.
source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
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
source§

impl<T> IntoStimulus<T> for T

source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
source§

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

§

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>,

§

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, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
§

impl<T> Upcast<T> for T

§

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

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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