diff options
Diffstat (limited to 'include/gpu/GrSurface.h')
-rw-r--r-- | include/gpu/GrSurface.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/include/gpu/GrSurface.h b/include/gpu/GrSurface.h new file mode 100644 index 0000000000..2d39b5e10b --- /dev/null +++ b/include/gpu/GrSurface.h @@ -0,0 +1,107 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef GrSurface_DEFINED +#define GrSurface_DEFINED + +#include "GrTypes.h" +#include "GrResource.h" + +class GrTexture; +class GrRenderTarget; + +class GrSurface : public GrResource { +public: + SK_DECLARE_INST_COUNT(GrSurface); + + /** + * Retrieves the width of the surface. + * + * @return the width in texels + */ + int width() const { return fDesc.fWidth; } + + /** + * Retrieves the height of the surface. + * + * @return the height in texels + */ + int height() const { return fDesc.fHeight; } + + /** + * Retrieves the pixel config specified when the surface was created. + * For render targets this can be kUnknown_GrPixelConfig + * if client asked us to render to a target that has a pixel + * config that isn't equivalent with one of our configs. + */ + GrPixelConfig config() const { return fDesc.fConfig; } + + /** + * Return the descriptor describing the surface + */ + const GrTextureDesc& desc() const { return fDesc; } + + /** + * @return the texture associated with the surface, may be NULL. + */ + virtual GrTexture* asTexture() = 0; + virtual const GrTexture* asTexture() const = 0; + + /** + * @return the render target underlying this surface, may be NULL. + */ + virtual GrRenderTarget* asRenderTarget() = 0; + virtual const GrRenderTarget* asRenderTarget() const = 0; + + /** + * Reads a rectangle of pixels from the surface. + * @param left left edge of the rectangle to read (inclusive) + * @param top top edge of the rectangle to read (inclusive) + * @param width width of rectangle to read in pixels. + * @param height height of rectangle to read in pixels. + * @param config the pixel config of the destination buffer + * @param buffer memory to read the rectangle into. + * @param rowBytes number of bytes bewtween consecutive rows. Zero + * means rows are tightly packed. + * + * @return true if the read succeeded, false if not. The read can fail + * because of an unsupported pixel config. + */ + virtual bool readPixels(int left, int top, int width, int height, + GrPixelConfig config, void* buffer, + size_t rowBytes) = 0; + + /** + * Copy the src pixels [buffer, rowbytes, pixelconfig] into the surface + * at the specified rectangle. + * @param left left edge of the rectangle to write (inclusive) + * @param top top edge of the rectangle to write (inclusive) + * @param width width of rectangle to write in pixels. + * @param height height of rectangle to write in pixels. + * @param config the pixel config of the source buffer + * @param buffer memory to read the rectangle from. + * @param rowBytes number of bytes bewtween consecutive rows. Zero + * means rows are tightly packed. + */ + virtual void writePixels(int left, int top, int width, int height, + GrPixelConfig config, const void* buffer, + size_t rowBytes) = 0; + +protected: + GrTextureDesc fDesc; + + GrSurface(GrGpu* gpu, const GrTextureDesc& desc) + : INHERITED(gpu) + , fDesc(desc) { + } + +private: + typedef GrResource INHERITED; +}; + +#endif // GrSurface_DEFINED |