Home | History | Annotate | Download | only in debug
      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(nullptr)
     26         , fDepthBuffer(nullptr)
     27         , fStencilBuffer(nullptr) {
     28     }
     29 
     30     ~GrFrameBufferObj() override {
     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 
     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