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