use vk;
#[derive(Clone, Debug)]
pub struct Rasterization {
pub depth_clamp: bool,
pub rasterizer_discard: bool,
pub polygon_mode: PolygonMode,
pub cull_mode: CullMode,
pub front_face: FrontFace,
pub line_width: Option<f32>,
pub depth_bias: DepthBiasControl,
}
impl Default for Rasterization {
#[inline]
fn default() -> Rasterization {
Rasterization {
depth_clamp: false,
rasterizer_discard: false,
polygon_mode: Default::default(),
cull_mode: Default::default(),
front_face: Default::default(),
line_width: Some(1.0),
depth_bias: DepthBiasControl::Disabled,
}
}
}
#[derive(Copy, Clone, Debug)]
pub enum DepthBiasControl {
Disabled,
Dynamic,
Static(DepthBias),
}
impl DepthBiasControl {
#[inline]
pub fn is_dynamic(&self) -> bool {
match *self {
DepthBiasControl::Dynamic => true,
_ => false,
}
}
}
#[derive(Copy, Clone, Debug)]
pub struct DepthBias {
pub constant_factor: f32,
pub clamp: f32,
pub slope_factor: f32,
}
#[derive(Copy, Clone, Debug)]
#[repr(u32)]
pub enum CullMode {
None = vk::CULL_MODE_NONE,
Front = vk::CULL_MODE_FRONT_BIT,
Back = vk::CULL_MODE_BACK_BIT,
FrontAndBack = vk::CULL_MODE_FRONT_AND_BACK,
}
impl Default for CullMode {
#[inline]
fn default() -> CullMode {
CullMode::None
}
}
#[derive(Copy, Clone, Debug)]
#[repr(u32)]
pub enum FrontFace {
CounterClockwise = vk::FRONT_FACE_COUNTER_CLOCKWISE,
Clockwise = vk::FRONT_FACE_CLOCKWISE,
}
impl Default for FrontFace {
#[inline]
fn default() -> FrontFace {
FrontFace::CounterClockwise
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[repr(u32)]
pub enum PolygonMode {
Fill = vk::POLYGON_MODE_FILL,
Line = vk::POLYGON_MODE_LINE,
Point = vk::POLYGON_MODE_POINT,
}
impl Default for PolygonMode {
#[inline]
fn default() -> PolygonMode {
PolygonMode::Fill
}
}