| Index: src/core/SkPictureRecord.cpp
|
| diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp
|
| index 32033b52db4cc740f45cfd6a7fbaba8c1330ef22..0fbf98089adec1556d36911dcdfd3bf2fab4497b 100644
|
| --- a/src/core/SkPictureRecord.cpp
|
| +++ b/src/core/SkPictureRecord.cpp
|
| @@ -11,6 +11,7 @@
|
| #include "SkPatchUtils.h"
|
| #include "SkPixelRef.h"
|
| #include "SkRRect.h"
|
| +#include "SkRSXform.h"
|
| #include "SkTextBlob.h"
|
| #include "SkTSearch.h"
|
|
|
| @@ -99,6 +100,7 @@ static inline size_t get_paint_offset(DrawType op, size_t opSize) {
|
| 1, // DRAW_TEXT_BLOB- right after op code
|
| 1, // DRAW_IMAGE - right after op code
|
| 1, // DRAW_IMAGE_RECT - right after op code
|
| + 1, // DRAW_ATLAS - right after op code
|
| };
|
|
|
| SK_COMPILE_ASSERT(sizeof(gPaintOffsets) == LAST_DRAWTYPE_ENUM + 1,
|
| @@ -834,6 +836,42 @@ void SkPictureRecord::onDrawPatch(const SkPoint cubics[12], const SkColor colors
|
| this->validate(initialOffset, size);
|
| }
|
|
|
| +void SkPictureRecord::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[],
|
| + const SkColor colors[], int count, SkXfermode::Mode mode,
|
| + const SkRect* cull, const SkPaint* paint) {
|
| + // [op + paint-index + atlas-index + flags + count] + [xform] + [tex] + [*colors + mode] + cull
|
| + size_t size = 5 * kUInt32Size + count * sizeof(SkRSXform) + count * sizeof(SkRect);
|
| + uint32_t flags = 0;
|
| + if (colors) {
|
| + flags |= DRAW_ATLAS_HAS_COLORS;
|
| + size += count * sizeof(SkColor);
|
| + size += sizeof(uint32_t); // xfermode::mode
|
| + }
|
| + if (cull) {
|
| + flags |= DRAW_ATLAS_HAS_CULL;
|
| + size += sizeof(SkRect);
|
| + }
|
| +
|
| + size_t initialOffset = this->addDraw(DRAW_ATLAS, &size);
|
| + SkASSERT(initialOffset+get_paint_offset(DRAW_ATLAS, size) == fWriter.bytesWritten());
|
| + this->addPaintPtr(paint);
|
| + this->addImage(atlas);
|
| + this->addInt(flags);
|
| + this->addInt(count);
|
| + fWriter.write(xform, count * sizeof(SkRSXform));
|
| + fWriter.write(tex, count * sizeof(SkRect));
|
| +
|
| + // write optional parameters
|
| + if (colors) {
|
| + fWriter.write(colors, count * sizeof(SkColor));
|
| + this->addInt(mode);
|
| + }
|
| + if (cull) {
|
| + fWriter.write(cull, sizeof(SkRect));
|
| + }
|
| + this->validate(initialOffset, size);
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| SkSurface* SkPictureRecord::onNewSurface(const SkImageInfo& info, const SkSurfaceProps&) {
|
|
|