blob: ceef2bbd8f4a5f2ed9f5c593e4752d548c8c59ee [file] [log] [blame]
reed@google.combb6992a2011-04-26 17:41:56 +00001/*
2 Copyright 2011 Google Inc.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16
17
18#ifndef SkGPipePriv_DEFINED
19#define SkGPipePriv_DEFINED
20
21#include "SkTypes.h"
22
23#define UNIMPLEMENTED
24
25enum DrawOps {
26 // these match Canvas apis
27 kClipPath_DrawOp,
28 kClipRegion_DrawOp,
29 kClipRect_DrawOp,
30 kConcat_DrawOp,
31 kDrawBitmap_DrawOp,
32 kDrawBitmapMatrix_DrawOp,
33 kDrawBitmapRect_DrawOp,
34 kDrawClear_DrawOp,
35 kDrawData_DrawOp,
36 kDrawPaint_DrawOp,
37 kDrawPath_DrawOp,
38 kDrawPicture_DrawOp,
39 kDrawPoints_DrawOp,
40 kDrawPosText_DrawOp,
41 kDrawPosTextH_DrawOp,
42 kDrawRect_DrawOp,
43 kDrawShape_DrawOp,
44 kDrawSprite_DrawOp,
45 kDrawText_DrawOp,
46 kDrawTextOnPath_DrawOp,
47 kDrawVertices_DrawOp,
48 kRestore_DrawOp,
49 kRotate_DrawOp,
50 kSave_DrawOp,
51 kSaveLayer_DrawOp,
52 kScale_DrawOp,
53 kSetMatrix_DrawOp,
54 kSkew_DrawOp,
55 kTranslate_DrawOp,
56
57 // these edit paints
58 kPaintOp_DrawOp,
59
60 // these are signals to playback, not drawing verbs
61 kDone_DrawOp,
62};
63
64/**
65 * DrawOp packs into a 32bit int as follows
66 *
67 * DrawOp:8 - Flags:4 - Data:20
68 *
69 * Flags and Data are called out separately, so we can reuse Data between
70 * different Ops that might have different Flags. e.g. Data might be a Paint
71 * index for both drawRect (no flags) and saveLayer (does have flags).
72 *
73 * All Ops that take a SkPaint use their Data field to store the index to
74 * the paint (previously defined with kPaintOp_DrawOp).
75 */
76
77#define DRAWOPS_OP_BITS 8
78#define DRAWOPS_FLAG_BITS 4
79#define DRAWOPS_DATA_BITS 20
80
81#define DRAWOPS_OP_MASK ((1 << DRAWOPS_OP_BITS) - 1)
82#define DRAWOPS_FLAG_MASK ((1 << DRAWOPS_FLAG_BITS) - 1)
83#define DRAWOPS_DATA_MASK ((1 << DRAWOPS_DATA_BITS) - 1)
84
85static unsigned DrawOp_unpackOp(uint32_t op32) {
86 return (op32 >> (DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS));
87}
88
89static unsigned DrawOp_unpackFlags(uint32_t op32) {
90 return (op32 >> DRAWOPS_DATA_BITS) & DRAWOPS_FLAG_MASK;
91}
92
93static unsigned DrawOp_unpackData(uint32_t op32) {
94 return op32 & DRAWOPS_DATA_MASK;
95}
96
97static uint32_t DrawOp_packOpFlagData(DrawOps op, unsigned flags, unsigned data) {
98 SkASSERT(0 == (op & ~DRAWOPS_OP_MASK));
99 SkASSERT(0 == (flags & ~DRAWOPS_FLAG_MASK));
100 SkASSERT(0 == (data & ~DRAWOPS_DATA_MASK));
101
102 return (op << DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS) |
103 (flags << DRAWOPS_DATA_BITS) |
104 data;
105}
106
107/** DrawOp specific flag bits
108 */
109
110enum {
111 kSaveLayer_HasBounds_DrawOpFlag = 1 << 0,
112 kSaveLayer_HasPaint_DrawOpFlag = 1 << 1,
113};
114enum {
115 kClear_HasColor_DrawOpFlag = 1 << 0
116};
117enum {
118 kDrawTextOnPath_HasMatrix_DrawOpFlag = 1 << 0
119};
120enum {
121 kDrawVertices_HasTexs_DrawOpFlag = 1 << 0,
122 kDrawVertices_HasColors_DrawOpFlag = 1 << 1,
123 kDrawVertices_HasIndices_DrawOpFlag = 1 << 2,
124};
125
126///////////////////////////////////////////////////////////////////////////////
127
128enum PaintOps {
129 kReset_PaintOp, // no arg
130
131 kFlags_PaintOp, // arg inline
132 kColor_PaintOp, // arg 32
133 kStyle_PaintOp, // arg inline
134 kJoin_PaintOp, // arg inline
135 kCap_PaintOp, // arg inline
136 kWidth_PaintOp, // arg scalar
137 kMiter_PaintOp,// arg scalar
138
139 kEncoding_PaintOp, // arg inline - text
140 kHinting_PaintOp, // arg inline - text
141 kAlign_PaintOp, // arg inline - text
142 kTextSize_PaintOp, // arg scalar - text
143 kTextScaleX_PaintOp,// arg scalar - text
144 kTextSkewX_PaintOp, // arg scalar - text
145
146 kPathEffect_PaintOp, // arg inline
147 kShader_PaintOp,
148 kXfermode_PaintOp,
149 kMaskFilter_PaintOp,
150 kColorFilter_PaintOp,
151 kRasterizer_PaintOp,
152 kDrawLooper_PaintOp,
153};
154
155#define PAINTOPS_OP_BITS 8
156#define PAINTOPS_FLAG_BITS 4
157#define PAINTOPS_DATA_BITS 20
158
159#define PAINTOPS_OP_MASK ((1 << PAINTOPS_OP_BITS) - 1)
160#define PAINTOPS_FLAG_MASK ((1 << PAINTOPS_FLAG_BITS) - 1)
161#define PAINTOPS_DATA_MASK ((1 << PAINTOPS_DATA_BITS) - 1)
162
163static unsigned PaintOp_unpackOp(uint32_t op32) {
164 return (op32 >> (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS));
165}
166
167static unsigned PaintOp_unpackFlags(uint32_t op32) {
168 return (op32 >> PAINTOPS_DATA_BITS) & PAINTOPS_FLAG_MASK;
169}
170
171static unsigned PaintOp_unpackData(uint32_t op32) {
172 return op32 & PAINTOPS_DATA_MASK;
173}
174
175static uint32_t PaintOp_packOp(PaintOps op) {
176 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
177
178 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS);
179}
180
181static uint32_t PaintOp_packOpData(PaintOps op, unsigned data) {
182 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
183 SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
184
185 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS) | data;
186}
187
188static uint32_t PaintOp_packOpFlagData(PaintOps op, unsigned flags, unsigned data) {
189 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
190 SkASSERT(0 == (flags & ~PAINTOPS_FLAG_MASK));
191 SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
192
193 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS) |
194 (flags << PAINTOPS_DATA_BITS) |
195 data;
196}
197
198enum {
199 kLastOp_PaintOpFlag = 1 << 0
200};
201
202#endif