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
15class GrGLStencilAttachment : public GrStencilAttachment {
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    struct IDDesc {
27        IDDesc() : fRenderbufferID(0) {}
28        GrGLuint fRenderbufferID;
29    };
30
31    GrGLStencilAttachment(GrGpu* gpu,
32                          const IDDesc& idDesc,
33                          int width, int height,
34                          int sampleCnt,
35                          const Format& format)
36        : GrStencilAttachment(gpu, width, height, format.fStencilBits, sampleCnt)
37        , fFormat(format)
38        , fRenderbufferID(idDesc.fRenderbufferID) {
39        this->registerWithCache(SkBudgeted::kYes);
40    }
41
42    GrGLuint renderbufferID() const {
43        return fRenderbufferID;
44    }
45
46    const Format& format() const { return fFormat; }
47
48protected:
49    // overrides of GrResource
50    void onRelease() override;
51    void onAbandon() override;
52    void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
53                          const SkString& dumpName) const override;
54
55private:
56    size_t onGpuMemorySize() const override;
57
58    Format fFormat;
59    // may be zero for external SBs associated with external RTs
60    // (we don't require the client to give us the id, just tell
61    // us how many bits of stencil there are).
62    GrGLuint fRenderbufferID;
63
64    typedef GrStencilAttachment INHERITED;
65};
66
67#endif
68