| /* | |
| * 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 GrFBBindableObj_DEFINED | |
| #define GrFBBindableObj_DEFINED | |
| #include "SkTDArray.h" | |
| #include "GrFakeRefObj.h" | |
| //////////////////////////////////////////////////////////////////////////////// | |
| // A common base class for render buffers and textures | |
| class GrFBBindableObj : public GrFakeRefObj { | |
| public: | |
| GrFBBindableObj() | |
| : GrFakeRefObj() { | |
| } | |
| virtual ~GrFBBindableObj() { | |
| GrAlwaysAssert(0 == fColorReferees.count()); | |
| GrAlwaysAssert(0 == fDepthReferees.count()); | |
| GrAlwaysAssert(0 == fStencilReferees.count()); | |
| } | |
| void setColorBound(GrFakeRefObj *referee) { | |
| fColorReferees.append(1, &referee); | |
| } | |
| void resetColorBound(GrFakeRefObj *referee) { | |
| int index = fColorReferees.find(referee); | |
| GrAlwaysAssert(0 <= index); | |
| fColorReferees.removeShuffle(index); | |
| } | |
| bool getColorBound(GrFakeRefObj *referee) const { | |
| int index = fColorReferees.find(referee); | |
| return 0 <= index; | |
| } | |
| bool getColorBound() const { | |
| return 0 != fColorReferees.count(); | |
| } | |
| void setDepthBound(GrFakeRefObj *referee) { | |
| fDepthReferees.append(1, &referee); | |
| } | |
| void resetDepthBound(GrFakeRefObj *referee) { | |
| int index = fDepthReferees.find(referee); | |
| GrAlwaysAssert(0 <= index); | |
| fDepthReferees.removeShuffle(index); | |
| } | |
| bool getDepthBound(GrFakeRefObj *referee) const { | |
| int index = fDepthReferees.find(referee); | |
| return 0 <= index; | |
| } | |
| bool getDepthBound() const { | |
| return 0 != fDepthReferees.count(); | |
| } | |
| void setStencilBound(GrFakeRefObj *referee) { | |
| fStencilReferees.append(1, &referee); | |
| } | |
| void resetStencilBound(GrFakeRefObj *referee) { | |
| int index = fStencilReferees.find(referee); | |
| GrAlwaysAssert(0 <= index); | |
| fStencilReferees.removeShuffle(index); | |
| } | |
| bool getStencilBound(GrFakeRefObj *referee) const { | |
| int index = fStencilReferees.find(referee); | |
| return 0 <= index; | |
| } | |
| bool getStencilBound() const { | |
| return 0 != fStencilReferees.count(); | |
| } | |
| protected: | |
| private: | |
| SkTDArray<GrFakeRefObj *> fColorReferees; // frame buffers that use this as a color buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D") | |
| SkTDArray<GrFakeRefObj *> fDepthReferees; // frame buffers that use this as a depth buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D") | |
| SkTDArray<GrFakeRefObj *> fStencilReferees; // frame buffers that use this as a stencil buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D") | |
| typedef GrFakeRefObj INHERITED; | |
| }; | |
| #endif // GrFBBindableObj_DEFINED |