| Index: src/core/SkSpecialSurface.h
|
| diff --git a/src/core/SkSpecialSurface.h b/src/core/SkSpecialSurface.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2751c4a794deef916f1c9fa6dd1c5acf4b5bd6c4
|
| --- /dev/null
|
| +++ b/src/core/SkSpecialSurface.h
|
| @@ -0,0 +1,93 @@
|
| +/*
|
| + * Copyright 2016 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file
|
| + */
|
| +
|
| +#ifndef SkSpecialSurface_DEFINED
|
| +#define SkSpecialSurface_DEFINED
|
| +
|
| +#include "SkRefCnt.h"
|
| +#include "SkSurfaceProps.h"
|
| +
|
| +class GrContext;
|
| +struct GrSurfaceDesc;
|
| +class SkCanvas;
|
| +struct SkImageInfo;
|
| +class SkSpecialImage;
|
| +
|
| +/**
|
| + * SkSpecialSurface is a restricted form of SkSurface solely for internal use. It differs
|
| + * from SkSurface in that:
|
| + * - it can be backed by GrTextures larger than [ fWidth, fHeight ]
|
| + * - it can't be used for tiling
|
| + * - it becomes inactive once a snapshot of it is taken (i.e., no copy-on-write)
|
| + * - it has no generation ID
|
| + */
|
| +class SkSpecialSurface : public SkRefCnt {
|
| +public:
|
| + const SkSurfaceProps& props() const { return fProps; }
|
| +
|
| + int width() const { return fSubset.width(); }
|
| + int height() const { return fSubset.height(); }
|
| +
|
| + /**
|
| + * Return a canvas that will draw into this surface. This will always
|
| + * return the same canvas for a given surface, and is managed/owned by the
|
| + * surface.
|
| + *
|
| + * The canvas will be invalid after 'newImageSnapshot' is called.
|
| + */
|
| + SkCanvas* getCanvas();
|
| +
|
| + /**
|
| + * Returns an image of the current state of the surface pixels up to this
|
| + * point. The canvas returned by 'getCanvas' becomes invalidated by this
|
| + * call and no more drawing to this surface is allowed.
|
| + */
|
| + SkSpecialImage* newImageSnapshot();
|
| +
|
| + /**
|
| + * Use an existing (renderTarget-capable) GrTexture as the backing store.
|
| + */
|
| + static SkSpecialSurface* NewFromTexture(const SkIRect& subset, GrTexture*,
|
| + const SkSurfaceProps* = nullptr);
|
| +
|
| + /**
|
| + * Allocate a new GPU-backed SkSpecialSurface. If the requested surface cannot
|
| + * be created, nullptr will be returned.
|
| + */
|
| + static SkSpecialSurface* NewRenderTarget(GrContext*, const GrSurfaceDesc&,
|
| + const SkSurfaceProps* = nullptr);
|
| +
|
| + /**
|
| + * Use and existing SkBitmap as the backing store.
|
| + */
|
| + static SkSpecialSurface* NewFromBitmap(const SkIRect& subset, SkBitmap& bm,
|
| + const SkSurfaceProps* = nullptr);
|
| +
|
| + /**
|
| + * Return a new CPU-backed surface, with the memory for the pixels automatically
|
| + * allocated.
|
| + *
|
| + * If the requested surface cannot be created, or the request is not a
|
| + * supported configuration, nullptr will be returned.
|
| + */
|
| + static SkSpecialSurface* NewRaster(const SkImageInfo&, const SkSurfaceProps* = nullptr);
|
| +
|
| +protected:
|
| + SkSpecialSurface(const SkIRect& subset, const SkSurfaceProps*);
|
| +
|
| + // For testing only
|
| + friend class TestingSpecialSurfaceAccess;
|
| + const SkIRect& subset() const { return fSubset; }
|
| +
|
| +private:
|
| + const SkSurfaceProps fProps;
|
| + const SkIRect fSubset;
|
| +
|
| + typedef SkRefCnt INHERITED;
|
| +};
|
| +
|
| +#endif
|
|
|