1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc. 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrFBBindableObj_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrFBBindableObj_DEFINED 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTDArray.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrFakeRefObj.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot//////////////////////////////////////////////////////////////////////////////// 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// A common base class for render buffers and textures 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrFBBindableObj : public GrFakeRefObj { 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrFBBindableObj() 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : GrFakeRefObj() 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fNumSamples(1) { 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual ~GrFBBindableObj() { 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrAlwaysAssert(0 == fColorReferees.count()); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrAlwaysAssert(0 == fDepthReferees.count()); 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrAlwaysAssert(0 == fStencilReferees.count()); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void setColorBound(GrFakeRefObj *referee) { 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fColorReferees.append(1, &referee); 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void resetColorBound(GrFakeRefObj *referee) { 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = fColorReferees.find(referee); 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrAlwaysAssert(0 <= index); 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fColorReferees.removeShuffle(index); 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool getColorBound(GrFakeRefObj *referee) const { 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = fColorReferees.find(referee); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 <= index; 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool getColorBound() const { 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 != fColorReferees.count(); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void setDepthBound(GrFakeRefObj *referee) { 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fDepthReferees.append(1, &referee); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void resetDepthBound(GrFakeRefObj *referee) { 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = fDepthReferees.find(referee); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrAlwaysAssert(0 <= index); 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fDepthReferees.removeShuffle(index); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool getDepthBound(GrFakeRefObj *referee) const { 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = fDepthReferees.find(referee); 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 <= index; 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool getDepthBound() const { 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 != fDepthReferees.count(); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void setStencilBound(GrFakeRefObj *referee) { 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fStencilReferees.append(1, &referee); 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void resetStencilBound(GrFakeRefObj *referee) { 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = fStencilReferees.find(referee); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrAlwaysAssert(0 <= index); 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fStencilReferees.removeShuffle(index); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool getStencilBound(GrFakeRefObj *referee) const { 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = fStencilReferees.find(referee); 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 <= index; 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool getStencilBound() const { 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 != fStencilReferees.count(); 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int numSamples() { return fNumSamples; } 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int fNumSamples; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTDArray<GrFakeRefObj *> fColorReferees; // frame buffers that use this as a color buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D") 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTDArray<GrFakeRefObj *> fDepthReferees; // frame buffers that use this as a depth buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D") 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTDArray<GrFakeRefObj *> fStencilReferees; // frame buffers that use this as a stencil buffer (via "glFramebufferRenderbuffer" or "glFramebufferTexture2D") 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GrFakeRefObj INHERITED; 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // GrFBBindableObj_DEFINED 93