michael@0: michael@0: /* michael@0: * Copyright 2012 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #ifndef GrFrameBufferObj_DEFINED michael@0: #define GrFrameBufferObj_DEFINED michael@0: michael@0: #include "GrFakeRefObj.h" michael@0: class GrFBBindableObj; michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // TODO: when a framebuffer obj is bound the GL_SAMPLES query must return 0 michael@0: // TODO: GL_STENCIL_BITS must also be redirected to the framebuffer michael@0: class GrFrameBufferObj : public GrFakeRefObj { michael@0: GR_DEFINE_CREATOR(GrFrameBufferObj); michael@0: michael@0: public: michael@0: GrFrameBufferObj() michael@0: : GrFakeRefObj() michael@0: , fBound(false) michael@0: , fColorBuffer(NULL) michael@0: , fDepthBuffer(NULL) michael@0: , fStencilBuffer(NULL) { michael@0: } michael@0: michael@0: virtual ~GrFrameBufferObj() { michael@0: fColorBuffer = NULL; michael@0: fDepthBuffer = NULL; michael@0: fStencilBuffer = NULL; michael@0: } michael@0: michael@0: void setBound() { fBound = true; } michael@0: void resetBound() { fBound = false; } michael@0: bool getBound() const { return fBound; } michael@0: michael@0: void setColor(GrFBBindableObj *buffer); michael@0: GrFBBindableObj *getColor() { return fColorBuffer; } michael@0: michael@0: void setDepth(GrFBBindableObj *buffer); michael@0: GrFBBindableObj *getDepth() { return fDepthBuffer; } michael@0: michael@0: void setStencil(GrFBBindableObj *buffer); michael@0: GrFBBindableObj *getStencil() { return fStencilBuffer; } michael@0: michael@0: virtual void deleteAction() SK_OVERRIDE { michael@0: michael@0: setColor(NULL); michael@0: setDepth(NULL); michael@0: setStencil(NULL); michael@0: michael@0: this->INHERITED::deleteAction(); michael@0: } michael@0: michael@0: protected: michael@0: private: michael@0: bool fBound; // is this frame buffer currently bound via "glBindFramebuffer"? michael@0: GrFBBindableObj * fColorBuffer; michael@0: GrFBBindableObj * fDepthBuffer; michael@0: GrFBBindableObj * fStencilBuffer; michael@0: michael@0: typedef GrFakeRefObj INHERITED; michael@0: }; michael@0: michael@0: #endif // GrFrameBufferObj_DEFINED