blob: b4c108ef53697cac696609c329d85801ab278c6c [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,
reed@google.comf5842f72011-05-04 18:30:04 +000061 kDefineTypeface_DrawOp,
reed@google.combb6992a2011-04-26 17:41:56 +000062
63 // these are signals to playback, not drawing verbs
64 kDone_DrawOp,
65};
66
67/**
68 * DrawOp packs into a 32bit int as follows
69 *
70 * DrawOp:8 - Flags:4 - Data:20
71 *
72 * Flags and Data are called out separately, so we can reuse Data between
73 * different Ops that might have different Flags. e.g. Data might be a Paint
74 * index for both drawRect (no flags) and saveLayer (does have flags).
75 *
76 * All Ops that take a SkPaint use their Data field to store the index to
77 * the paint (previously defined with kPaintOp_DrawOp).
78 */
79
80#define DRAWOPS_OP_BITS 8
81#define DRAWOPS_FLAG_BITS 4
82#define DRAWOPS_DATA_BITS 20
83
84#define DRAWOPS_OP_MASK ((1 << DRAWOPS_OP_BITS) - 1)
85#define DRAWOPS_FLAG_MASK ((1 << DRAWOPS_FLAG_BITS) - 1)
86#define DRAWOPS_DATA_MASK ((1 << DRAWOPS_DATA_BITS) - 1)
87
88static unsigned DrawOp_unpackOp(uint32_t op32) {
89 return (op32 >> (DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS));
90}
91
92static unsigned DrawOp_unpackFlags(uint32_t op32) {
93 return (op32 >> DRAWOPS_DATA_BITS) & DRAWOPS_FLAG_MASK;
94}
95
96static unsigned DrawOp_unpackData(uint32_t op32) {
97 return op32 & DRAWOPS_DATA_MASK;
98}
99
100static uint32_t DrawOp_packOpFlagData(DrawOps op, unsigned flags, unsigned data) {
101 SkASSERT(0 == (op & ~DRAWOPS_OP_MASK));
102 SkASSERT(0 == (flags & ~DRAWOPS_FLAG_MASK));
103 SkASSERT(0 == (data & ~DRAWOPS_DATA_MASK));
104
105 return (op << DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS) |
106 (flags << DRAWOPS_DATA_BITS) |
107 data;
108}
109
110/** DrawOp specific flag bits
111 */
112
113enum {
114 kSaveLayer_HasBounds_DrawOpFlag = 1 << 0,
115 kSaveLayer_HasPaint_DrawOpFlag = 1 << 1,
116};
117enum {
118 kClear_HasColor_DrawOpFlag = 1 << 0
119};
120enum {
121 kDrawTextOnPath_HasMatrix_DrawOpFlag = 1 << 0
122};
123enum {
124 kDrawVertices_HasTexs_DrawOpFlag = 1 << 0,
125 kDrawVertices_HasColors_DrawOpFlag = 1 << 1,
126 kDrawVertices_HasIndices_DrawOpFlag = 1 << 2,
127};
128
129///////////////////////////////////////////////////////////////////////////////
130
131enum PaintOps {
132 kReset_PaintOp, // no arg
133
134 kFlags_PaintOp, // arg inline
135 kColor_PaintOp, // arg 32
136 kStyle_PaintOp, // arg inline
137 kJoin_PaintOp, // arg inline
138 kCap_PaintOp, // arg inline
139 kWidth_PaintOp, // arg scalar
140 kMiter_PaintOp,// arg scalar
141
142 kEncoding_PaintOp, // arg inline - text
143 kHinting_PaintOp, // arg inline - text
144 kAlign_PaintOp, // arg inline - text
145 kTextSize_PaintOp, // arg scalar - text
146 kTextScaleX_PaintOp,// arg scalar - text
147 kTextSkewX_PaintOp, // arg scalar - text
reed@google.comf5842f72011-05-04 18:30:04 +0000148 kTypeface_PaintOp, // arg inline (index) - text
149
reed@google.combb6992a2011-04-26 17:41:56 +0000150 kPathEffect_PaintOp, // arg inline
151 kShader_PaintOp,
152 kXfermode_PaintOp,
153 kMaskFilter_PaintOp,
154 kColorFilter_PaintOp,
155 kRasterizer_PaintOp,
156 kDrawLooper_PaintOp,
157};
158
159#define PAINTOPS_OP_BITS 8
160#define PAINTOPS_FLAG_BITS 4
161#define PAINTOPS_DATA_BITS 20
162
163#define PAINTOPS_OP_MASK ((1 << PAINTOPS_OP_BITS) - 1)
164#define PAINTOPS_FLAG_MASK ((1 << PAINTOPS_FLAG_BITS) - 1)
165#define PAINTOPS_DATA_MASK ((1 << PAINTOPS_DATA_BITS) - 1)
166
167static unsigned PaintOp_unpackOp(uint32_t op32) {
168 return (op32 >> (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS));
169}
170
171static unsigned PaintOp_unpackFlags(uint32_t op32) {
172 return (op32 >> PAINTOPS_DATA_BITS) & PAINTOPS_FLAG_MASK;
173}
174
175static unsigned PaintOp_unpackData(uint32_t op32) {
176 return op32 & PAINTOPS_DATA_MASK;
177}
178
179static uint32_t PaintOp_packOp(PaintOps op) {
180 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
181
182 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS);
183}
184
185static uint32_t PaintOp_packOpData(PaintOps op, unsigned data) {
186 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
187 SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
188
189 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS) | data;
190}
191
192static uint32_t PaintOp_packOpFlagData(PaintOps op, unsigned flags, unsigned data) {
193 SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
194 SkASSERT(0 == (flags & ~PAINTOPS_FLAG_MASK));
195 SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
196
197 return (op << PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS) |
198 (flags << PAINTOPS_DATA_BITS) |
199 data;
200}
201
202enum {
203 kLastOp_PaintOpFlag = 1 << 0
204};
205
206#endif