• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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