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" |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 fContext = SkRef(rt->getContext()); | 143 fContext = SkRef(rt->getContext()); |
144 fNeedClear = flags & kNeedClear_Flag; | 144 fNeedClear = flags & kNeedClear_Flag; |
145 | 145 |
146 fRenderTarget = SkRef(rt); | 146 fRenderTarget = SkRef(rt); |
147 | 147 |
148 SkImageInfo info = rt->surfacePriv().info().makeWH(width, height); | 148 SkImageInfo info = rt->surfacePriv().info().makeWH(width, height); |
149 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, rt)); | 149 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (info, rt)); |
150 fLegacyBitmap.setInfo(info); | 150 fLegacyBitmap.setInfo(info); |
151 fLegacyBitmap.setPixelRef(pr)->unref(); | 151 fLegacyBitmap.setPixelRef(pr)->unref(); |
152 | 152 |
153 fDrawContext.reset(SkRef(fContext->drawContext(&this->getLeakyProperties()))
); | 153 fDrawContext.reset(SkRef(fContext->drawContext(&this->surfaceProps()))); |
154 } | 154 } |
155 | 155 |
156 GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B
udgeted budgeted, | 156 GrRenderTarget* SkGpuDevice::CreateRenderTarget(GrContext* context, SkSurface::B
udgeted budgeted, |
157 const SkImageInfo& origInfo, int
sampleCount) { | 157 const SkImageInfo& origInfo, int
sampleCount) { |
158 if (kUnknown_SkColorType == origInfo.colorType() || | 158 if (kUnknown_SkColorType == origInfo.colorType() || |
159 origInfo.width() < 0 || origInfo.height() < 0) { | 159 origInfo.width() < 0 || origInfo.height() < 0) { |
160 return NULL; | 160 return NULL; |
161 } | 161 } |
162 | 162 |
163 if (!context) { | 163 if (!context) { |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 328 |
329 SkASSERT(fRenderTarget != newRT); | 329 SkASSERT(fRenderTarget != newRT); |
330 | 330 |
331 fRenderTarget->unref(); | 331 fRenderTarget->unref(); |
332 fRenderTarget = newRT.detach(); | 332 fRenderTarget = newRT.detach(); |
333 | 333 |
334 SkASSERT(fRenderTarget->surfacePriv().info() == fLegacyBitmap.info()); | 334 SkASSERT(fRenderTarget->surfacePriv().info() == fLegacyBitmap.info()); |
335 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (fRenderTarget->surfacePriv().info
(), fRenderTarget)); | 335 SkPixelRef* pr = SkNEW_ARGS(SkGrPixelRef, (fRenderTarget->surfacePriv().info
(), fRenderTarget)); |
336 fLegacyBitmap.setPixelRef(pr)->unref(); | 336 fLegacyBitmap.setPixelRef(pr)->unref(); |
337 | 337 |
338 fDrawContext.reset(SkRef(fRenderTarget->getContext()->drawContext(&this->get
LeakyProperties()))); | 338 fDrawContext.reset(SkRef(fRenderTarget->getContext()->drawContext(&this->sur
faceProps()))); |
339 } | 339 } |
340 | 340 |
341 /////////////////////////////////////////////////////////////////////////////// | 341 /////////////////////////////////////////////////////////////////////////////// |
342 | 342 |
343 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) { | 343 void SkGpuDevice::drawPaint(const SkDraw& draw, const SkPaint& paint) { |
344 CHECK_SHOULD_DRAW(draw); | 344 CHECK_SHOULD_DRAW(draw); |
345 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPaint", fContext); | 345 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPaint", fContext); |
346 | 346 |
347 GrPaint grPaint; | 347 GrPaint grPaint; |
348 if (!SkPaint2GrPaint(this->context(), fRenderTarget, paint, *draw.fMatrix, t
rue, &grPaint)) { | 348 if (!SkPaint2GrPaint(this->context(), fRenderTarget, paint, *draw.fMatrix, t
rue, &grPaint)) { |
(...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1224 | 1224 |
1225 bool SkGpuDevice::filterTexture(GrContext* context, GrTexture* texture, | 1225 bool SkGpuDevice::filterTexture(GrContext* context, GrTexture* texture, |
1226 int width, int height, | 1226 int width, int height, |
1227 const SkImageFilter* filter, | 1227 const SkImageFilter* filter, |
1228 const SkImageFilter::Context& ctx, | 1228 const SkImageFilter::Context& ctx, |
1229 SkBitmap* result, SkIPoint* offset) { | 1229 SkBitmap* result, SkIPoint* offset) { |
1230 SkASSERT(filter); | 1230 SkASSERT(filter); |
1231 | 1231 |
1232 // FIXME: plumb actual surface props such that we don't have to lie about th
e flags here | 1232 // FIXME: plumb actual surface props such that we don't have to lie about th
e flags here |
1233 // (https://code.google.com/p/skia/issues/detail?id=3148). | 1233 // (https://code.google.com/p/skia/issues/detail?id=3148). |
1234 SkImageFilter::Proxy proxy(this, SkSurfaceProps(0, getLeakyProperties().pixe
lGeometry())); | 1234 SkImageFilter::Proxy proxy(this, SkSurfaceProps(0, this->surfaceProps().pixe
lGeometry())); |
1235 | 1235 |
1236 if (filter->canFilterImageGPU()) { | 1236 if (filter->canFilterImageGPU()) { |
1237 return filter->filterImageGPU(&proxy, wrap_texture(texture, width, heigh
t), | 1237 return filter->filterImageGPU(&proxy, wrap_texture(texture, width, heigh
t), |
1238 ctx, result, offset); | 1238 ctx, result, offset); |
1239 } else { | 1239 } else { |
1240 return false; | 1240 return false; |
1241 } | 1241 } |
1242 } | 1242 } |
1243 | 1243 |
1244 void SkGpuDevice::drawSprite(const SkDraw& draw, const SkBitmap& bitmap, | 1244 void SkGpuDevice::drawSprite(const SkDraw& draw, const SkBitmap& bitmap, |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1677 unsigned flags = cinfo.fInfo.isOpaque() ? 0 : kNeedClear_Flag; | 1677 unsigned flags = cinfo.fInfo.isOpaque() ? 0 : kNeedClear_Flag; |
1678 | 1678 |
1679 // layers are never draw in repeat modes, so we can request an approx | 1679 // layers are never draw in repeat modes, so we can request an approx |
1680 // match and ignore any padding. | 1680 // match and ignore any padding. |
1681 const GrTextureProvider::ScratchTexMatch match = (kNever_TileUsage == cinfo.
fTileUsage) ? | 1681 const GrTextureProvider::ScratchTexMatch match = (kNever_TileUsage == cinfo.
fTileUsage) ? |
1682 GrTextureProvider::kApprox_Scr
atchTexMatch : | 1682 GrTextureProvider::kApprox_Scr
atchTexMatch : |
1683 GrTextureProvider::kExact_Scra
tchTexMatch; | 1683 GrTextureProvider::kExact_Scra
tchTexMatch; |
1684 texture.reset(fContext->textureProvider()->refScratchTexture(desc, match)); | 1684 texture.reset(fContext->textureProvider()->refScratchTexture(desc, match)); |
1685 | 1685 |
1686 if (texture) { | 1686 if (texture) { |
1687 SkSurfaceProps props(this->getLeakyProperties().flags(), cinfo.fPixelGeo
metry); | 1687 SkSurfaceProps props(this->surfaceProps().flags(), cinfo.fPixelGeometry)
; |
1688 return SkGpuDevice::Create( | 1688 return SkGpuDevice::Create( |
1689 texture->asRenderTarget(), cinfo.fInfo.width(), cinfo.fInfo.height()
, &props, flags); | 1689 texture->asRenderTarget(), cinfo.fInfo.width(), cinfo.fInfo.height()
, &props, flags); |
1690 } else { | 1690 } else { |
1691 SkErrorInternals::SetError( kInternalError_SkError, | 1691 SkErrorInternals::SetError( kInternalError_SkError, |
1692 "---- failed to create gpu device texture [%
d %d]\n", | 1692 "---- failed to create gpu device texture [%
d %d]\n", |
1693 cinfo.fInfo.width(), cinfo.fInfo.height()); | 1693 cinfo.fInfo.width(), cinfo.fInfo.height()); |
1694 return NULL; | 1694 return NULL; |
1695 } | 1695 } |
1696 } | 1696 } |
1697 | 1697 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1769 #endif | 1769 #endif |
1770 } | 1770 } |
1771 | 1771 |
1772 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { | 1772 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { |
1773 // We always return a transient cache, so it is freed after each | 1773 // We always return a transient cache, so it is freed after each |
1774 // filter traversal. | 1774 // filter traversal. |
1775 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); | 1775 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); |
1776 } | 1776 } |
1777 | 1777 |
1778 #endif | 1778 #endif |
OLD | NEW |