1use crate::{
2 image::{Image, ImageFormat, ImageType, TextureError},
3 TextureReinterpretationError,
4};
5use bevy_asset::{io::Reader, AssetLoader, LoadContext, RenderAssetUsages};
6use bevy_reflect::TypePath;
7use thiserror::Error;
8
9use super::{CompressedImageFormats, ImageSampler};
10use serde::{Deserialize, Serialize};
11
12#[derive(#[automatically_derived]
impl ::core::clone::Clone for ImageLoader {
#[inline]
fn clone(&self) -> ImageLoader {
ImageLoader {
supported_compressed_formats: ::core::clone::Clone::clone(&self.supported_compressed_formats),
}
}
}Clone, const _: () =
{
#[allow(deprecated, reason =
"derives on a deprecated type shouldn't be considered a usage")]
impl bevy_reflect::TypePath for ImageLoader where {
fn type_path() -> &'static str {
"bevy_image::image_loader::ImageLoader"
}
fn short_type_path() -> &'static str { "ImageLoader" }
fn type_ident() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("ImageLoader")
}
fn crate_name() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_image::image_loader".split(':').next().unwrap())
}
fn module_path() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_image::image_loader")
}
}
};TypePath)]
14pub struct ImageLoader {
15 supported_compressed_formats: CompressedImageFormats,
16}
17
18impl ImageLoader {
19 pub const SUPPORTED_FORMATS: &'static [ImageFormat] = &[
21 #[cfg(feature = "basis-universal")]
22 ImageFormat::Basis,
23 #[cfg(feature = "bmp")]
24 ImageFormat::Bmp,
25 #[cfg(feature = "dds")]
26 ImageFormat::Dds,
27 #[cfg(feature = "ff")]
28 ImageFormat::Farbfeld,
29 #[cfg(feature = "gif")]
30 ImageFormat::Gif,
31 #[cfg(feature = "ico")]
32 ImageFormat::Ico,
33 #[cfg(feature = "jpeg")]
34 ImageFormat::Jpeg,
35 #[cfg(feature = "ktx2")]
36 ImageFormat::Ktx2,
37 #[cfg(feature = "png")]
38 ImageFormat::Png,
39 #[cfg(feature = "pnm")]
40 ImageFormat::Pnm,
41 #[cfg(feature = "qoi")]
42 ImageFormat::Qoi,
43 #[cfg(feature = "tga")]
44 ImageFormat::Tga,
45 #[cfg(feature = "tiff")]
46 ImageFormat::Tiff,
47 #[cfg(feature = "webp")]
48 ImageFormat::WebP,
49 ];
50
51 const COUNT_FILE_EXTENSIONS: usize = {
53 let mut count = 0;
54 let mut idx = 0;
55 while idx < Self::SUPPORTED_FORMATS.len() {
56 count += Self::SUPPORTED_FORMATS[idx].to_file_extensions().len();
57 idx += 1;
58 }
59 count
60 };
61
62 pub const SUPPORTED_FILE_EXTENSIONS: &'static [&'static str] = &{
64 let mut exts = [""; Self::COUNT_FILE_EXTENSIONS];
65 let mut ext_idx = 0;
66 let mut fmt_idx = 0;
67 while fmt_idx < Self::SUPPORTED_FORMATS.len() {
68 let mut off = 0;
69 let fmt_exts = Self::SUPPORTED_FORMATS[fmt_idx].to_file_extensions();
70 while off < fmt_exts.len() {
71 exts[ext_idx] = fmt_exts[off];
72 off += 1;
73 ext_idx += 1;
74 }
75 fmt_idx += 1;
76 }
77 exts
78 };
79
80 pub fn new(supported_compressed_formats: CompressedImageFormats) -> Self {
82 Self {
83 supported_compressed_formats,
84 }
85 }
86}
87
88#[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ImageFormatSetting {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
ImageFormatSetting::FromExtension =>
_serde::Serializer::serialize_unit_variant(__serializer,
"ImageFormatSetting", 0u32, "FromExtension"),
ImageFormatSetting::Format(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"ImageFormatSetting", 1u32, "Format", __field0),
ImageFormatSetting::Guess =>
_serde::Serializer::serialize_unit_variant(__serializer,
"ImageFormatSetting", 2u32, "Guess"),
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for ImageFormatSetting {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 3")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"FromExtension" =>
_serde::__private228::Ok(__Field::__field0),
"Format" => _serde::__private228::Ok(__Field::__field1),
"Guess" => _serde::__private228::Ok(__Field::__field2),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"FromExtension" =>
_serde::__private228::Ok(__Field::__field0),
b"Format" => _serde::__private228::Ok(__Field::__field1),
b"Guess" => _serde::__private228::Ok(__Field::__field2),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageFormatSetting>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageFormatSetting;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum ImageFormatSetting")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) => {
_serde::de::VariantAccess::unit_variant(__variant)?;
_serde::__private228::Ok(ImageFormatSetting::FromExtension)
}
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<ImageFormat>(__variant),
ImageFormatSetting::Format),
(__Field::__field2, __variant) => {
_serde::de::VariantAccess::unit_variant(__variant)?;
_serde::__private228::Ok(ImageFormatSetting::Guess)
}
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["FromExtension", "Format", "Guess"];
_serde::Deserializer::deserialize_enum(__deserializer,
"ImageFormatSetting", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageFormatSetting>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::default::Default for ImageFormatSetting {
#[inline]
fn default() -> ImageFormatSetting { Self::FromExtension }
}Default, #[automatically_derived]
impl ::core::fmt::Debug for ImageFormatSetting {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
ImageFormatSetting::FromExtension =>
::core::fmt::Formatter::write_str(f, "FromExtension"),
ImageFormatSetting::Format(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Format",
&__self_0),
ImageFormatSetting::Guess =>
::core::fmt::Formatter::write_str(f, "Guess"),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ImageFormatSetting {
#[inline]
fn clone(&self) -> ImageFormatSetting {
match self {
ImageFormatSetting::FromExtension =>
ImageFormatSetting::FromExtension,
ImageFormatSetting::Format(__self_0) =>
ImageFormatSetting::Format(::core::clone::Clone::clone(__self_0)),
ImageFormatSetting::Guess => ImageFormatSetting::Guess,
}
}
}Clone)]
90pub enum ImageFormatSetting {
91 #[default]
95 FromExtension,
96 Format(ImageFormat),
98 Guess,
101}
102
103#[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ImageArrayLayout {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
ImageArrayLayout::RowCount { ref rows } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ImageArrayLayout", 0u32, "RowCount", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"rows", rows)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
ImageArrayLayout::RowHeight { ref pixels } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ImageArrayLayout", 1u32, "RowHeight", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"pixels", pixels)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
ImageArrayLayout::GridCount { ref columns, ref rows } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ImageArrayLayout", 2u32, "GridCount", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"columns", columns)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"rows", rows)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
ImageArrayLayout::GridSize {
ref tile_width_pixels, ref tile_height_pixels } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ImageArrayLayout", 3u32, "GridSize", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"tile_width_pixels", tile_width_pixels)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"tile_height_pixels", tile_height_pixels)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for ImageArrayLayout {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __field3, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 4")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"RowCount" => _serde::__private228::Ok(__Field::__field0),
"RowHeight" => _serde::__private228::Ok(__Field::__field1),
"GridCount" => _serde::__private228::Ok(__Field::__field2),
"GridSize" => _serde::__private228::Ok(__Field::__field3),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"RowCount" => _serde::__private228::Ok(__Field::__field0),
b"RowHeight" => _serde::__private228::Ok(__Field::__field1),
b"GridCount" => _serde::__private228::Ok(__Field::__field2),
b"GridSize" => _serde::__private228::Ok(__Field::__field3),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageArrayLayout;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum ImageArrayLayout")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"rows" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"rows" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageArrayLayout;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant ImageArrayLayout::RowCount")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant ImageArrayLayout::RowCount with 1 element")),
};
_serde::__private228::Ok(ImageArrayLayout::RowCount {
rows: __field0,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<u32> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("rows"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("rows")?,
};
_serde::__private228::Ok(ImageArrayLayout::RowCount {
rows: __field0,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["rows"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field1, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"pixels" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"pixels" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageArrayLayout;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant ImageArrayLayout::RowHeight")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant ImageArrayLayout::RowHeight with 1 element")),
};
_serde::__private228::Ok(ImageArrayLayout::RowHeight {
pixels: __field0,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<u32> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("pixels"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("pixels")?,
};
_serde::__private228::Ok(ImageArrayLayout::RowHeight {
pixels: __field0,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["pixels"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field2, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"columns" => _serde::__private228::Ok(__Field::__field0),
"rows" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"columns" => _serde::__private228::Ok(__Field::__field0),
b"rows" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageArrayLayout;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant ImageArrayLayout::GridCount")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant ImageArrayLayout::GridCount with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant ImageArrayLayout::GridCount with 2 elements")),
};
_serde::__private228::Ok(ImageArrayLayout::GridCount {
columns: __field0,
rows: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<u32> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<u32> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("columns"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("rows"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("columns")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("rows")?,
};
_serde::__private228::Ok(ImageArrayLayout::GridCount {
columns: __field0,
rows: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["columns", "rows"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field3, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"tile_width_pixels" =>
_serde::__private228::Ok(__Field::__field0),
"tile_height_pixels" =>
_serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"tile_width_pixels" =>
_serde::__private228::Ok(__Field::__field0),
b"tile_height_pixels" =>
_serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageArrayLayout;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant ImageArrayLayout::GridSize")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant ImageArrayLayout::GridSize with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant ImageArrayLayout::GridSize with 2 elements")),
};
_serde::__private228::Ok(ImageArrayLayout::GridSize {
tile_width_pixels: __field0,
tile_height_pixels: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<u32> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<u32> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("tile_width_pixels"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("tile_height_pixels"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("tile_width_pixels")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("tile_height_pixels")?,
};
_serde::__private228::Ok(ImageArrayLayout::GridSize {
tile_width_pixels: __field0,
tile_height_pixels: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["tile_width_pixels", "tile_height_pixels"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData,
})
}
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["RowCount", "RowHeight", "GridCount", "GridSize"];
_serde::Deserializer::deserialize_enum(__deserializer,
"ImageArrayLayout", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageArrayLayout>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::fmt::Debug for ImageArrayLayout {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
ImageArrayLayout::RowCount { rows: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"RowCount", "rows", &__self_0),
ImageArrayLayout::RowHeight { pixels: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"RowHeight", "pixels", &__self_0),
ImageArrayLayout::GridCount { columns: __self_0, rows: __self_1 }
=>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"GridCount", "columns", __self_0, "rows", &__self_1),
ImageArrayLayout::GridSize {
tile_width_pixels: __self_0, tile_height_pixels: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"GridSize", "tile_width_pixels", __self_0,
"tile_height_pixels", &__self_1),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ImageArrayLayout {
#[inline]
fn clone(&self) -> ImageArrayLayout {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ImageArrayLayout { }Copy)]
105pub enum ImageArrayLayout {
106 RowCount {
108 rows: u32,
110 },
111 RowHeight {
113 pixels: u32,
115 },
116 GridCount {
118 columns: u32,
120 rows: u32,
122 },
123 GridSize {
125 tile_width_pixels: u32,
127 tile_height_pixels: u32,
129 },
130}
131
132#[derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ImageLoaderSettings {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ImageLoaderSettings",
false as usize + 1 + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"format", &self.format)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"texture_format", &self.texture_format)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_srgb", &self.is_srgb)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"sampler", &self.sampler)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"asset_usage", &self.asset_usage)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"array_layout", &self.array_layout)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for ImageLoaderSettings {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__field5,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
5u64 => _serde::__private228::Ok(__Field::__field5),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"format" => _serde::__private228::Ok(__Field::__field0),
"texture_format" =>
_serde::__private228::Ok(__Field::__field1),
"is_srgb" => _serde::__private228::Ok(__Field::__field2),
"sampler" => _serde::__private228::Ok(__Field::__field3),
"asset_usage" =>
_serde::__private228::Ok(__Field::__field4),
"array_layout" =>
_serde::__private228::Ok(__Field::__field5),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"format" => _serde::__private228::Ok(__Field::__field0),
b"texture_format" =>
_serde::__private228::Ok(__Field::__field1),
b"is_srgb" => _serde::__private228::Ok(__Field::__field2),
b"sampler" => _serde::__private228::Ok(__Field::__field3),
b"asset_usage" =>
_serde::__private228::Ok(__Field::__field4),
b"array_layout" =>
_serde::__private228::Ok(__Field::__field5),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ImageLoaderSettings>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ImageLoaderSettings;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct ImageLoaderSettings")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<ImageFormatSetting>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct ImageLoaderSettings with 6 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Option<wgpu_types::TextureFormat>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
_serde::__private228::Default::default(),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct ImageLoaderSettings with 6 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<ImageSampler>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct ImageLoaderSettings with 6 elements")),
};
let __field4 =
match _serde::de::SeqAccess::next_element::<RenderAssetUsages>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
&"struct ImageLoaderSettings with 6 elements")),
};
let __field5 =
match _serde::de::SeqAccess::next_element::<Option<ImageArrayLayout>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
_serde::__private228::Default::default(),
};
_serde::__private228::Ok(ImageLoaderSettings {
format: __field0,
texture_format: __field1,
is_srgb: __field2,
sampler: __field3,
asset_usage: __field4,
array_layout: __field5,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<ImageFormatSetting> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Option<wgpu_types::TextureFormat>> =
_serde::__private228::None;
let mut __field2: _serde::__private228::Option<bool> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<ImageSampler> =
_serde::__private228::None;
let mut __field4:
_serde::__private228::Option<RenderAssetUsages> =
_serde::__private228::None;
let mut __field5:
_serde::__private228::Option<Option<ImageArrayLayout>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("format"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<ImageFormatSetting>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("texture_format"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<wgpu_types::TextureFormat>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("is_srgb"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("sampler"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<ImageSampler>(&mut __map)?);
}
__Field::__field4 => {
if _serde::__private228::Option::is_some(&__field4) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("asset_usage"));
}
__field4 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<RenderAssetUsages>(&mut __map)?);
}
__Field::__field5 => {
if _serde::__private228::Option::is_some(&__field5) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("array_layout"));
}
__field5 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<ImageArrayLayout>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("format")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::Default::default(),
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("is_srgb")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("sampler")?,
};
let __field4 =
match __field4 {
_serde::__private228::Some(__field4) => __field4,
_serde::__private228::None =>
_serde::__private228::de::missing_field("asset_usage")?,
};
let __field5 =
match __field5 {
_serde::__private228::Some(__field5) => __field5,
_serde::__private228::None =>
_serde::__private228::Default::default(),
};
_serde::__private228::Ok(ImageLoaderSettings {
format: __field0,
texture_format: __field1,
is_srgb: __field2,
sampler: __field3,
asset_usage: __field4,
array_layout: __field5,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["format", "texture_format", "is_srgb", "sampler",
"asset_usage", "array_layout"];
_serde::Deserializer::deserialize_struct(__deserializer,
"ImageLoaderSettings", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ImageLoaderSettings>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::fmt::Debug for ImageLoaderSettings {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["format", "texture_format", "is_srgb", "sampler", "asset_usage",
"array_layout"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.format, &self.texture_format, &self.is_srgb,
&self.sampler, &self.asset_usage, &&self.array_layout];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"ImageLoaderSettings", names, values)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ImageLoaderSettings {
#[inline]
fn clone(&self) -> ImageLoaderSettings {
ImageLoaderSettings {
format: ::core::clone::Clone::clone(&self.format),
texture_format: ::core::clone::Clone::clone(&self.texture_format),
is_srgb: ::core::clone::Clone::clone(&self.is_srgb),
sampler: ::core::clone::Clone::clone(&self.sampler),
asset_usage: ::core::clone::Clone::clone(&self.asset_usage),
array_layout: ::core::clone::Clone::clone(&self.array_layout),
}
}
}Clone)]
134pub struct ImageLoaderSettings {
135 pub format: ImageFormatSetting,
137 #[serde(default)]
143 pub texture_format: Option<wgpu_types::TextureFormat>,
144 pub is_srgb: bool,
148 pub sampler: ImageSampler,
151 pub asset_usage: RenderAssetUsages,
154 #[serde(default)]
158 pub array_layout: Option<ImageArrayLayout>,
159}
160
161impl Default for ImageLoaderSettings {
162 fn default() -> Self {
163 Self {
164 format: ImageFormatSetting::default(),
165 texture_format: None,
166 is_srgb: true,
167 sampler: ImageSampler::Default,
168 asset_usage: RenderAssetUsages::default(),
169 array_layout: None,
170 }
171 }
172}
173
174#[non_exhaustive]
176#[derive(#[automatically_derived]
impl ::core::fmt::Debug for ImageLoaderError {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
ImageLoaderError::Io(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Io",
&__self_0),
ImageLoaderError::FileTexture(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"FileTexture", &__self_0),
ImageLoaderError::ArrayLayout(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ArrayLayout", &__self_0),
}
}
}Debug, fn from(source: TextureReinterpretationError) -> Self {
ImageLoaderError::ArrayLayout { 0: source }
}Error)]
177pub enum ImageLoaderError {
178 #[error("Failed to load image bytes: {0}")]
180 Io(#[from] std::io::Error),
181 #[error("Could not load texture file: {0}")]
183 FileTexture(#[from] FileTextureError),
184 #[error("Invalid array layout: {0}")]
186 ArrayLayout(#[from] TextureReinterpretationError),
187}
188
189impl AssetLoader for ImageLoader {
190 type Asset = Image;
191 type Settings = ImageLoaderSettings;
192 type Error = ImageLoaderError;
193 async fn load(
194 &self,
195 reader: &mut dyn Reader,
196 settings: &ImageLoaderSettings,
197 load_context: &mut LoadContext<'_>,
198 ) -> Result<Image, Self::Error> {
199 let mut bytes = Vec::new();
200 reader.read_to_end(&mut bytes).await?;
201 let image_type = match settings.format {
202 ImageFormatSetting::FromExtension => {
203 let ext = load_context
205 .path()
206 .path()
207 .extension()
208 .unwrap()
209 .to_str()
210 .unwrap();
211 ImageType::Extension(ext)
212 }
213 ImageFormatSetting::Format(format) => ImageType::Format(format),
214 ImageFormatSetting::Guess => {
215 let format = image::guess_format(&bytes).map_err(|err| FileTextureError {
216 error: err.into(),
217 path: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}",
load_context.path().path().display()))
})format!("{}", load_context.path().path().display()),
218 })?;
219 ImageType::Format(ImageFormat::from_image_crate_format(format).ok_or_else(
220 || FileTextureError {
221 error: TextureError::UnsupportedTextureFormat(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0:?}", format))
})format!("{format:?}")),
222 path: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}",
load_context.path().path().display()))
})format!("{}", load_context.path().path().display()),
223 },
224 )?)
225 }
226 };
227
228 let mut image = Image::from_buffer(
229 &bytes,
230 image_type,
231 self.supported_compressed_formats,
232 settings.is_srgb,
233 settings.sampler.clone(),
234 settings.asset_usage,
235 )
236 .map_err(|err| FileTextureError {
237 error: err,
238 path: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}",
load_context.path().path().display()))
})format!("{}", load_context.path().path().display()),
239 })?;
240
241 if let Some(format) = settings.texture_format {
242 image.texture_descriptor.format = format;
243 }
244
245 if let Some(array_layout) = settings.array_layout {
246 let image = match array_layout {
247 ImageArrayLayout::RowCount { rows } => {
248 image.reinterpret_stacked_2d_as_array(rows)?;
249 image
250 }
251 ImageArrayLayout::RowHeight { pixels } => {
252 image.reinterpret_stacked_2d_as_array(image.height() / pixels)?;
253 image
254 }
255 ImageArrayLayout::GridCount { columns, rows } => {
256 image.create_stacked_array_from_2d_grid(rows, columns)?
257 }
258 ImageArrayLayout::GridSize {
259 tile_width_pixels,
260 tile_height_pixels,
261 } => image.create_stacked_array_from_2d_grid(
262 image.height() / tile_height_pixels,
263 image.width() / tile_width_pixels,
264 )?,
265 };
266 return Ok(image);
267 }
268 Ok(image)
269 }
270
271 fn extensions(&self) -> &[&str] {
272 Self::SUPPORTED_FILE_EXTENSIONS
273 }
274}
275
276#[derive(#[allow(unused_qualifications)]
#[automatically_derived]
impl ::core::fmt::Display for FileTextureError {
#[allow(clippy :: used_underscore_binding)]
fn fmt(&self, __formatter: &mut ::core::fmt::Formatter)
-> ::core::fmt::Result {
use ::thiserror::__private18::AsDisplay as _;
#[allow(unused_variables, deprecated)]
let Self { error, path } = self;
match (path.as_display(), error.as_display()) {
(__display_path, __display_error) =>
__formatter.write_fmt(format_args!("Error reading image file {0}: {1}.",
__display_path, __display_error)),
}
}
}Error, #[automatically_derived]
impl ::core::fmt::Debug for FileTextureError {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f,
"FileTextureError", "error", &self.error, "path", &&self.path)
}
}Debug)]
278#[error("Error reading image file {path}: {error}.")]
279pub struct FileTextureError {
280 error: TextureError,
281 path: String,
282}