fugu/
blend.rs

1/// A blending operation.
2#[allow(missing_docs)]
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum BlendOp {
5    Add,
6    Subtract,
7    ReverseSubtract,
8}
9
10/// A blending factor.
11#[allow(missing_docs)]
12#[derive(Debug, Clone, Copy, PartialEq, Eq)]
13pub enum BlendFactor {
14    Zero,
15    One,
16    SourceColor,
17    OneMinusSourceColor,
18    SourceAlpha,
19    OneMinusSourceAlpha,
20    DestColor,
21    OneMinusDestColor,
22    DestAlpha,
23    OneMinusDestAlpha,
24}
25
26/// A blend equation.
27#[derive(Debug, Clone, Copy, PartialEq, Eq)]
28pub struct BlendState {
29    /// The blending operation.
30    pub op: BlendOp,
31    /// The source blending factor.
32    pub source: BlendFactor,
33    /// The destination blending factor.
34    pub dest: BlendFactor,
35}
36
37pub(crate) fn gl_blend_op(op: BlendOp) -> u32 {
38    match op {
39        BlendOp::Add => glow::FUNC_ADD,
40        BlendOp::Subtract => glow::FUNC_SUBTRACT,
41        BlendOp::ReverseSubtract => glow::FUNC_REVERSE_SUBTRACT,
42    }
43}
44
45pub(crate) fn gl_blend_factor(factor: BlendFactor) -> u32 {
46    match factor {
47        BlendFactor::Zero => glow::ZERO,
48        BlendFactor::One => glow::ONE,
49        BlendFactor::SourceColor => glow::SRC_COLOR,
50        BlendFactor::OneMinusSourceColor => glow::ONE_MINUS_SRC_COLOR,
51        BlendFactor::SourceAlpha => glow::SRC_ALPHA,
52        BlendFactor::OneMinusSourceAlpha => glow::ONE_MINUS_SRC_ALPHA,
53        BlendFactor::DestColor => glow::DST_COLOR,
54        BlendFactor::OneMinusDestColor => glow::ONE_MINUS_DST_COLOR,
55        BlendFactor::DestAlpha => glow::DST_ALPHA,
56        BlendFactor::OneMinusDestAlpha => glow::ONE_MINUS_DST_ALPHA,
57    }
58}