189 lines
4.0 KiB
Rust
189 lines
4.0 KiB
Rust
use crate::texture::TextureFormat;
|
|
use bevy_property::Property;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct DepthStencilStateDescriptor {
|
|
pub format: TextureFormat,
|
|
pub depth_write_enabled: bool,
|
|
pub depth_compare: CompareFunction,
|
|
pub stencil_front: StencilStateFaceDescriptor,
|
|
pub stencil_back: StencilStateFaceDescriptor,
|
|
pub stencil_read_mask: u32,
|
|
pub stencil_write_mask: u32,
|
|
}
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum StencilOperation {
|
|
Keep = 0,
|
|
Zero = 1,
|
|
Replace = 2,
|
|
Invert = 3,
|
|
IncrementClamp = 4,
|
|
DecrementClamp = 5,
|
|
IncrementWrap = 6,
|
|
DecrementWrap = 7,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
pub struct StencilStateFaceDescriptor {
|
|
pub compare: CompareFunction,
|
|
pub fail_op: StencilOperation,
|
|
pub depth_fail_op: StencilOperation,
|
|
pub pass_op: StencilOperation,
|
|
}
|
|
|
|
impl StencilStateFaceDescriptor {
|
|
pub const IGNORE: Self = StencilStateFaceDescriptor {
|
|
compare: CompareFunction::Always,
|
|
fail_op: StencilOperation::Keep,
|
|
depth_fail_op: StencilOperation::Keep,
|
|
pass_op: StencilOperation::Keep,
|
|
};
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum CompareFunction {
|
|
Never = 0,
|
|
Less = 1,
|
|
Equal = 2,
|
|
LessEqual = 3,
|
|
Greater = 4,
|
|
NotEqual = 5,
|
|
GreaterEqual = 6,
|
|
Always = 7,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize, Property)]
|
|
pub enum PrimitiveTopology {
|
|
PointList = 0,
|
|
LineList = 1,
|
|
LineStrip = 2,
|
|
TriangleList = 3,
|
|
TriangleStrip = 4,
|
|
}
|
|
|
|
impl Default for PrimitiveTopology {
|
|
fn default() -> Self {
|
|
PrimitiveTopology::TriangleList
|
|
}
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum FrontFace {
|
|
Ccw = 0,
|
|
Cw = 1,
|
|
}
|
|
|
|
impl Default for FrontFace {
|
|
fn default() -> Self {
|
|
FrontFace::Ccw
|
|
}
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum CullMode {
|
|
None = 0,
|
|
Front = 1,
|
|
Back = 2,
|
|
}
|
|
|
|
impl Default for CullMode {
|
|
fn default() -> Self {
|
|
CullMode::None
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default)]
|
|
pub struct RasterizationStateDescriptor {
|
|
pub front_face: FrontFace,
|
|
pub cull_mode: CullMode,
|
|
pub depth_bias: i32,
|
|
pub depth_bias_slope_scale: f32,
|
|
pub depth_bias_clamp: f32,
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct ColorStateDescriptor {
|
|
pub format: TextureFormat,
|
|
pub alpha_blend: BlendDescriptor,
|
|
pub color_blend: BlendDescriptor,
|
|
pub write_mask: ColorWrite,
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
pub struct BlendDescriptor {
|
|
pub src_factor: BlendFactor,
|
|
pub dst_factor: BlendFactor,
|
|
pub operation: BlendOperation,
|
|
}
|
|
|
|
impl BlendDescriptor {
|
|
pub const REPLACE: Self = BlendDescriptor {
|
|
src_factor: BlendFactor::One,
|
|
dst_factor: BlendFactor::Zero,
|
|
operation: BlendOperation::Add,
|
|
};
|
|
}
|
|
|
|
bitflags::bitflags! {
|
|
#[repr(transparent)]
|
|
pub struct ColorWrite: u32 {
|
|
const RED = 1;
|
|
const GREEN = 2;
|
|
const BLUE = 4;
|
|
const ALPHA = 8;
|
|
const COLOR = 7;
|
|
const ALL = 15;
|
|
}
|
|
}
|
|
|
|
impl Default for ColorWrite {
|
|
fn default() -> Self {
|
|
ColorWrite::ALL
|
|
}
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum BlendFactor {
|
|
Zero = 0,
|
|
One = 1,
|
|
SrcColor = 2,
|
|
OneMinusSrcColor = 3,
|
|
SrcAlpha = 4,
|
|
OneMinusSrcAlpha = 5,
|
|
DstColor = 6,
|
|
OneMinusDstColor = 7,
|
|
DstAlpha = 8,
|
|
OneMinusDstAlpha = 9,
|
|
SrcAlphaSaturated = 10,
|
|
BlendColor = 11,
|
|
OneMinusBlendColor = 12,
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum BlendOperation {
|
|
Add = 0,
|
|
Subtract = 1,
|
|
ReverseSubtract = 2,
|
|
Min = 3,
|
|
Max = 4,
|
|
}
|
|
|
|
impl Default for BlendOperation {
|
|
fn default() -> Self {
|
|
BlendOperation::Add
|
|
}
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum IndexFormat {
|
|
Uint16 = 0,
|
|
Uint32 = 1,
|
|
}
|
|
|
|
impl Default for IndexFormat {
|
|
fn default() -> Self {
|
|
IndexFormat::Uint16
|
|
}
|
|
}
|