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

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

Issue 467683003: Add missing DRAW_PICTURE_MATRIX_PAINT paint offset. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: New order: paint->matrix->picture Created 6 years, 4 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/SkPicturePlayback.cpp ('k') | no next file » | 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 2011 Google Inc. 2 * Copyright 2011 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 "SkPictureRecord.h" 8 #include "SkPictureRecord.h"
9 #include "SkBBoxHierarchy.h" 9 #include "SkBBoxHierarchy.h"
10 #include "SkDevice.h" 10 #include "SkDevice.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 fPictureRefs.unrefAll(); 61 fPictureRefs.unrefAll();
62 } 62 }
63 63
64 /////////////////////////////////////////////////////////////////////////////// 64 ///////////////////////////////////////////////////////////////////////////////
65 65
66 // Return the offset of the paint inside a given op's byte stream. A zero 66 // Return the offset of the paint inside a given op's byte stream. A zero
67 // return value means there is no paint (and you really shouldn't be calling 67 // return value means there is no paint (and you really shouldn't be calling
68 // this method) 68 // this method)
69 static inline size_t getPaintOffset(DrawType op, size_t opSize) { 69 static inline size_t getPaintOffset(DrawType op, size_t opSize) {
70 // These offsets are where the paint would be if the op size doesn't overflo w 70 // These offsets are where the paint would be if the op size doesn't overflo w
71 static const uint8_t gPaintOffsets[LAST_DRAWTYPE_ENUM + 1] = { 71 static const uint8_t gPaintOffsets[] = {
72 0, // UNUSED - no paint 72 0, // UNUSED - no paint
73 0, // CLIP_PATH - no paint 73 0, // CLIP_PATH - no paint
74 0, // CLIP_REGION - no paint 74 0, // CLIP_REGION - no paint
75 0, // CLIP_RECT - no paint 75 0, // CLIP_RECT - no paint
76 0, // CLIP_RRECT - no paint 76 0, // CLIP_RRECT - no paint
77 0, // CONCAT - no paint 77 0, // CONCAT - no paint
78 1, // DRAW_BITMAP - right after op code 78 1, // DRAW_BITMAP - right after op code
79 1, // DRAW_BITMAP_MATRIX - right after op code 79 1, // DRAW_BITMAP_MATRIX - right after op code
80 1, // DRAW_BITMAP_NINE - right after op code 80 1, // DRAW_BITMAP_NINE - right after op code
81 1, // DRAW_BITMAP_RECT_TO_RECT - right after op code 81 1, // DRAW_BITMAP_RECT_TO_RECT - right after op code
(...skipping 24 matching lines...) Expand all
106 0, // SKEW - no paint 106 0, // SKEW - no paint
107 0, // TRANSLATE - no paint 107 0, // TRANSLATE - no paint
108 0, // NOOP - no paint 108 0, // NOOP - no paint
109 0, // BEGIN_GROUP - no paint 109 0, // BEGIN_GROUP - no paint
110 0, // COMMENT - no paint 110 0, // COMMENT - no paint
111 0, // END_GROUP - no paint 111 0, // END_GROUP - no paint
112 1, // DRAWDRRECT - right after op code 112 1, // DRAWDRRECT - right after op code
113 0, // PUSH_CULL - no paint 113 0, // PUSH_CULL - no paint
114 0, // POP_CULL - no paint 114 0, // POP_CULL - no paint
115 1, // DRAW_PATCH - right after op code 115 1, // DRAW_PATCH - right after op code
116 1, // DRAW_PICTURE_MATRIX_PAINT - right after op code
116 }; 117 };
117 118
118 SK_COMPILE_ASSERT(sizeof(gPaintOffsets) == LAST_DRAWTYPE_ENUM + 1, 119 SK_COMPILE_ASSERT(sizeof(gPaintOffsets) == LAST_DRAWTYPE_ENUM + 1,
119 need_to_be_in_sync); 120 need_to_be_in_sync);
120 SkASSERT((unsigned)op <= (unsigned)LAST_DRAWTYPE_ENUM); 121 SkASSERT((unsigned)op <= (unsigned)LAST_DRAWTYPE_ENUM);
121 122
122 int overflow = 0; 123 int overflow = 0;
123 if (0 != (opSize & ~MASK_24) || opSize == MASK_24) { 124 if (0 != (opSize & ~MASK_24) || opSize == MASK_24) {
124 // This op's size overflows so an extra uint32_t will be written 125 // This op's size overflows so an extra uint32_t will be written
125 // after the op code 126 // after the op code
(...skipping 1081 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 size_t size = 2 * kUInt32Size; 1208 size_t size = 2 * kUInt32Size;
1208 size_t initialOffset; 1209 size_t initialOffset;
1209 1210
1210 if (NULL == matrix && NULL == paint) { 1211 if (NULL == matrix && NULL == paint) {
1211 initialOffset = this->addDraw(DRAW_PICTURE, &size); 1212 initialOffset = this->addDraw(DRAW_PICTURE, &size);
1212 this->addPicture(picture); 1213 this->addPicture(picture);
1213 } else { 1214 } else {
1214 const SkMatrix& m = matrix ? *matrix : SkMatrix::I(); 1215 const SkMatrix& m = matrix ? *matrix : SkMatrix::I();
1215 size += m.writeToMemory(NULL) + kUInt32Size; // matrix + paint 1216 size += m.writeToMemory(NULL) + kUInt32Size; // matrix + paint
1216 initialOffset = this->addDraw(DRAW_PICTURE_MATRIX_PAINT, &size); 1217 initialOffset = this->addDraw(DRAW_PICTURE_MATRIX_PAINT, &size);
1218 SkASSERT(initialOffset + getPaintOffset(DRAW_PICTURE_MATRIX_PAINT, size)
1219 == fWriter.bytesWritten());
1220 this->addPaintPtr(paint);
1221 this->addMatrix(m);
1217 this->addPicture(picture); 1222 this->addPicture(picture);
1218 this->addMatrix(m);
1219 this->addPaintPtr(paint);
1220 } 1223 }
1221 this->validate(initialOffset, size); 1224 this->validate(initialOffset, size);
1222 } 1225 }
1223 1226
1224 void SkPictureRecord::drawVertices(VertexMode vmode, int vertexCount, 1227 void SkPictureRecord::drawVertices(VertexMode vmode, int vertexCount,
1225 const SkPoint vertices[], const SkPoint texs[], 1228 const SkPoint vertices[], const SkPoint texs[],
1226 const SkColor colors[], SkXfermode* xfer, 1229 const SkColor colors[], SkXfermode* xfer,
1227 const uint16_t indices[], int indexCount, 1230 const uint16_t indices[], int indexCount,
1228 const SkPaint& paint) { 1231 const SkPaint& paint) {
1229 uint32_t flags = 0; 1232 uint32_t flags = 0;
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 } 1513 }
1511 1514
1512 void SkPictureRecord::addText(const void* text, size_t byteLength) { 1515 void SkPictureRecord::addText(const void* text, size_t byteLength) {
1513 fContentInfo.onDrawText(); 1516 fContentInfo.onDrawText();
1514 addInt(SkToInt(byteLength)); 1517 addInt(SkToInt(byteLength));
1515 fWriter.writePad(text, byteLength); 1518 fWriter.writePad(text, byteLength);
1516 } 1519 }
1517 1520
1518 /////////////////////////////////////////////////////////////////////////////// 1521 ///////////////////////////////////////////////////////////////////////////////
1519 1522
OLDNEW
« no previous file with comments | « src/core/SkPicturePlayback.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698