• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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