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 } }