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 clip
     24  * stack generation id that represents the list of elements is returned in resultGenID. The
     25  * initial state of the query rectangle before the first clip element is applied is returned via
     26  * initialState. Optionally, the caller can request a tighter bounds on the clip be returned via
     27  * tighterBounds. If not NULL, tighterBounds will always be contained by queryBounds after return.
     28  * If tighterBounds is specified then it is assumed that the caller will implicitly clip against it.
     29  * If the caller specifies non-NULL for requiresAA then it will indicate whether anti-aliasing is
     30  * required to process any of the elements in the result.
     31  *
     32  * This may become a member function of SkClipStack when its interface is determined to be stable.
     33  * Marked SK_API so that SkLua can call this in a shared library build.
     34  */
     35 SK_API void ReduceClipStack(const SkClipStack& stack,
     36                             const SkIRect& queryBounds,
     37                             ElementList* result,
     38                             int32_t* resultGenID,
     39                             InitialState* initialState,
     40                             SkIRect* tighterBounds = NULL,
     41                             bool* requiresAA = NULL);
     42 
     43 } // namespace GrReducedClip
     44