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

Side by Side Diff: src/image/SkSurface_Gpu.cpp

Issue 551463004: introduce Props to surface (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: deprecate non-prop versions of surfaces 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
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 #include "SkSurface_Base.h" 8 #include "SkSurface_Base.h"
9 #include "SkImagePriv.h" 9 #include "SkImagePriv.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
11 #include "SkGpuDevice.h" 11 #include "SkGpuDevice.h"
12 12
13 class SkSurface_Gpu : public SkSurface_Base { 13 class SkSurface_Gpu : public SkSurface_Base {
14 public: 14 public:
15 SK_DECLARE_INST_COUNT(SkSurface_Gpu) 15 SK_DECLARE_INST_COUNT(SkSurface_Gpu)
16 16
17 SkSurface_Gpu(GrRenderTarget*, bool cached, TextRenderMode trm, 17 SkSurface_Gpu(GrRenderTarget*, bool cached, SkSurface::RenderTargetFlags fla gs,
18 SkSurface::RenderTargetFlags flags); 18 const SkSurfaceProps*);
19 virtual ~SkSurface_Gpu(); 19 virtual ~SkSurface_Gpu();
20 20
21 virtual SkCanvas* onNewCanvas() SK_OVERRIDE; 21 virtual SkCanvas* onNewCanvas() SK_OVERRIDE;
22 virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE; 22 virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
23 virtual SkImage* onNewImageSnapshot() SK_OVERRIDE; 23 virtual SkImage* onNewImageSnapshot() SK_OVERRIDE;
24 virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, 24 virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
25 const SkPaint*) SK_OVERRIDE; 25 const SkPaint*) SK_OVERRIDE;
26 virtual void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE; 26 virtual void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE;
27 virtual void onDiscard() SK_OVERRIDE; 27 virtual void onDiscard() SK_OVERRIDE;
28 28
29 private: 29 private:
30 SkGpuDevice* fDevice; 30 SkGpuDevice* fDevice;
31 31
32 typedef SkSurface_Base INHERITED; 32 typedef SkSurface_Base INHERITED;
33 }; 33 };
34 34
35 /////////////////////////////////////////////////////////////////////////////// 35 ///////////////////////////////////////////////////////////////////////////////
36 36
37 SkSurface_Gpu::SkSurface_Gpu(GrRenderTarget* renderTarget, bool cached, TextRend erMode trm, 37 SkSurface_Gpu::SkSurface_Gpu(GrRenderTarget* renderTarget, bool cached, RenderTa rgetFlags flags,
38 SkSurface::RenderTargetFlags flags) 38 const SkSurfaceProps* props)
39 : INHERITED(renderTarget->width(), renderTarget->height()) { 39 : INHERITED(renderTarget->width(), renderTarget->height(), props)
40 {
40 int deviceFlags = 0; 41 int deviceFlags = 0;
41 deviceFlags |= cached ? SkGpuDevice::kCached_Flag : 0; 42 deviceFlags |= cached ? SkGpuDevice::kCached_Flag : 0;
42 deviceFlags |= (kDistanceField_TextRenderMode == trm) ? SkGpuDevice::kDFFont s_Flag : 0; 43 deviceFlags |= this->props().useDistanceFieldFonts() ? SkGpuDevice::kDFFonts _Flag : 0;
43 fDevice = SkGpuDevice::Create(renderTarget, deviceFlags); 44 fDevice = SkGpuDevice::Create(renderTarget, this->props(), deviceFlags);
44 45
45 if (kRGB_565_GrPixelConfig != renderTarget->config() && 46 if (kRGB_565_GrPixelConfig != renderTarget->config() &&
46 !(flags & kDontClear_RenderTargetFlag)) { 47 !(flags & kDontClear_RenderTargetFlag)) {
47 fDevice->clear(0x0); 48 fDevice->clear(0x0);
48 } 49 }
49 } 50 }
50 51
51 SkSurface_Gpu::~SkSurface_Gpu() { 52 SkSurface_Gpu::~SkSurface_Gpu() {
52 SkSafeUnref(fDevice); 53 SkSafeUnref(fDevice);
53 } 54 }
54 55
55 SkCanvas* SkSurface_Gpu::onNewCanvas() { 56 SkCanvas* SkSurface_Gpu::onNewCanvas() {
56 return SkNEW_ARGS(SkCanvas, (fDevice)); 57 SkCanvas::InitFlags flags = SkCanvas::kDefault_InitFlags;
58 // When we think this works...
59 // flags |= SkCanvas::kConservativeRasterClip_InitFlag;
60
61 return SkNEW_ARGS(SkCanvas, (fDevice, &this->props(), flags));
57 } 62 }
58 63
59 SkSurface* SkSurface_Gpu::onNewSurface(const SkImageInfo& info) { 64 SkSurface* SkSurface_Gpu::onNewSurface(const SkImageInfo& info) {
60 GrRenderTarget* rt = fDevice->accessRenderTarget(); 65 GrRenderTarget* rt = fDevice->accessRenderTarget();
61 int sampleCount = rt->numSamples(); 66 int sampleCount = rt->numSamples();
62 return SkSurface::NewRenderTarget(fDevice->context(), info, sampleCount); 67 return SkSurface::NewRenderTarget(fDevice->context(), info, sampleCount, &th is->props());
63 } 68 }
64 69
65 SkImage* SkSurface_Gpu::onNewImageSnapshot() { 70 SkImage* SkSurface_Gpu::onNewImageSnapshot() {
66 return SkImage::NewTexture(fDevice->accessBitmap(false)); 71 return SkImage::NewTexture(fDevice->accessBitmap(false));
67 } 72 }
68 73
69 void SkSurface_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, 74 void SkSurface_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y,
70 const SkPaint* paint) { 75 const SkPaint* paint) {
71 canvas->drawBitmap(fDevice->accessBitmap(false), x, y, paint); 76 canvas->drawBitmap(fDevice->accessBitmap(false), x, y, paint);
72 } 77 }
(...skipping 22 matching lines...) Expand all
95 SkRefCnt_SafeAssign(fDevice, newDevice); 100 SkRefCnt_SafeAssign(fDevice, newDevice);
96 } else if (kDiscard_ContentChangeMode == mode) { 101 } else if (kDiscard_ContentChangeMode == mode) {
97 this->SkSurface_Gpu::onDiscard(); 102 this->SkSurface_Gpu::onDiscard();
98 } 103 }
99 } 104 }
100 105
101 void SkSurface_Gpu::onDiscard() { 106 void SkSurface_Gpu::onDiscard() {
102 fDevice->accessRenderTarget()->discard(); 107 fDevice->accessRenderTarget()->discard();
103 } 108 }
104 109
105 /////////////////////////////////////////////////////////////////////////////// 110 SkSurface* SkSurface::NewRenderTargetDirect(GrRenderTarget* target, const SkSurf aceProps* props,
106
107 SkSurface* SkSurface::NewRenderTargetDirect(GrRenderTarget* target, TextRenderMo de trm,
108 RenderTargetFlags flags) { 111 RenderTargetFlags flags) {
109 if (NULL == target) { 112 if (NULL == target) {
110 return NULL; 113 return NULL;
111 } 114 }
112 return SkNEW_ARGS(SkSurface_Gpu, (target, false, trm, flags)); 115 return SkNEW_ARGS(SkSurface_Gpu, (target, false, flags, props));
113 } 116 }
114 117
115 SkSurface* SkSurface::NewRenderTarget(GrContext* ctx, const SkImageInfo& info, i nt sampleCount, 118 SkSurface* SkSurface::NewRenderTarget(GrContext* ctx, const SkImageInfo& info, i nt sampleCount,
116 TextRenderMode trm, RenderTargetFlags flag s) { 119 const SkSurfaceProps* props, RenderTargetF lags flags) {
117 if (NULL == ctx) { 120 if (NULL == ctx) {
118 return NULL; 121 return NULL;
119 } 122 }
120 123
121 GrTextureDesc desc; 124 GrTextureDesc desc;
122 desc.fFlags = kRenderTarget_GrTextureFlagBit | kCheckAllocation_GrTextureFla gBit; 125 desc.fFlags = kRenderTarget_GrTextureFlagBit | kCheckAllocation_GrTextureFla gBit;
123 desc.fWidth = info.width(); 126 desc.fWidth = info.width();
124 desc.fHeight = info.height(); 127 desc.fHeight = info.height();
125 desc.fConfig = SkImageInfo2GrPixelConfig(info); 128 desc.fConfig = SkImageInfo2GrPixelConfig(info);
126 desc.fSampleCnt = sampleCount; 129 desc.fSampleCnt = sampleCount;
127 130
128 SkAutoTUnref<GrTexture> tex(ctx->createUncachedTexture(desc, NULL, 0)); 131 SkAutoTUnref<GrTexture> tex(ctx->createUncachedTexture(desc, NULL, 0));
129 if (NULL == tex) { 132 if (NULL == tex) {
130 return NULL; 133 return NULL;
131 } 134 }
132 135
133 return SkNEW_ARGS(SkSurface_Gpu, (tex->asRenderTarget(), false, trm, flags)) ; 136 return SkNEW_ARGS(SkSurface_Gpu, (tex->asRenderTarget(), false, flags, props ));
134 } 137 }
135 138
136 SkSurface* SkSurface::NewScratchRenderTarget(GrContext* ctx, const SkImageInfo& info, 139 SkSurface* SkSurface::NewScratchRenderTarget(GrContext* ctx, const SkImageInfo& info,
137 int sampleCount, TextRenderMode trm , 140 int sampleCount, const SkSurfacePro ps* props,
138 RenderTargetFlags flags) { 141 RenderTargetFlags flags) {
139 if (NULL == ctx) { 142 if (NULL == ctx) {
140 return NULL; 143 return NULL;
141 } 144 }
142 145
143 GrTextureDesc desc; 146 GrTextureDesc desc;
144 desc.fFlags = kRenderTarget_GrTextureFlagBit | kCheckAllocation_GrTextureFla gBit; 147 desc.fFlags = kRenderTarget_GrTextureFlagBit | kCheckAllocation_GrTextureFla gBit;
145 desc.fWidth = info.width(); 148 desc.fWidth = info.width();
146 desc.fHeight = info.height(); 149 desc.fHeight = info.height();
147 desc.fConfig = SkImageInfo2GrPixelConfig(info); 150 desc.fConfig = SkImageInfo2GrPixelConfig(info);
148 desc.fSampleCnt = sampleCount; 151 desc.fSampleCnt = sampleCount;
149 152
150 SkAutoTUnref<GrTexture> tex(ctx->lockAndRefScratchTexture(desc, GrContext::k Exact_ScratchTexMatch)); 153 SkAutoTUnref<GrTexture> tex(ctx->lockAndRefScratchTexture(desc, GrContext::k Exact_ScratchTexMatch));
151 154
152 if (NULL == tex) { 155 if (NULL == tex) {
153 return NULL; 156 return NULL;
154 } 157 }
155 158
156 return SkNEW_ARGS(SkSurface_Gpu, (tex->asRenderTarget(), true, trm, flags)); 159 return SkNEW_ARGS(SkSurface_Gpu, (tex->asRenderTarget(), true, flags, props) );
157 } 160 }
161
162 ///////////////////////////////////////////////////////////////////////////////
163 #ifdef SK_SUPPORT_LEGACY_TEXTRENDERMODE
164
165 static SkSurfaceProps make_props(SkSurface::TextRenderMode trm) {
166 uint32_t propsFlags = 0;
167 if (SkSurface::kDistanceField_TextRenderMode == trm) {
168 propsFlags |= SkSurfaceProps::kUseDistanceFieldFonts_Flag;
169 }
170 return SkSurfaceProps(propsFlags, SkSurfaceProps::kLegacyFontHost_InitType);
171 }
172
173 SkSurface* SkSurface::NewRenderTargetDirect(GrRenderTarget* target, TextRenderMo de trm,
174 RenderTargetFlags flags) {
175 return NewRenderTargetDirect(target, make_props(trm), flags);
176 }
177
178 SkSurface* SkSurface::NewRenderTarget(GrContext* gr, const SkImageInfo& info, in t sampleCount,
179 TextRenderMode trm, RenderTargetFlags flag s) {
180 return NewRenderTarget(gr, info, sampleCount, make_props(trm), flags);
181 }
182
183 SkSurface* SkSurface::NewScratchRenderTarget(GrContext* gr, const SkImageInfo& i nfo, int sampleCount,
184 TextRenderMode trm, RenderTargetFla gs flags) {
185 return NewScratchRenderTarget(gr, info, sampleCount, make_props(trm), flags) ;
186 }
187
188 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698