Home | History | Annotate | Download | only in gpu
      1 
      2 /*
      3  * Copyright 2012 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #include "SkClipStack.h"
     10 #include "SkTLList.h"
     11 
     12 namespace GrReducedClip {
     13 
     14 typedef SkTLList<SkClipStack::Element> ElementList;
     15 
     16 enum InitialState {
     17     kAllIn_InitialState,
     18     kAllOut_InitialState,
     19 };
     20 
     21 /**
     22  * This function takes a clip stack and a query rectangle and it produces a reduced set of
     23  * SkClipStack::Elements that are equivalent to applying the full stack to the rectangle. The
     24  * initial state of the query rectangle before the first clip element is applied is returned via
     25  * initialState. Optionally, the caller can request a tighter bounds on the clip be returned via
     26  * tighterBounds. If not NULL, tighterBounds will always be contained by queryBounds after return.
     27  * If tighterBounds is specified then it is assumed that the caller will implicitly clip against it.
     28  * If the caller specifies non-NULL for requiresAA then it will indicate whether anti-aliasing is
     29  * required to process any of the elements in the result.
     30  *
     31  * This may become a member function of SkClipStack when its interface is determined to be stable.
     32  */
     33 void ReduceClipStack(const SkClipStack& stack,
     34                      const SkIRect& queryBounds,
     35                      ElementList* result,
     36                      InitialState* initialState,
     37                      SkIRect* tighterBounds = NULL,
     38                      bool* requiresAA = NULL);
     39 
     40 } // namespace GrReducedClip
     41