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 "GrGpuObject.h" 15 16 class GrRenderTarget; 17 class GrResourceKey; 18 19 class GrStencilBuffer : public GrGpuObject { 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 : GrGpuObject(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 GrGpuObject INHERITED; 78 }; 79 80 #endif 81