13 #ifndef hifi_StencilMaskPass_h
14 #define hifi_StencilMaskPass_h
16 #include <render/Engine.h>
17 #include <gpu/Pipeline.h>
18 #include <graphics/Geometry.h>
19 #include <StencilMaskMode.h>
21 class PrepareStencilConfig :
public render::Job::Config {
23 Q_PROPERTY(StencilMaskMode maskMode MEMBER maskMode NOTIFY dirty)
26 PrepareStencilConfig(
bool enabled =
true) : JobConfig(enabled) {}
31 StencilMaskMode maskMode { StencilMaskMode::NONE };
37 class PrepareStencil {
39 using Config = PrepareStencilConfig;
41 using JobModel = render::Job::ModelI<PrepareStencil, gpu::FramebufferPointer, Config>;
43 void configure(
const Config& config);
45 void run(
const render::RenderContextPointer& renderContext,
const gpu::FramebufferPointer& dstFramebuffer);
48 static const gpu::int8 STENCIL_BACKGROUND = 0;
49 static const gpu::int8 STENCIL_MASK = 1 << 0;
50 static const gpu::int8 STENCIL_SHAPE = 1 << 1;
51 static const gpu::int8 STENCIL_NO_AA = 1 << 2;
53 static void drawMask(gpu::State& state);
54 static void drawBackground(gpu::State& state);
55 static void testMask(gpu::State& state);
56 static void testMaskResetNoAA(gpu::State& state);
57 static void testNoAA(gpu::State& state);
58 static void testBackground(gpu::State& state);
59 static void testShape(gpu::State& state);
60 static void testMaskDrawShape(gpu::State& state);
61 static void testMaskDrawShapeNoAA(gpu::State& state);
64 static gpu::PipelinePointer _meshStencilPipeline;
65 static gpu::PipelinePointer getMeshStencilPipeline();
67 static gpu::PipelinePointer _paintStencilPipeline;
68 static gpu::PipelinePointer getPaintStencilPipeline();
70 static graphics::MeshPointer _mesh;
71 static graphics::MeshPointer getMesh();
73 StencilMaskMode _maskMode { StencilMaskMode::NONE };