gfx/skia/trunk/src/gpu/GrAARectRenderer.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:02344f24e05f
1 /*
2 * Copyright 2012 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 GrAARectRenderer_DEFINED
9 #define GrAARectRenderer_DEFINED
10
11 #include "SkMatrix.h"
12 #include "SkRect.h"
13 #include "SkRefCnt.h"
14 #include "SkStrokeRec.h"
15
16 class GrGpu;
17 class GrDrawTarget;
18 class GrIndexBuffer;
19
20 /*
21 * This class wraps helper functions that draw AA rects (filled & stroked)
22 */
23 class GrAARectRenderer : public SkRefCnt {
24 public:
25 SK_DECLARE_INST_COUNT(GrAARectRenderer)
26
27 GrAARectRenderer()
28 : fAAFillRectIndexBuffer(NULL)
29 , fAAMiterStrokeRectIndexBuffer(NULL)
30 , fAABevelStrokeRectIndexBuffer(NULL) {
31 }
32
33 void reset();
34
35 ~GrAARectRenderer() {
36 this->reset();
37 }
38
39 // TODO: potentialy fuse the fill & stroke methods and differentiate
40 // between them by passing in stroke (==NULL means fill).
41
42 void fillAARect(GrGpu* gpu,
43 GrDrawTarget* target,
44 const SkRect& rect,
45 const SkMatrix& combinedMatrix,
46 const SkRect& devRect,
47 bool useVertexCoverage) {
48 #ifdef SHADER_AA_FILL_RECT
49 if (combinedMatrix.rectStaysRect()) {
50 this->shaderFillAlignedAARect(gpu, target,
51 rect, combinedMatrix);
52 } else {
53 this->shaderFillAARect(gpu, target,
54 rect, combinedMatrix);
55 }
56 #else
57 this->geometryFillAARect(gpu, target,
58 rect, combinedMatrix,
59 devRect, useVertexCoverage);
60 #endif
61 }
62
63 void strokeAARect(GrGpu* gpu,
64 GrDrawTarget* target,
65 const SkRect& rect,
66 const SkMatrix& combinedMatrix,
67 const SkRect& devRect,
68 const SkStrokeRec* stroke,
69 bool useVertexCoverage);
70
71 // First rect is outer; second rect is inner
72 void fillAANestedRects(GrGpu* gpu,
73 GrDrawTarget* target,
74 const SkRect rects[2],
75 const SkMatrix& combinedMatrix,
76 bool useVertexCoverage);
77
78 private:
79 GrIndexBuffer* fAAFillRectIndexBuffer;
80 GrIndexBuffer* fAAMiterStrokeRectIndexBuffer;
81 GrIndexBuffer* fAABevelStrokeRectIndexBuffer;
82
83 GrIndexBuffer* aaFillRectIndexBuffer(GrGpu* gpu);
84
85 static int aaStrokeRectIndexCount(bool miterStroke);
86 GrIndexBuffer* aaStrokeRectIndexBuffer(GrGpu* gpu, bool miterStroke);
87
88 // TODO: Remove the useVertexCoverage boolean. Just use it all the time
89 // since we now have a coverage vertex attribute
90 void geometryFillAARect(GrGpu* gpu,
91 GrDrawTarget* target,
92 const SkRect& rect,
93 const SkMatrix& combinedMatrix,
94 const SkRect& devRect,
95 bool useVertexCoverage);
96
97 void shaderFillAARect(GrGpu* gpu,
98 GrDrawTarget* target,
99 const SkRect& rect,
100 const SkMatrix& combinedMatrix);
101
102 void shaderFillAlignedAARect(GrGpu* gpu,
103 GrDrawTarget* target,
104 const SkRect& rect,
105 const SkMatrix& combinedMatrix);
106
107 void geometryStrokeAARect(GrGpu* gpu,
108 GrDrawTarget* target,
109 const SkRect& devOutside,
110 const SkRect& devOutsideAssist,
111 const SkRect& devInside,
112 bool useVertexCoverage,
113 bool miterStroke);
114
115 typedef SkRefCnt INHERITED;
116 };
117
118 #endif // GrAARectRenderer_DEFINED

mercurial