diff options
author | 2012-08-07 15:38:08 +0000 | |
---|---|---|
committer | 2012-08-07 15:38:08 +0000 | |
commit | 46f935002c2b25331e552520dc7b1a912e12dfdc (patch) | |
tree | 87a2f22fa0bffc779a68d45a39ba24115d6341a2 /src/gpu/SkGpuDevice.cpp | |
parent | e69137620ab0b5b40d230318c8e11b822f63cb9d (diff) |
Added SkClipStack portion of new clip mask caching system
http://codereview.appspot.com/6449089/
git-svn-id: http://skia.googlecode.com/svn/trunk@4978 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/SkGpuDevice.cpp')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 9ed1ccbdf0..592cdfc6e6 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -345,16 +345,35 @@ void SkGpuDevice::writePixels(const SkBitmap& bitmap, int x, int y, config, bitmap.getPixels(), bitmap.rowBytes()); } +namespace { +void purgeClipCB(int genID, void* data) { + GrContext* context = (GrContext*) data; + + if (SkClipStack::kInvalidGenID == genID || + SkClipStack::kEmptyGenID == genID || + SkClipStack::kWideOpenGenID == genID) { + // none of these cases will have a cached clip mask + return; + } + +} +}; + void SkGpuDevice::onAttachToCanvas(SkCanvas* canvas) { INHERITED::onAttachToCanvas(canvas); // Canvas promises that this ptr is valid until onDetachFromCanvas is called fClipData.fClipStack = canvas->getClipStack(); + + fClipData.fClipStack->addPurgeClipCallback(purgeClipCB, fContext); } void SkGpuDevice::onDetachFromCanvas() { INHERITED::onDetachFromCanvas(); + // TODO: iterate through the clip stack and clean up any cached clip masks + fClipData.fClipStack->removePurgeClipCallback(purgeClipCB, fContext); + fClipData.fClipStack = NULL; } |