11fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com/* 21fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * Copyright 2012 Google Inc. 31fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * 41fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * Use of this source code is governed by a BSD-style license that can be 51fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * found in the LICENSE file. 61fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com */ 71fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 81fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#ifndef GrClipMaskCache_DEFINED 91fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#define GrClipMaskCache_DEFINED 101fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 111fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#include "GrContext.h" 121fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#include "SkClipStack.h" 13a0b40280a49a8a43af7929ead3b3489951c58501commit-bot@chromium.org#include "SkTypes.h" 141fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 151fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.comclass GrTexture; 161fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 171fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com/** 181fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * The stencil buffer stores the last clip path - providing a single entry 191fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * "cache". This class provides similar functionality for AA clip paths 201fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com */ 21e3beb6bd7de7fa211681abbb0be58e80b19885e0commit-bot@chromium.orgclass GrClipMaskCache : SkNoncopyable { 221fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.compublic: 231fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipMaskCache(); 241fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 251fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com ~GrClipMaskCache() { 261fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 271fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com while (!fStack.empty()) { 281fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* temp = (GrClipStackFrame*) fStack.back(); 291fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com temp->~GrClipStackFrame(); 301fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fStack.pop_back(); 311fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 321fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 331fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 344c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com bool canReuse(int32_t clipGenID, const SkIRect& bounds) { 351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 364c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com SkASSERT(clipGenID != SkClipStack::kWideOpenGenID); 374c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com SkASSERT(clipGenID != SkClipStack::kEmptyGenID); 384c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com 391fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 401fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 414c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // We could reuse the mask if bounds is a subset of last bounds. We'd have to communicate 424c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // an offset to the caller. 43427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon if (back->fLastMask && 44427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon !back->fLastMask->wasDestroyed() && 454c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->fLastBound == bounds && 464c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->fLastClipGenID == clipGenID) { 471fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return true; 481fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 491fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 501fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return false; 511fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 521fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 531fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void reset() { 541fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 55f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org// SkASSERT(false); 561fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 571fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 581fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 591fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 601fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 611fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com back->reset(); 621fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 631fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 641fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com /** 651fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * After a "push" the clip state is entirely open. Currently, the 661fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * entire clip stack will be re-rendered into a new clip mask. 671fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * TODO: can we take advantage of the nested nature of the clips to 681fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * reduce the mask creation cost? 691fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com */ 701fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void push(); 711fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 721fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void pop() { 73f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org //SkASSERT(!fStack.empty()); 741fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 751fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (!fStack.empty()) { 761fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 771fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 781fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com back->~GrClipStackFrame(); 791fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fStack.pop_back(); 801fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 811fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 821fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 834c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t getLastClipGenID() const { 841fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 851fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 864c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com return SkClipStack::kInvalidGenID; 871fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 881fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 894c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com return ((GrClipStackFrame*) fStack.back())->fLastClipGenID; 901fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 911fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 921fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrTexture* getLastMask() { 931fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 941fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 95f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 961fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return NULL; 971fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 981fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 991fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1001fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 101427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon return back->fLastMask; 1021fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1031fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1041fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTexture* getLastMask() const { 1051fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1061fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 107f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1081fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return NULL; 1091fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1101fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1111fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1121fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 113427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon return back->fLastMask; 1141fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1151fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1164c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com void acquireMask(int32_t clipGenID, 117f2703d83da3ab2ae18b45231fd4f11e16cce3184bsalomon const GrSurfaceDesc& desc, 118fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org const SkIRect& bound) { 1191fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1201fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 121f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1221fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 1231fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1241fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1251fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1261fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1274c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->acquireMask(fContext, clipGenID, desc, bound); 1281fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1291fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1301fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com int getLastMaskWidth() const { 1311fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1321fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 133f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1341fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1361fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1371fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1381fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 139427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon if (NULL == back->fLastMask) { 1401fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1411fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1421fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 143427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon return back->fLastMask->width(); 1441fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1451fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1461fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com int getLastMaskHeight() const { 1471fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1481fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 149f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1501fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1511fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1521fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1531fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1541fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 155427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon if (NULL == back->fLastMask) { 1561fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1571fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1581fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 159427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon return back->fLastMask->height(); 1601fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1611fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 162fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org void getLastBound(SkIRect* bound) const { 1631fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1641fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 165f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1661fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com bound->setEmpty(); 1671fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 1681fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1691fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1701fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1711fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1721fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com *bound = back->fLastBound; 1731fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1741fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1751fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void setContext(GrContext* context) { 1761fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fContext = context; 1771fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1781fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1791fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrContext* getContext() { 1801fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return fContext; 1811fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1821fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 183c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon // TODO: Remove this when we hold cache keys instead of refs to textures. 184c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon void purgeResources() { 1851fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com SkDeque::F2BIter iter(fStack); 1861fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com for (GrClipStackFrame* frame = (GrClipStackFrame*) iter.next(); 1871fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame != NULL; 1881fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame = (GrClipStackFrame*) iter.next()) { 1891fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame->reset(); 1901fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1911fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1921fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1931fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.comprivate: 1941fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com struct GrClipStackFrame { 1951fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1961fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame() { 1974c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com this->reset(); 1981fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1991fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2001fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void acquireMask(GrContext* context, 2014c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t clipGenID, 202f2703d83da3ab2ae18b45231fd4f11e16cce3184bsalomon const GrSurfaceDesc& desc, 203fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org const SkIRect& bound) { 2041fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2054c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com fLastClipGenID = clipGenID; 2061fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 207bcf0a52d4f4221b158e68a06ba0c4cc4db011060bsalomon // HACK: set the last param to true to indicate that this request is at 208bcf0a52d4f4221b158e68a06ba0c4cc4db011060bsalomon // flush time and therefore we require a scratch texture with no pending IO operations. 209d309e7aa0efa2d5dd7e7b1af97026fcd3a047e98bsalomon fLastMask.reset(context->textureProvider()->refScratchTexture( 210d309e7aa0efa2d5dd7e7b1af97026fcd3a047e98bsalomon desc, GrTextureProvider::kApprox_ScratchTexMatch, /*flushing=*/true)); 2111fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2121fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastBound = bound; 2131fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 2141fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2151fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void reset () { 2164c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com fLastClipGenID = SkClipStack::kInvalidGenID; 2171fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 218f2703d83da3ab2ae18b45231fd4f11e16cce3184bsalomon GrSurfaceDesc desc; 2191fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 220427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon fLastMask.reset(NULL); 2211fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastBound.setEmpty(); 2221fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 2231fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2244c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t fLastClipGenID; 2254c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // The mask's width & height values are used by GrClipMaskManager to correctly scale the 226c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon // texture coords for the geometry drawn with this mask. TODO: This should be a cache key 227c8dc1f74b6cdda9a43a638292a608c59c1d72d80bsalomon // and not a hard ref to a texture. 228427cf28861867c0ea9aafca3a23878ec4068ad99bsalomon SkAutoTUnref<GrTexture> fLastMask; 2294c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // fLastBound stores the bounding box of the clip mask in clip-stack space. This rect is 2304c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // used by GrClipMaskManager to position a rect and compute texture coords for the mask. 231fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org SkIRect fLastBound; 2321fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com }; 2331fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2341fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrContext* fContext; 2351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com SkDeque fStack; 2361fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 237a0b40280a49a8a43af7929ead3b3489951c58501commit-bot@chromium.org typedef SkNoncopyable INHERITED; 2381fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com}; 2391fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2401fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#endif // GrClipMaskCache_DEFINED 241