pub struct Material { /* private fields */ }Expand description
Describes a render pipeline + its own bind group, the source type
GPUMaterial is built from via build_material. Fields are private —
start from Material::new and chain the setters below (or
Material::default() for an opaque material with no shader source yet)
rather than constructing one as a struct literal.
Implementations§
Source§impl Material
impl Material
Sourcepub fn new(shader_source: &'static str) -> Self
pub fn new(shader_source: &'static str) -> Self
Start building a material with the given WGSL shader source.
All other fields are set to their defaults (see Default).
pub fn label(self, label: &'static str) -> Self
pub fn vertex_entry(self, entry: &'static str) -> Self
Sourcepub fn no_vertex_entry(self) -> Self
pub fn no_vertex_entry(self) -> Self
Clear vertex_entry — let wgpu auto-detect the module’s single
@vertex function instead of naming one. Only valid if
shader_source declares exactly one. The counterpart to
vertex_entry, which can only set it to Some.
pub fn fragment_entry(self, entry: &'static str) -> Self
Sourcepub fn no_fragment_entry(self) -> Self
pub fn no_fragment_entry(self) -> Self
Clear fragment_entry — same rationale as
no_vertex_entry, for the @fragment stage.
pub fn vertex_layouts(self, layouts: Vec<VertexBufferLayout>) -> Self
Sourcepub fn entries(self, groups: Vec<GroupEntry>) -> Self
pub fn entries(self, groups: Vec<GroupEntry>) -> Self
This material’s bind groups, in @group(N) order — position in groups is the
@group(N) index a shader must declare to match: the first element is @group(0),
the second @group(1), and so on. Each element is either:
GroupEntry::Own— this material’s own bind group entries, built into a fresh layout internally. At most one of these is allowed — the one group aGPUMaterialInstancebinds concrete resources against —build_materialpanics on a second one.GroupEntry::Layout— an already-built layout occupying this position directly: a camera, lights, or anything else external, e.g. pulled from aGlobalLayoutPoolviaGlobalLayoutPool::get.
build_material also panics if any Own entry is visible to the compute stage, or if
groups needs more bind groups than the device’s max_bind_groups allows (wgpu
guarantees only 4) — list only the groups this material’s shader actually declares.
Sourcepub fn no_cull_mode(self) -> Self
pub fn no_cull_mode(self) -> Self
Clear cull_mode — render both faces (no backface culling). The
counterpart to cull_mode, which can only set it
to Some.
pub fn depth(self, depth: DepthStencilState) -> Self
pub fn targets(self, targets: Vec<ColorTargetState>) -> Self
pub fn polygon_mode(self, mode: PolygonMode) -> Self
pub fn sample_count(self, count: u32) -> Self
Sourcepub fn build_asset(self, name: &str, assets: &mut Assets<Self>) -> Handle<Self>
pub fn build_asset(self, name: &str, assets: &mut Assets<Self>) -> Handle<Self>
Consume the builder, insert into assets under name, and return
the resulting Handle<Material>.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Material
impl !UnwindSafe for Material
impl Freeze for Material
impl Send for Material
impl Sync for Material
impl Unpin for Material
impl UnsafeUnpin for Material
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> Component for T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().