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