Scene

Struct Scene 

Source
pub struct Scene { /* private fields */ }
Expand description

The main datatype for rendering graphics.

A Scene stores a sequence of drawing commands, their context, and the associated resources, which can later be rendered.

Most users will render this using Renderer::render_to_texture.

Rendering from a Scene will not clear it, which should be done in a separate step, by calling Scene::reset.

If this is not done for a scene which is retained (to avoid allocations) between frames, this will likely quickly increase the complexity of the render result, leading to crashes or potential host system instability.

Implementations§

Source§

impl Scene

Source

pub fn new() -> Self

Creates a new scene.

Source

pub fn reset(&mut self)

Removes all content from the scene.

Source

pub fn bump_estimate(&self, transform: Option<Affine>) -> BumpAllocatorMemory

Available on crate feature bump_estimate only.

Tally up the bump allocator estimate for the current state of the encoding, taking into account an optional transform applied to the entire scene.

Source

pub fn encoding(&self) -> &Encoding

Returns the underlying raw encoding.

Source

pub fn encoding_mut(&mut self) -> &mut Encoding

Returns a mutable reference to the underlying raw encoding.

This can be used to more easily create invalid scenes, and so should be used with care.

Source

pub fn push_layer( &mut self, blend: impl Into<BlendMode>, alpha: f32, transform: Affine, clip: &impl Shape, )

Pushes a new layer clipped by the specified shape and composed with previous layers using the specified blend mode.

Every drawing command after this call will be clipped by the shape until the layer is popped. For layers which are only added for clipping, you should use push_clip_layer instead.

However, the transforms are not saved or modified by the layer stack. That is, the transform argument to this function only applies a transform to the clip shape.

Source

pub fn push_luminance_mask_layer( &mut self, alpha: f32, transform: Affine, clip: &impl Shape, )

Pushes a new layer clipped by the specified shape and treated like a luminance mask for the current layer.

That is, content drawn between this and the matching pop_layer call will serve as a luminance mask for the prior content in this layer.

Every drawing command after this call will be clipped by the shape until the layer is popped.

However, the transforms are not saved or modified by the layer stack. That is, the transform argument to this function only applies a transform to the clip shape.

§Transparency and premultiplication

In the current version of Vello, this can lead to some unexpected behaviour when it is used to draw directly onto a render target which disregards transparency (which includes surfaces in most cases). This happens because the luminance mask only impacts the transparency of the returned value, so if the transparency is ignored, it looks like the result had no effect.

This issue only occurs if there are no intermediate opaque layers, so can be worked around by drawing something opaque (or having an opaque base_color), then putting a layer around your entire scene with a Compose::SrcOver.

Source

pub fn push_clip_layer(&mut self, transform: Affine, clip: &impl Shape)

Pushes a new layer clipped by the specified clip shape.

The pushed layer is intended to not impact the “source” for blending; that is, any blends within this layer will still include content from before this method was called in the “source” of that blend operation. Note that this is not currently implemented correctly - see #1198. As such, you should currently not include any blend layers until this layer is popped.

Every drawing command after this call will be clipped by the shape until the layer is popped.

However, the transforms are not saved or modified by the layer stack. That is, the transform argument to this function only applies a transform to the clip shape.

Source

pub fn pop_layer(&mut self)

Pops the current layer.

Source

pub fn draw_blurred_rounded_rect( &mut self, transform: Affine, rect: Rect, brush: Color, radius: f64, std_dev: f64, )

Draw a rounded rectangle blurred with a gaussian filter.

Source

pub fn draw_blurred_rounded_rect_in( &mut self, shape: &impl Shape, transform: Affine, rect: Rect, brush: Color, radius: f64, std_dev: f64, )

Draw a rounded rectangle blurred with a gaussian filter in shape.

For performance reasons, shape should not extend more than approximately 2.5 times std_dev away from the edges of rect (as any such points will not be perceptably painted to, but calculations will still be performed for them).

This method effectively draws the blurred rounded rectangle clipped to the given shape. If just the blurred rounded rectangle is desired without clipping, use the simpler Self::draw_blurred_rounded_rect. For many users, that method will be easier to use.

Source

pub fn fill<'b>( &mut self, style: Fill, transform: Affine, brush: impl Into<BrushRef<'b>>, brush_transform: Option<Affine>, shape: &impl Shape, )

Fills a shape using the specified style and brush.

Source

pub fn stroke<'b>( &mut self, style: &Stroke, transform: Affine, brush: impl Into<BrushRef<'b>>, brush_transform: Option<Affine>, shape: &impl Shape, )

Strokes a shape using the specified style and brush.

Source

pub fn draw_image<'b>( &mut self, image: impl Into<ImageBrushRef<'b>>, transform: Affine, )

Draws an image at its natural size with the given transform.

Source

pub fn draw_glyphs(&mut self, font: &FontData) -> DrawGlyphs<'_>

Returns a builder for encoding a glyph run.

Source

pub fn append(&mut self, other: &Self, transform: Option<Affine>)

Appends a child scene.

The given transform is applied to every transform in the child. This is an O(N) operation.

Trait Implementations§

Source§

impl Clone for Scene

Source§

fn clone(&self) -> Scene

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for Scene

Source§

fn default() -> Scene

Returns the “default value” for a type. Read more
Source§

impl From<Encoding> for Scene

Source§

fn from(encoding: Encoding) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl Freeze for Scene

§

impl !RefUnwindSafe for Scene

§

impl Send for Scene

§

impl Sync for Scene

§

impl Unpin for Scene

§

impl !UnwindSafe for Scene

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.
Source§

impl<T> Upcast<T> for T

Source§

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

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,