• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 
11 #ifndef SkGPipePriv_DEFINED
12 #define SkGPipePriv_DEFINED
13 
14 #include "SkTypes.h"
15 
16 #define UNIMPLEMENTED
17 
18 // these must be contiguous, 0...N-1
19 enum PaintFlats {
20     kColorFilter_PaintFlat,
21     kDrawLooper_PaintFlat,
22     kMaskFilter_PaintFlat,
23     kPathEffect_PaintFlat,
24     kRasterizer_PaintFlat,
25     kShader_PaintFlat,
26     kXfermode_PaintFlat,
27 
28     kLast_PaintFlat = kXfermode_PaintFlat
29 };
30 #define kCount_PaintFlats   (kLast_PaintFlat + 1)
31 
32 enum DrawOps {
33     kSkip_DrawOp,   // skip an addition N bytes (N == data)
34 
35     // these match Canvas apis
36     kClipPath_DrawOp,
37     kClipRegion_DrawOp,
38     kClipRect_DrawOp,
39     kConcat_DrawOp,
40     kDrawBitmap_DrawOp,
41     kDrawBitmapMatrix_DrawOp,
42     kDrawBitmapRect_DrawOp,
43     kDrawClear_DrawOp,
44     kDrawData_DrawOp,
45     kDrawPaint_DrawOp,
46     kDrawPath_DrawOp,
47     kDrawPicture_DrawOp,
48     kDrawPoints_DrawOp,
49     kDrawPosText_DrawOp,
50     kDrawPosTextH_DrawOp,
51     kDrawRect_DrawOp,
52     kDrawSprite_DrawOp,
53     kDrawText_DrawOp,
54     kDrawTextOnPath_DrawOp,
55     kDrawVertices_DrawOp,
56     kRestore_DrawOp,
57     kRotate_DrawOp,
58     kSave_DrawOp,
59     kSaveLayer_DrawOp,
60     kScale_DrawOp,
61     kSetMatrix_DrawOp,
62     kSkew_DrawOp,
63     kTranslate_DrawOp,
64 
65     kPaintOp_DrawOp,
66 
67     kDef_Typeface_DrawOp,
68     kDef_Flattenable_DrawOp,
69 
70     // these are signals to playback, not drawing verbs
71     kDone_DrawOp,
72 };
73 
74 /**
75  *  DrawOp packs into a 32bit int as follows
76  *
77  *  DrawOp:8 - Flags:4 - Data:20
78  *
79  *  Flags and Data are called out separately, so we can reuse Data between
80  *  different Ops that might have different Flags. e.g. Data might be a Paint
81  *  index for both drawRect (no flags) and saveLayer (does have flags).
82  *
83  *  All Ops that take a SkPaint use their Data field to store the index to
84  *  the paint (previously defined with kPaintOp_DrawOp).
85  */
86 
87 #define DRAWOPS_OP_BITS     8
88 #define DRAWOPS_FLAG_BITS   4
89 #define DRAWOPS_DATA_BITS   20
90 
91 #define DRAWOPS_OP_MASK     ((1 << DRAWOPS_OP_BITS) - 1)
92 #define DRAWOPS_FLAG_MASK   ((1 << DRAWOPS_FLAG_BITS) - 1)
93 #define DRAWOPS_DATA_MASK   ((1 << DRAWOPS_DATA_BITS) - 1)
94 
DrawOp_unpackOp(uint32_t op32)95 static unsigned DrawOp_unpackOp(uint32_t op32) {
96     return (op32 >> (DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS));
97 }
98 
DrawOp_unpackFlags(uint32_t op32)99 static unsigned DrawOp_unpackFlags(uint32_t op32) {
100     return (op32 >> DRAWOPS_DATA_BITS) & DRAWOPS_FLAG_MASK;
101 }
102 
DrawOp_unpackData(uint32_t op32)103 static unsigned DrawOp_unpackData(uint32_t op32) {
104     return op32 & DRAWOPS_DATA_MASK;
105 }
106 
DrawOp_packOpFlagData(DrawOps op,unsigned flags,unsigned data)107 static uint32_t DrawOp_packOpFlagData(DrawOps op, unsigned flags, unsigned data) {
108     SkASSERT(0 == (op & ~DRAWOPS_OP_MASK));
109     SkASSERT(0 == (flags & ~DRAWOPS_FLAG_MASK));
110     SkASSERT(0 == (data & ~DRAWOPS_DATA_MASK));
111 
112     return (op << (DRAWOPS_FLAG_BITS + DRAWOPS_DATA_BITS)) |
113            (flags << DRAWOPS_DATA_BITS) |
114             data;
115 }
116 
117 /** DrawOp specific flag bits
118  */
119 
120 enum {
121     kSaveLayer_HasBounds_DrawOpFlag = 1 << 0,
122     kSaveLayer_HasPaint_DrawOpFlag = 1 << 1,
123 };
124 enum {
125     kClear_HasColor_DrawOpFlag  = 1 << 0
126 };
127 enum {
128     kDrawTextOnPath_HasMatrix_DrawOpFlag = 1 << 0
129 };
130 enum {
131     kDrawVertices_HasTexs_DrawOpFlag     = 1 << 0,
132     kDrawVertices_HasColors_DrawOpFlag   = 1 << 1,
133     kDrawVertices_HasIndices_DrawOpFlag  = 1 << 2,
134 };
135 
136 ///////////////////////////////////////////////////////////////////////////////
137 
138 enum PaintOps {
139     kReset_PaintOp,     // no arg
140 
141     kFlags_PaintOp,     // arg inline
142     kColor_PaintOp,     // arg 32
143     kStyle_PaintOp,     // arg inline
144     kJoin_PaintOp,      // arg inline
145     kCap_PaintOp,       // arg inline
146     kWidth_PaintOp,     // arg scalar
147     kMiter_PaintOp,// arg scalar
148 
149     kEncoding_PaintOp,  // arg inline - text
150     kHinting_PaintOp,   // arg inline - text
151     kAlign_PaintOp,     // arg inline - text
152     kTextSize_PaintOp,  // arg scalar - text
153     kTextScaleX_PaintOp,// arg scalar - text
154     kTextSkewX_PaintOp, // arg scalar - text
155     kTypeface_PaintOp,  // arg inline (index) - text
156 
157     kFlatIndex_PaintOp, // flags=paintflat, data=index
158 };
159 
160 #define PAINTOPS_OP_BITS     8
161 #define PAINTOPS_FLAG_BITS   4
162 #define PAINTOPS_DATA_BITS   20
163 
164 #define PAINTOPS_OP_MASK     ((1 << PAINTOPS_OP_BITS) - 1)
165 #define PAINTOPS_FLAG_MASK   ((1 << PAINTOPS_FLAG_BITS) - 1)
166 #define PAINTOPS_DATA_MASK   ((1 << PAINTOPS_DATA_BITS) - 1)
167 
PaintOp_unpackOp(uint32_t op32)168 static unsigned PaintOp_unpackOp(uint32_t op32) {
169     return (op32 >> (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS));
170 }
171 
PaintOp_unpackFlags(uint32_t op32)172 static unsigned PaintOp_unpackFlags(uint32_t op32) {
173     return (op32 >> PAINTOPS_DATA_BITS) & PAINTOPS_FLAG_MASK;
174 }
175 
PaintOp_unpackData(uint32_t op32)176 static unsigned PaintOp_unpackData(uint32_t op32) {
177     return op32 & PAINTOPS_DATA_MASK;
178 }
179 
PaintOp_packOp(PaintOps op)180 static uint32_t PaintOp_packOp(PaintOps op) {
181     SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
182 
183     return op << (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS);
184 }
185 
PaintOp_packOpData(PaintOps op,unsigned data)186 static uint32_t PaintOp_packOpData(PaintOps op, unsigned data) {
187     SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
188     SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
189 
190     return (op << (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS)) | data;
191 }
192 
PaintOp_packOpFlagData(PaintOps op,unsigned flags,unsigned data)193 static uint32_t PaintOp_packOpFlagData(PaintOps op, unsigned flags, unsigned data) {
194     SkASSERT(0 == (op & ~PAINTOPS_OP_MASK));
195     SkASSERT(0 == (flags & ~PAINTOPS_FLAG_MASK));
196     SkASSERT(0 == (data & ~PAINTOPS_DATA_MASK));
197 
198     return (op << (PAINTOPS_FLAG_BITS + PAINTOPS_DATA_BITS)) |
199     (flags << PAINTOPS_DATA_BITS) |
200     data;
201 }
202 
203 #endif
204