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
//! Depth test related features.

use gl::types::*;

/// Whether or not depth test should be enabled.
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub(crate) enum DepthTest {
  /// The depth test is enabled.
  On,
  /// The depth test is disabled.
  Off,
}

/// Depth comparison to perform while depth test. `a` is the incoming fragment’s depth and b is the
/// fragment’s depth that is already stored.
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum DepthComparison {
  /// Depth test never succeeds.
  Never,
  /// Depth test always succeeds.
  Always,
  /// Depth test succeeds if `a == b`.
  Equal,
  /// Depth test succeeds if `a != b`.
  NotEqual,
  /// Depth test succeeds if `a < b`.
  Less,
  /// Depth test succeeds if `a <= b`.
  LessOrEqual,
  /// Depth test succeeds if `a > b`.
  Greater,
  /// Depth test succeeds if `a >= b`.
  GreaterOrEqual,
}

impl DepthComparison {
  pub(crate) fn to_glenum(self) -> GLenum {
    match self {
      DepthComparison::Never => gl::NEVER,
      DepthComparison::Always => gl::ALWAYS,
      DepthComparison::Equal => gl::EQUAL,
      DepthComparison::NotEqual => gl::NOTEQUAL,
      DepthComparison::Less => gl::LESS,
      DepthComparison::LessOrEqual => gl::LEQUAL,
      DepthComparison::Greater => gl::GREATER,
      DepthComparison::GreaterOrEqual => gl::GEQUAL,
    }
  }
}