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