| Index: src/gpu/GrRecordReplaceDraw.h
|
| diff --git a/src/gpu/GrRecordReplaceDraw.h b/src/gpu/GrRecordReplaceDraw.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f59e44883e16231f9745980019d08a1c92f20ad5
|
| --- /dev/null
|
| +++ b/src/gpu/GrRecordReplaceDraw.h
|
| @@ -0,0 +1,69 @@
|
| +/*
|
| + * Copyright 2014 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef GrRecordReplaceDraw_DEFINED
|
| +#define GrRecordReplaceDraw_DEFINED
|
| +
|
| +#include "SkDrawPictureCallback.h"
|
| +#include "SkRect.h"
|
| +#include "SkTDArray.h"
|
| +
|
| +class SkBBoxHierarchy;
|
| +class SkBitmap;
|
| +class SkCanvas;
|
| +class SkImage;
|
| +class SkPaint;
|
| +class SkRecord;
|
| +
|
| +// GrReplacements collects op ranges that can be replaced with
|
| +// a single drawBitmap call (using a precomputed bitmap).
|
| +class GrReplacements {
|
| +public:
|
| + // All the operations between fStart and fStop (inclusive) will be replaced with
|
| + // a single drawBitmap call using fPos, fBM and fPaint.
|
| + struct ReplacementInfo {
|
| + unsigned fStart;
|
| + unsigned fStop;
|
| + SkIPoint fPos;
|
| + SkImage* fImage; // Owns a ref
|
| + const SkPaint* fPaint; // Note: this object doesn't own the paint
|
| +
|
| + SkIRect fSrcRect;
|
| + };
|
| +
|
| + ~GrReplacements() { this->freeAll(); }
|
| +
|
| + // Add a new replacement range. The replacement ranges should be
|
| + // sorted in increasing order and non-overlapping (esp. no nested
|
| + // saveLayers).
|
| + ReplacementInfo* push();
|
| +
|
| + // look up a replacement range by its start offset.
|
| + // lastLookedUp is an in/out parameter that is used to speed up the search.
|
| + // It should be initialized to 0 on the first call and then passed back in
|
| + // unmodified on subsequent calls.
|
| + const ReplacementInfo* lookupByStart(size_t start, int* lastLookedUp) const;
|
| +
|
| +private:
|
| + SkTDArray<ReplacementInfo> fReplacements;
|
| +
|
| + void freeAll();
|
| +
|
| +#ifdef SK_DEBUG
|
| + void validate() const;
|
| +#endif
|
| +};
|
| +
|
| +// Draw an SkRecord into an SkCanvas replacing saveLayer/restore blocks with
|
| +// drawBitmap calls. A convenience wrapper around SkRecords::Draw.
|
| +void GrRecordReplaceDraw(const SkRecord&,
|
| + SkCanvas*,
|
| + const SkBBoxHierarchy*,
|
| + const GrReplacements*,
|
| + SkDrawPictureCallback*);
|
| +
|
| +#endif // GrRecordReplaceDraw_DEFINED
|
|
|