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