blob: caaca479d2df9180e83d7e84c60fa0993b3ff2eb [file] [log] [blame]
bsalomon@google.com81c3f8d2011-08-03 15:18:33 +00001
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 "GrGLInterface.h"
14#include "GrStencilBuffer.h"
15
16class GrGLStencilBuffer : public GrStencilBuffer {
17public:
18 static const GrGLenum kUnknownInternalFormat = ~0;
19 struct Format {
20 GrGLenum fInternalFormat;
21 GrGLuint fStencilBits;
22 GrGLuint fTotalBits;
23 bool fPacked;
24 };
25
26 GrGLStencilBuffer(GrGpu* gpu, GrGLint rbid,
27 int width, int height,
bsalomon@google.com558a75b2011-08-08 17:01:14 +000028 int sampleCnt,
bsalomon@google.com81c3f8d2011-08-03 15:18:33 +000029 const Format& format)
bsalomon@google.com558a75b2011-08-08 17:01:14 +000030 : GrStencilBuffer(gpu, width, height, format.fStencilBits, sampleCnt)
bsalomon@google.com81c3f8d2011-08-03 15:18:33 +000031 , fFormat(format)
32 , fRenderbufferID(rbid) {
33 }
34
35 virtual ~GrGLStencilBuffer() {
36 this->release();
37 }
38
39 virtual size_t sizeInBytes() const {
bsalomon@google.comf6ff4952011-08-09 13:32:14 +000040 uint64_t size = this->width();
41 size *= this->height();
42 size *= fFormat.fTotalBits;
43 size *= GrMax(1,this->numSamples());
44 return (size_t)(size / 8);
bsalomon@google.com81c3f8d2011-08-03 15:18:33 +000045 }
46
47 GrGLuint renderbufferID() const {
48 return fRenderbufferID;
49 }
50
51 const Format& format() const {
52 return fFormat;
53 }
54
55protected:
56 virtual void onRelease() {
57 if (0 != fRenderbufferID) {
58 GR_GL(DeleteRenderbuffers(1, &fRenderbufferID));
59 fRenderbufferID = 0;
60 }
bsalomon@google.comeefe6f12011-08-09 17:57:12 +000061 INHERITED::onRelease();
bsalomon@google.com81c3f8d2011-08-03 15:18:33 +000062 }
63
64 virtual void onAbandon() {
65 fRenderbufferID = 0;
bsalomon@google.comeefe6f12011-08-09 17:57:12 +000066 INHERITED::onAbandon();
bsalomon@google.com81c3f8d2011-08-03 15:18:33 +000067 }
68
69private:
70 Format fFormat;
71 // may be zero for external SBs associated with external RTs
72 // (we don't require the client to give us the id, just tell
73 // us how many bits of stencil there are).
74 GrGLuint fRenderbufferID;
75
76 typedef GrStencilBuffer INHERITED;
77};
78
79#endif