• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef GrReducedClip_DEFINED
10 #define GrReducedClip_DEFINED
11 
12 #include "SkClipStack.h"
13 #include "SkTLList.h"
14 
15 namespace GrReducedClip {
16 
17 typedef SkTLList<SkClipStack::Element> ElementList;
18 
19 enum InitialState {
20     kAllIn_InitialState,
21     kAllOut_InitialState,
22 };
23 
24 /**
25  * This function takes a clip stack and a query rectangle and it produces a reduced set of
26  * SkClipStack::Elements that are equivalent to applying the full stack to the rectangle. The clip
27  * stack generation id that represents the list of elements is returned in resultGenID. The
28  * initial state of the query rectangle before the first clip element is applied is returned via
29  * initialState. Optionally, the caller can request a tighter bounds on the clip be returned via
30  * tighterBounds. If not NULL, tighterBounds will always be contained by queryBounds after return.
31  * If tighterBounds is specified then it is assumed that the caller will implicitly clip against it.
32  * If the caller specifies non-NULL for requiresAA then it will indicate whether anti-aliasing is
33  * required to process any of the elements in the result.
34  *
35  * This may become a member function of SkClipStack when its interface is determined to be stable.
36  * Marked SK_API so that SkLua can call this in a shared library build.
37  */
38 SK_API void ReduceClipStack(const SkClipStack& stack,
39                             const SkIRect& queryBounds,
40                             ElementList* result,
41                             int32_t* resultGenID,
42                             InitialState* initialState,
43                             SkIRect* tighterBounds = NULL,
44                             bool* requiresAA = NULL);
45 
46 } // namespace GrReducedClip
47 
48 #endif
49