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

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

A reference to a mipmap level of a Texture2D.

A reference to the base level of a Texture2D can be obtained through Texture2D::base_level. References to other levels of a Texture2D can be obtained via Levels.

Methods

impl<'a, F> Level<'a, F> where
    F: TextureFormat
[src]

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));

Auto Trait Implementations

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

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

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

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

impl<'a, F> !RefUnwindSafe for Level<'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]