Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(524)

Unified Diff: include/core/SkCanvas.h

Issue 197433002: support direct writing to top layer (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/core/SkBitmapDevice.h ('k') | include/core/SkDevice.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/core/SkCanvas.h
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 773df89d789843ee4ef5b042403c57136afb94e6..5ac137d4f0f95af8265c9e2c5e04106fc1b82bfe 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -25,6 +25,7 @@
//#define SK_SUPPORT_LEGACY_WRITEPIXELSCONFIG
//#define SK_SUPPORT_LEGACY_GETCLIPTYPE
//#define SK_SUPPORT_LEGACY_GETTOTALCLIP
+//#define SK_SUPPORT_LEGACY_GETTOPDEVICE
class SkBounder;
class SkBaseDevice;
@@ -36,6 +37,7 @@ class SkRRect;
class SkSurface;
class SkSurface_Base;
class GrContext;
+class GrRenderTarget;
/** \class SkCanvas
@@ -159,7 +161,11 @@ public:
* is drawn to, but is optional here, as there is a small perf hit
* sometimes.
*/
+#ifndef SK_SUPPORT_LEGACY_GETTOPDEVICE
+private:
+#endif
SkBaseDevice* getTopDevice(bool updateMatrixClip = false) const;
+public:
/**
* Create a new surface matching the specified info, one that attempts to
@@ -176,8 +182,22 @@ public:
///////////////////////////////////////////////////////////////////////////
/**
- * If the canvas has pixels (and is not recording to a picture or other
- * non-raster target) and has direct access to its pixels (i.e. they are in
+ * If the canvas has writable pixels in its top layer (and is not recording to a picture
+ * or other non-raster target) and has direct access to its pixels (i.e. they are in
+ * local RAM) return the address of those pixels, and if not null,
+ * return the ImageInfo and rowBytes. The returned address is only valid
+ * while the canvas object is in scope and unchanged. Any API calls made on
+ * canvas (or its parent surface if any) will invalidate the
+ * returned address (and associated information).
+ *
+ * On failure, returns NULL and the info and rowBytes parameters are
+ * ignored.
+ */
+ void* accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes);
+
+ /**
+ * If the canvas has readable pixels in its base layer (and is not recording to a picture
+ * or other non-raster target) and has direct access to its pixels (i.e. they are in
* local RAM) return the const-address of those pixels, and if not null,
* return the ImageInfo and rowBytes. The returned address is only valid
* while the canvas object is in scope and unchanged. Any API calls made on
@@ -1170,6 +1190,8 @@ public:
const SkRegion& internal_private_getTotalClip() const;
// don't call
void internal_private_getTotalClipAsPath(SkPath*) const;
+ // don't call
+ GrRenderTarget* internal_private_accessTopLayerRenderTarget();
protected:
// default impl defers to getDevice()->newSurface(info)
@@ -1177,6 +1199,7 @@ protected:
// default impl defers to its device
virtual const void* onPeekPixels(SkImageInfo*, size_t* rowBytes);
+ virtual void* onAccessTopLayerPixels(SkImageInfo*, size_t* rowBytes);
virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&);
@@ -1243,9 +1266,10 @@ private:
bool fDeviceCMDirty; // cleared by updateDeviceCMCache()
void updateDeviceCMCache();
- friend class SkDrawIter; // needs setupDrawForLayerDevice()
+ friend class SkDrawIter; // needs setupDrawForLayerDevice()
friend class AutoDrawLooper;
- friend class SkLua; // needs top layer size and offset
+ friend class SkLua; // needs top layer size and offset
+ friend class SkDeferredDevice; // needs getTopDevice()
SkBaseDevice* createLayerDevice(const SkImageInfo&);
« no previous file with comments | « include/core/SkBitmapDevice.h ('k') | include/core/SkDevice.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698