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

Side by Side Diff: src/core/SkCanvas.cpp

Issue 1565203002: Revert of add backdrop option to SaveLayerRec (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 11 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 | « samplecode/SampleLayers.cpp ('k') | src/core/SkPictureFlat.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 2008 The Android Open Source Project 2 * Copyright 2008 The Android Open Source Project
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 "SkBitmapDevice.h" 8 #include "SkBitmapDevice.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkCanvasPriv.h" 10 #include "SkCanvasPriv.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 static bool gTreatSpriteAsBitmap; 107 static bool gTreatSpriteAsBitmap;
108 void SkCanvas::Internal_Private_SetTreatSpriteAsBitmap(bool spriteAsBitmap) { 108 void SkCanvas::Internal_Private_SetTreatSpriteAsBitmap(bool spriteAsBitmap) {
109 gTreatSpriteAsBitmap = spriteAsBitmap; 109 gTreatSpriteAsBitmap = spriteAsBitmap;
110 } 110 }
111 bool SkCanvas::Internal_Private_GetTreatSpriteAsBitmap() { 111 bool SkCanvas::Internal_Private_GetTreatSpriteAsBitmap() {
112 return gTreatSpriteAsBitmap; 112 return gTreatSpriteAsBitmap;
113 } 113 }
114 114
115 // experimental for faster tiled drawing... 115 // experimental for faster tiled drawing...
116 //#define SK_ENABLE_CLIP_QUICKREJECT 116 //#define SK_ENABLE_CLIP_QUICKREJECT
117
117 //#define SK_TRACE_SAVERESTORE 118 //#define SK_TRACE_SAVERESTORE
118 119
119 #ifdef SK_TRACE_SAVERESTORE 120 #ifdef SK_TRACE_SAVERESTORE
120 static int gLayerCounter; 121 static int gLayerCounter;
121 static void inc_layer() { ++gLayerCounter; printf("----- inc layer %d\n", gL ayerCounter); } 122 static void inc_layer() { ++gLayerCounter; printf("----- inc layer %d\n", gL ayerCounter); }
122 static void dec_layer() { --gLayerCounter; printf("----- dec layer %d\n", gL ayerCounter); } 123 static void dec_layer() { --gLayerCounter; printf("----- dec layer %d\n", gL ayerCounter); }
123 124
124 static int gRecCounter; 125 static int gRecCounter;
125 static void inc_rec() { ++gRecCounter; printf("----- inc rec %d\n", gRecCoun ter); } 126 static void inc_rec() { ++gRecCounter; printf("----- inc rec %d\n", gRecCoun ter); }
126 static void dec_rec() { --gRecCounter; printf("----- dec rec %d\n", gRecCoun ter); } 127 static void dec_rec() { --gRecCounter; printf("----- dec rec %d\n", gRecCoun ter); }
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 * draw onto the previous layer using the xfermode from the ori ginal paint. 474 * draw onto the previous layer using the xfermode from the ori ginal paint.
474 */ 475 */
475 SkPaint tmp; 476 SkPaint tmp;
476 tmp.setImageFilter(fPaint->getImageFilter()); 477 tmp.setImageFilter(fPaint->getImageFilter());
477 tmp.setXfermode(fPaint->getXfermode()); 478 tmp.setXfermode(fPaint->getXfermode());
478 SkRect storage; 479 SkRect storage;
479 if (rawBounds) { 480 if (rawBounds) {
480 // Make rawBounds include all paint outsets except for those due to image filters. 481 // Make rawBounds include all paint outsets except for those due to image filters.
481 rawBounds = &apply_paint_to_bounds_sans_imagefilter(*fPaint, *ra wBounds, &storage); 482 rawBounds = &apply_paint_to_bounds_sans_imagefilter(*fPaint, *ra wBounds, &storage);
482 } 483 }
483 (void)canvas->internalSaveLayer(SkCanvas::SaveLayerRec(rawBounds, &t mp), 484 (void)canvas->internalSaveLayer(SkCanvas::SaveLayerRec(rawBounds, &t mp, 0),
484 SkCanvas::kFullLayer_SaveLayerStrate gy); 485 SkCanvas::kFullLayer_SaveLayerStrate gy);
485 fTempLayerForImageFilter = true; 486 fTempLayerForImageFilter = true;
486 // we remove the imagefilter/xfermode inside doNext() 487 // we remove the imagefilter/xfermode inside doNext()
487 } 488 }
488 489
489 if (SkDrawLooper* looper = paint.getLooper()) { 490 if (SkDrawLooper* looper = paint.getLooper()) {
490 void* buffer = fLooperContextAllocator.reserveT<SkDrawLooper::Contex t>( 491 void* buffer = fLooperContextAllocator.reserveT<SkDrawLooper::Contex t>(
491 looper->contextSize()); 492 looper->contextSize());
492 fLooperContext = looper->createContext(canvas, buffer); 493 fLooperContext = looper->createContext(canvas, buffer);
493 fIsSimple = false; 494 fIsSimple = false;
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 SaveLayerRec rec(origRec); 1166 SaveLayerRec rec(origRec);
1166 if (gIgnoreSaveLayerBounds) { 1167 if (gIgnoreSaveLayerBounds) {
1167 rec.fBounds = nullptr; 1168 rec.fBounds = nullptr;
1168 } 1169 }
1169 SaveLayerStrategy strategy = this->getSaveLayerStrategy(rec); 1170 SaveLayerStrategy strategy = this->getSaveLayerStrategy(rec);
1170 fSaveCount += 1; 1171 fSaveCount += 1;
1171 this->internalSaveLayer(rec, strategy); 1172 this->internalSaveLayer(rec, strategy);
1172 return this->getSaveCount() - 1; 1173 return this->getSaveCount() - 1;
1173 } 1174 }
1174 1175
1175 static void draw_filter_into_device(SkBaseDevice* src, const SkImageFilter* filt er, 1176 static void draw_filter_into_device(SkBaseDevice* src, SkImageFilter* filter, Sk BaseDevice* dst) {
1176 SkBaseDevice* dst, const SkMatrix& ctm) {
1177 1177
1178 SkBitmap srcBM; 1178 SkBitmap srcBM;
1179 1179
1180 #if SK_SUPPORT_GPU 1180 #if SK_SUPPORT_GPU
1181 GrRenderTarget* srcRT = src->accessRenderTarget(); 1181 GrRenderTarget* srcRT = src->accessRenderTarget();
1182 if (srcRT && !srcRT->asTexture() && dst->accessRenderTarget()) { 1182 if (srcRT && !srcRT->asTexture() && dst->accessRenderTarget()) {
1183 // When both the src & the dst are on the gpu but the src doesn't have a texture, 1183 // When both the src & the dst are on the gpu but the src doesn't have a texture,
1184 // we create a temporary texture for the draw. 1184 // we create a temporary texture for the draw.
1185 // TODO: we should actually only copy the portion of the source needed t o apply the image 1185 // TODO: we should actually only copy the portion of the source needed t o apply the image
1186 // filter 1186 // filter
1187 GrContext* context = srcRT->getContext(); 1187 GrContext* context = srcRT->getContext();
1188 SkAutoTUnref<GrTexture> tex(context->textureProvider()->createTexture(sr cRT->desc(), true)); 1188 SkAutoTUnref<GrTexture> tex(context->textureProvider()->createTexture(sr cRT->desc(), true));
1189 1189
1190 context->copySurface(tex, srcRT); 1190 context->copySurface(tex, srcRT);
1191 1191
1192 GrWrapTextureInBitmap(tex, src->width(), src->height(), src->isOpaque(), &srcBM); 1192 GrWrapTextureInBitmap(tex, src->width(), src->height(), src->isOpaque(), &srcBM);
1193 } else 1193 } else
1194 #endif 1194 #endif
1195 { 1195 {
1196 srcBM = src->accessBitmap(false); 1196 srcBM = src->accessBitmap(false);
1197 } 1197 }
1198 1198
1199 SkCanvas c(dst); 1199 SkCanvas c(dst);
1200 1200
1201 SkAutoTUnref<SkImageFilter> localF(filter->newWithLocalMatrix(ctm));
1202 SkPaint p; 1201 SkPaint p;
1203 p.setImageFilter(localF); 1202 p.setImageFilter(filter);
1204 const SkScalar x = SkIntToScalar(src->getOrigin().x()); 1203 c.drawBitmap(srcBM, 0, 0, &p);
1205 const SkScalar y = SkIntToScalar(src->getOrigin().y());
1206 c.drawBitmap(srcBM, x, y, &p);
1207 } 1204 }
1208 1205
1209 void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra tegy) { 1206 void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra tegy) {
1210 const SkRect* bounds = rec.fBounds; 1207 const SkRect* bounds = rec.fBounds;
1211 const SkPaint* paint = rec.fPaint; 1208 const SkPaint* paint = rec.fPaint;
1212 SaveLayerFlags saveLayerFlags = rec.fSaveLayerFlags; 1209 SaveLayerFlags saveLayerFlags = rec.fSaveLayerFlags;
1213 1210
1214 #ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG 1211 #ifndef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
1215 saveLayerFlags &= ~kDontClipToLayer_PrivateSaveLayerFlag; 1212 saveLayerFlags &= ~kDontClipToLayer_PrivateSaveLayerFlag;
1216 #endif 1213 #endif
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 newDev = SkBitmapDevice::Create(createInfo.fInfo, surfaceProps); 1261 newDev = SkBitmapDevice::Create(createInfo.fInfo, surfaceProps);
1265 if (nullptr == newDev) { 1262 if (nullptr == newDev) {
1266 SkErrorInternals::SetError(kInternalError_SkError, 1263 SkErrorInternals::SetError(kInternalError_SkError,
1267 "Unable to create device for layer.") ; 1264 "Unable to create device for layer.") ;
1268 return; 1265 return;
1269 } 1266 }
1270 forceSpriteOnRestore = true; 1267 forceSpriteOnRestore = true;
1271 } 1268 }
1272 device = newDev; 1269 device = newDev;
1273 } 1270 }
1271
1274 device->setOrigin(ir.fLeft, ir.fTop); 1272 device->setOrigin(ir.fLeft, ir.fTop);
1275 1273
1276 if (rec.fBackdrop) { 1274 if (0) {
1277 draw_filter_into_device(fMCRec->fTopLayer->fDevice, rec.fBackdrop, devic e, fMCRec->fMatrix); 1275 draw_filter_into_device(fMCRec->fTopLayer->fDevice, nullptr, device);
1278 } 1276 }
1279 1277
1280 DeviceCM* layer = 1278 DeviceCM* layer =
1281 new DeviceCM(device, paint, this, fConservativeRasterClip, forceSpri teOnRestore); 1279 new DeviceCM(device, paint, this, fConservativeRasterClip, forceSpri teOnRestore);
1282 device->unref(); 1280 device->unref();
1283 1281
1284 layer->fNext = fMCRec->fTopLayer; 1282 layer->fNext = fMCRec->fTopLayer;
1285 fMCRec->fLayer = layer; 1283 fMCRec->fLayer = layer;
1286 fMCRec->fTopLayer = layer; // this field is NOT an owner of layer 1284 fMCRec->fTopLayer = layer; // this field is NOT an owner of layer
1287 } 1285 }
(...skipping 1736 matching lines...) Expand 10 before | Expand all | Expand 10 after
3024 } 3022 }
3025 3023
3026 if (matrix) { 3024 if (matrix) {
3027 canvas->concat(*matrix); 3025 canvas->concat(*matrix);
3028 } 3026 }
3029 } 3027 }
3030 3028
3031 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { 3029 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() {
3032 fCanvas->restoreToCount(fSaveCount); 3030 fCanvas->restoreToCount(fSaveCount);
3033 } 3031 }
OLDNEW
« no previous file with comments | « samplecode/SampleLayers.cpp ('k') | src/core/SkPictureFlat.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698