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