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: 22 GrFrameBufferObj() 23 : GrFakeRefObj() 24 , fBound(false) 25 , fColorBuffer(NULL) 26 , fDepthBuffer(NULL) 27 , fStencilBuffer(NULL) { 28 } 29 30 virtual ~GrFrameBufferObj() { 31 fColorBuffer = NULL; 32 fDepthBuffer = NULL; 33 fStencilBuffer = NULL; 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 virtual void deleteAction() SK_OVERRIDE { 50 51 setColor(NULL); 52 setDepth(NULL); 53 setStencil(NULL); 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