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. 431fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (back->fLastMask.texture() && 444c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->fLastBound == bounds && 454c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->fLastClipGenID == clipGenID) { 461fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return true; 471fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 481fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 491fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return false; 501fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 511fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 521fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void reset() { 531fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 54f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org// SkASSERT(false); 551fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 561fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 571fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 581fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 591fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 601fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com back->reset(); 611fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 621fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 631fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com /** 641fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * After a "push" the clip state is entirely open. Currently, the 651fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * entire clip stack will be re-rendered into a new clip mask. 661fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * TODO: can we take advantage of the nested nature of the clips to 671fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * reduce the mask creation cost? 681fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com */ 691fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void push(); 701fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 711fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void pop() { 72f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org //SkASSERT(!fStack.empty()); 731fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 741fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (!fStack.empty()) { 751fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 761fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 771fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com back->~GrClipStackFrame(); 781fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fStack.pop_back(); 791fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 801fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 811fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 824c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t getLastClipGenID() const { 831fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 841fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 854c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com return SkClipStack::kInvalidGenID; 861fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 871fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 884c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com return ((GrClipStackFrame*) fStack.back())->fLastClipGenID; 891fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 901fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 911fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrTexture* getLastMask() { 921fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 931fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 94f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 951fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return NULL; 961fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 971fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 981fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 991fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1001fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture(); 1011fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1021fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1031fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTexture* getLastMask() const { 1041fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1051fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 106f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1071fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return NULL; 1081fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1091fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1101fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1111fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1121fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture(); 1131fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1141fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1154c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com void acquireMask(int32_t clipGenID, 1161fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTextureDesc& desc, 117fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org const SkIRect& bound) { 1181fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1191fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 120f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1211fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 1221fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1231fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1241fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1251fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1264c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->acquireMask(fContext, clipGenID, desc, bound); 1271fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1281fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1291fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com int getLastMaskWidth() const { 1301fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1311fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 132f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1331fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1341fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1361fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1371fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1381fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (NULL == back->fLastMask.texture()) { 1391fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1401fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1411fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1421fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture()->width(); 1431fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1441fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1451fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com int getLastMaskHeight() const { 1461fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1471fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 148f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1491fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1501fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1511fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1521fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1531fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1541fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (NULL == back->fLastMask.texture()) { 1551fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1561fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1571fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1581fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture()->height(); 1591fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1601fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 161fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org void getLastBound(SkIRect* bound) const { 1621fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1631fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 164f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1651fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com bound->setEmpty(); 1661fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 1671fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1681fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1691fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1701fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1711fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com *bound = back->fLastBound; 1721fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1731fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1741fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void setContext(GrContext* context) { 1751fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fContext = context; 1761fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1771fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1781fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrContext* getContext() { 1791fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return fContext; 1801fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1811fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1821fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void releaseResources() { 1831fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1841fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com SkDeque::F2BIter iter(fStack); 1851fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com for (GrClipStackFrame* frame = (GrClipStackFrame*) iter.next(); 1861fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame != NULL; 1871fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame = (GrClipStackFrame*) iter.next()) { 1881fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame->reset(); 1891fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1901fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1911fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1921fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.comprivate: 1931fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com struct GrClipStackFrame { 1941fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1951fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame() { 1964c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com this->reset(); 1971fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1981fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1991fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void acquireMask(GrContext* context, 2004c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t clipGenID, 2011fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTextureDesc& desc, 202fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org const SkIRect& bound) { 2031fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2044c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com fLastClipGenID = clipGenID; 2051fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2061fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastMask.set(context, desc); 2071fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2081fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastBound = bound; 2091fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 2101fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2111fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void reset () { 2124c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com fLastClipGenID = SkClipStack::kInvalidGenID; 2131fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2141fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrTextureDesc desc; 2151fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2161fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastMask.set(NULL, desc); 2171fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastBound.setEmpty(); 2181fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 2191fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2204c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t fLastClipGenID; 2214c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // The mask's width & height values are used by GrClipMaskManager to correctly scale the 2224c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // texture coords for the geometry drawn with this mask. 2231fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrAutoScratchTexture fLastMask; 2244c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // fLastBound stores the bounding box of the clip mask in clip-stack space. This rect is 2254c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // used by GrClipMaskManager to position a rect and compute texture coords for the mask. 226fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org SkIRect fLastBound; 2271fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com }; 2281fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2291fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrContext* fContext; 2301fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com SkDeque fStack; 2311fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 232a0b40280a49a8a43af7929ead3b3489951c58501commit-bot@chromium.org typedef SkNoncopyable INHERITED; 2331fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com}; 2341fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#endif // GrClipMaskCache_DEFINED 236