GrClipMaskCache.h revision f6de475e5cbd143f348ff7738919e397b7fe7f57
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 "GrNoncopyable.h" 131fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#include "SkClipStack.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 */ 211fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.comclass GrClipMaskCache : public GrNoncopyable { 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 394c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com if (SkClipStack::kInvalidGenID == clipGenID) { 401fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return false; 411fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 421fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 431fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 441fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 454c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // We could reuse the mask if bounds is a subset of last bounds. We'd have to communicate 464c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // an offset to the caller. 471fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (back->fLastMask.texture() && 484c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->fLastBound == bounds && 494c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->fLastClipGenID == clipGenID) { 501fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return true; 511fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 521fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 531fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return false; 541fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 551fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 561fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void reset() { 571fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 58f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org// SkASSERT(false); 591fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 601fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 611fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 621fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 631fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 641fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com back->reset(); 651fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 661fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 671fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com /** 681fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * After a "push" the clip state is entirely open. Currently, the 691fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * entire clip stack will be re-rendered into a new clip mask. 701fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * TODO: can we take advantage of the nested nature of the clips to 711fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com * reduce the mask creation cost? 721fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com */ 731fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void push(); 741fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 751fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void pop() { 76f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org //SkASSERT(!fStack.empty()); 771fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 781fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (!fStack.empty()) { 791fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 801fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 811fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com back->~GrClipStackFrame(); 821fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fStack.pop_back(); 831fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 841fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 851fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 864c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t getLastClipGenID() const { 871fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 881fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 894c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com return SkClipStack::kInvalidGenID; 901fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 911fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 924c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com return ((GrClipStackFrame*) fStack.back())->fLastClipGenID; 931fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 941fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 951fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrTexture* getLastMask() { 961fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 971fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 98f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 991fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return NULL; 1001fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1011fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1021fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1031fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1041fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture(); 1051fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1061fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1071fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTexture* getLastMask() const { 1081fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1091fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 110f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1111fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return NULL; 1121fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1131fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1141fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1151fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1161fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture(); 1171fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1181fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1194c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com void acquireMask(int32_t clipGenID, 1201fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTextureDesc& desc, 121fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org const SkIRect& bound) { 1221fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1231fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 124f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1251fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 1261fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1271fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1281fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1291fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1304c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com back->acquireMask(fContext, clipGenID, desc, bound); 1311fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1321fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1331fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com int getLastMaskWidth() const { 1341fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 136f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1371fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1381fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1391fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1401fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1411fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1421fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (NULL == back->fLastMask.texture()) { 1431fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1441fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1451fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1461fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture()->width(); 1471fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1481fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1491fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com int getLastMaskHeight() const { 1501fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1511fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 152f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1531fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1541fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1551fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1561fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1571fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1581fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (NULL == back->fLastMask.texture()) { 1591fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return -1; 1601fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1611fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1621fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return back->fLastMask.texture()->height(); 1631fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1641fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 165fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org void getLastBound(SkIRect* bound) const { 1661fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1671fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com if (fStack.empty()) { 168f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 1691fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com bound->setEmpty(); 1701fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return; 1711fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1721fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1731fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame* back = (GrClipStackFrame*) fStack.back(); 1741fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1751fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com *bound = back->fLastBound; 1761fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1771fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1781fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void setContext(GrContext* context) { 1791fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fContext = context; 1801fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1811fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1821fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrContext* getContext() { 1831fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com return fContext; 1841fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1851fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1861fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void releaseResources() { 1871fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1881fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com SkDeque::F2BIter iter(fStack); 1891fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com for (GrClipStackFrame* frame = (GrClipStackFrame*) iter.next(); 1901fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame != NULL; 1911fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame = (GrClipStackFrame*) iter.next()) { 1921fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com frame->reset(); 1931fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1941fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 1951fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1961fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.comprivate: 1971fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com struct GrClipStackFrame { 1981fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 1991fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrClipStackFrame() { 2004c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com this->reset(); 2011fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com } 2021fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2031fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com void acquireMask(GrContext* context, 2044c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com int32_t clipGenID, 2051fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com const GrTextureDesc& desc, 206fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org const SkIRect& bound) { 2071fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2084c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com fLastClipGenID = clipGenID; 2091fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2101fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastMask.set(context, desc); 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 2181fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrTextureDesc desc; 2191fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2201fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com fLastMask.set(NULL, desc); 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 2264c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // texture coords for the geometry drawn with this mask. 2271fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrAutoScratchTexture fLastMask; 2284c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // fLastBound stores the bounding box of the clip mask in clip-stack space. This rect is 2294c2443e36fdc6c095b17e90baa4a2f26a6f00b08bsalomon@google.com // used by GrClipMaskManager to position a rect and compute texture coords for the mask. 230fd03d4a829efe2d77a712fd991927c55f59a2ffecommit-bot@chromium.org SkIRect fLastBound; 2311fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com }; 2321fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2331fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com GrContext* fContext; 2341fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com SkDeque fStack; 2351fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2361fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com typedef GrNoncopyable INHERITED; 2371fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com}; 2381fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com 2391fcc1b80994f7bfa60bbc74e924484da09b47e3brobertphillips@google.com#endif // GrClipMaskCache_DEFINED 240