Struct RenderPass

Source
pub struct RenderPass<'a> { /* private fields */ }
Expand description

In-progress recording of a render pass.

Implementations§

Source§

impl<'a> RenderPass<'a>

Source

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

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 order of their declaration.

Source

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

Sets the active render pipeline.

Subsequent draw calls will exhibit the behavior defined by pipeline.

Source

pub fn set_blend_color(&mut self, color: Color)

Sets the blend color as used by some of the blending modes.

Subsequent blending tests will test against this value.

Source

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

Sets the active index buffer.

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

Source

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 RenderPass will use buffer as one of the source vertex buffers.

The slot refers to the index of the matching descriptor in VertexStateDescriptor::vertex_buffers.

Source

pub fn set_scissor_rect(&mut self, x: u32, y: u32, width: u32, height: u32)

Sets the scissor region.

Subsequent draw calls will discard any fragments that fall outside this region.

Source

pub fn set_viewport( &mut self, x: f32, y: f32, w: f32, h: f32, min_depth: f32, max_depth: f32, )

Sets the viewport region.

Subsequent draw calls will draw any fragments in this region.

Source

pub fn set_stencil_reference(&mut self, reference: u32)

Sets the stencil reference.

Subsequent stencil tests will test against this value.

Source

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 RenderPass::set_vertex_buffer.

Source

pub fn insert_debug_marker(&mut self, label: &str)

Inserts debug marker.

Source

pub fn push_debug_group(&mut self, label: &str)

Start record commands and group it into debug marker group.

Source

pub fn pop_debug_group(&mut self)

Stops command recording and creates debug group.

Source

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

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

Source

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

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

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

The structure expected in indirect_buffer is the following:

#[repr(C)]
struct DrawIndirect {
    vertex_count: u32, // The number of vertices to draw.
    instance_count: u32, // The number of instances to draw.
    base_vertex: u32, // The Index of the first vertex to draw.
    base_instance: u32, // The instance ID of the first instance to draw.
}
Source

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

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 RenderPass::set_index_buffer, while the active vertex buffers can be set with RenderPass::set_vertex_buffer.

The structure expected in indirect_buffer is the following:

#[repr(C)]
struct DrawIndexedIndirect {
    vertex_count: u32, // The number of vertices to draw.
    instance_count: u32, // The number of instances to draw.
    base_index: u32, // The base index within the index buffer.
    vertex_offset: i32, // The value added to the vertex index before indexing into the vertex buffer.
    base_instance: u32, // The instance ID of the first instance to draw.
}
Source

pub fn execute_bundles<I: Iterator<Item = &'a RenderBundle>>( &mut self, render_bundles: I, )

Execute a render bundle, which is a set of pre-recorded commands that can be run together.

Source§

impl<'a> RenderPass<'a>

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

Source

pub fn multi_draw_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: BufferAddress, count: u32, )

Disptaches multiple draw calls from the active vertex buffer(s) based on the contents of the indirect_buffer. count draw calls are issued.

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

The structure expected in indirect_buffer is the following:

#[repr(C)]
struct DrawIndirect {
    vertex_count: u32, // The number of vertices to draw.
    instance_count: u32, // The number of instances to draw.
    base_vertex: u32, // The Index of the first vertex to draw.
    base_instance: u32, // The instance ID of the first instance to draw.
}

These draw structures are expected to be tightly packed.

Source

pub fn multi_draw_indexed_indirect( &mut self, indirect_buffer: &'a Buffer, indirect_offset: BufferAddress, count: u32, )

Disptaches multiple draw calls from the active index buffer and the active vertex buffers, based on the contents of the indirect_buffer. count draw calls are issued.

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

The structure expected in indirect_buffer is the following:

#[repr(C)]
struct DrawIndexedIndirect {
    vertex_count: u32, // The number of vertices to draw.
    instance_count: u32, // The number of instances to draw.
    base_index: u32, // The base index within the index buffer.
    vertex_offset: i32, // The value added to the vertex index before indexing into the vertex buffer.
    base_instance: u32, // The instance ID of the first instance to draw.
}

These draw structures are expected to be tightly packed.

Source§

impl<'a> RenderPass<'a>

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

Source

pub fn multi_draw_indirect_count( &mut self, indirect_buffer: &'a Buffer, indirect_offset: BufferAddress, count_buffer: &'a Buffer, count_offset: BufferAddress, max_count: u32, )

Disptaches multiple draw calls from the active vertex buffer(s) based on the contents of the indirect_buffer. The count buffer is read to determine how many draws to issue.

The indirect buffer must be long enough to account for max_count draws, however only count will draws will be read. If count is greater than max_count, max_count will be used.

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

The structure expected in indirect_buffer is the following:

#[repr(C)]
struct DrawIndirect {
    vertex_count: u32, // The number of vertices to draw.
    instance_count: u32, // The number of instances to draw.
    base_vertex: u32, // The Index of the first vertex to draw.
    base_instance: u32, // The instance ID of the first instance to draw.
}

These draw structures are expected to be tightly packed.

The structure expected in count_buffer is the following:

#[repr(C)]
struct DrawIndirectCount {
    count: u32, // Number of draw calls to issue.
}
Source

pub fn multi_draw_indexed_indirect_count( &mut self, indirect_buffer: &'a Buffer, indirect_offset: BufferAddress, count_buffer: &'a Buffer, count_offset: BufferAddress, max_count: u32, )

Disptaches multiple draw calls from the active index buffer and the active vertex buffers, based on the contents of the indirect_buffer. The count buffer is read to determine how many draws to issue.

The indirect buffer must be long enough to account for max_count draws, however only count will draws will be read. If count is greater than max_count, max_count will be used.

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

The structure expected in indirect_buffer is the following:

#[repr(C)]
struct DrawIndexedIndirect {
    vertex_count: u32, // The number of vertices to draw.
    instance_count: u32, // The number of instances to draw.
    base_index: u32, // The base index within the index buffer.
    vertex_offset: i32, // The value added to the vertex index before indexing into the vertex buffer.
    base_instance: u32, // The instance ID of the first instance to draw.
}

These draw structures are expected to be tightly packed.

The structure expected in count_buffer is the following:

#[repr(C)]
struct DrawIndexedIndirectCount {
    count: u32, // Number of draw calls to issue.
}

Trait Implementations§

Source§

impl<'a> Drop for RenderPass<'a>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for RenderPass<'a>

§

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

§

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

§

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

§

impl<'a> Unpin for RenderPass<'a>

§

impl<'a> !UnwindSafe for RenderPass<'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
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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