#[repr(C)]
pub struct TextureDescriptor<L, V> { pub label: L, pub size: Extent3d, pub mip_level_count: u32, pub sample_count: u32, pub dimension: TextureDimension, pub format: TextureFormat, pub usage: TextureUsages, pub view_formats: V, }
Expand description

Describes a Texture.

Corresponds to WebGPU GPUTextureDescriptor.

Fields§

§label: L

Debug label of the texture. This will show up in graphics debuggers for easy identification.

§size: Extent3d

Size of the texture. All components must be greater than zero. For a regular 1D/2D texture, the unused sizes will be 1. For 2DArray textures, Z is the number of 2D textures in that array.

§mip_level_count: u32

Mip count of texture. For a texture with no extra mips, this must be 1.

§sample_count: u32

Sample count of texture. If this is not 1, texture must have BindingType::Texture::multisampled set to true.

§dimension: TextureDimension

Dimensions of the texture.

§format: TextureFormat

Format of the texture.

§usage: TextureUsages

Allowed usages of the texture. If used in other ways, the operation will panic.

§view_formats: V

Specifies what view formats will be allowed when calling create_view() on this texture.

View formats of the same format as the texture are always allowed.

Note: currently, only the srgb-ness is allowed to change. (ex: Rgba8Unorm texture + Rgba8UnormSrgb view)

Implementations§

source§

impl<L, V: Clone> TextureDescriptor<L, V>

source

pub fn map_label<K>(&self, fun: impl FnOnce(&L) -> K) -> TextureDescriptor<K, V>

Takes a closure and maps the label of the texture descriptor into another.

source

pub fn map_label_and_view_formats<K, M>( &self, l_fun: impl FnOnce(&L) -> K, v_fun: impl FnOnce(V) -> M ) -> TextureDescriptor<K, M>

Maps the label and view_formats of the texture descriptor into another.

source

pub fn mip_level_size(&self, level: u32) -> Option<Extent3d>

Calculates the extent at a given mip level.

If the given mip level is larger than possible, returns None.

Treats the depth as part of the mipmaps. If calculating for a 2DArray texture, which does not mipmap depth, set depth to 1.

let desc  = TextureDescriptor {
  label: (),
  size: wgpu::Extent3d { width: 100, height: 60, depth_or_array_layers: 1 },
  mip_level_count: 7,
  sample_count: 1,
  dimension: wgpu::TextureDimension::D3,
  format: wgpu::TextureFormat::Rgba8Sint,
  usage: wgpu::TextureUsages::empty(),
  view_formats: &[],
};

assert_eq!(desc.mip_level_size(0), Some(wgpu::Extent3d { width: 100, height: 60, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(1), Some(wgpu::Extent3d { width: 50, height: 30, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(2), Some(wgpu::Extent3d { width: 25, height: 15, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(3), Some(wgpu::Extent3d { width: 12, height: 7, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(4), Some(wgpu::Extent3d { width: 6, height: 3, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(5), Some(wgpu::Extent3d { width: 3, height: 1, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(6), Some(wgpu::Extent3d { width: 1, height: 1, depth_or_array_layers: 1 }));
assert_eq!(desc.mip_level_size(7), None);
source

pub fn compute_render_extent(&self, mip_level: u32) -> Extent3d

Computes the render extent of this texture.

https://gpuweb.github.io/gpuweb/#abstract-opdef-compute-render-extent

source

pub fn array_layer_count(&self) -> u32

Returns the number of array layers.

https://gpuweb.github.io/gpuweb/#abstract-opdef-array-layer-count

Trait Implementations§

source§

impl<L: Clone, V: Clone> Clone for TextureDescriptor<L, V>

source§

fn clone(&self) -> TextureDescriptor<L, V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<L: Debug, V: Debug> Debug for TextureDescriptor<L, V>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, L, V> Deserialize<'de> for TextureDescriptor<L, V>where L: Deserialize<'de>, V: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<L: Hash, V: Hash> Hash for TextureDescriptor<L, V>

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<L: PartialEq, V: PartialEq> PartialEq<TextureDescriptor<L, V>> for TextureDescriptor<L, V>

source§

fn eq(&self, other: &TextureDescriptor<L, V>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<L, V> Serialize for TextureDescriptor<L, V>where L: Serialize, V: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<L: Eq, V: Eq> Eq for TextureDescriptor<L, V>

source§

impl<L, V> StructuralEq for TextureDescriptor<L, V>

source§

impl<L, V> StructuralPartialEq for TextureDescriptor<L, V>

Auto Trait Implementations§

§

impl<L, V> RefUnwindSafe for TextureDescriptor<L, V>where L: RefUnwindSafe, V: RefUnwindSafe,

§

impl<L, V> Send for TextureDescriptor<L, V>where L: Send, V: Send,

§

impl<L, V> Sync for TextureDescriptor<L, V>where L: Sync, V: Sync,

§

impl<L, V> Unpin for TextureDescriptor<L, V>where L: Unpin, V: Unpin,

§

impl<L, V> UnwindSafe for TextureDescriptor<L, V>where L: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · 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> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,