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"
13 class 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
18 class GrFrameBufferObj : public GrFakeRefObj {
19     GR_DEFINE_CREATOR(GrFrameBufferObj);
20 
21 public:
GrFrameBufferObj()22     GrFrameBufferObj()
23         : GrFakeRefObj()
24         , fBound(false)
25         , fColorBuffer(nullptr)
26         , fDepthBuffer(nullptr)
27         , fStencilBuffer(nullptr) {
28     }
29 
~GrFrameBufferObj()30     virtual ~GrFrameBufferObj() {
31         fColorBuffer = nullptr;
32         fDepthBuffer = nullptr;
33         fStencilBuffer = nullptr;
34     }
35 
setBound()36     void setBound()         { fBound = true; }
resetBound()37     void resetBound()       { fBound = false; }
getBound()38     bool getBound() const   { return fBound; }
39 
40     void setColor(GrFBBindableObj *buffer);
getColor()41     GrFBBindableObj *getColor()       { return fColorBuffer; }
42 
43     void setDepth(GrFBBindableObj *buffer);
getDepth()44     GrFBBindableObj *getDepth()       { return fDepthBuffer; }
45 
46     void setStencil(GrFBBindableObj *buffer);
getStencil()47     GrFBBindableObj *getStencil()     { return fStencilBuffer; }
48 
deleteAction()49     void deleteAction() override {
50 
51         setColor(nullptr);
52         setDepth(nullptr);
53         setStencil(nullptr);
54 
55         this->INHERITED::deleteAction();
56     }
57 
58 protected:
59 private:
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