1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkBigPicture_DEFINED
- #define SkBigPicture_DEFINED
- #include "include/core/SkPicture.h"
- #include "include/core/SkRect.h"
- #include "include/private/SkNoncopyable.h"
- #include "include/private/SkOnce.h"
- #include "include/private/SkTemplates.h"
- class SkBBoxHierarchy;
- class SkMatrix;
- class SkRecord;
- // An implementation of SkPicture supporting an arbitrary number of drawing commands.
- class SkBigPicture final : public SkPicture {
- public:
- // An array of refcounted const SkPicture pointers.
- class SnapshotArray : ::SkNoncopyable {
- public:
- SnapshotArray(const SkPicture* pics[], int count) : fPics(pics), fCount(count) {}
- ~SnapshotArray() { for (int i = 0; i < fCount; i++) { fPics[i]->unref(); } }
- const SkPicture* const* begin() const { return fPics; }
- int count() const { return fCount; }
- private:
- SkAutoTMalloc<const SkPicture*> fPics;
- int fCount;
- };
- SkBigPicture(const SkRect& cull,
- SkRecord*, // We take ownership of the caller's ref.
- SnapshotArray*, // We take exclusive ownership.
- SkBBoxHierarchy*, // We take ownership of the caller's ref.
- size_t approxBytesUsedBySubPictures);
- // SkPicture overrides
- void playback(SkCanvas*, AbortCallback*) const override;
- SkRect cullRect() const override;
- int approximateOpCount() const override;
- size_t approximateBytesUsed() const override;
- const SkBigPicture* asSkBigPicture() const override { return this; }
- // Used by GrLayerHoister
- void partialPlayback(SkCanvas*,
- int start,
- int stop,
- const SkMatrix& initialCTM) const;
- // Used by GrRecordReplaceDraw
- const SkBBoxHierarchy* bbh() const { return fBBH.get(); }
- const SkRecord* record() const { return fRecord.get(); }
- private:
- int drawableCount() const;
- SkPicture const* const* drawablePicts() const;
- const SkRect fCullRect;
- const size_t fApproxBytesUsedBySubPictures;
- sk_sp<const SkRecord> fRecord;
- std::unique_ptr<const SnapshotArray> fDrawablePicts;
- sk_sp<const SkBBoxHierarchy> fBBH;
- };
- #endif//SkBigPicture_DEFINED
|