1
2/*
3 * Copyright 2012 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#ifndef GrFrameBufferObj_DEFINED
10#define GrFrameBufferObj_DEFINED
11
12#include "GrFakeRefObj.h"
13class GrFBBindableObj;
14
15////////////////////////////////////////////////////////////////////////////////
16// TODO: when a framebuffer obj is bound the GL_SAMPLES query must return 0
17// TODO: GL_STENCIL_BITS must also be redirected to the framebuffer
18class GrFrameBufferObj : public GrFakeRefObj {
19    GR_DEFINE_CREATOR(GrFrameBufferObj);
20
21public:
22    GrFrameBufferObj()
23        : GrFakeRefObj()
24        , fBound(false)
25        , fColorBuffer(nullptr)
26        , fDepthBuffer(nullptr)
27        , fStencilBuffer(nullptr) {
28    }
29
30    virtual ~GrFrameBufferObj() {
31        fColorBuffer = nullptr;
32        fDepthBuffer = nullptr;
33        fStencilBuffer = nullptr;
34    }
35
36    void setBound()         { fBound = true; }
37    void resetBound()       { fBound = false; }
38    bool getBound() const   { return fBound; }
39
40    void setColor(GrFBBindableObj *buffer);
41    GrFBBindableObj *getColor()       { return fColorBuffer; }
42
43    void setDepth(GrFBBindableObj *buffer);
44    GrFBBindableObj *getDepth()       { return fDepthBuffer; }
45
46    void setStencil(GrFBBindableObj *buffer);
47    GrFBBindableObj *getStencil()     { return fStencilBuffer; }
48
49    void deleteAction() override {
50
51        setColor(nullptr);
52        setDepth(nullptr);
53        setStencil(nullptr);
54
55        this->INHERITED::deleteAction();
56    }
57
58protected:
59private:
60    bool fBound;        // is this frame buffer currently bound via "glBindFramebuffer"?
61    GrFBBindableObj * fColorBuffer;
62    GrFBBindableObj * fDepthBuffer;
63    GrFBBindableObj * fStencilBuffer;
64
65    typedef GrFakeRefObj INHERITED;
66};
67
68#endif // GrFrameBufferObj_DEFINED
69