• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 
9 #ifndef GrGLStencilAttachment_DEFINED
10 #define GrGLStencilAttachment_DEFINED
11 
12 #include "gl/GrGLInterface.h"
13 #include "GrStencilAttachment.h"
14 
15 class GrGLStencilAttachment : public GrStencilAttachment {
16 public:
17     static const GrGLenum kUnknownInternalFormat = ~0U;
18     static const GrGLuint kUnknownBitCount = ~0U;
19     struct Format {
20         GrGLenum  fInternalFormat;
21         GrGLuint  fStencilBits;
22         GrGLuint  fTotalBits;
23         bool      fPacked;
24     };
25 
26     struct IDDesc {
IDDescIDDesc27         IDDesc() : fRenderbufferID(0), fLifeCycle(kCached_LifeCycle) {}
28         GrGLuint fRenderbufferID;
29         GrGpuResource::LifeCycle fLifeCycle;
30     };
31 
GrGLStencilAttachment(GrGpu * gpu,const IDDesc & idDesc,int width,int height,int sampleCnt,const Format & format)32     GrGLStencilAttachment(GrGpu* gpu,
33                       const IDDesc& idDesc,
34                       int width, int height,
35                       int sampleCnt,
36                       const Format& format)
37         : GrStencilAttachment(gpu, idDesc.fLifeCycle, width, height, format.fStencilBits, sampleCnt)
38         , fFormat(format)
39         , fRenderbufferID(idDesc.fRenderbufferID) {
40         this->registerWithCache();
41     }
42 
renderbufferID()43     GrGLuint renderbufferID() const {
44         return fRenderbufferID;
45     }
46 
format()47     const Format& format() const { return fFormat; }
48 
49 protected:
50     // overrides of GrResource
51     void onRelease() override;
52     void onAbandon() override;
53     void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
54                           const SkString& dumpName) const override;
55 
56 private:
57     size_t onGpuMemorySize() const override;
58 
59     Format fFormat;
60     // may be zero for external SBs associated with external RTs
61     // (we don't require the client to give us the id, just tell
62     // us how many bits of stencil there are).
63     GrGLuint fRenderbufferID;
64 
65     typedef GrStencilAttachment INHERITED;
66 };
67 
68 #endif
69