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

Side by Side Diff: include/core/SkSurface.h

Issue 583773004: Revert of introduce Props to surface (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « include/core/SkDevice.h ('k') | include/core/SkSurfaceProps.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkSurface_DEFINED 8 #ifndef SkSurface_DEFINED
9 #define SkSurface_DEFINED 9 #define SkSurface_DEFINED
10 10
11 #include "SkRefCnt.h" 11 #include "SkRefCnt.h"
12 #include "SkImage.h" 12 #include "SkImage.h"
13 #include "SkSurfaceProps.h"
14
15 //#define SK_SUPPORT_LEGACY_TEXTRENDERMODE
16 13
17 class SkCanvas; 14 class SkCanvas;
18 class SkPaint; 15 class SkPaint;
19 class GrContext; 16 class GrContext;
20 class GrRenderTarget; 17 class GrRenderTarget;
21 18
22 /** 19 /**
23 * SkSurface represents the backend/results of drawing to a canvas. For raster 20 * SkSurface represents the backend/results of drawing to a canvas. For raster
24 * drawing, the surface will be pixels, but (for example) when drawing into 21 * drawing, the surface will be pixels, but (for example) when drawing into
25 * a PDF or Picture canvas, the surface stores the recorded commands. 22 * a PDF or Picture canvas, the surface stores the recorded commands.
26 * 23 *
27 * To draw into a canvas, first create the appropriate type of Surface, and 24 * To draw into a canvas, first create the appropriate type of Surface, and
28 * then request the canvas from the surface. 25 * then request the canvas from the surface.
29 */ 26 */
30 class SK_API SkSurface : public SkRefCnt { 27 class SK_API SkSurface : public SkRefCnt {
31 public: 28 public:
32 SK_DECLARE_INST_COUNT(SkSurface) 29 SK_DECLARE_INST_COUNT(SkSurface)
33 30
34 /** 31 /**
35 * Create a new surface, using the specified pixels/rowbytes as its 32 * Create a new surface, using the specified pixels/rowbytes as its
36 * backend. 33 * backend.
37 * 34 *
38 * If the requested surface cannot be created, or the request is not a 35 * If the requested surface cannot be created, or the request is not a
39 * supported configuration, NULL will be returned. 36 * supported configuration, NULL will be returned.
40 */ 37 */
41 static SkSurface* NewRasterDirect(const SkImageInfo&, void* pixels, size_t r owBytes, 38 static SkSurface* NewRasterDirect(const SkImageInfo&, void* pixels, size_t r owBytes);
42 const SkSurfaceProps* = NULL);
43 39
44 /** 40 /**
45 * The same as NewRasterDirect, but also accepts a call-back routine, which is invoked 41 * The same as NewRasterDirect, but also accepts a call-back routine, which is invoked
46 * when the surface is deleted, and is passed the pixel memory and the spec ified context. 42 * when the surface is deleted, and is passed the pixel memory and the spec ified context.
47 */ 43 */
48 static SkSurface* NewRasterDirectReleaseProc(const SkImageInfo&, void* pixel s, size_t rowBytes, 44 static SkSurface* NewRasterDirectReleaseProc(const SkImageInfo&, void* pixel s, size_t rowBytes,
49 void (*releaseProc)(void* pixel s, void* context), 45 void (*releaseProc)(void* pixel s, void* context),
50 void* context, const SkSurfaceP rops* = NULL); 46 void* context);
51 47
52 /** 48 /**
53 * Return a new surface, with the memory for the pixels automatically 49 * Return a new surface, with the memory for the pixels automatically
54 * allocated. 50 * allocated.
55 * 51 *
56 * If the requested surface cannot be created, or the request is not a 52 * If the requested surface cannot be created, or the request is not a
57 * supported configuration, NULL will be returned. 53 * supported configuration, NULL will be returned.
58 */ 54 */
59 static SkSurface* NewRaster(const SkImageInfo&, const SkSurfaceProps* = NULL ); 55 static SkSurface* NewRaster(const SkImageInfo&);
60 56
61 /** 57 /**
62 * Helper version of NewRaster. It creates a SkImageInfo with the 58 * Helper version of NewRaster. It creates a SkImageInfo with the
63 * specified width and height, and populates the rest of info to match 59 * specified width and height, and populates the rest of info to match
64 * pixels in SkPMColor format. 60 * pixels in SkPMColor format.
65 */ 61 */
66 static SkSurface* NewRasterPMColor(int width, int height, const SkSurfacePro ps* props = NULL) { 62 static SkSurface* NewRasterPMColor(int width, int height) {
67 return NewRaster(SkImageInfo::MakeN32Premul(width, height), props); 63 return NewRaster(SkImageInfo::MakeN32Premul(width, height));
68 } 64 }
69 65
70 /** 66 /**
67 * Text rendering modes that can be passed to NewRenderTarget*
68 */
69 enum TextRenderMode {
70 /**
71 * This will use the standard text rendering method
72 */
73 kStandard_TextRenderMode,
74 /**
75 * This will use signed distance fields for text rendering when possibl e
76 */
77 kDistanceField_TextRenderMode,
78 };
79
80 /**
71 * Return a new surface using the specified render target. 81 * Return a new surface using the specified render target.
82 * The pixels in the rendertarget are not cleared or otherwised changed whe n the surface
83 * is created.
72 */ 84 */
73 static SkSurface* NewRenderTargetDirect(GrRenderTarget*, const SkSurfaceProp s*); 85 static SkSurface* NewRenderTargetDirect(GrRenderTarget*,
74 86 TextRenderMode trm = kStandard_TextR enderMode);
75 static SkSurface* NewRenderTargetDirect(GrRenderTarget* target) { 87
76 return NewRenderTargetDirect(target, NULL);
77 }
78
79 /** 88 /**
80 * Return a new surface whose contents will be drawn to an offscreen 89 * Return a new surface whose contents will be drawn to an offscreen
81 * render target, allocated by the surface. 90 * render target, allocated by the surface.
82 */ 91 */
83 static SkSurface* NewRenderTarget(GrContext*, const SkImageInfo&, int sample Count, 92 static SkSurface* NewRenderTarget(GrContext*, const SkImageInfo&, int sample Count = 0,
84 const SkSurfaceProps* = NULL); 93 TextRenderMode trm = kStandard_TextRenderM ode);
85
86 static SkSurface* NewRenderTarget(GrContext* gr, const SkImageInfo& info) {
87 return NewRenderTarget(gr, info, 0, NULL);
88 }
89 94
90 /** 95 /**
91 * Return a new surface whose contents will be drawn to an offscreen 96 * Return a new surface whose contents will be drawn to an offscreen
92 * render target, allocated by the surface from the scratch texture pool 97 * render target, allocated by the surface from the scratch texture pool
93 * managed by the GrContext. The scratch texture pool serves the purpose 98 * managed by the GrContext. The scratch texture pool serves the purpose
94 * of retaining textures after they are no longer in use in order to 99 * of retaining textures after they are no longer in use in order to
95 * re-use them later without having to re-allocate. Scratch textures 100 * re-use them later without having to re-allocate. Scratch textures
96 * should be used in cases where high turnover is expected. This allows, 101 * should be used in cases where high turnover is expected. This allows,
97 * for example, the copy on write to recycle a texture from a recently 102 * for example, the copy on write to recycle a texture from a recently
98 * released SkImage snapshot of the surface. 103 * released SkImage snapshot of the surface.
99 * Note: Scratch textures count against the GrContext's cached resource 104 * Note: Scratch textures count against the GrContext's cached resource
100 * budget. 105 * budget.
101 */ 106 */
102 static SkSurface* NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount, 107 static SkSurface* NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount = 0,
103 const SkSurfaceProps*); 108 TextRenderMode trm = kStandard_Text RenderMode);
104
105 static SkSurface* NewScratchRenderTarget(GrContext* gr, const SkImageInfo& i nfo) {
106 return NewScratchRenderTarget(gr, info, 0, NULL);
107 }
108
109 #ifdef SK_SUPPORT_LEGACY_TEXTRENDERMODE
110 /**
111 * Text rendering modes that can be passed to NewRenderTarget*
112 */
113 enum TextRenderMode {
114 /**
115 * This will use the standard text rendering method
116 */
117 kStandard_TextRenderMode,
118 /**
119 * This will use signed distance fields for text rendering when possibl e
120 */
121 kDistanceField_TextRenderMode,
122 };
123 static SkSurface* NewRenderTargetDirect(GrRenderTarget*, TextRenderMode);
124 static SkSurface* NewRenderTarget(GrContext*, const SkImageInfo&, int sample Count,
125 TextRenderMode);
126 static SkSurface* NewScratchRenderTarget(GrContext*, const SkImageInfo&, int sampleCount,
127 TextRenderMode);
128 #endif
129 109
130 int width() const { return fWidth; } 110 int width() const { return fWidth; }
131 int height() const { return fHeight; } 111 int height() const { return fHeight; }
132 112
133 /** 113 /**
134 * Returns a unique non-zero, unique value identifying the content of this 114 * Returns a unique non-zero, unique value identifying the content of this
135 * surface. Each time the content is changed changed, either by drawing 115 * surface. Each time the content is changed changed, either by drawing
136 * into this surface, or explicitly calling notifyContentChanged()) this 116 * into this surface, or explicitly calling notifyContentChanged()) this
137 * method will return a new value. 117 * method will return a new value.
138 * 118 *
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 * RAM) return the const-address of those pixels, and if not null, return 187 * RAM) return the const-address of those pixels, and if not null, return
208 * the ImageInfo and rowBytes. The returned address is only valid while 188 * the ImageInfo and rowBytes. The returned address is only valid while
209 * the surface object is in scope, and no API call is made on the surface 189 * the surface object is in scope, and no API call is made on the surface
210 * or its canvas. 190 * or its canvas.
211 * 191 *
212 * On failure, returns NULL and the info and rowBytes parameters are 192 * On failure, returns NULL and the info and rowBytes parameters are
213 * ignored. 193 * ignored.
214 */ 194 */
215 const void* peekPixels(SkImageInfo* info, size_t* rowBytes); 195 const void* peekPixels(SkImageInfo* info, size_t* rowBytes);
216 196
217 const SkSurfaceProps& props() const { return fProps; }
218
219 protected: 197 protected:
220 SkSurface(int width, int height, const SkSurfaceProps*); 198 SkSurface(int width, int height);
221 SkSurface(const SkImageInfo&, const SkSurfaceProps*); 199 SkSurface(const SkImageInfo&);
222 200
223 // called by subclass if their contents have changed 201 // called by subclass if their contents have changed
224 void dirtyGenerationID() { 202 void dirtyGenerationID() {
225 fGenerationID = 0; 203 fGenerationID = 0;
226 } 204 }
227 205
228 private: 206 private:
229 const SkSurfaceProps fProps; 207 const int fWidth;
230 const int fWidth; 208 const int fHeight;
231 const int fHeight; 209 uint32_t fGenerationID;
232 uint32_t fGenerationID;
233 210
234 typedef SkRefCnt INHERITED; 211 typedef SkRefCnt INHERITED;
235 }; 212 };
236 213
237 #endif 214 #endif
OLDNEW
« no previous file with comments | « include/core/SkDevice.h ('k') | include/core/SkSurfaceProps.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698