diff options
author | bsalomon <bsalomon@google.com> | 2014-09-30 12:18:44 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-30 12:18:44 -0700 |
commit | afbf2d6273cd22c683f20a7e5773843876af3085 (patch) | |
tree | ce03339b06e13e45b5055b7cc5abdeb57cbdd86c /src/gpu/GrSurfacePriv.h | |
parent | 8de02f4bf3dfb6178132231d03caec9f9a5d0beb (diff) |
Make "priv" classes for GrTexure and GrSurface.
R=robertphillips@google.com, egdaniel@google.com, joshualitt@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/596053002
Diffstat (limited to 'src/gpu/GrSurfacePriv.h')
-rw-r--r-- | src/gpu/GrSurfacePriv.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/gpu/GrSurfacePriv.h b/src/gpu/GrSurfacePriv.h new file mode 100644 index 0000000000..3203671fad --- /dev/null +++ b/src/gpu/GrSurfacePriv.h @@ -0,0 +1,63 @@ +/* + * 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 GrSurfacePriv_DEFINED +#define GrSurfacePriv_DEFINED + +#include "GrSurface.h" + +/** Class that adds methods to GrSurface that are only intended for use internal to Skia. + This class is purely a privileged window into GrSurface. It should never have additional data + members or virtual methods. + Non-static methods that are not trivial inlines should be spring-boarded (e.g. declared and + implemented privately in GrSurface with a inline public method here). */ +class GrSurfacePriv { +public: + /** + * Derive a SkImageInfo from the surface's descriptor. This is lossy as ImageInfo has fields not + * known to GrSurface (e.g. alphaType). + */ + SkImageInfo info() const { return fSurface->info(); } + + /** + * Checks whether this GrSurface refers to the same GPU object as other. This + * catches the case where a GrTexture and GrRenderTarget refer to the same + * GPU memory. + */ + bool isSameAs(const GrSurface* other) const { return fSurface->isSameAs(other); } + + /** + * Write the contents of the surface to a PNG. Returns true if successful. + * @param filename Full path to desired file + */ + bool savePixels(const char* filename) { return fSurface->savePixels(filename); } + + bool hasPendingRead() const { return fSurface->hasPendingRead(); } + bool hasPendingWrite() const { return fSurface->hasPendingWrite(); } + bool hasPendingIO() const { return fSurface->hasPendingIO(); } + +private: + GrSurfacePriv(GrSurface* surface) : fSurface(surface) { } + GrSurfacePriv(const GrSurfacePriv& that) : fSurface(that.fSurface) { } + GrSurfacePriv& operator=(const GrSurface&); // unimpl + + // No taking addresses of this type. + const GrSurfacePriv* operator&() const; + GrSurfacePriv* operator&(); + + GrSurface* fSurface; + + friend class GrSurface; // to construct/copy this type. +}; + +inline GrSurfacePriv GrSurface::surfacePriv() { return GrSurfacePriv(this); } + +inline const GrSurfacePriv GrSurface::surfacePriv() const { + return GrSurfacePriv(const_cast<GrSurface*>(this)); +} + +#endif |