OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "GrLayerCache.h" | 8 #include "GrLayerCache.h" |
9 #include "GrLayerHoister.h" | 9 #include "GrLayerHoister.h" |
10 #include "GrRecordReplaceDraw.h" | 10 #include "GrRecordReplaceDraw.h" |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 | 226 |
227 prepare_for_hoisting(layerCache, topLevelPicture, initialMat, info, srcI
R, dstIR, | 227 prepare_for_hoisting(layerCache, topLevelPicture, initialMat, info, srcI
R, dstIR, |
228 needRendering, recycled, false, numSamples); | 228 needRendering, recycled, false, numSamples); |
229 } | 229 } |
230 } | 230 } |
231 | 231 |
232 void GrLayerHoister::DrawLayersToAtlas(GrContext* context, | 232 void GrLayerHoister::DrawLayersToAtlas(GrContext* context, |
233 const SkTDArray<GrHoistedLayer>& atlased)
{ | 233 const SkTDArray<GrHoistedLayer>& atlased)
{ |
234 if (atlased.count() > 0) { | 234 if (atlased.count() > 0) { |
235 // All the atlased layers are rendered into the same GrTexture | 235 // All the atlased layers are rendered into the same GrTexture |
| 236 SkSurfaceProps props(0, kUnknown_SkPixelGeometry); |
236 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTargetDirect( | 237 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTargetDirect( |
237 atlased[0].fLayer->texture()->asRenderTa
rget(), NULL)); | 238 atlased[0].fLayer->texture()->asRenderTa
rget(), &props)); |
238 | 239 |
239 SkCanvas* atlasCanvas = surface->getCanvas(); | 240 SkCanvas* atlasCanvas = surface->getCanvas(); |
240 | 241 |
241 for (int i = 0; i < atlased.count(); ++i) { | 242 for (int i = 0; i < atlased.count(); ++i) { |
242 const GrCachedLayer* layer = atlased[i].fLayer; | 243 const GrCachedLayer* layer = atlased[i].fLayer; |
243 const SkPicture* pict = atlased[i].fPicture; | 244 const SkPicture* pict = atlased[i].fPicture; |
244 const SkIPoint offset = SkIPoint::Make(layer->srcIR().fLeft, layer->
srcIR().fTop); | 245 const SkIPoint offset = SkIPoint::Make(layer->srcIR().fLeft, layer->
srcIR().fTop); |
245 SkDEBUGCODE(const SkPaint* layerPaint = layer->paint();) | 246 SkDEBUGCODE(const SkPaint* layerPaint = layer->paint();) |
246 | 247 |
247 SkASSERT(!layerPaint || !layerPaint->getImageFilter()); | 248 SkASSERT(!layerPaint || !layerPaint->getImageFilter()); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 layer->setOffset(offset); | 318 layer->setOffset(offset); |
318 } | 319 } |
319 | 320 |
320 void GrLayerHoister::DrawLayers(GrContext* context, const SkTDArray<GrHoistedLay
er>& layers) { | 321 void GrLayerHoister::DrawLayers(GrContext* context, const SkTDArray<GrHoistedLay
er>& layers) { |
321 for (int i = 0; i < layers.count(); ++i) { | 322 for (int i = 0; i < layers.count(); ++i) { |
322 GrCachedLayer* layer = layers[i].fLayer; | 323 GrCachedLayer* layer = layers[i].fLayer; |
323 const SkPicture* pict = layers[i].fPicture; | 324 const SkPicture* pict = layers[i].fPicture; |
324 const SkIPoint offset = SkIPoint::Make(layer->srcIR().fLeft, layer->srcI
R().fTop); | 325 const SkIPoint offset = SkIPoint::Make(layer->srcIR().fLeft, layer->srcI
R().fTop); |
325 | 326 |
326 // Each non-atlased layer has its own GrTexture | 327 // Each non-atlased layer has its own GrTexture |
| 328 SkSurfaceProps props(0, kUnknown_SkPixelGeometry); |
327 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTargetDirect( | 329 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTargetDirect( |
328 layer->texture()->asRenderTarget(), NULL
)); | 330 layer->texture()->asRenderTarget(), &pro
ps)); |
329 | 331 |
330 SkCanvas* layerCanvas = surface->getCanvas(); | 332 SkCanvas* layerCanvas = surface->getCanvas(); |
331 | 333 |
332 SkASSERT(0 == layer->rect().fLeft && 0 == layer->rect().fTop); | 334 SkASSERT(0 == layer->rect().fLeft && 0 == layer->rect().fTop); |
333 | 335 |
334 // Add a rect clip to make sure the rendering doesn't | 336 // Add a rect clip to make sure the rendering doesn't |
335 // extend beyond the boundaries of the layer | 337 // extend beyond the boundaries of the layer |
336 const SkRect bound = SkRect::Make(layer->rect()); | 338 const SkRect bound = SkRect::Make(layer->rect()); |
337 layerCanvas->clipRect(bound); | 339 layerCanvas->clipRect(bound); |
338 layerCanvas->clear(SK_ColorTRANSPARENT); | 340 layerCanvas->clear(SK_ColorTRANSPARENT); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 void GrLayerHoister::PurgeCache(GrContext* context) { | 374 void GrLayerHoister::PurgeCache(GrContext* context) { |
373 #if !GR_CACHE_HOISTED_LAYERS | 375 #if !GR_CACHE_HOISTED_LAYERS |
374 GrLayerCache* layerCache = context->getLayerCache(); | 376 GrLayerCache* layerCache = context->getLayerCache(); |
375 | 377 |
376 // This code completely clears out the atlas. It is required when | 378 // This code completely clears out the atlas. It is required when |
377 // caching is disabled so the atlas doesn't fill up and force more | 379 // caching is disabled so the atlas doesn't fill up and force more |
378 // free floating layers | 380 // free floating layers |
379 layerCache->purgeAll(); | 381 layerCache->purgeAll(); |
380 #endif | 382 #endif |
381 } | 383 } |
OLD | NEW |