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