[][src]Struct web_glitz::image::texture_2d::LevelMut

pub struct LevelMut<'a, F> { /* fields omitted */ }

A mutable reference to a Texture2D mipmap level.

Derefs to Level.

Methods from Deref<Target = Level<'a, F>>

pub fn level(&self) -> usize[src]

Returns the integer that identifies this level.

For example, if this Level is the texture's base level, returns 0; if it is the second level, returns 1; etc.

pub fn width(&self) -> u32[src]

Returns the width of this level.

pub fn height(&self) -> u32[src]

Returns the height of this level.

pub fn sub_image(&self, region: Region2D) -> LevelSubImage<F>[src]

Returns a reference to the sub-region of this Level's image described by region.

Example

This may for example be used to upload data to only a sub-region of an image, rather than the complete image:

use web_glitz::image::{Image2DSource, MipmapLevels, Region2D};
use web_glitz::image::format::RGB8;
use web_glitz::image::texture_2d::Texture2DDescriptor;

let texture = context.create_texture_2d(&Texture2DDescriptor {
    format: RGB8,
    width: 256,
    height: 256,
    levels: MipmapLevels::Complete
}).unwrap();

let base_level = texture.base_level();
let sub_image = base_level.sub_image(Region2D::Area((0, 0), 128, 128));

let pixels: Vec<[u8; 3]> = vec![[0, 0, 255]; 128 * 128];
let data = Image2DSource::from_pixels(pixels, 128, 128).unwrap();

context.submit(sub_image.upload_command(data));

The lower left quadrant of the texture's base level now contains blue pixels, while the rest of the base levels remains black (texture storage starts out with all bits set to 0, which with format [RGB8] is interpreted as black).

pub fn upload_command<D, T>(
    &self,
    data: Image2DSource<D, T>
) -> UploadCommand<D, T, F> where
    T: ClientFormat<F>, 
[src]

Returns a command which, when executed, replaces the image data in this Level's image with the image data provided in data.

The image data must be stored in a ClientFormat that is suitable for the texture's TextureFormat.

If the dimensions of the image provided in data are not sufficient to cover the Level's image entirely, starting from the origin, then only the region of overlap is updated (note that the origin of an image is the lower left corner). For example, given a Level with a width of 256 pixels and a height of 256 pixels, and data with a width of 128 pixels and a height of 128 pixels, then only the lower left quadrant of the Level is updated. If the dimensions of the image provided in data would, when starting from the origin, cover more than the Level's image (the width and/or height of data is/are greater than the width and/or height of the Level's image), then any pixels that would fall outside of the Level are ignored. For example, given a Level with a width of 256 pixels and a height of 256 pixels, and data with a width of 256 pixels and a height of 512 pixels, then only the lower half of the image in data is used to update the Level and the upper half is ignored.

Example

use web_glitz::image::{Image2DSource, MipmapLevels};
use web_glitz::image::format::RGB8;
use web_glitz::image::texture_2d::Texture2DDescriptor;

let texture = context.create_texture_2d(&Texture2DDescriptor {
    format: RGB8,
    width: 256,
    height: 256,
    levels: MipmapLevels::Complete
}).unwrap();

let pixels: Vec<[u8; 3]> = vec![[255, 0, 0]; 256 * 256];
let data = Image2DSource::from_pixels(pixels, 256, 256).unwrap();

context.submit(texture.base_level().upload_command(data));

Trait Implementations

impl<'a, F> AsAttachableImageRef for Texture2DLevelMut<'a, F> where
    F: TextureFormat
[src]

type Format = F

The type of image storage format the image is stored in.

impl<'a, F> Deref for LevelMut<'a, F>[src]

type Target = Level<'a, F>

The resulting type after dereferencing.

Auto Trait Implementations

impl<'a, F> !Send for LevelMut<'a, F>

impl<'a, F> Unpin for LevelMut<'a, F>

impl<'a, F> !Sync for LevelMut<'a, F>

impl<'a, F> !UnwindSafe for LevelMut<'a, F>

impl<'a, F> !RefUnwindSafe for LevelMut<'a, F>

Blanket Implementations

impl<D, T> IntoBuffer<T> for D where
    D: Borrow<T> + 'static,
    T: Copy + 'static, 
[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]