Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: src/core/SkPicturePlayback.cpp

Issue 1181913003: add SkCanvas::drawAtlas (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix warnings Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkPictureFlat.h ('k') | src/core/SkPictureRecord.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 #include "SkCanvas.h" 8 #include "SkCanvas.h"
9 #include "SkPatchUtils.h" 9 #include "SkPatchUtils.h"
10 #include "SkPictureData.h" 10 #include "SkPictureData.h"
11 #include "SkPicturePlayback.h" 11 #include "SkPicturePlayback.h"
12 #include "SkPictureRecord.h" 12 #include "SkPictureRecord.h"
13 #include "SkReader32.h" 13 #include "SkReader32.h"
14 #include "SkRSXform.h"
14 #include "SkTextBlob.h" 15 #include "SkTextBlob.h"
15 #include "SkTDArray.h" 16 #include "SkTDArray.h"
16 #include "SkTypes.h" 17 #include "SkTypes.h"
17 18
18 /* 19 /*
19 * Read the next op code and chunk size from 'reader'. The returned size 20 * Read the next op code and chunk size from 'reader'. The returned size
20 * is the entire size of the chunk (including the opcode). Thus, the 21 * is the entire size of the chunk (including the opcode). Thus, the
21 * offset just prior to calling ReadOpAndSize + 'size' is the offset 22 * offset just prior to calling ReadOpAndSize + 'size' is the offset
22 * to the next chunk's op code. This also means that the size of a chunk 23 * to the next chunk's op code. This also means that the size of a chunk
23 * with no arguments (just an opcode) will be 4. 24 * with no arguments (just an opcode) will be 4.
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 150 }
150 } break; 151 } break;
151 case PUSH_CULL: break; // Deprecated, safe to ignore both push and pop. 152 case PUSH_CULL: break; // Deprecated, safe to ignore both push and pop.
152 case POP_CULL: break; 153 case POP_CULL: break;
153 case CONCAT: { 154 case CONCAT: {
154 SkMatrix matrix; 155 SkMatrix matrix;
155 reader->readMatrix(&matrix); 156 reader->readMatrix(&matrix);
156 canvas->concat(matrix); 157 canvas->concat(matrix);
157 break; 158 break;
158 } 159 }
160 case DRAW_ATLAS: {
161 const SkPaint* paint = fPictureData->getPaint(reader);
162 const SkImage* atlas = fPictureData->getImage(reader);
163 const uint32_t flags = reader->readU32();
164 const int count = reader->readU32();
165 const SkRSXform* xform = (const SkRSXform*)reader->skip(count * size of(SkRSXform));
166 const SkRect* tex = (const SkRect*)reader->skip(count * sizeof(SkRec t));
167 const SkColor* colors = NULL;
168 SkXfermode::Mode mode = SkXfermode::kDst_Mode;
169 if (flags & DRAW_ATLAS_HAS_COLORS) {
170 colors = (const SkColor*)reader->skip(count * sizeof(SkColor));
171 mode = (SkXfermode::Mode)reader->readU32();
172 }
173 const SkRect* cull = NULL;
174 if (flags & DRAW_ATLAS_HAS_CULL) {
175 cull = (const SkRect*)reader->skip(sizeof(SkRect));
176 }
177 canvas->drawAtlas(atlas, xform, tex, colors, count, mode, cull, pain t);
178 } break;
159 case DRAW_BITMAP: { 179 case DRAW_BITMAP: {
160 const SkPaint* paint = fPictureData->getPaint(reader); 180 const SkPaint* paint = fPictureData->getPaint(reader);
161 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) ); 181 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) );
162 const SkPoint& loc = reader->skipT<SkPoint>(); 182 const SkPoint& loc = reader->skipT<SkPoint>();
163 canvas->drawBitmap(bitmap, loc.fX, loc.fY, paint); 183 canvas->drawBitmap(bitmap, loc.fX, loc.fY, paint);
164 } break; 184 } break;
165 case DRAW_BITMAP_RECT_TO_RECT: { 185 case DRAW_BITMAP_RECT_TO_RECT: {
166 const SkPaint* paint = fPictureData->getPaint(reader); 186 const SkPaint* paint = fPictureData->getPaint(reader);
167 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) ); 187 const SkBitmap bitmap = shallow_copy(fPictureData->getBitmap(reader) );
168 const SkRect* src = get_rect_ptr(reader); // may be null 188 const SkRect* src = get_rect_ptr(reader); // may be null
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 case TRANSLATE: { 466 case TRANSLATE: {
447 SkScalar dx = reader->readScalar(); 467 SkScalar dx = reader->readScalar();
448 SkScalar dy = reader->readScalar(); 468 SkScalar dy = reader->readScalar();
449 canvas->translate(dx, dy); 469 canvas->translate(dx, dy);
450 } break; 470 } break;
451 default: 471 default:
452 SkASSERTF(false, "Unknown draw type: %d", op); 472 SkASSERTF(false, "Unknown draw type: %d", op);
453 } 473 }
454 } 474 }
455 475
OLDNEW
« no previous file with comments | « src/core/SkPictureFlat.h ('k') | src/core/SkPictureRecord.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698