| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef GrDrawContext_DEFINED | 8 #ifndef GrDrawContext_DEFINED |
| 9 #define GrDrawContext_DEFINED | 9 #define GrDrawContext_DEFINED |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 struct SkRSXform; | 37 struct SkRSXform; |
| 38 class SkTextBlob; | 38 class SkTextBlob; |
| 39 | 39 |
| 40 /* | 40 /* |
| 41 * A helper object to orchestrate draws | 41 * A helper object to orchestrate draws |
| 42 */ | 42 */ |
| 43 class SK_API GrDrawContext : public SkRefCnt { | 43 class SK_API GrDrawContext : public SkRefCnt { |
| 44 public: | 44 public: |
| 45 ~GrDrawContext() override; | 45 ~GrDrawContext() override; |
| 46 | 46 |
| 47 void copySurface(GrRenderTarget* dst, GrSurface* src, | 47 void copySurface(GrSurface* src, const SkIRect& srcRect, const SkIPoint& dst
Point); |
| 48 const SkIRect& srcRect, const SkIPoint& dstPoint); | |
| 49 | 48 |
| 50 // TODO: it is odd that we need both the SkPaint in the following 3 methods. | 49 // TODO: it is odd that we need both the SkPaint in the following 3 methods. |
| 51 // We should extract the text parameters from SkPaint and pass them separate
ly | 50 // We should extract the text parameters from SkPaint and pass them separate
ly |
| 52 // akin to GrStrokeInfo (GrTextInfo?) | 51 // akin to GrStrokeInfo (GrTextInfo?) |
| 53 void drawText(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPaint
&, | 52 void drawText(const GrClip&, const GrPaint&, const SkPaint&, |
| 54 const SkMatrix& viewMatrix, const char text[], size_t byteLeng
th, | 53 const SkMatrix& viewMatrix, const char text[], size_t byteLeng
th, |
| 55 SkScalar x, SkScalar y, const SkIRect& clipBounds); | 54 SkScalar x, SkScalar y, const SkIRect& clipBounds); |
| 56 void drawPosText(GrRenderTarget*, const GrClip&, const GrPaint&, const SkPai
nt&, | 55 void drawPosText(const GrClip&, const GrPaint&, const SkPaint&, |
| 57 const SkMatrix& viewMatrix, const char text[], size_t byteL
ength, | 56 const SkMatrix& viewMatrix, const char text[], size_t byteL
ength, |
| 58 const SkScalar pos[], int scalarsPerPosition, | 57 const SkScalar pos[], int scalarsPerPosition, |
| 59 const SkPoint& offset, const SkIRect& clipBounds); | 58 const SkPoint& offset, const SkIRect& clipBounds); |
| 60 void drawTextBlob(GrRenderTarget*, const GrClip&, const SkPaint&, | 59 void drawTextBlob(const GrClip&, const SkPaint&, |
| 61 const SkMatrix& viewMatrix, const SkTextBlob*, | 60 const SkMatrix& viewMatrix, const SkTextBlob*, |
| 62 SkScalar x, SkScalar y, | 61 SkScalar x, SkScalar y, |
| 63 SkDrawFilter*, const SkIRect& clipBounds); | 62 SkDrawFilter*, const SkIRect& clipBounds); |
| 64 | 63 |
| 65 // drawPathsFromRange is thanks to GrStencilAndCoverTextContext | 64 // drawPathsFromRange is thanks to GrStencilAndCoverTextContext |
| 66 // TODO: remove once path batches can be created external to GrDrawTarget. | 65 // TODO: remove once path batches can be created external to GrDrawTarget. |
| 67 void drawPathsFromRange(const GrPipelineBuilder*, | 66 void drawPathsFromRange(const GrPipelineBuilder*, |
| 68 const SkMatrix& viewMatrix, | 67 const SkMatrix& viewMatrix, |
| 69 const SkMatrix& localMatrix, | 68 const SkMatrix& localMatrix, |
| 70 GrColor color, | 69 GrColor color, |
| 71 GrPathRange* range, | 70 GrPathRange* range, |
| 72 GrPathRangeDraw* draw, | 71 GrPathRangeDraw* draw, |
| 73 int /*GrPathRendering::FillType*/ fill); | 72 int /*GrPathRendering::FillType*/ fill); |
| 74 | 73 |
| 75 /** | 74 /** |
| 76 * Provides a perfomance hint that the render target's contents are allowed | 75 * Provides a perfomance hint that the render target's contents are allowed |
| 77 * to become undefined. | 76 * to become undefined. |
| 78 */ | 77 */ |
| 79 void discard(GrRenderTarget*); | 78 void discard(); |
| 80 | 79 |
| 81 /** | 80 /** |
| 82 * Clear the entire or rect of the render target, ignoring any clips. | 81 * Clear the entire or rect of the render target, ignoring any clips. |
| 83 * @param target The render target to clear. | |
| 84 * @param rect the rect to clear or the whole thing if rect is NULL. | 82 * @param rect the rect to clear or the whole thing if rect is NULL. |
| 85 * @param color the color to clear to. | 83 * @param color the color to clear to. |
| 86 * @param canIgnoreRect allows partial clears to be converted to whole | 84 * @param canIgnoreRect allows partial clears to be converted to whole |
| 87 * clears on platforms for which that is cheap | 85 * clears on platforms for which that is cheap |
| 88 */ | 86 */ |
| 89 void clear(GrRenderTarget*, const SkIRect* rect, GrColor color, bool canIgno
reRect); | 87 void clear(const SkIRect* rect, GrColor color, bool canIgnoreRect); |
| 90 | 88 |
| 91 /** | 89 /** |
| 92 * Draw everywhere (respecting the clip) with the paint. | 90 * Draw everywhere (respecting the clip) with the paint. |
| 93 */ | 91 */ |
| 94 void drawPaint(GrRenderTarget*, const GrClip&, const GrPaint&, const SkMatri
x& viewMatrix); | 92 void drawPaint(const GrClip&, const GrPaint&, const SkMatrix& viewMatrix); |
| 95 | 93 |
| 96 /** | 94 /** |
| 97 * Draw the rect using a paint. | 95 * Draw the rect using a paint. |
| 98 * @param paint describes how to color pixels. | 96 * @param paint describes how to color pixels. |
| 99 * @param viewMatrix transformation matrix | 97 * @param viewMatrix transformation matrix |
| 100 * @param strokeInfo the stroke information (width, join, cap), and. | 98 * @param strokeInfo the stroke information (width, join, cap), and. |
| 101 * the dash information (intervals, count, phase). | 99 * the dash information (intervals, count, phase). |
| 102 * If strokeInfo == NULL, then the rect is filled. | 100 * If strokeInfo == NULL, then the rect is filled. |
| 103 * Otherwise, if stroke width == 0, then the stroke | 101 * Otherwise, if stroke width == 0, then the stroke |
| 104 * is always a single pixel thick, else the rect is | 102 * is always a single pixel thick, else the rect is |
| 105 * mitered/beveled stroked based on stroke width. | 103 * mitered/beveled stroked based on stroke width. |
| 106 * The rects coords are used to access the paint (through texture matrix) | 104 * The rects coords are used to access the paint (through texture matrix) |
| 107 */ | 105 */ |
| 108 void drawRect(GrRenderTarget*, | 106 void drawRect(const GrClip&, |
| 109 const GrClip&, | |
| 110 const GrPaint& paint, | 107 const GrPaint& paint, |
| 111 const SkMatrix& viewMatrix, | 108 const SkMatrix& viewMatrix, |
| 112 const SkRect&, | 109 const SkRect&, |
| 113 const GrStrokeInfo* strokeInfo = NULL); | 110 const GrStrokeInfo* strokeInfo = NULL); |
| 114 | 111 |
| 115 /** | 112 /** |
| 116 * Maps a rectangle of shader coordinates to a rectangle and draws that rect
angle | 113 * Maps a rectangle of shader coordinates to a rectangle and draws that rect
angle |
| 117 * | 114 * |
| 118 * @param paint describes how to color pixels. | 115 * @param paint describes how to color pixels. |
| 119 * @param viewMatrix transformation matrix which applies to rectToDraw | 116 * @param viewMatrix transformation matrix which applies to rectToDraw |
| 120 * @param rectToDraw the rectangle to draw | 117 * @param rectToDraw the rectangle to draw |
| 121 * @param localRect the rectangle of shader coordinates applied to rectT
oDraw | 118 * @param localRect the rectangle of shader coordinates applied to rectT
oDraw |
| 122 */ | 119 */ |
| 123 void drawNonAARectToRect(GrRenderTarget*, | 120 void drawNonAARectToRect(const GrClip&, |
| 124 const GrClip&, | |
| 125 const GrPaint& paint, | 121 const GrPaint& paint, |
| 126 const SkMatrix& viewMatrix, | 122 const SkMatrix& viewMatrix, |
| 127 const SkRect& rectToDraw, | 123 const SkRect& rectToDraw, |
| 128 const SkRect& localRect); | 124 const SkRect& localRect); |
| 129 | 125 |
| 130 /** | 126 /** |
| 131 * Draws a non-AA rect with paint and a localMatrix | 127 * Draws a non-AA rect with paint and a localMatrix |
| 132 */ | 128 */ |
| 133 void drawNonAARectWithLocalMatrix(GrRenderTarget* rt, | 129 void drawNonAARectWithLocalMatrix(const GrClip& clip, |
| 134 const GrClip& clip, | |
| 135 const GrPaint& paint, | 130 const GrPaint& paint, |
| 136 const SkMatrix& viewMatrix, | 131 const SkMatrix& viewMatrix, |
| 137 const SkRect& rect, | 132 const SkRect& rect, |
| 138 const SkMatrix& localMatrix); | 133 const SkMatrix& localMatrix); |
| 139 | 134 |
| 140 /** | 135 /** |
| 141 * Draw a roundrect using a paint. | 136 * Draw a roundrect using a paint. |
| 142 * | 137 * |
| 143 * @param paint describes how to color pixels. | 138 * @param paint describes how to color pixels. |
| 144 * @param viewMatrix transformation matrix | 139 * @param viewMatrix transformation matrix |
| 145 * @param rrect the roundrect to draw | 140 * @param rrect the roundrect to draw |
| 146 * @param strokeInfo the stroke information (width, join, cap) and | 141 * @param strokeInfo the stroke information (width, join, cap) and |
| 147 * the dash information (intervals, count, phase). | 142 * the dash information (intervals, count, phase). |
| 148 */ | 143 */ |
| 149 void drawRRect(GrRenderTarget*, | 144 void drawRRect(const GrClip&, |
| 150 const GrClip&, | |
| 151 const GrPaint&, | 145 const GrPaint&, |
| 152 const SkMatrix& viewMatrix, | 146 const SkMatrix& viewMatrix, |
| 153 const SkRRect& rrect, | 147 const SkRRect& rrect, |
| 154 const GrStrokeInfo&); | 148 const GrStrokeInfo&); |
| 155 | 149 |
| 156 /** | 150 /** |
| 157 * Shortcut for drawing an SkPath consisting of nested rrects using a paint
. | 151 * Shortcut for drawing an SkPath consisting of nested rrects using a paint
. |
| 158 * Does not support stroking. The result is undefined if outer does not con
tain | 152 * Does not support stroking. The result is undefined if outer does not con
tain |
| 159 * inner. | 153 * inner. |
| 160 * | 154 * |
| 161 * @param paint describes how to color pixels. | 155 * @param paint describes how to color pixels. |
| 162 * @param viewMatrix transformation matrix | 156 * @param viewMatrix transformation matrix |
| 163 * @param outer the outer roundrect | 157 * @param outer the outer roundrect |
| 164 * @param inner the inner roundrect | 158 * @param inner the inner roundrect |
| 165 */ | 159 */ |
| 166 void drawDRRect(GrRenderTarget*, | 160 void drawDRRect(const GrClip&, |
| 167 const GrClip&, | |
| 168 const GrPaint&, | 161 const GrPaint&, |
| 169 const SkMatrix& viewMatrix, | 162 const SkMatrix& viewMatrix, |
| 170 const SkRRect& outer, | 163 const SkRRect& outer, |
| 171 const SkRRect& inner); | 164 const SkRRect& inner); |
| 172 | 165 |
| 173 | 166 |
| 174 /** | 167 /** |
| 175 * Draws a path. | 168 * Draws a path. |
| 176 * | 169 * |
| 177 * @param paint describes how to color pixels. | 170 * @param paint describes how to color pixels. |
| 178 * @param viewMatrix transformation matrix | 171 * @param viewMatrix transformation matrix |
| 179 * @param path the path to draw | 172 * @param path the path to draw |
| 180 * @param strokeInfo the stroke information (width, join, cap) and | 173 * @param strokeInfo the stroke information (width, join, cap) and |
| 181 * the dash information (intervals, count, phase). | 174 * the dash information (intervals, count, phase). |
| 182 */ | 175 */ |
| 183 void drawPath(GrRenderTarget*, | 176 void drawPath(const GrClip&, |
| 184 const GrClip&, | |
| 185 const GrPaint&, | 177 const GrPaint&, |
| 186 const SkMatrix& viewMatrix, | 178 const SkMatrix& viewMatrix, |
| 187 const SkPath&, | 179 const SkPath&, |
| 188 const GrStrokeInfo&); | 180 const GrStrokeInfo&); |
| 189 | 181 |
| 190 /** | 182 /** |
| 191 * Draws vertices with a paint. | 183 * Draws vertices with a paint. |
| 192 * | 184 * |
| 193 * @param paint describes how to color pixels. | 185 * @param paint describes how to color pixels. |
| 194 * @param viewMatrix transformation matrix | 186 * @param viewMatrix transformation matrix |
| 195 * @param primitiveType primitives type to draw. | 187 * @param primitiveType primitives type to draw. |
| 196 * @param vertexCount number of vertices. | 188 * @param vertexCount number of vertices. |
| 197 * @param positions array of vertex positions, required. | 189 * @param positions array of vertex positions, required. |
| 198 * @param texCoords optional array of texture coordinates used | 190 * @param texCoords optional array of texture coordinates used |
| 199 * to access the paint. | 191 * to access the paint. |
| 200 * @param colors optional array of per-vertex colors, supercedes | 192 * @param colors optional array of per-vertex colors, supercedes |
| 201 * the paint's color field. | 193 * the paint's color field. |
| 202 * @param indices optional array of indices. If NULL vertices | 194 * @param indices optional array of indices. If NULL vertices |
| 203 * are drawn non-indexed. | 195 * are drawn non-indexed. |
| 204 * @param indexCount if indices is non-null then this is the | 196 * @param indexCount if indices is non-null then this is the |
| 205 * number of indices. | 197 * number of indices. |
| 206 */ | 198 */ |
| 207 void drawVertices(GrRenderTarget*, | 199 void drawVertices(const GrClip&, |
| 208 const GrClip&, | |
| 209 const GrPaint& paint, | 200 const GrPaint& paint, |
| 210 const SkMatrix& viewMatrix, | 201 const SkMatrix& viewMatrix, |
| 211 GrPrimitiveType primitiveType, | 202 GrPrimitiveType primitiveType, |
| 212 int vertexCount, | 203 int vertexCount, |
| 213 const SkPoint positions[], | 204 const SkPoint positions[], |
| 214 const SkPoint texs[], | 205 const SkPoint texs[], |
| 215 const GrColor colors[], | 206 const GrColor colors[], |
| 216 const uint16_t indices[], | 207 const uint16_t indices[], |
| 217 int indexCount); | 208 int indexCount); |
| 218 | 209 |
| 219 /** | 210 /** |
| 220 * Draws textured sprites from an atlas with a paint. | 211 * Draws textured sprites from an atlas with a paint. |
| 221 * | 212 * |
| 222 * @param paint describes how to color pixels. | 213 * @param paint describes how to color pixels. |
| 223 * @param viewMatrix transformation matrix | 214 * @param viewMatrix transformation matrix |
| 224 * @param spriteCount number of sprites. | 215 * @param spriteCount number of sprites. |
| 225 * @param xform array of compressed transformation data, require
d. | 216 * @param xform array of compressed transformation data, require
d. |
| 226 * @param texRect array of texture rectangles used to access the p
aint. | 217 * @param texRect array of texture rectangles used to access the p
aint. |
| 227 * @param colors optional array of per-sprite colors, supercedes | 218 * @param colors optional array of per-sprite colors, supercedes |
| 228 * the paint's color field. | 219 * the paint's color field. |
| 229 */ | 220 */ |
| 230 void drawAtlas(GrRenderTarget*, | 221 void drawAtlas(const GrClip&, |
| 231 const GrClip&, | |
| 232 const GrPaint& paint, | 222 const GrPaint& paint, |
| 233 const SkMatrix& viewMatrix, | 223 const SkMatrix& viewMatrix, |
| 234 int spriteCount, | 224 int spriteCount, |
| 235 const SkRSXform xform[], | 225 const SkRSXform xform[], |
| 236 const SkRect texRect[], | 226 const SkRect texRect[], |
| 237 const SkColor colors[]); | 227 const SkColor colors[]); |
| 238 | 228 |
| 239 /** | 229 /** |
| 240 * Draws an oval. | 230 * Draws an oval. |
| 241 * | 231 * |
| 242 * @param paint describes how to color pixels. | 232 * @param paint describes how to color pixels. |
| 243 * @param viewMatrix transformation matrix | 233 * @param viewMatrix transformation matrix |
| 244 * @param oval the bounding rect of the oval. | 234 * @param oval the bounding rect of the oval. |
| 245 * @param strokeInfo the stroke information (width, join, cap) and | 235 * @param strokeInfo the stroke information (width, join, cap) and |
| 246 * the dash information (intervals, count, phase). | 236 * the dash information (intervals, count, phase). |
| 247 */ | 237 */ |
| 248 void drawOval(GrRenderTarget*, | 238 void drawOval(const GrClip&, |
| 249 const GrClip&, | |
| 250 const GrPaint& paint, | 239 const GrPaint& paint, |
| 251 const SkMatrix& viewMatrix, | 240 const SkMatrix& viewMatrix, |
| 252 const SkRect& oval, | 241 const SkRect& oval, |
| 253 const GrStrokeInfo& strokeInfo); | 242 const GrStrokeInfo& strokeInfo); |
| 254 | 243 |
| 255 | 244 |
| 256 /** | 245 /** |
| 257 * Draws a batch | 246 * Draws a batch |
| 258 * | 247 * |
| 259 * @param paint describes how to color pixels. | 248 * @param paint describes how to color pixels. |
| 260 * @param batch the batch to draw | 249 * @param batch the batch to draw |
| 261 */ | 250 */ |
| 262 void drawBatch(GrRenderTarget*, const GrClip&, const GrPaint&, GrDrawBatch*)
; | 251 void drawBatch(const GrClip&, const GrPaint&, GrDrawBatch*); |
| 263 | 252 |
| 264 private: | 253 private: |
| 265 friend class GrAtlasTextContext; // for access to drawBatch | 254 friend class GrAtlasTextContext; // for access to drawBatch |
| 266 friend class GrContext; // for ctor | 255 friend class GrContext; // for ctor |
| 267 | 256 |
| 268 GrDrawContext(GrContext*, GrDrawTarget*, const SkSurfaceProps* surfaceProps)
; | 257 SkDEBUGCODE(void validate() const;) |
| 269 | 258 |
| 270 // Checks if the context has been abandoned and if the rendertarget is owned
by this context | 259 GrDrawContext(GrContext*, GrRenderTarget*, GrDrawTarget*, const SkSurfacePro
ps* surfaceProps); |
| 271 bool prepareToDraw(GrRenderTarget* rt); | |
| 272 | 260 |
| 273 void internalDrawPath(GrDrawTarget*, | 261 void internalDrawPath(GrDrawTarget*, |
| 274 GrPipelineBuilder*, | 262 GrPipelineBuilder*, |
| 275 const SkMatrix& viewMatrix, | 263 const SkMatrix& viewMatrix, |
| 276 GrColor, | 264 GrColor, |
| 277 bool useAA, | 265 bool useAA, |
| 278 const SkPath&, | 266 const SkPath&, |
| 279 const GrStrokeInfo&); | 267 const GrStrokeInfo&); |
| 280 | 268 |
| 281 // This entry point allows the GrTextContext-derived classes to add their ba
tches to | 269 // This entry point allows the GrTextContext-derived classes to add their ba
tches to |
| 282 // the drawTarget. | 270 // the drawTarget. |
| 283 void drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* batch); | 271 void drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* batch); |
| 284 | 272 |
| 285 GrContext* fContext; // owning context -> no ref | 273 GrContext* fContext; // owning context -> no ref |
| 274 GrRenderTarget* fRenderTarget; |
| 286 GrDrawTarget* fDrawTarget; | 275 GrDrawTarget* fDrawTarget; |
| 287 GrTextContext* fTextContext; // lazily gotten from GrContext::DrawingMg
r | 276 GrTextContext* fTextContext; // lazily gotten from GrContext::DrawingMg
r |
| 288 | 277 |
| 289 SkSurfaceProps fSurfaceProps; | 278 SkSurfaceProps fSurfaceProps; |
| 290 }; | 279 }; |
| 291 | 280 |
| 292 #endif | 281 #endif |
| OLD | NEW |