|
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 |