Home | History | Annotate | Download | only in gl
      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 {
     27         IDDesc() : fRenderbufferID(0), fLifeCycle(kCached_LifeCycle) {}
     28         GrGLuint fRenderbufferID;
     29         GrGpuResource::LifeCycle fLifeCycle;
     30     };
     31 
     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 
     43     GrGLuint renderbufferID() const {
     44         return fRenderbufferID;
     45     }
     46 
     47     const Format& format() const { return fFormat; }
     48 
     49 protected:
     50     // overrides of GrResource
     51     void onRelease() override;
     52     void onAbandon() override;
     53 
     54 private:
     55     size_t onGpuMemorySize() const override;
     56 
     57     Format fFormat;
     58     // may be zero for external SBs associated with external RTs
     59     // (we don't require the client to give us the id, just tell
     60     // us how many bits of stencil there are).
     61     GrGLuint fRenderbufferID;
     62 
     63     typedef GrStencilAttachment INHERITED;
     64 };
     65 
     66 #endif
     67