Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / gpu / GrStencilBuffer.h
1
2 /*
3  * Copyright 2011 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
10 #ifndef GrStencilBuffer_DEFINED
11 #define GrStencilBuffer_DEFINED
12
13 #include "GrClipData.h"
14 #include "GrGpuResource.h"
15
16 class GrRenderTarget;
17 class GrResourceKey;
18
19 class GrStencilBuffer : public GrGpuResource {
20 public:
21     SK_DECLARE_INST_COUNT(GrStencilBuffer);
22
23     virtual ~GrStencilBuffer() {
24         // TODO: allow SB to be purged and detach itself from rts
25     }
26
27     int width() const { return fWidth; }
28     int height() const { return fHeight; }
29     int bits() const { return fBits; }
30     int numSamples() const { return fSampleCnt; }
31
32     // called to note the last clip drawn to this buffer.
33     void setLastClip(int32_t clipStackGenID,
34                      const SkIRect& clipSpaceRect,
35                      const SkIPoint clipSpaceToStencilOffset) {
36         fLastClipStackGenID = clipStackGenID;
37         fLastClipStackRect = clipSpaceRect;
38         fLastClipSpaceOffset = clipSpaceToStencilOffset;
39     }
40
41     // called to determine if we have to render the clip into SB.
42     bool mustRenderClip(int32_t clipStackGenID,
43                         const SkIRect& clipSpaceRect,
44                         const SkIPoint clipSpaceToStencilOffset) const {
45         return fLastClipStackGenID != clipStackGenID ||
46                fLastClipSpaceOffset != clipSpaceToStencilOffset ||
47                !fLastClipStackRect.contains(clipSpaceRect);
48     }
49
50     // Places the sb in the cache. The cache takes a ref of the stencil buffer.
51     void transferToCache();
52
53     static GrResourceKey ComputeKey(int width, int height, int sampleCnt);
54
55 protected:
56     GrStencilBuffer(GrGpu* gpu, bool isWrapped, int width, int height, int bits, int sampleCnt)
57         : GrGpuResource(gpu, isWrapped)
58         , fWidth(width)
59         , fHeight(height)
60         , fBits(bits)
61         , fSampleCnt(sampleCnt)
62         , fLastClipStackGenID(SkClipStack::kInvalidGenID) {
63         fLastClipStackRect.setEmpty();
64     }
65
66 private:
67
68     int fWidth;
69     int fHeight;
70     int fBits;
71     int fSampleCnt;
72
73     int32_t     fLastClipStackGenID;
74     SkIRect     fLastClipStackRect;
75     SkIPoint    fLastClipSpaceOffset;
76
77     typedef GrGpuResource INHERITED;
78 };
79
80 #endif