// // StencilMaskPass.h // render-utils/src/ // // Created by Sam Gateau on 5/31/17. // Copyright 20154 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #pragma once #ifndef hifi_StencilMaskPass_h #define hifi_StencilMaskPass_h #include #include #include class PrepareStencilConfig : public render::Job::Config { Q_OBJECT Q_PROPERTY(int maskMode MEMBER maskMode NOTIFY dirty) Q_PROPERTY(bool forceDraw MEMBER forceDraw NOTIFY dirty) public: PrepareStencilConfig(bool enabled = true) : JobConfig(enabled) {} int maskMode { 0 }; bool forceDraw { false }; signals: void dirty(); }; class PrepareStencil { public: using Config = PrepareStencilConfig; using JobModel = render::Job::ModelI; void configure(const Config& config); void run(const render::RenderContextPointer& renderContext, const gpu::FramebufferPointer& dstFramebuffer); // Always use 0 to clear the stencil buffer to set it to background static const gpu::int8 STENCIL_BACKGROUND = 0; // must match values in Skybox.cpp and ProceduralSkybox.cpp static const gpu::int8 STENCIL_MASK = 1 << 0; static const gpu::int8 STENCIL_SHAPE = 1 << 1; static const gpu::int8 STENCIL_NO_AA = 1 << 2; static void drawMask(gpu::State& state); static void drawBackground(gpu::State& state); static void testMask(gpu::State& state); static void testNoAA(gpu::State& state); static void testBackground(gpu::State& state); static void testShape(gpu::State& state); static void testMaskDrawShape(gpu::State& state); static void testMaskDrawShapeNoAA(gpu::State& state); private: gpu::PipelinePointer _meshStencilPipeline; gpu::PipelinePointer getMeshStencilPipeline(); gpu::PipelinePointer _paintStencilPipeline; gpu::PipelinePointer getPaintStencilPipeline(); graphics::MeshPointer _mesh; graphics::MeshPointer getMesh(); int _maskMode { 0 }; bool _forceDraw { false }; }; #endif // hifi_StencilMaskPass_h