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