mirror of
https://github.com/guilhermewerner/wgpu-renderer
synced 2025-06-16 13:54:21 +00:00
44 lines
1.4 KiB
Rust
44 lines
1.4 KiB
Rust
use super::{CompareFunction, StencilOperation};
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
/// State of the stencil operation (fixed-pipeline stage).
|
|
#[repr(C)]
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
|
|
pub struct StencilFaceState {
|
|
/// Comparison function that determines if the fail_op or pass_op is used on the stencil buffer.
|
|
pub compare: CompareFunction,
|
|
|
|
/// Operation that is preformed when stencil test fails.
|
|
pub fail_op: StencilOperation,
|
|
|
|
/// Operation that is performed when depth test fails but stencil test succeeds.
|
|
pub depth_fail_op: StencilOperation,
|
|
|
|
/// Operation that is performed when stencil test success.
|
|
pub pass_op: StencilOperation,
|
|
}
|
|
|
|
impl StencilFaceState {
|
|
/// Ignore the stencil state for the face.
|
|
pub const IGNORE: Self = StencilFaceState {
|
|
compare: CompareFunction::Always,
|
|
fail_op: StencilOperation::Keep,
|
|
depth_fail_op: StencilOperation::Keep,
|
|
pass_op: StencilOperation::Keep,
|
|
};
|
|
|
|
/// Returns true if the face state uses the reference value for testing or operation.
|
|
pub fn NeedsReferenceValue(&self) -> bool {
|
|
self.compare.NeedsReferenceValue()
|
|
|| self.fail_op == StencilOperation::Replace
|
|
|| self.depth_fail_op == StencilOperation::Replace
|
|
|| self.pass_op == StencilOperation::Replace
|
|
}
|
|
}
|
|
|
|
impl Default for StencilFaceState {
|
|
fn default() -> Self {
|
|
Self::IGNORE
|
|
}
|
|
}
|