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 GrGLStencilBuffer_DEFINED
     10 #define GrGLStencilBuffer_DEFINED
     11 
     12 #include "gl/GrGLInterface.h"
     13 #include "GrStencilBuffer.h"
     14 
     15 class GrGLStencilBuffer : public GrStencilBuffer {
     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     GrGLStencilBuffer(GrGpu* gpu,
     27                       bool isWrapped,
     28                       GrGLint rbid,
     29                       int width, int height,
     30                       int sampleCnt,
     31                       const Format& format)
     32         : GrStencilBuffer(gpu, isWrapped, width, height, format.fStencilBits, sampleCnt)
     33         , fFormat(format)
     34         , fRenderbufferID(rbid) {
     35         this->registerWithCache();
     36     }
     37 
     38     virtual ~GrGLStencilBuffer();
     39 
     40     virtual size_t gpuMemorySize() const SK_OVERRIDE;
     41 
     42     GrGLuint renderbufferID() const {
     43         return fRenderbufferID;
     44     }
     45 
     46     const Format& format() const { return fFormat; }
     47 
     48 protected:
     49     // overrides of GrResource
     50     virtual void onRelease() SK_OVERRIDE;
     51     virtual void onAbandon() SK_OVERRIDE;
     52 
     53 private:
     54     Format fFormat;
     55     // may be zero for external SBs associated with external RTs
     56     // (we don't require the client to give us the id, just tell
     57     // us how many bits of stencil there are).
     58     GrGLuint fRenderbufferID;
     59 
     60     typedef GrStencilBuffer INHERITED;
     61 };
     62 
     63 #endif
     64