Index: include/core/SkCanvas.h |
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h |
index e639212e384b0f58dda00b3e8086cbe03a059688..4a2d5ae976b4be95a9f692dc4a7ed18f5c9d966b 100644 |
--- a/include/core/SkCanvas.h |
+++ b/include/core/SkCanvas.h |
@@ -935,7 +935,26 @@ public: |
// do nothing. Subclasses may do something |
} |
+ /** |
robertphillips
2014/02/27 14:12:36
Maybe "With this call the client asserts ..." to e
|
+ * This call asserts that subsequent draw operations (up to the matching popCull() call) |
+ * are fully contained within the given bounding box. The assertion is not enforced, |
+ * but the information might be used to quick-reject command blocks, so an incorrect |
+ * bounding box may result in incomplete rendering. |
+ */ |
+ void pushCull(const SkRect& cullRect) { |
+ ++fCullCount; |
+ this->onPushCull(cullRect); |
+ } |
+ /** |
+ * Terminates the current culling block, and restores the previous one (if any). |
+ */ |
+ void popCull() { |
+ if (fCullCount > 0) { |
+ --fCullCount; |
+ this->onPopCull(); |
+ } |
+ } |
////////////////////////////////////////////////////////////////////////// |
/** Get the current bounder object. |
@@ -1101,6 +1120,9 @@ protected: |
// can perform copy-on-write or invalidate any cached images |
void predrawNotify(); |
+ virtual void onPushCull(const SkRect& cullRect); |
+ virtual void onPopCull(); |
+ |
private: |
class MCRec; |
@@ -1113,6 +1135,7 @@ private: |
SkBounder* fBounder; |
int fSaveLayerCount; // number of successful saveLayer calls |
+ int fCullCount; // number of active culls |
SkMetaData* fMetaData; |