1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#[doc(inline)]
pub use crate::texture::{Interpolation, TextureData, Wrapping};
///
/// A CPU-side version of a 3D texture.
///
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Texture3D {
/// Name of this texture.
pub name: String,
/// The pixel data for the image
pub data: TextureData,
/// The width of the image
pub width: u32,
/// The height of the image
pub height: u32,
/// The depth of the image
pub depth: u32,
/// The way the pixel data is interpolated when the texture is far away
pub min_filter: Interpolation,
/// The way the pixel data is interpolated when the texture is close
pub mag_filter: Interpolation,
/// Specifies whether mipmaps should be created for this texture and what type of interpolation to use between the two closest mipmaps.
/// Note, however, that the mipmaps only will be created if the width and height of the texture are power of two.
pub mip_map_filter: Option<Interpolation>,
/// Determines how the texture is sampled outside the [0..1] s coordinate range (the first value of the uvw coordinates).
pub wrap_s: Wrapping,
/// Determines how the texture is sampled outside the [0..1] t coordinate range (the second value of the uvw coordinates).
pub wrap_t: Wrapping,
/// Determines how the texture is sampled outside the [0..1] r coordinate range (the third value of the uvw coordinates).
pub wrap_r: Wrapping,
}
impl Default for Texture3D {
fn default() -> Self {
Self {
name: "default".to_owned(),
data: TextureData::RgbaU8(vec![[0, 0, 0, 0]]),
width: 1,
height: 1,
depth: 1,
min_filter: Interpolation::Linear,
mag_filter: Interpolation::Linear,
mip_map_filter: Some(Interpolation::Linear),
wrap_s: Wrapping::Repeat,
wrap_t: Wrapping::Repeat,
wrap_r: Wrapping::Repeat,
}
}
}