blob: fb1553693d16c946c7793d73d4d79a697ece8d7e [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
reed@google.comb55d1182011-05-11 00:42:04 +000025// these must be contiguous, 0...N-1
26enum PaintFlats {
27 kColorFilter_PaintFlat,
reed@google.com0faac1e2011-05-11 05:58:58 +000028 kDrawLooper_PaintFlat,
reed@google.comb55d1182011-05-11 00:42:04 +000029 kMaskFilter_PaintFlat,
30 kPathEffect_PaintFlat,
31 kRasterizer_PaintFlat,
32 kShader_PaintFlat,
33 kXfermode_PaintFlat,
34
35 kLast_PaintFlat = kXfermode_PaintFlat
36};
37#define kCount_PaintFlats (kLast_PaintFlat + 1)
38
reed@google.combb6992a2011-04-26 17:41:56 +000039enum DrawOps {
reed@google.comacd471f2011-05-03 21:26:46 +000040 kSkip_DrawOp, // skip an addition N bytes (N == data)
41
reed@google.combb6992a2011-04-26 17:41:56 +000042 // these match Canvas apis
43 kClipPath_DrawOp,
44 kClipRegion_DrawOp,
45 kClipRect_DrawOp,
46 kConcat_DrawOp,
47 kDrawBitmap_DrawOp,
48 kDrawBitmapMatrix_DrawOp,
49 kDrawBitmapRect_DrawOp,
50 kDrawClear_DrawOp,
51 kDrawData_DrawOp,
52 kDrawPaint_DrawOp,
53 kDrawPath_DrawOp,
54 kDrawPicture_DrawOp,
55 kDrawPoints_DrawOp,
56 kDrawPosText_DrawOp,
57 kDrawPosTextH_DrawOp,
58 kDrawRect_DrawOp,
59 kDrawShape_DrawOp,
60 kDrawSprite_DrawOp,
61 kDrawText_DrawOp,
62 kDrawTextOnPath_DrawOp,
63 kDrawVertices_DrawOp,
64 kRestore_DrawOp,
65 kRotate_DrawOp,
66 kSave_DrawOp,
67 kSaveLayer_DrawOp,
68 kScale_DrawOp,
69 kSetMatrix_DrawOp,
70 kSkew_DrawOp,
71 kTranslate_DrawOp,
72
reed@google.combb6992a2011-04-26 17:41:56 +000073 kPaintOp_DrawOp,
reed@google.combb6793b2011-05-05 15:18:15 +000074
reed@google.combb6793b2011-05-05 15:18:15 +000075 kDef_Typeface_DrawOp,
reed@google.com0faac1e2011-05-11 05:58:58 +000076 kDef_Flattenable_DrawOp,
reed@google.combb6992a2011-04-26 17:41:56 +000077
reed@google.comdde09562011-05-23 12:21:05 +000078 kName_Flattenable_DrawOp, // index <--> name
79
reed@google.combb6992a2011-04-26 17:41:56 +000080 // these are signals to playback, not drawing verbs
81 kDone_DrawOp,
82};
83
84/**
85 * DrawOp packs into a 32bit int as follows
86 *
87 * DrawOp:8 - Flags:4 - Data:20
88 *
89 * Flags and Data are called out separately, so we can reuse Data between
90 * different Ops that might have different Flags. e.g. Data might be a Paint
91 * index for both drawRect (no flags) and saveLayer (does have flags).
92 *
93 * All Ops that take a SkPaint use their Data field to store the index to
94 * the paint (previously defined with kPaintOp_DrawOp).
95 */
96
97#define DRAWOPS_OP_BITS 8
98#define DRAWOPS_FLAG_BITS 4
99#define DRAWOPS_DATA_BITS 20
100
101#define DRAWOPS_OP_MASK ((1 << DRAWOPS_OP_BITS) - 1)
102#define DRAWOPS_FLAG_MASK ((1 << DRAWOPS_FLAG_BITS) - 1)
103#define DRAWOPS_DATA_MASK ((1 << DRAWOPS_DATA_BITS) - 1)
104
105static unsigned DrawOp_unpackOp(uint32_t op32) {
106 return (op32 >> (DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS));
107}
108
109static unsigned DrawOp_unpackFlags(uint32_t op32) {
110 return (op32 >> DRAWOPS_DATA_BITS) & DRAWOPS_FLAG_MASK;
111}
112
113static unsigned DrawOp_unpackData(uint32_t op32) {
114 return op32 & DRAWOPS_DATA_MASK;
115}
116
117static uint32_t DrawOp_packOpFlagData(DrawOps op, unsigned flags, unsigned data) {
118 SkASSERT(0 == (op & ~DRAWOPS_OP_MASK));
119 SkASSERT(0 == (flags & ~DRAWOPS_FLAG_MASK));
120 SkASSERT(0 == (data & ~DRAWOPS_DATA_MASK));
121
122 return (op << DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS) |
123 (flags << DRAWOPS_DATA_BITS) |
124 data;
125}
126
127/** DrawOp specific flag bits
128 */
129
130enum {
131 kSaveLayer_HasBounds_DrawOpFlag = 1 << 0,
132 kSaveLayer_HasPaint_DrawOpFlag = 1 << 1,
133};
134enum {
135 kClear_HasColor_DrawOpFlag = 1 << 0
136};
137enum {
138 kDrawTextOnPath_HasMatrix_DrawOpFlag = 1 << 0
139};
140enum {
141 kDrawVertices_HasTexs_DrawOpFlag = 1 << 0,
142 kDrawVertices_HasColors_DrawOpFlag = 1 << 1,
143 kDrawVertices_HasIndices_DrawOpFlag = 1 << 2,
144};
145
146///////////////////////////////////////////////////////////////////////////////
147
148enum PaintOps {
149 kReset_PaintOp, // no arg
150
151 kFlags_PaintOp, // arg inline
152 kColor_PaintOp, // arg 32
153 kStyle_PaintOp, // arg inline
154 kJoin_PaintOp, // arg inline
155 kCap_PaintOp, // arg inline
156 kWidth_PaintOp, // arg scalar
157 kMiter_PaintOp,// arg scalar
158
159 kEncoding_PaintOp, // arg inline - text
160 kHinting_PaintOp, // arg inline - text
161 kAlign_PaintOp, // arg inline - text
162 kTextSize_PaintOp, // arg scalar - text
163 kTextScaleX_PaintOp,// arg scalar - text
164 kTextSkewX_PaintOp, // arg scalar - text
reed@google.comf5842f72011-05-04 18:30:04 +0000165 kTypeface_PaintOp, // arg inline (index) - text
166
reed@google.comb55d1182011-05-11 00:42:04 +0000167 kFlatIndex_PaintOp, // flags=paintflat, data=index
reed@google.combb6992a2011-04-26 17:41:56 +0000168};
169
170#define PAINTOPS_OP_BITS 8
171#define PAINTOPS_FLAG_BITS 4
172#define PAINTOPS_DATA_BITS 20
173
174#define PAINTOPS_OP_MASK ((1 << PAINTOPS_OP_BITS) - 1)
175#define PAINTOPS_FLAG_MASK ((1 << PAINTOPS_FLAG_BITS) - 1)
176#define PAINTOPS_DATA_MASK ((1 << PAINTOPS_DATA_BITS) - 1)
177
178static unsigned PaintOp_unpackOp(uint32_t op32) {
179 return (op32 >> (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS));
180}
181
182static unsigned PaintOp_unpackFlags(uint32_t op32) {
183 return (op32 >> PAINTOPS_DATA_BITS) & PAINTOPS_FLAG_MASK;
184}
185
186static unsigned PaintOp_unpackData(uint32_t op32) {
187 return op32 & PAINTOPS_DATA_MASK;
188}
189
190static uint32_t PaintOp_packOp(PaintOps op) {
191 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
192
193 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS);
194}
195
196static uint32_t PaintOp_packOpData(PaintOps op, unsigned data) {
197 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
198 SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
199
200 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS) | data;
201}
202
203static uint32_t PaintOp_packOpFlagData(PaintOps op, unsigned flags, unsigned data) {
204 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
205 SkASSERT(0 == (flags & ~PAINTOPS_FLAG_MASK));
206 SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
207
208 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS) |
209 (flags << PAINTOPS_DATA_BITS) |
210 data;
211}
212
reed@google.combb6992a2011-04-26 17:41:56 +0000213#endif