OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "SkGpuDevice.h" | 8 #include "SkGpuDevice.h" |
9 | 9 |
10 #include "GrBlurUtils.h" | 10 #include "GrBlurUtils.h" |
11 #include "GrContext.h" | 11 #include "GrContext.h" |
12 #include "SkDraw.h" | 12 #include "SkDraw.h" |
13 #include "GrDrawContext.h" | |
14 #include "GrGpu.h" | 13 #include "GrGpu.h" |
15 #include "GrGpuResourcePriv.h" | 14 #include "GrGpuResourcePriv.h" |
16 #include "GrImageIDTextureAdjuster.h" | 15 #include "GrImageIDTextureAdjuster.h" |
17 #include "GrLayerHoister.h" | 16 #include "GrLayerHoister.h" |
18 #include "GrRecordReplaceDraw.h" | 17 #include "GrRecordReplaceDraw.h" |
19 #include "GrStrokeInfo.h" | 18 #include "GrStrokeInfo.h" |
20 #include "GrTracing.h" | 19 #include "GrTracing.h" |
21 #include "SkCanvasPriv.h" | 20 #include "SkCanvasPriv.h" |
22 #include "SkErrorInternals.h" | 21 #include "SkErrorInternals.h" |
23 #include "SkGlyphCache.h" | 22 #include "SkGlyphCache.h" |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 if (nullptr == rt) { | 163 if (nullptr == rt) { |
165 return nullptr; | 164 return nullptr; |
166 } | 165 } |
167 | 166 |
168 return new SkGpuDevice(rt, info.width(), info.height(), props, flags); | 167 return new SkGpuDevice(rt, info.width(), info.height(), props, flags); |
169 } | 168 } |
170 | 169 |
171 SkGpuDevice::SkGpuDevice(GrRenderTarget* rt, int width, int height, | 170 SkGpuDevice::SkGpuDevice(GrRenderTarget* rt, int width, int height, |
172 const SkSurfaceProps* props, unsigned flags) | 171 const SkSurfaceProps* props, unsigned flags) |
173 : INHERITED(SkSurfacePropsCopyOrDefault(props)) | 172 : INHERITED(SkSurfacePropsCopyOrDefault(props)) |
174 { | 173 , fContext(SkRef(rt->getContext())) |
175 fContext = SkRef(rt->getContext()); | 174 , fRenderTarget(SkRef(rt)) { |
176 fNeedClear = SkToBool(flags & kNeedClear_Flag); | 175 fNeedClear = SkToBool(flags & kNeedClear_Flag); |
177 fOpaque = SkToBool(flags & kIsOpaque_Flag); | 176 fOpaque = SkToBool(flags & kIsOpaque_Flag); |
178 | 177 |
179 fRenderTarget = SkRef(rt); | |
180 | |
181 SkAlphaType at = fOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; | 178 SkAlphaType at = fOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; |
182 SkImageInfo info = rt->surfacePriv().info(at).makeWH(width, height); | 179 SkImageInfo info = rt->surfacePriv().info(at).makeWH(width, height); |
183 SkPixelRef* pr = new SkGrPixelRef(info, rt); | 180 SkPixelRef* pr = new SkGrPixelRef(info, rt); |
184 fLegacyBitmap.setInfo(info); | 181 fLegacyBitmap.setInfo(info); |
185 fLegacyBitmap.setPixelRef(pr)->unref(); | 182 fLegacyBitmap.setPixelRef(pr)->unref(); |
186 | 183 |
187 fDrawContext.reset(this->context()->drawContext(rt, &this->surfaceProps())); | 184 fDrawContext.reset(this->context()->drawContext(rt, &this->surfaceProps())); |
188 } | 185 } |
189 | 186 |
190 GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B
udgeted budgeted, | 187 GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B
udgeted budgeted, |
(...skipping 28 matching lines...) Expand all Loading... |
219 desc.fSampleCnt = sampleCount; | 216 desc.fSampleCnt = sampleCount; |
220 GrTexture* texture = context->textureProvider()->createTexture( | 217 GrTexture* texture = context->textureProvider()->createTexture( |
221 desc, SkToBool(budgeted), nullptr, 0); | 218 desc, SkToBool(budgeted), nullptr, 0); |
222 if (nullptr == texture) { | 219 if (nullptr == texture) { |
223 return nullptr; | 220 return nullptr; |
224 } | 221 } |
225 SkASSERT(nullptr != texture->asRenderTarget()); | 222 SkASSERT(nullptr != texture->asRenderTarget()); |
226 return texture->asRenderTarget(); | 223 return texture->asRenderTarget(); |
227 } | 224 } |
228 | 225 |
229 SkGpuDevice::~SkGpuDevice() { | |
230 fRenderTarget->unref(); | |
231 fContext->unref(); | |
232 } | |
233 | |
234 /////////////////////////////////////////////////////////////////////////////// | 226 /////////////////////////////////////////////////////////////////////////////// |
235 | 227 |
236 bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size
_t dstRowBytes, | 228 bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size
_t dstRowBytes, |
237 int x, int y) { | 229 int x, int y) { |
238 DO_DEFERRED_CLEAR(); | 230 DO_DEFERRED_CLEAR(); |
239 | 231 |
240 // TODO: teach fRenderTarget to take ImageInfo directly to specify the src p
ixels | 232 // TODO: teach fRenderTarget to take ImageInfo directly to specify the src p
ixels |
241 GrPixelConfig config = SkImageInfo2GrPixelConfig(dstInfo); | 233 GrPixelConfig config = SkImageInfo2GrPixelConfig(dstInfo); |
242 if (kUnknown_GrPixelConfig == config) { | 234 if (kUnknown_GrPixelConfig == config) { |
243 return false; | 235 return false; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 | 331 |
340 if (shouldRetainContent) { | 332 if (shouldRetainContent) { |
341 if (fRenderTarget->wasDestroyed()) { | 333 if (fRenderTarget->wasDestroyed()) { |
342 return; | 334 return; |
343 } | 335 } |
344 this->context()->copySurface(newRT, fRenderTarget); | 336 this->context()->copySurface(newRT, fRenderTarget); |
345 } | 337 } |
346 | 338 |
347 SkASSERT(fRenderTarget != newRT); | 339 SkASSERT(fRenderTarget != newRT); |
348 | 340 |
349 fRenderTarget->unref(); | 341 fRenderTarget.reset(newRT.detach()); |
350 fRenderTarget = newRT.detach(); | |
351 | 342 |
352 #ifdef SK_DEBUG | 343 #ifdef SK_DEBUG |
353 SkImageInfo info = fRenderTarget->surfacePriv().info(fOpaque ? kOpaque_SkAlp
haType : | 344 SkImageInfo info = fRenderTarget->surfacePriv().info(fOpaque ? kOpaque_SkAlp
haType : |
354 kPremul_SkAlp
haType); | 345 kPremul_SkAlp
haType); |
355 SkASSERT(info == fLegacyBitmap.info()); | 346 SkASSERT(info == fLegacyBitmap.info()); |
356 #endif | 347 #endif |
357 SkPixelRef* pr = new SkGrPixelRef(fLegacyBitmap.info(), fRenderTarget); | 348 SkPixelRef* pr = new SkGrPixelRef(fLegacyBitmap.info(), fRenderTarget); |
358 fLegacyBitmap.setPixelRef(pr)->unref(); | 349 fLegacyBitmap.setPixelRef(pr)->unref(); |
359 | 350 |
360 fDrawContext.reset(this->context()->drawContext(fRenderTarget, &this->surfac
eProps())); | 351 fDrawContext.reset(this->context()->drawContext(fRenderTarget, &this->surfac
eProps())); |
(...skipping 1508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1869 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); | 1860 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); |
1870 } | 1861 } |
1871 | 1862 |
1872 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { | 1863 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { |
1873 // We always return a transient cache, so it is freed after each | 1864 // We always return a transient cache, so it is freed after each |
1874 // filter traversal. | 1865 // filter traversal. |
1875 return SkGpuDevice::NewImageFilterCache(); | 1866 return SkGpuDevice::NewImageFilterCache(); |
1876 } | 1867 } |
1877 | 1868 |
1878 #endif | 1869 #endif |
OLD | NEW |