b0cee9bf9a
SkCanvas keeps its non-exotic drawBitmap calls for now but they immediately wrap the bitmap in SkImage::MakeFromBitmap. This will add a copy for mutable bitmaps, but this can be worked around by using images directly (preferred), or marking the bitmap as immutable. In practice, mutable bitmaps do not seem to be widely used so this is deemed acceptable for now. Several GMs are updated to mark the bitmaps as immutable in order to avoid pixel churn in how CPU vs. GPU mipmaps are generated. As we move towards explicit mipmap generation, this distinction will become less critical, so I'm just avoiding it for now. See skbug.com/9337 for mipmap proposal. The image diffs encountered in this CL directly related to generating mipmaps for bitmaps already cached on the GPU vs. not on the GPU yet. It was decided to copy if mutable vs. never copying the bitmap because it preserves the image guarantees the devices and canvas' rely on, and imposing the need to inspect an image for mutability is undesired. Bug: skia:10037, skia:9337 Change-Id: If152e6cae1e155ccf6bd2cd755895f3c7a0135a5 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/276004 Commit-Queue: Michael Ludwig <michaelludwig@google.com> Reviewed-by: Mike Klein <mtklein@google.com>
76 lines
2.7 KiB
C++
76 lines
2.7 KiB
C++
/*
|
|
* Copyright 2013 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkLuaCanvas_DEFINED
|
|
#define SkLuaCanvas_DEFINED
|
|
|
|
#include "include/core/SkCanvas.h"
|
|
#include "include/core/SkString.h"
|
|
#include "include/core/SkVertices.h"
|
|
|
|
struct lua_State;
|
|
|
|
class SkLuaCanvas : public SkCanvas {
|
|
public:
|
|
void pushThis();
|
|
|
|
SkLuaCanvas(int width, int height, lua_State*, const char function[]);
|
|
~SkLuaCanvas() override;
|
|
|
|
protected:
|
|
void willSave() override;
|
|
SaveLayerStrategy getSaveLayerStrategy(const SaveLayerRec&) override;
|
|
bool onDoSaveBehind(const SkRect*) override;
|
|
void willRestore() override;
|
|
|
|
void didConcat44(const SkScalar[16]) override;
|
|
void didConcat(const SkMatrix&) override;
|
|
void didSetMatrix(const SkMatrix&) override;
|
|
void didScale(SkScalar, SkScalar) override;
|
|
void didTranslate(SkScalar, SkScalar) override;
|
|
|
|
void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
|
|
virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
|
|
const SkPaint& paint) override;
|
|
|
|
void onDrawPaint(const SkPaint&) override;
|
|
void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
|
|
void onDrawRect(const SkRect&, const SkPaint&) override;
|
|
void onDrawOval(const SkRect&, const SkPaint&) override;
|
|
void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override;
|
|
void onDrawRRect(const SkRRect&, const SkPaint&) override;
|
|
void onDrawPath(const SkPath&, const SkPaint&) override;
|
|
|
|
void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
|
|
void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
|
|
const SkPaint*, SrcRectConstraint) override;
|
|
#ifdef SK_SUPPORT_LEGACY_DRAWVERTS_VIRTUAL
|
|
void onDrawVerticesObject(const SkVertices*, const SkVertices::Bone bones[], int boneCount,
|
|
SkBlendMode, const SkPaint&) override;
|
|
#else
|
|
void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
|
|
#endif
|
|
void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
|
|
void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override;
|
|
void onClipPath(const SkPath&, SkClipOp, ClipEdgeStyle) override;
|
|
void onClipShader(sk_sp<SkShader>, SkClipOp) override;
|
|
void onClipRegion(const SkRegion&, SkClipOp) override;
|
|
|
|
void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
|
|
void onDrawDrawable(SkDrawable*, const SkMatrix*) override;
|
|
|
|
private:
|
|
lua_State* fL;
|
|
SkString fFunc;
|
|
|
|
void sendverb(const char verb[]);
|
|
|
|
typedef SkCanvas INHERITED;
|
|
};
|
|
|
|
#endif
|