1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrPathStencilSettings_DEFINED 9 #define GrPathStencilSettings_DEFINED 10 11 #include "GrUserStencilSettings.h" 12 13 //////////////////////////////////////////////////////////////////////////////// 14 // Stencil rules for paths 15 16 ////// Even/Odd 17 18 static constexpr GrUserStencilSettings gEOStencilPass( 19 GrUserStencilSettings::StaticInit< 20 0xffff, 21 GrUserStencilTest::kAlwaysIfInClip, 22 0xffff, 23 GrUserStencilOp::kInvert, 24 GrUserStencilOp::kKeep, 25 0xffff>() 26 ); 27 28 // ok not to check clip b/c stencil pass only wrote inside clip 29 static constexpr GrUserStencilSettings gEOColorPass( 30 GrUserStencilSettings::StaticInit< 31 0x0000, 32 GrUserStencilTest::kNotEqual, 33 0xffff, 34 GrUserStencilOp::kZero, 35 GrUserStencilOp::kZero, 36 0xffff>() 37 ); 38 39 // have to check clip b/c outside clip will always be zero. 40 static constexpr GrUserStencilSettings gInvEOColorPass( 41 GrUserStencilSettings::StaticInit< 42 0x0000, 43 GrUserStencilTest::kEqualIfInClip, 44 0xffff, 45 GrUserStencilOp::kZero, 46 GrUserStencilOp::kZero, 47 0xffff>() 48 ); 49 50 ////// Winding 51 52 static constexpr GrUserStencilSettings gWindStencilPass ( 53 GrUserStencilSettings::StaticInitSeparate< 54 0xffff, 0xffff, 55 GrUserStencilTest::kAlwaysIfInClip, GrUserStencilTest::kAlwaysIfInClip, 56 0xffff, 0xffff, 57 GrUserStencilOp::kIncWrap, GrUserStencilOp::kDecWrap, 58 GrUserStencilOp::kKeep, GrUserStencilOp::kKeep, 59 0xffff, 0xffff>() 60 ); 61 62 static constexpr GrUserStencilSettings gWindColorPass( 63 GrUserStencilSettings::StaticInit< 64 0x0000, 65 GrUserStencilTest::kLessIfInClip, // "0 < stencil" is equivalent to "0 != stencil". 66 0xffff, 67 GrUserStencilOp::kZero, 68 GrUserStencilOp::kZero, 69 0xffff>() 70 ); 71 72 static constexpr GrUserStencilSettings gInvWindColorPass( 73 GrUserStencilSettings::StaticInit< 74 0x0000, 75 GrUserStencilTest::kEqualIfInClip, 76 0xffff, 77 GrUserStencilOp::kZero, 78 GrUserStencilOp::kZero, 79 0xffff>() 80 ); 81 82 ////// Normal render to stencil 83 84 // Sometimes the default path renderer can draw a path directly to the stencil 85 // buffer without having to first resolve the interior / exterior. 86 static constexpr GrUserStencilSettings gDirectToStencil( 87 GrUserStencilSettings::StaticInit< 88 0x0000, 89 GrUserStencilTest::kAlwaysIfInClip, 90 0xffff, 91 GrUserStencilOp::kZero, 92 GrUserStencilOp::kIncMaybeClamp, 93 0xffff>() 94 ); 95 96 #endif 97