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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
#[derive(Debug, Copy, Clone)] pub struct RenderStates { pub color_mask: ColorMask, pub depth_mask: bool, pub depth_test: DepthTestType, pub cull: CullType, pub blend: Option<BlendParameters> } impl Default for RenderStates { fn default() -> Self { Self { color_mask: ColorMask::default(), depth_mask: true, depth_test: DepthTestType::Less, cull: CullType::None, blend: None } } } #[derive(Debug, Copy, Clone, PartialEq)] pub enum CullType { None, Back, Front, FrontAndBack } #[derive(Debug, Copy, Clone, PartialEq)] pub enum DepthTestType { Never, Less, Equal, LessOrEqual, Greater, NotEqual, GreaterOrEqual, Always } #[derive(Debug, Copy, Clone, PartialEq)] pub struct ColorMask { pub red: bool, pub green: bool, pub blue: bool, pub alpha: bool } impl Default for ColorMask { fn default() -> Self { Self { red: true, green: true, blue: true, alpha: true, } } } #[derive(Debug, Copy, Clone, PartialEq)] pub struct BlendParameters { pub source_rgb_multiplier: BlendMultiplierType, pub source_alpha_multiplier: BlendMultiplierType, pub destination_rgb_multiplier: BlendMultiplierType, pub destination_alpha_multiplier: BlendMultiplierType, pub rgb_equation: BlendEquationType, pub alpha_equation: BlendEquationType } impl Default for BlendParameters { fn default() -> Self { Self { source_rgb_multiplier: BlendMultiplierType::One, source_alpha_multiplier: BlendMultiplierType::One, destination_rgb_multiplier: BlendMultiplierType::Zero, destination_alpha_multiplier: BlendMultiplierType::Zero, rgb_equation: BlendEquationType::Add, alpha_equation: BlendEquationType::Add } } } #[derive(Debug, Copy, Clone, PartialEq)] pub enum BlendMultiplierType { Zero, One, SrcColor, OneMinusSrcColor, DstColor, OneMinusDstColor, SrcAlpha, OneMinusSrcAlpha, DstAlpha, OneMinusDstAlpha, SrcAlphaSaturate } #[derive(Debug, Copy, Clone, PartialEq)] pub enum BlendEquationType { Add, Subtract, ReverseSubtract, Max, Min }