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

Adds additional functionality to clear, read from and write to the screen (see RenderTarget::screen) or a color texture and a depth texture at the same time (see RenderTarget::new). If you only want to perform an operation on either a color texture or depth texture, see ColorTarget and DepthTarget respectively. A render target purely adds functionality, so it can be created each time it is needed, the actual data is saved in the textures.

Implementations§

source§

impl<'a> RenderTarget<'a>

source

pub fn screen(context: &Context, width: u32, height: u32) -> Self

Returns the screen render target for this context. Write to this render target to draw something on the screen.

source

pub fn new(color: ColorTarget<'a>, depth: DepthTarget<'a>) -> Self

Constructs a new render target that enables rendering into the given ColorTarget and DepthTarget.

source

pub fn width(&self) -> u32

The width of this target.

source

pub fn height(&self) -> u32

The height of this target.

source

pub fn clear(&self, clear_state: ClearState) -> &Self

Clears the color and depth of this render target as defined by the given clear state.

source

pub fn clear_partially( &self, scissor_box: ScissorBox, clear_state: ClearState ) -> &Self

Clears the color and depth of the part of this render target that is inside the given scissor box.

source

pub fn write<E: Error>( &self, render: impl FnOnce() -> Result<(), E> ) -> Result<&Self, E>

Writes whatever rendered in the render closure into this render target.

source

pub fn write_partially<E: Error>( &self, scissor_box: ScissorBox, render: impl FnOnce() -> Result<(), E> ) -> Result<&Self, E>

Writes whatever rendered in the render closure into the part of this render target defined by the scissor box.

source

pub fn read_color<T: TextureDataType>(&self) -> Vec<T>

Returns the colors of the pixels in this render target. The number of channels per pixel and the data format for each channel returned from this function is specified by the generic parameter T.

Note: The base type of the generic parameter T must match the base type of the render target, for example if the render targets base type is u8, the base type of T must also be u8.

Web: The generic parameter T is limited to:

  • Unsigned byte RGBA (Specify T as either Vec4<u8> or [u8; 4]) which works with any render target using u8 as its base type.
  • 32-bit float RGBA (Specify T as either Vec4<f32> or [f32; 4]) which works with any render target using f16 or f32 as its base type.
source

pub fn read_color_partially<T: TextureDataType>( &self, scissor_box: ScissorBox ) -> Vec<T>

Returns the colors of the pixels in this render target inside the given scissor box. The number of channels per pixel and the data format for each channel returned from this function is specified by the generic parameter T.

Note: The base type of the generic parameter T must match the base type of the render target, for example if the render targets base type is u8, the base type of T must also be u8.

Web: The generic parameter T is limited to:

  • Unsigned byte RGBA (Specify T as either Vec4<u8> or [u8; 4]) which works with any render target using u8 as its base type.
  • 32-bit float RGBA (Specify T as either Vec4<f32> or [f32; 4]) which works with any render target using f16 or f32 as its base type.
source

pub fn read_depth(&self) -> Vec<f32>

Returns the depth values in this render target.

source

pub fn read_depth_partially(&self, scissor_box: ScissorBox) -> Vec<f32>

Returns the depth values in this render target inside the given scissor box.

source

pub fn from_framebuffer( context: &Context, width: u32, height: u32, framebuffer: Framebuffer ) -> Self

Creates a RenderTarget with the given low-level Framebuffer. Should only be used if the Framebuffer is used for something else, ie. to be able to combine this crate with functionality of another crate. Also see Self::into_framebuffer.

source

pub fn into_framebuffer(self) -> Option<Framebuffer>

Transforms this RenderTarget into a low-level Framebuffer. Should only be used if the Framebuffer is used for something else, ie. to be able to combine this crate with functionality of another crate. Also see Self::from_framebuffer.

source§

impl<'a> RenderTarget<'a>

source

pub fn scissor_box(&self) -> ScissorBox

Returns the scissor box that encloses the entire target.

source

pub fn viewport(&self) -> Viewport

Returns the viewport that encloses the entire target.

source§

impl<'a> RenderTarget<'a>

