| /* | |
| * Copyright 2016 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrPathStencilSettings_DEFINED | |
| #define GrPathStencilSettings_DEFINED | |
| #include "src/gpu/GrUserStencilSettings.h" | |
| //////////////////////////////////////////////////////////////////////////////// | |
| // Stencil rules for paths | |
| ////// Even/Odd | |
| static constexpr GrUserStencilSettings gEOStencilPass( | |
| GrUserStencilSettings::StaticInit< | |
| 0xffff, | |
| GrUserStencilTest::kAlwaysIfInClip, | |
| 0xffff, | |
| GrUserStencilOp::kInvert, | |
| GrUserStencilOp::kKeep, | |
| 0xffff>() | |
| ); | |
| // ok not to check clip b/c stencil pass only wrote inside clip | |
| static constexpr GrUserStencilSettings gEOColorPass( | |
| GrUserStencilSettings::StaticInit< | |
| 0x0000, | |
| GrUserStencilTest::kNotEqual, | |
| 0xffff, | |
| GrUserStencilOp::kZero, | |
| GrUserStencilOp::kZero, | |
| 0xffff>() | |
| ); | |
| // have to check clip b/c outside clip will always be zero. | |
| static constexpr GrUserStencilSettings gInvEOColorPass( | |
| GrUserStencilSettings::StaticInit< | |
| 0x0000, | |
| GrUserStencilTest::kEqualIfInClip, | |
| 0xffff, | |
| GrUserStencilOp::kZero, | |
| GrUserStencilOp::kZero, | |
| 0xffff>() | |
| ); | |
| ////// Winding | |
| static constexpr GrUserStencilSettings gWindStencilPass ( | |
| GrUserStencilSettings::StaticInitSeparate< | |
| 0xffff, 0xffff, | |
| GrUserStencilTest::kAlwaysIfInClip, GrUserStencilTest::kAlwaysIfInClip, | |
| 0xffff, 0xffff, | |
| GrUserStencilOp::kIncWrap, GrUserStencilOp::kDecWrap, | |
| GrUserStencilOp::kKeep, GrUserStencilOp::kKeep, | |
| 0xffff, 0xffff>() | |
| ); | |
| static constexpr GrUserStencilSettings gWindColorPass( | |
| GrUserStencilSettings::StaticInit< | |
| 0x0000, | |
| GrUserStencilTest::kLessIfInClip, // "0 < stencil" is equivalent to "0 != stencil". | |
| 0xffff, | |
| GrUserStencilOp::kZero, | |
| GrUserStencilOp::kZero, | |
| 0xffff>() | |
| ); | |
| static constexpr GrUserStencilSettings gInvWindColorPass( | |
| GrUserStencilSettings::StaticInit< | |
| 0x0000, | |
| GrUserStencilTest::kEqualIfInClip, | |
| 0xffff, | |
| GrUserStencilOp::kZero, | |
| GrUserStencilOp::kZero, | |
| 0xffff>() | |
| ); | |
| ////// Normal render to stencil | |
| // Sometimes the default path renderer can draw a path directly to the stencil | |
| // buffer without having to first resolve the interior / exterior. | |
| static constexpr GrUserStencilSettings gDirectToStencil( | |
| GrUserStencilSettings::StaticInit< | |
| 0x0000, | |
| GrUserStencilTest::kAlwaysIfInClip, | |
| 0xffff, | |
| GrUserStencilOp::kZero, | |
| GrUserStencilOp::kIncMaybeClamp, | |
| 0xffff>() | |
| ); | |
| #endif |