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
15class GrGLStencilBuffer : public GrStencilBuffer {
16public:
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    }
36
37    virtual ~GrGLStencilBuffer();
38
39    virtual size_t gpuMemorySize() const SK_OVERRIDE;
40
41    GrGLuint renderbufferID() const {
42        return fRenderbufferID;
43    }
44
45    const Format& format() const { return fFormat; }
46
47protected:
48    // overrides of GrResource
49    virtual void onRelease() SK_OVERRIDE;
50    virtual void onAbandon() SK_OVERRIDE;
51
52private:
53    Format fFormat;
54    // may be zero for external SBs associated with external RTs
55    // (we don't require the client to give us the id, just tell
56    // us how many bits of stencil there are).
57    GrGLuint fRenderbufferID;
58
59    typedef GrStencilBuffer INHERITED;
60};
61
62#endif
63