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

Side by Side Diff: include/core/SkCanvas.h

Issue 794263002: Cull pushCull and popCull from Skia. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix debugger Created 6 years 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 | « debugger/QT/SkDebuggerGUI.cpp ('k') | include/utils/SkDumpCanvas.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 2006 The Android Open Source Project 2 * Copyright 2006 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 #ifndef SkCanvas_DEFINED 8 #ifndef SkCanvas_DEFINED
9 #define SkCanvas_DEFINED 9 #define SkCanvas_DEFINED
10 10
(...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 virtual void beginCommentGroup(const char* /*description*/) { 1048 virtual void beginCommentGroup(const char* /*description*/) {
1049 // do nothing. Subclasses may do something 1049 // do nothing. Subclasses may do something
1050 } 1050 }
1051 virtual void addComment(const char* /*kywd*/, const char* /*value*/) { 1051 virtual void addComment(const char* /*kywd*/, const char* /*value*/) {
1052 // do nothing. Subclasses may do something 1052 // do nothing. Subclasses may do something
1053 } 1053 }
1054 virtual void endCommentGroup() { 1054 virtual void endCommentGroup() {
1055 // do nothing. Subclasses may do something 1055 // do nothing. Subclasses may do something
1056 } 1056 }
1057 1057
1058 /**
1059 * With this call the client asserts that subsequent draw operations (up to the
1060 * matching popCull()) are fully contained within the given bounding box. T he assertion
1061 * is not enforced, but the information might be used to quick-reject comma nd blocks,
1062 * so an incorrect bounding box may result in incomplete rendering.
1063 */
1064 void pushCull(const SkRect& cullRect);
1065
1066 /**
1067 * Terminates the current culling block, and restores the previous one (if any).
1068 */
1069 void popCull();
1070
1071 ////////////////////////////////////////////////////////////////////////// 1058 //////////////////////////////////////////////////////////////////////////
1072 1059
1073 /** Get the current filter object. The filter's reference count is not 1060 /** Get the current filter object. The filter's reference count is not
1074 affected. The filter is saved/restored, just like the matrix and clip. 1061 affected. The filter is saved/restored, just like the matrix and clip.
1075 @return the canvas' filter (or NULL). 1062 @return the canvas' filter (or NULL).
1076 */ 1063 */
1077 SkDrawFilter* getDrawFilter() const; 1064 SkDrawFilter* getDrawFilter() const;
1078 1065
1079 /** Set the new filter (or NULL). Pass NULL to clear any existing filter. 1066 /** Set the new filter (or NULL). Pass NULL to clear any existing filter.
1080 As a convenience, the parameter is returned. If an existing filter 1067 As a convenience, the parameter is returned. If an existing filter
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 // If non-NULL, The imageFilter parameter will be used to expand the clip 1230 // If non-NULL, The imageFilter parameter will be used to expand the clip
1244 // and offscreen bounds for any margin required by the filter DAG. 1231 // and offscreen bounds for any margin required by the filter DAG.
1245 bool clipRectBounds(const SkRect* bounds, SaveFlags flags, 1232 bool clipRectBounds(const SkRect* bounds, SaveFlags flags,
1246 SkIRect* intersection, 1233 SkIRect* intersection,
1247 const SkImageFilter* imageFilter = NULL); 1234 const SkImageFilter* imageFilter = NULL);
1248 1235
1249 // notify our surface (if we have one) that we are about to draw, so it 1236 // notify our surface (if we have one) that we are about to draw, so it
1250 // can perform copy-on-write or invalidate any cached images 1237 // can perform copy-on-write or invalidate any cached images
1251 void predrawNotify(); 1238 void predrawNotify();
1252 1239
1253 virtual void onPushCull(const SkRect& cullRect);
1254 virtual void onPopCull();
1255
1256 private: 1240 private:
1257 class MCRec; 1241 class MCRec;
1258 1242
1259 SkClipStack fClipStack; 1243 SkClipStack fClipStack;
1260 SkDeque fMCStack; 1244 SkDeque fMCStack;
1261 // points to top of stack 1245 // points to top of stack
1262 MCRec* fMCRec; 1246 MCRec* fMCRec;
1263 // the first N recs that can fit here mean we won't call malloc 1247 // the first N recs that can fit here mean we won't call malloc
1264 uint32_t fMCRecStorage[32]; 1248 uint32_t fMCRecStorage[32];
1265 1249
1266 const SkSurfaceProps fProps; 1250 const SkSurfaceProps fProps;
1267 1251
1268 int fSaveCount; // value returned by getSaveCount() 1252 int fSaveCount; // value returned by getSaveCount()
1269 int fSaveLayerCount; // number of successful saveLayer calls 1253 int fSaveLayerCount; // number of successful saveLayer calls
1270 int fCullCount; // number of active culls
1271 1254
1272 SkMetaData* fMetaData; 1255 SkMetaData* fMetaData;
1273 1256
1274 SkSurface_Base* fSurfaceBase; 1257 SkSurface_Base* fSurfaceBase;
1275 SkSurface_Base* getSurfaceBase() const { return fSurfaceBase; } 1258 SkSurface_Base* getSurfaceBase() const { return fSurfaceBase; }
1276 void setSurfaceBase(SkSurface_Base* sb) { 1259 void setSurfaceBase(SkSurface_Base* sb) {
1277 fSurfaceBase = sb; 1260 fSurfaceBase = sb;
1278 } 1261 }
1279 friend class SkSurface_Base; 1262 friend class SkSurface_Base;
1280 friend class SkSurface_Gpu; 1263 friend class SkSurface_Gpu;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 explicit AutoValidateClip(SkCanvas* canvas) : fCanvas(canvas) { 1361 explicit AutoValidateClip(SkCanvas* canvas) : fCanvas(canvas) {
1379 fCanvas->validateClip(); 1362 fCanvas->validateClip();
1380 } 1363 }
1381 ~AutoValidateClip() { fCanvas->validateClip(); } 1364 ~AutoValidateClip() { fCanvas->validateClip(); }
1382 1365
1383 private: 1366 private:
1384 const SkCanvas* fCanvas; 1367 const SkCanvas* fCanvas;
1385 }; 1368 };
1386 1369
1387 #ifdef SK_DEBUG 1370 #ifdef SK_DEBUG
1388 // The cull stack rects are in device-space
1389 SkTDArray<SkIRect> fCullStack;
1390 void validateCull(const SkIRect&);
1391 void validateClip() const; 1371 void validateClip() const;
1392 #else 1372 #else
1393 void validateClip() const {} 1373 void validateClip() const {}
1394 #endif 1374 #endif
1395 1375
1396 typedef SkRefCnt INHERITED; 1376 typedef SkRefCnt INHERITED;
1397 }; 1377 };
1398 1378
1399 /** Stack helper class to automatically call restoreToCount() on the canvas 1379 /** Stack helper class to automatically call restoreToCount() on the canvas
1400 when this object goes out of scope. Use this to guarantee that the canvas 1380 when this object goes out of scope. Use this to guarantee that the canvas
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 1491
1512 class SkCanvasClipVisitor { 1492 class SkCanvasClipVisitor {
1513 public: 1493 public:
1514 virtual ~SkCanvasClipVisitor(); 1494 virtual ~SkCanvasClipVisitor();
1515 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; 1495 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0;
1516 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; 1496 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0;
1517 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; 1497 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0;
1518 }; 1498 };
1519 1499
1520 #endif 1500 #endif
OLDNEW
« no previous file with comments | « debugger/QT/SkDebuggerGUI.cpp ('k') | include/utils/SkDumpCanvas.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698