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