RenderPipeline

Struct RenderPipeline 

Source
pub struct RenderPipeline {
    pub label: String,
    /* private fields */
}
Expand description

Stores a render pipeline.

§Example

use wde_wgpu::render_pipeline::{DepthStencilDescriptor, RenderPipeline, RenderTopology, ShaderStages};

let mut pipeline = RenderPipeline::new("gbuffer");
pipeline
    .set_shader(include_str!("../../../res/pbr/gbuffer_vert.wgsl"), ShaderStages::VERTEX)
    .set_shader(include_str!("../../../res/pbr/gbuffer_frag.wgsl"), ShaderStages::FRAGMENT)
    .set_topology(RenderTopology::TriangleList)
    .set_depth(DepthStencilDescriptor { enabled: true, write: true, compare: wgpu::CompareFunction::Less })
    .set_bind_groups(layouts)
    .add_push_constant(ShaderStages::VERTEX, 0, 64)
    .init(instance)
    .expect("shaders validated");
assert!(pipeline.is_initialized());

let _wgpu_pipeline = pipeline.get_pipeline().unwrap();

Fields§

§label: String

Implementations§

Source§

impl RenderPipeline

Source

pub fn new(label: &str) -> Self

Create a new render pipeline. By default, the render pipeline does not have a depth or stencil. By default, the primitive topology is Topology::TriangleList. By default, the cull mode is Some(Face::Back). By default, the sample count is 1. By default, this pipeline expects a vertex buffer to be used.

§Arguments
  • label - Label of the render pipeline for debugging.
Source

pub fn set_shader( &mut self, shader: &str, shader_type: ShaderStages, ) -> &mut Self

Set a given shader.

§Arguments
  • shader - The shader source code.
  • shader_type - The shader type.
Source

pub fn set_topology(&mut self, topology: RenderTopology) -> &mut Self

Set the primitive topology.

§Arguments
  • topology - The primitive topology.
Source

pub fn set_depth(&mut self, depth: DepthDescriptor) -> &mut Self

Set the configuration of the depth/stencil attachment.

Source

pub fn set_cull_mode(&mut self, cull_mode: Option<Face>) -> &mut Self

Set the cull mode. None means no culling.

Source

pub fn set_bind_groups(&mut self, layout: Vec<BindGroupLayout>) -> &mut Self

Add a set of bind groups via its layout to the render pipeline. Note that the order of the bind groups will be the same as the order of the bindings in the shaders.

§Arguments
  • layout - The bind group layout.
Source

pub fn set_render_targets(&mut self, targets: Vec<TextureFormat>) -> &mut Self

Set the render targets of the render pipeline.

§Arguments
  • targets - The render targets.
Source

pub fn set_sample_count(&mut self, count: u32) -> &mut Self

Set the sample count for multisampling.

§Arguments
  • count - The sample count.
Source

pub fn set_use_vertices_buffer(&mut self, use_buffer: bool) -> &mut Self

Set whether the pipeline uses a vertex buffer.

§Arguments
  • use_buffer - Whether to use a vertex buffer.
Source

pub fn set_fragment_blend(&mut self, blend: Option<BlendState>) -> &mut Self

Set the blend state for the fragment shader.

§Arguments
  • blend - The blend state.
Source

pub fn add_push_constant( &mut self, stages: ShaderStages, offset: u32, size: u32, )

Add a push constant to the render pipeline.

§Arguments
  • stages - The shader stages.
  • offset - The offset of the push constant.
  • size - The size of the push constant.
Source

pub fn init( &mut self, instance: &RenderInstanceData<'_>, ) -> Result<(), RenderError>

Initialize a new render pipeline.

§Arguments
  • instance - Render instance.
§Returns
  • Result<(), RenderError> - The result of the initialization.
Source

pub fn get_pipeline(&self) -> Option<&RenderPipeline>

Get the render pipeline.

§Returns
  • Option<&RenderPipelineRef> - The render pipeline.
Source

pub fn get_layout(&self) -> Option<&PipelineLayout>

Get the pipeline layout.

§Returns
  • Option<&PipelineLayout> - The pipeline layout.
Source

pub fn is_initialized(&self) -> bool

Check if the render pipeline is initialized.

§Returns
  • bool - True if the render pipeline is initialized, false otherwise.

Trait Implementations§

Source§

impl Debug for RenderPipeline

Source§

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

Formats the value using the given formatter. Read more

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
§

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,