1 
2 /*
3  * Copyright 2012 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 #ifndef GrTextureObj_DEFINED
10 #define GrTextureObj_DEFINED
11 
12 #include "GrFBBindableObj.h"
13 
14 class GrTextureUnitObj;
15 
16 ////////////////////////////////////////////////////////////////////////////////
17 class GrTextureObj : public GrFBBindableObj {
18     GR_DEFINE_CREATOR(GrTextureObj);
19 
20 public:
GrTextureObj()21     GrTextureObj()
22         : GrFBBindableObj() {
23     }
24 
~GrTextureObj()25     virtual ~GrTextureObj() {
26         GrAlwaysAssert(0 == fTextureUnitReferees.count());
27     }
28 
setBound(GrTextureUnitObj * referee)29     void setBound(GrTextureUnitObj *referee) {
30         fTextureUnitReferees.append(1, &referee);
31     }
32 
resetBound(GrTextureUnitObj * referee)33     void resetBound(GrTextureUnitObj *referee) {
34         int index = fTextureUnitReferees.find(referee);
35         GrAlwaysAssert(0 <= index);
36         fTextureUnitReferees.removeShuffle(index);
37     }
getBound(GrTextureUnitObj * referee)38     bool getBound(GrTextureUnitObj *referee) const {
39         int index = fTextureUnitReferees.find(referee);
40         return 0 <= index;
41     }
getBound()42     bool getBound() const {
43         return 0 != fTextureUnitReferees.count();
44     }
45 
46     void deleteAction() override;
47 
48 protected:
49 
50 private:
51     // texture units that bind this texture (via "glBindTexture")
52     SkTDArray<GrTextureUnitObj *> fTextureUnitReferees;
53 
54     typedef GrFBBindableObj INHERITED;
55 };
56 
57 #endif // GrTextureObj_DEFINED
58