1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 9 #ifndef GrSurface_DEFINED 10 #define GrSurface_DEFINED 11 12 #include "GrTypes.h" 13 #include "GrResource.h" 14 15 class GrTexture; 16 class GrRenderTarget; 17 18 class GrSurface : public GrResource { 19 public: 20 SK_DECLARE_INST_COUNT(GrSurface); 21 22 /** 23 * Retrieves the width of the surface. 24 * 25 * @return the width in texels 26 */ width()27 int width() const { return fDesc.fWidth; } 28 29 /** 30 * Retrieves the height of the surface. 31 * 32 * @return the height in texels 33 */ height()34 int height() const { return fDesc.fHeight; } 35 origin()36 GrSurfaceOrigin origin() const { 37 GrAssert(kTopLeft_GrSurfaceOrigin == fOrigin || kBottomLeft_GrSurfaceOrigin == fOrigin); 38 return fOrigin; 39 } 40 41 /** 42 * Retrieves the pixel config specified when the surface was created. 43 * For render targets this can be kUnknown_GrPixelConfig 44 * if client asked us to render to a target that has a pixel 45 * config that isn't equivalent with one of our configs. 46 */ config()47 GrPixelConfig config() const { return fDesc.fConfig; } 48 49 /** 50 * Return the descriptor describing the surface 51 */ desc()52 const GrTextureDesc& desc() const { return fDesc; } 53 54 /** 55 * @return the texture associated with the surface, may be NULL. 56 */ 57 virtual GrTexture* asTexture() = 0; 58 virtual const GrTexture* asTexture() const = 0; 59 60 /** 61 * @return the render target underlying this surface, may be NULL. 62 */ 63 virtual GrRenderTarget* asRenderTarget() = 0; 64 virtual const GrRenderTarget* asRenderTarget() const = 0; 65 66 /** 67 * Reads a rectangle of pixels from the surface. 68 * @param left left edge of the rectangle to read (inclusive) 69 * @param top top edge of the rectangle to read (inclusive) 70 * @param width width of rectangle to read in pixels. 71 * @param height height of rectangle to read in pixels. 72 * @param config the pixel config of the destination buffer 73 * @param buffer memory to read the rectangle into. 74 * @param rowBytes number of bytes between consecutive rows. Zero means rows are tightly 75 * packed. 76 * @param pixelOpsFlags See the GrContext::PixelOpsFlags enum. 77 * 78 * @return true if the read succeeded, false if not. The read can fail because of an unsupported 79 * pixel config. 80 */ 81 virtual bool readPixels(int left, int top, int width, int height, 82 GrPixelConfig config, 83 void* buffer, 84 size_t rowBytes = 0, 85 uint32_t pixelOpsFlags = 0) = 0; 86 87 /** 88 * Copy the src pixels [buffer, rowbytes, pixelconfig] into the surface at the specified 89 * rectangle. 90 * @param left left edge of the rectangle to write (inclusive) 91 * @param top top edge of the rectangle to write (inclusive) 92 * @param width width of rectangle to write in pixels. 93 * @param height height of rectangle to write in pixels. 94 * @param config the pixel config of the source buffer 95 * @param buffer memory to read the rectangle from. 96 * @param rowBytes number of bytes between consecutive rows. Zero means rows are tightly 97 * packed. 98 * @param pixelOpsFlags See the GrContext::PixelOpsFlags enum. 99 */ 100 virtual void writePixels(int left, int top, int width, int height, 101 GrPixelConfig config, 102 const void* buffer, 103 size_t rowBytes = 0, 104 uint32_t pixelOpsFlags = 0) = 0; 105 106 protected: GrSurface(GrGpu * gpu,bool isWrapped,const GrTextureDesc & desc,GrSurfaceOrigin origin)107 GrSurface(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc, GrSurfaceOrigin origin) 108 : INHERITED(gpu, isWrapped) 109 , fDesc(desc) 110 , fOrigin(origin) { 111 } 112 113 GrTextureDesc fDesc; 114 115 private: 116 GrSurfaceOrigin fOrigin; 117 118 typedef GrResource INHERITED; 119 }; 120 121 #endif // GrSurface_DEFINED 122