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