Struct bevy_retrograde::core::luminance::tess::TessBuilder [−]
pub struct TessBuilder<'a, B, V, I = (), W = (), S = Interleaved> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
B: ?Sized, { /* fields omitted */ }
Expand description
Tess
builder object.
This type allows to create Tess
via a builder pattern. You have several flavors of
possible vertex storage situations, as well as data encoding, described below.
Vertex storage
Interleaved
You can pass around interleaved vertices and indices. Those are encoded in Vec<T>
. You
typically want to use this when you already have the vertices and/or indices allocated somewhere,
as the interface will use the input vector as a source of truth for lengths.
Deinterleaved
This is the same as interleaved data in terms of interface, but the T
type is interpreted
a bit differently. Here, the encoding is (Vec<Field0>, Vec<Field1>, …)
, where Field0
,
Field1
etc. are all the ordered fieds in T
.
That representation allows field-based operation later on Tess
, while it would be
impossible with the interleaved version (you would need to get all the fields at once, since
you would work onT
directly and each of its fields).
Data encoding
- Vectors: you can pass vectors as input data for both vertices and indices. Those will be interpreted differently based on the vertex storage you chose for vertices, and the normal way for indices.
- Buffers: you can pass
Buffer
objects, too. Those are more flexible than vectors as you can use all of theBuffer
API before sending them to the builder. - Disabled: disabling means that no data will be passed to the GPU. You can disable independently vertex data and/or index data.
Parametricity
B
is the backend typeV
is the vertex type.S
is the storage type.
Implementations
impl<'a, B, V, I, W, S> TessBuilder<'a, B, V, I, W, S> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
I: TessIndex,
B: ?Sized,
impl<'a, B, V, I, W, S> TessBuilder<'a, B, V, I, W, S> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
I: TessIndex,
B: ?Sized,
pub fn set_mode(self, mode: Mode) -> TessBuilder<'a, B, V, I, W, S>
pub fn set_mode(self, mode: Mode) -> TessBuilder<'a, B, V, I, W, S>
Set the Mode
to connect vertices.
Calling that function twice replaces the previously set value.
pub fn set_vertex_nb(self, vert_nb: usize) -> TessBuilder<'a, B, V, I, W, S>
pub fn set_vertex_nb(self, vert_nb: usize) -> TessBuilder<'a, B, V, I, W, S>
Set the default number of vertices to render.
Calling that function twice replaces the previously set value.
pub fn set_instance_nb(self, inst_nb: usize) -> TessBuilder<'a, B, V, I, W, S>
pub fn set_instance_nb(self, inst_nb: usize) -> TessBuilder<'a, B, V, I, W, S>
Set the default number of instances to render.
Calling that function twice replaces the previously set value.
pub fn set_primitive_restart_index(
self,
restart_index: I
) -> TessBuilder<'a, B, V, I, W, S>
pub fn set_primitive_restart_index(
self,
restart_index: I
) -> TessBuilder<'a, B, V, I, W, S>
Set the primitive restart index.
Calling that function twice replaces the previously set value.
impl<'a, B, V, I, W, S> TessBuilder<'a, B, V, I, W, S> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
I: TessIndex,
B: ?Sized,
impl<'a, B, V, I, W, S> TessBuilder<'a, B, V, I, W, S> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
I: TessIndex,
B: ?Sized,
pub fn new<C>(ctx: &'a mut C) -> TessBuilder<'a, B, V, I, W, S> where
C: GraphicsContext<Backend = B>,
pub fn new<C>(ctx: &'a mut C) -> TessBuilder<'a, B, V, I, W, S> where
C: GraphicsContext<Backend = B>,
Create a new default TessBuilder
.
Notes
Feel free to use the GraphicsContext::new_tess
method for a simpler method.
impl<'a, B, V, W, S> TessBuilder<'a, B, V, (), W, S> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
B: ?Sized,
impl<'a, B, V, W, S> TessBuilder<'a, B, V, (), W, S> where
V: TessVertexData<S>,
S: ?Sized,
W: TessVertexData<S>,
B: ?Sized,
pub fn set_indices<I, X>(self, indices: X) -> TessBuilder<'a, B, V, I, W, S> where
X: Into<Vec<I, Global>>,
pub fn set_indices<I, X>(self, indices: X) -> TessBuilder<'a, B, V, I, W, S> where
X: Into<Vec<I, Global>>,
Add indices to be bundled in the Tess
.
Every time you call that function, the set of indices is replaced by the one you provided.
The type of expected indices is ruled by the II
type variable you chose.
impl<'a, B, I, W> TessBuilder<'a, B, (), I, W, Interleaved> where
W: TessVertexData<Interleaved>,
I: TessIndex,
B: ?Sized,
impl<'a, B, I, W> TessBuilder<'a, B, (), I, W, Interleaved> where
W: TessVertexData<Interleaved>,
I: TessIndex,
B: ?Sized,
pub fn set_vertices<V, X>(
self,
vertices: X
) -> TessBuilder<'a, B, V, I, W, Interleaved> where
V: TessVertexData<Interleaved, Data = Vec<V, Global>>,
X: Into<Vec<V, Global>>,
pub fn set_vertices<V, X>(
self,
vertices: X
) -> TessBuilder<'a, B, V, I, W, Interleaved> where
V: TessVertexData<Interleaved, Data = Vec<V, Global>>,
X: Into<Vec<V, Global>>,
Add vertices to be bundled in the Tess
.
Every time you call that function, the set of vertices is replaced by the one you provided.
impl<'a, B, I, V> TessBuilder<'a, B, V, I, (), Interleaved> where
V: TessVertexData<Interleaved>,
I: TessIndex,
B: ?Sized,
impl<'a, B, I, V> TessBuilder<'a, B, V, I, (), Interleaved> where
V: TessVertexData<Interleaved>,
I: TessIndex,
B: ?Sized,
pub fn set_instances<W, X>(
self,
instances: X
) -> TessBuilder<'a, B, V, I, W, Interleaved> where
W: TessVertexData<Interleaved, Data = Vec<W, Global>>,
X: Into<Vec<W, Global>>,
pub fn set_instances<W, X>(
self,
instances: X
) -> TessBuilder<'a, B, V, I, W, Interleaved> where
W: TessVertexData<Interleaved, Data = Vec<W, Global>>,
X: Into<Vec<W, Global>>,
Add instances to be bundled in the Tess
.
Every time you call that function, the set of instances is replaced by the one you provided.
impl<'a, B, V, I, W> TessBuilder<'a, B, V, I, W, Deinterleaved> where
V: TessVertexData<Deinterleaved, Data = Vec<DeinterleavedData, Global>>,
W: TessVertexData<Deinterleaved, Data = Vec<DeinterleavedData, Global>>,
I: TessIndex,
B: ?Sized,
impl<'a, B, V, I, W> TessBuilder<'a, B, V, I, W, Deinterleaved> where
V: TessVertexData<Deinterleaved, Data = Vec<DeinterleavedData, Global>>,
W: TessVertexData<Deinterleaved, Data = Vec<DeinterleavedData, Global>>,
I: TessIndex,
B: ?Sized,
pub fn set_attributes<A, X>(
self,
attributes: X
) -> TessBuilder<'a, B, V, I, W, Deinterleaved> where
V: Deinterleave<A>,
X: Into<Vec<A, Global>>,
pub fn set_attributes<A, X>(
self,
attributes: X
) -> TessBuilder<'a, B, V, I, W, Deinterleaved> where
V: Deinterleave<A>,
X: Into<Vec<A, Global>>,
Add vertices to be bundled in the Tess
.
Every time you call that function, the set of vertices is replaced by the one you provided.
pub fn set_instance_attributes<A, X>(
self,
attributes: X
) -> TessBuilder<'a, B, V, I, W, Deinterleaved> where
W: Deinterleave<A>,
X: Into<Vec<A, Global>>,
pub fn set_instance_attributes<A, X>(
self,
attributes: X
) -> TessBuilder<'a, B, V, I, W, Deinterleaved> where
W: Deinterleave<A>,
X: Into<Vec<A, Global>>,
Add instances to be bundled in the Tess
.
Every time you call that function, the set of instances is replaced by the one you provided.
impl<'a, B, V, I, W, S> TessBuilder<'a, B, V, I, W, S> where
V: TessVertexData<S>,
W: TessVertexData<S>,
I: TessIndex,
B: Tess<V, I, W, S> + ?Sized,
impl<'a, B, V, I, W, S> TessBuilder<'a, B, V, I, W, S> where
V: TessVertexData<S>,
W: TessVertexData<S>,
I: TessIndex,
B: Tess<V, I, W, S> + ?Sized,
Build a Tess
if the TessBuilder
has enough data and is in a valid state. What is
needed is backend-dependent but most of the time, you will want to:
- Set a
Mode
. - Give vertex data and optionally indices, or give none of them but only a number of vertices (attributeless objects).
- If you provide vertex data by submitting several sets with
TessBuilder::set_attributes
and/orTessBuilder::set_instances
, do not forget that you must submit sets with the same size. Otherwise, the GPU will not know what values use for missing attributes in vertices.
Trait Implementations
impl<'a, B, V, I, W, S> Debug for TessBuilder<'a, B, V, I, W, S> where
V: Debug + TessVertexData<S>,
S: Debug + ?Sized,
W: Debug + TessVertexData<S>,
I: Debug,
B: Debug + ?Sized,
<V as TessVertexData<S>>::Data: Debug,
<W as TessVertexData<S>>::Data: Debug,
impl<'a, B, V, I, W, S> Debug for TessBuilder<'a, B, V, I, W, S> where
V: Debug + TessVertexData<S>,
S: Debug + ?Sized,
W: Debug + TessVertexData<S>,
I: Debug,
B: Debug + ?Sized,
<V as TessVertexData<S>>::Data: Debug,
<W as TessVertexData<S>>::Data: Debug,
Auto Trait Implementations
impl<'a, B: ?Sized, V, I, W, S: ?Sized> RefUnwindSafe for TessBuilder<'a, B, V, I, W, S> where
B: RefUnwindSafe,
I: RefUnwindSafe,
<V as TessVertexData<S>>::Data: RefUnwindSafe,
<W as TessVertexData<S>>::Data: RefUnwindSafe,
impl<'a, B: ?Sized, V, I, W, S: ?Sized> Send for TessBuilder<'a, B, V, I, W, S> where
B: Send,
I: Send,
<V as TessVertexData<S>>::Data: Send,
<W as TessVertexData<S>>::Data: Send,
impl<'a, B: ?Sized, V, I, W, S: ?Sized> Sync for TessBuilder<'a, B, V, I, W, S> where
B: Sync,
I: Sync,
<V as TessVertexData<S>>::Data: Sync,
<W as TessVertexData<S>>::Data: Sync,
impl<'a, B: ?Sized, V, I, W, S: ?Sized> Unpin for TessBuilder<'a, B, V, I, W, S> where
I: Unpin,
<V as TessVertexData<S>>::Data: Unpin,
<W as TessVertexData<S>>::Data: Unpin,
impl<'a, B, V, I = (), W = (), S = Interleaved> !UnwindSafe for TessBuilder<'a, B, V, I, W, S>
Blanket Implementations
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: 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
. Read more
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub 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. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
pub fn vzip(self) -> V