mirror of
https://github.com/guilhermewerner/wgpu-renderer
synced 2025-06-16 13:54:21 +00:00
Initial pipeline abstraction
This commit is contained in:
43
Source/Render/Pipeline/StencilFaceState.rs
Normal file
43
Source/Render/Pipeline/StencilFaceState.rs
Normal file
@ -0,0 +1,43 @@
|
||||
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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user