#[derive(Debug, Copy, Clone, Default)]
pub struct RenderStates {
pub write_mask: WriteMask,
pub depth_test: DepthTest,
pub blend: Blend,
pub cull: Cull,
}
#[derive(Debug, Copy, Clone, PartialEq, Default)]
pub enum Cull {
#[default]
None,
Back,
Front,
FrontAndBack,
}
#[allow(missing_docs)]
#[derive(Debug, Copy, Clone, PartialEq, Default)]
pub enum DepthTest {
Never,
#[default]
Less,
Equal,
LessOrEqual,
Greater,
NotEqual,
GreaterOrEqual,
Always,
}
#[allow(missing_docs)]
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct WriteMask {
pub red: bool,
pub green: bool,
pub blue: bool,
pub alpha: bool,
pub depth: bool,
}
impl WriteMask {
pub const COLOR_AND_DEPTH: Self = Self {
red: true,
green: true,
blue: true,
alpha: true,
depth: true,
};
pub const COLOR: Self = Self {
red: true,
green: true,
blue: true,
alpha: true,
depth: false,
};
pub const DEPTH: Self = Self {
red: false,
green: false,
blue: false,
alpha: false,
depth: true,
};
pub const NONE: Self = Self {
red: false,
green: false,
blue: false,
alpha: false,
depth: false,
};
}
impl Default for WriteMask {
fn default() -> Self {
Self::COLOR_AND_DEPTH
}
}
#[allow(missing_docs)]
#[derive(Debug, Copy, Clone, PartialEq, Default)]
pub enum Blend {
Enabled {
source_rgb_multiplier: BlendMultiplierType,
source_alpha_multiplier: BlendMultiplierType,
destination_rgb_multiplier: BlendMultiplierType,
destination_alpha_multiplier: BlendMultiplierType,
rgb_equation: BlendEquationType,
alpha_equation: BlendEquationType,
},
#[default]
Disabled,
}
impl Blend {
pub const STANDARD_TRANSPARENCY: Self = Self::Enabled {
source_rgb_multiplier: BlendMultiplierType::SrcAlpha,
source_alpha_multiplier: BlendMultiplierType::One,
destination_rgb_multiplier: BlendMultiplierType::OneMinusSrcAlpha,
destination_alpha_multiplier: BlendMultiplierType::Zero,
rgb_equation: BlendEquationType::Add,
alpha_equation: BlendEquationType::Add,
};
pub const TRANSPARENCY: Self = Self::Enabled {
source_rgb_multiplier: BlendMultiplierType::SrcAlpha,
source_alpha_multiplier: BlendMultiplierType::Zero,
destination_rgb_multiplier: BlendMultiplierType::OneMinusSrcAlpha,
destination_alpha_multiplier: BlendMultiplierType::One,
rgb_equation: BlendEquationType::Add,
alpha_equation: BlendEquationType::Add,
};
pub const ADD: Self = Self::Enabled {
source_rgb_multiplier: BlendMultiplierType::One,
source_alpha_multiplier: BlendMultiplierType::One,
destination_rgb_multiplier: BlendMultiplierType::One,
destination_alpha_multiplier: BlendMultiplierType::One,
rgb_equation: BlendEquationType::Add,
alpha_equation: BlendEquationType::Add,
};
}
#[allow(missing_docs)]
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum BlendMultiplierType {
Zero,
One,
SrcColor,
OneMinusSrcColor,
DstColor,
OneMinusDstColor,
SrcAlpha,
OneMinusSrcAlpha,
DstAlpha,
OneMinusDstAlpha,
SrcAlphaSaturate,
}
#[allow(missing_docs)]
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum BlendEquationType {
Add,
Subtract,
ReverseSubtract,
Max,
Min,
}