pub struct Image {
pub data: Vec<u8>,
pub texture_descriptor: TextureDescriptor<'static>,
pub sampler: ImageSampler,
pub texture_view_descriptor: Option<TextureViewDescriptor<'static>>,
pub asset_usage: RenderAssetUsages,
}
Fields§
§data: Vec<u8>
§texture_descriptor: TextureDescriptor<'static>
§sampler: ImageSampler
The ImageSampler
to use during rendering.
texture_view_descriptor: Option<TextureViewDescriptor<'static>>
§asset_usage: RenderAssetUsages
Implementations§
Source§impl Image
impl Image
Sourcepub fn new(
size: Extent3d,
dimension: TextureDimension,
data: Vec<u8>,
format: TextureFormat,
asset_usage: RenderAssetUsages,
) -> Self
pub fn new( size: Extent3d, dimension: TextureDimension, data: Vec<u8>, format: TextureFormat, asset_usage: RenderAssetUsages, ) -> Self
Creates a new image from raw binary data and the corresponding metadata.
§Panics
Panics if the length of the data
, volume of the size
and the size of the format
do not match.
Sourcepub fn transparent() -> Image
pub fn transparent() -> Image
A transparent white 1x1x1 image.
Contrast to Image::default
, which is opaque.
Sourcepub fn new_fill(
size: Extent3d,
dimension: TextureDimension,
pixel: &[u8],
format: TextureFormat,
asset_usage: RenderAssetUsages,
) -> Self
pub fn new_fill( size: Extent3d, dimension: TextureDimension, pixel: &[u8], format: TextureFormat, asset_usage: RenderAssetUsages, ) -> Self
Creates a new image from raw binary data and the corresponding metadata, by filling
the image data with the pixel
data repeated multiple times.
§Panics
Panics if the size of the format
is not a multiple of the length of the pixel
data.
Sourcepub fn aspect_ratio(&self) -> AspectRatio
pub fn aspect_ratio(&self) -> AspectRatio
Returns the aspect ratio (width / height) of a 2D image.
Sourcepub fn resize(&mut self, size: Extent3d)
pub fn resize(&mut self, size: Extent3d)
Resizes the image to the new size, by removing information or appending 0 to the data
.
Does not properly resize the contents of the image, but only its internal data
buffer.
Sourcepub fn reinterpret_size(&mut self, new_size: Extent3d)
pub fn reinterpret_size(&mut self, new_size: Extent3d)
Changes the size
, asserting that the total number of data elements (pixels) remains the
same.
§Panics
Panics if the new_size
does not have the same volume as to old one.
Sourcepub fn reinterpret_stacked_2d_as_array(&mut self, layers: u32)
pub fn reinterpret_stacked_2d_as_array(&mut self, layers: u32)
Takes a 2D image containing vertically stacked images of the same size, and reinterprets
it as a 2D array texture, where each of the stacked images becomes one layer of the
array. This is primarily for use with the texture2DArray
shader uniform type.
§Panics
Panics if the texture is not 2D, has more than one layers or is not evenly dividable into
the layers
.
Sourcepub fn convert(&self, new_format: TextureFormat) -> Option<Self>
pub fn convert(&self, new_format: TextureFormat) -> Option<Self>
Convert a texture from a format to another. Only a few formats are supported as input and output:
TextureFormat::R8Unorm
TextureFormat::Rg8Unorm
TextureFormat::Rgba8UnormSrgb
To get Image
as a image::DynamicImage
see:
Image::try_into_dynamic
.
Sourcepub fn from_buffer(
buffer: &[u8],
image_type: ImageType<'_>,
supported_compressed_formats: CompressedImageFormats,
is_srgb: bool,
image_sampler: ImageSampler,
asset_usage: RenderAssetUsages,
) -> Result<Image, TextureError>
pub fn from_buffer( buffer: &[u8], image_type: ImageType<'_>, supported_compressed_formats: CompressedImageFormats, is_srgb: bool, image_sampler: ImageSampler, asset_usage: RenderAssetUsages, ) -> Result<Image, TextureError>
Load a bytes buffer in a Image
, according to type image_type
, using the image
crate
Sourcepub fn is_compressed(&self) -> bool
pub fn is_compressed(&self) -> bool
Whether the texture format is compressed or uncompressed
Sourcepub fn pixel_data_offset(&self, coords: UVec3) -> Option<usize>
pub fn pixel_data_offset(&self, coords: UVec3) -> Option<usize>
Compute the byte offset where the data of a specific pixel is stored
Returns None if the provided coordinates are out of bounds.
For 2D textures, Z is ignored. For 1D textures, Y and Z are ignored.
Sourcepub fn pixel_bytes(&self, coords: UVec3) -> Option<&[u8]>
pub fn pixel_bytes(&self, coords: UVec3) -> Option<&[u8]>
Get a reference to the data bytes where a specific pixel’s value is stored
Sourcepub fn pixel_bytes_mut(&mut self, coords: UVec3) -> Option<&mut [u8]>
pub fn pixel_bytes_mut(&mut self, coords: UVec3) -> Option<&mut [u8]>
Get a mutable reference to the data bytes where a specific pixel’s value is stored
Sourcepub fn get_color_at_1d(&self, x: u32) -> Result<Color, TextureAccessError>
pub fn get_color_at_1d(&self, x: u32) -> Result<Color, TextureAccessError>
Read the color of a specific pixel (1D texture).
See get_color_at
for more details.
Sourcepub fn get_color_at(&self, x: u32, y: u32) -> Result<Color, TextureAccessError>
pub fn get_color_at(&self, x: u32, y: u32) -> Result<Color, TextureAccessError>
Read the color of a specific pixel (2D texture).
This function will find the raw byte data of a specific pixel and
decode it into a user-friendly Color
struct for you.
Supports many of the common TextureFormat
s:
- RGBA/BGRA 8-bit unsigned integer, both sRGB and Linear
- 16-bit and 32-bit unsigned integer
- 32-bit float
Be careful: as the data is converted to Color
(which uses f32
internally),
there may be issues with precision when using non-float TextureFormat
s.
If you read a value you previously wrote using set_color_at
, it will not match.
If you are working with a 32-bit integer TextureFormat
, the value will be
inaccurate (as f32
does not have enough bits to represent it exactly).
Single channel (R) formats are assumed to represent grayscale, so the value
will be copied to all three RGB channels in the resulting Color
.
Other TextureFormat
s are unsupported, such as:
- block-compressed formats
- non-byte-aligned formats like 10-bit
- 16-bit float formats
- signed integer formats
Sourcepub fn get_color_at_3d(
&self,
x: u32,
y: u32,
z: u32,
) -> Result<Color, TextureAccessError>
pub fn get_color_at_3d( &self, x: u32, y: u32, z: u32, ) -> Result<Color, TextureAccessError>
Read the color of a specific pixel (3D texture).
See get_color_at
for more details.
Sourcepub fn set_color_at_1d(
&mut self,
x: u32,
color: Color,
) -> Result<(), TextureAccessError>
pub fn set_color_at_1d( &mut self, x: u32, color: Color, ) -> Result<(), TextureAccessError>
Change the color of a specific pixel (1D texture).
See set_color_at
for more details.
Sourcepub fn set_color_at(
&mut self,
x: u32,
y: u32,
color: Color,
) -> Result<(), TextureAccessError>
pub fn set_color_at( &mut self, x: u32, y: u32, color: Color, ) -> Result<(), TextureAccessError>
Change the color of a specific pixel (2D texture).
This function will find the raw byte data of a specific pixel and
change it according to a Color
you provide. The Color
struct
will be encoded into the Image
’s TextureFormat
.
Supports many of the common TextureFormat
s:
- RGBA/BGRA 8-bit unsigned integer, both sRGB and Linear
- 16-bit and 32-bit unsigned integer (with possibly-limited precision, as
Color
usesf32
) - 32-bit float
Be careful: writing to non-float TextureFormat
s is lossy! The data has to be converted,
so if you read it back using get_color_at
, the Color
you get will not equal the value
you used when writing it using this function.
For R and RG formats, only the respective values from the linear RGB Color
will be used.
Other TextureFormat
s are unsupported, such as:
- block-compressed formats
- non-byte-aligned formats like 10-bit
- 16-bit float formats
- signed integer formats
Sourcepub fn set_color_at_3d(
&mut self,
x: u32,
y: u32,
z: u32,
color: Color,
) -> Result<(), TextureAccessError>
pub fn set_color_at_3d( &mut self, x: u32, y: u32, z: u32, color: Color, ) -> Result<(), TextureAccessError>
Change the color of a specific pixel (3D texture).
See set_color_at
for more details.
Source§impl Image
impl Image
Sourcepub fn from_dynamic(
dyn_img: DynamicImage,
is_srgb: bool,
asset_usage: RenderAssetUsages,
) -> Image
pub fn from_dynamic( dyn_img: DynamicImage, is_srgb: bool, asset_usage: RenderAssetUsages, ) -> Image
Converts a DynamicImage
to an Image
.
Sourcepub fn try_into_dynamic(self) -> Result<DynamicImage, IntoDynamicImageError>
pub fn try_into_dynamic(self) -> Result<DynamicImage, IntoDynamicImageError>
Convert a Image
to a DynamicImage
. Useful for editing image
data. Not all TextureFormat
are covered, therefore it will return an
error if the format is unsupported. Supported formats are:
TextureFormat::R8Unorm
TextureFormat::Rg8Unorm
TextureFormat::Rgba8UnormSrgb
TextureFormat::Bgra8UnormSrgb
To convert Image
to a different format see: Image::convert
.
Trait Implementations§
Source§impl FromReflect for Image
impl FromReflect for Image
Source§fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl GetTypeRegistration for Image
impl GetTypeRegistration for Image
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl PartialReflect for Image
impl PartialReflect for Image
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
Reflect
trait object. Read moreSource§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn reflect_partial_eq(
&self,
_value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, _value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for Image
impl Reflect for Image
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§impl TypePath for Image
impl TypePath for Image
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl VisitAssetDependencies for Image
impl VisitAssetDependencies for Image
fn visit_dependencies(&self, visit: &mut impl FnMut(UntypedAssetId))
impl Asset for Image
Auto Trait Implementations§
impl Freeze for Image
impl RefUnwindSafe for Image
impl Send for Image
impl Sync for Image
impl Unpin for Image
impl UnwindSafe for Image
Blanket Implementations§
Source§impl<A> AssetContainer for Awhere
A: Asset,
impl<A> AssetContainer for Awhere
A: Asset,
fn insert(self: Box<A>, id: UntypedAssetId, world: &mut World)
fn asset_type_name(&self) -> &'static str
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info
.Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more