gfx_hal/command/clear.rs
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
use crate::pso;
use std::fmt;
/// A clear color union, which can be either `f32`, `i32`, or `u32`.
#[repr(C)]
#[derive(Clone, Copy)]
pub union ClearColor {
/// `f32` variant
pub float32: [f32; 4],
/// `i32` variant
pub sint32: [i32; 4],
/// `u32` variant
pub uint32: [u32; 4],
}
impl fmt::Debug for ClearColor {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
writeln![f, "ClearColor"]
}
}
/// A combination of depth and stencil clear values.
#[repr(C)]
#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct ClearDepthStencil {
/// Depth value
pub depth: f32,
/// Stencil value
pub stencil: u32,
}
/// A set of clear values for a single attachment.
///
/// These are passed to a command buffer by
/// [beginning a render pass][crate::command::CommandBuffer::begin_render_pass].
#[repr(C)]
#[derive(Clone, Copy)]
pub union ClearValue {
/// Clear color
pub color: ClearColor,
/// Clear depth and stencil
pub depth_stencil: ClearDepthStencil,
_align: [u32; 4],
}
impl fmt::Debug for ClearValue {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_struct("ClearValue")
.field("color", unsafe { &self.color.uint32 })
.field("depth_stencil", unsafe { &self.depth_stencil })
.finish()
}
}
impl Default for ClearValue {
fn default() -> Self {
ClearValue { _align: [0; 4] }
}
}
/// Attachment clear description for the current subpass.
#[derive(Clone, Copy, Debug)]
pub enum AttachmentClear {
/// Clear color attachment.
Color {
/// Index inside the `SubpassDesc::colors` array.
index: usize,
/// Value to clear with.
value: ClearColor,
},
/// Clear depth-stencil attachment.
DepthStencil {
/// Depth value to clear with.
depth: Option<pso::DepthValue>,
/// Stencil value to clear with.
stencil: Option<pso::StencilValue>,
},
}