/* * 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