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