source

pub fn render( &self, camera: &Camera, objects: impl IntoIterator<Item = impl Object>, lights: &[&dyn Light] ) -> &Self

Render the objects using the given camera and lights into this render target. Use an empty array for the lights argument, if the objects does not require lights to be rendered. Also, objects outside the camera frustum are not rendered and the objects are rendered in the order given by cmp_render_order.

source

pub fn render_partially( &self, scissor_box: ScissorBox, camera: &Camera, objects: impl IntoIterator<Item = impl Object>, lights: &[&dyn Light] ) -> &Self

Render the objects using the given camera and lights into the part of this render target defined by the scissor box. Use an empty array for the lights argument, if the objects does not require lights to be rendered. Also, objects outside the camera frustum are not rendered and the objects are rendered in the order given by cmp_render_order.

source

pub fn render_with_material( &self, material: &dyn Material, camera: &Camera, geometries: impl IntoIterator<Item = impl Geometry>, lights: &[&dyn Light] ) -> &Self

Render the geometries with the given Material using the given camera and lights into this render target. Use an empty array for the lights argument, if the material does not require lights to be rendered.

source

pub fn render_partially_with_material( &self, scissor_box: ScissorBox, material: &dyn Material, camera: &Camera, geometries: impl IntoIterator<Item = impl Geometry>, lights: &[&dyn Light] ) -> &Self

Render the geometries with the given Material using the given camera and lights into the part of this render target defined by the scissor box. Use an empty array for the lights argument, if the material does not require lights to be rendered.

source

pub fn render_with_effect( &self, effect: &dyn Effect, camera: &Camera, geometries: impl IntoIterator<Item = impl Geometry>, lights: &[&dyn Light], color_texture: Option<ColorTexture<'_>>, depth_texture: Option<DepthTexture<'_>> ) -> &Self

Render the geometries with the given Effect using the given camera and lights into this render target. Use an empty array for the lights argument, if the effect does not require lights to be rendered.

source

pub fn render_partially_with_effect( &self, scissor_box: ScissorBox, effect: &dyn Effect, camera: &Camera, geometries: impl IntoIterator<Item = impl Geometry>, lights: &[&dyn Light], color_texture: Option<ColorTexture<'_>>, depth_texture: Option<DepthTexture<'_>> ) -> &Self

Render the geometries with the given Effect using the given camera and lights into the part of this render target defined by the scissor box. Use an empty array for the lights argument, if the effect does not require lights to be rendered.

source

pub fn apply_screen_material( &self, material: &dyn Material, camera: &Camera, lights: &[&dyn Light] ) -> &Self

Apply the given Material to this render target. Use an empty array for the lights argument, if the material does not require lights to be rendered.

source

pub fn apply_screen_material_partially( &self, scissor_box: ScissorBox, material: &dyn Material, camera: &Camera, lights: &[&dyn Light] ) -> &Self

Apply the given Material to the part of this render target defined by the scissor box. Use an empty array for the lights argument, if the material does not require lights to be rendered.

source

pub fn apply_screen_effect( &self, effect: &dyn Effect, camera: &Camera, lights: &[&dyn Light], color_texture: Option<ColorTexture<'_>>, depth_texture: Option<DepthTexture<'_>> ) -> &Self

Apply the given Effect to this render target. Use an empty array for the lights argument, if the effect does not require lights to be rendered.

source

pub fn apply_screen_effect_partially( &self, scissor_box: ScissorBox, effect: &dyn Effect, camera: &Camera, lights: &[&dyn Light], color_texture: Option<ColorTexture<'_>>, depth_texture: Option<DepthTexture<'_>> ) -> &Self

Apply the given Effect to the part of this render target defined by the scissor box. Use an empty array for the lights argument, if the effect does not require lights to be rendered.

Trait Implementations§

source§

impl Drop for RenderTarget<'_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for RenderTarget<'a>

§

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

§

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

§

impl<'a> Unpin for RenderTarget<'a>

§

impl<'a> UnwindSafe for RenderTarget<'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>,

§

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

§

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.