OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2011 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 GrPathRendererChain_DEFINED | |
9 #define GrPathRendererChain_DEFINED | |
10 | |
11 #include "SkRefCnt.h" | |
12 #include "SkTArray.h" | |
13 | |
14 class GrContext; | |
15 class GrPathRenderer; | |
16 class GrPipelineBuilder; | |
17 class GrShaderCaps; | |
18 class GrStrokeInfo; | |
19 class SkMatrix; | |
20 class SkPath; | |
21 | |
22 /** | |
23 * Keeps track of an ordered list of path renderers. When a path needs to be | |
24 * drawn this list is scanned to find the most preferred renderer. To add your | |
25 * path renderer to the list implement the GrPathRenderer::AddPathRenderers | |
26 * function. | |
27 */ | |
28 class GrPathRendererChain : public SkRefCnt { | |
29 public: | |
30 // See comments in GrPathRenderer.h | |
31 enum StencilSupport { | |
32 kNoSupport_StencilSupport, | |
33 kStencilOnly_StencilSupport, | |
34 kNoRestriction_StencilSupport, | |
35 }; | |
36 | |
37 GrPathRendererChain(GrContext* context); | |
38 | |
39 ~GrPathRendererChain(); | |
40 | |
41 // takes a ref and unrefs in destructor | |
42 GrPathRenderer* addPathRenderer(GrPathRenderer* pr); | |
43 | |
44 /** Documents how the caller plans to use a GrPathRenderer to draw a path. I
t affects the PR | |
45 returned by getPathRenderer */ | |
46 enum DrawType { | |
47 kColor_DrawType, // draw to the color buffer, no AA | |
48 kColorAntiAlias_DrawType, // draw to color buffer, with partia
l coverage AA | |
49 kStencilOnly_DrawType, // draw just to the stencil buffer | |
50 kStencilAndColor_DrawType, // draw the stencil and color buffer
, no AA | |
51 kStencilAndColorAntiAlias_DrawType // draw the stencil and color buffer
, with partial | |
52 // coverage AA. | |
53 }; | |
54 /** Returns a GrPathRenderer compatible with the request if one is available
. If the caller | |
55 is drawing the path to the stencil buffer then stencilSupport can be use
d to determine | |
56 whether the path can be rendered with arbitrary stencil rules or not. Se
e comments on | |
57 StencilSupport in GrPathRenderer.h. */ | |
58 GrPathRenderer* getPathRenderer(const GrShaderCaps* shaderCaps, | |
59 const GrPipelineBuilder&, | |
60 const SkMatrix& viewMatrix, | |
61 const SkPath& path, | |
62 const GrStrokeInfo& stroke, | |
63 DrawType drawType, | |
64 StencilSupport* stencilSupport); | |
65 | |
66 private: | |
67 GrPathRendererChain(); | |
68 | |
69 void init(); | |
70 | |
71 enum { | |
72 kPreAllocCount = 8, | |
73 }; | |
74 bool fInit; | |
75 GrContext* fOwner; | |
76 SkSTArray<kPreAllocCount, GrPathRenderer*, true> fChain; | |
77 | |
78 typedef SkRefCnt INHERITED; | |
79 }; | |
80 | |
81 #endif | |
OLD | NEW |