gfx/skia/trunk/src/gpu/gl/debug/GrDebugGL.h

branch
TOR_BUG_9701
changeset 11
deefc01c0e14
equal deleted inserted replaced
-1:000000000000 0:fda320d64aea
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 GrDebugGL_DEFINED
10 #define GrDebugGL_DEFINED
11
12 #include "SkTArray.h"
13 #include "gl/GrGLInterface.h"
14
15 class GrBufferObj;
16 class GrFakeRefObj;
17 class GrFrameBufferObj;
18 class GrProgramObj;
19 class GrRenderBufferObj;
20 class GrTextureObj;
21 class GrTextureUnitObj;
22 class GrVertexArrayObj;
23
24 ////////////////////////////////////////////////////////////////////////////////
25 // This is the main debugging object. It is a singleton and keeps track of
26 // all the other debug objects.
27 class GrDebugGL {
28 public:
29 enum GrObjTypes {
30 kTexture_ObjTypes = 0,
31 kBuffer_ObjTypes,
32 kRenderBuffer_ObjTypes,
33 kFrameBuffer_ObjTypes,
34 kShader_ObjTypes,
35 kProgram_ObjTypes,
36 kTextureUnit_ObjTypes,
37 kVertexArray_ObjTypes,
38 kObjTypeCount
39 };
40
41 GrFakeRefObj *createObj(GrObjTypes type) {
42 GrFakeRefObj *temp = (*gFactoryFunc[type])();
43
44 fObjects.push_back(temp);
45
46 return temp;
47 }
48
49 GrFakeRefObj *findObject(GrGLuint ID, GrObjTypes type);
50
51 GrGLuint getMaxTextureUnits() const { return kDefaultMaxTextureUnits; }
52
53 void setCurTextureUnit(GrGLuint curTextureUnit) { fCurTextureUnit = curTextureUnit; }
54 GrGLuint getCurTextureUnit() const { return fCurTextureUnit; }
55
56 GrTextureUnitObj *getTextureUnit(int iUnit) {
57 GrAlwaysAssert(0 <= iUnit && kDefaultMaxTextureUnits > iUnit);
58
59 return fTextureUnits[iUnit];
60 }
61
62 void setArrayBuffer(GrBufferObj *arrayBuffer);
63 GrBufferObj *getArrayBuffer() { return fArrayBuffer; }
64
65 void setElementArrayBuffer(GrBufferObj *elementArrayBuffer);
66 GrBufferObj *getElementArrayBuffer() { return fElementArrayBuffer; }
67
68 void setVertexArray(GrVertexArrayObj* vertexArray);
69 GrVertexArrayObj* getVertexArray() { return fVertexArray; }
70
71 void setTexture(GrTextureObj *texture);
72
73 void setFrameBuffer(GrFrameBufferObj *frameBuffer);
74 GrFrameBufferObj *getFrameBuffer() { return fFrameBuffer; }
75
76 void setRenderBuffer(GrRenderBufferObj *renderBuffer);
77 GrRenderBufferObj *getRenderBuffer() { return fRenderBuffer; }
78
79 void useProgram(GrProgramObj *program);
80
81 void setPackRowLength(GrGLint packRowLength) {
82 fPackRowLength = packRowLength;
83 }
84 GrGLint getPackRowLength() const { return fPackRowLength; }
85
86 void setUnPackRowLength(GrGLint unPackRowLength) {
87 fUnPackRowLength = unPackRowLength;
88 }
89 GrGLint getUnPackRowLength() const { return fUnPackRowLength; }
90
91 static GrDebugGL *getInstance() {
92 // someone should admit to actually using this class
93 SkASSERT(0 < gStaticRefCount);
94
95 if (NULL == gObj) {
96 gObj = SkNEW(GrDebugGL);
97 }
98
99 return gObj;
100 }
101
102 void report() const;
103
104 static void staticRef() {
105 gStaticRefCount++;
106 }
107
108 static void staticUnRef() {
109 SkASSERT(gStaticRefCount > 0);
110 gStaticRefCount--;
111 if (0 == gStaticRefCount) {
112 SkDELETE(gObj);
113 gObj = NULL;
114 }
115 }
116
117 protected:
118
119 private:
120 // the OpenGLES 2.0 spec says this must be >= 2
121 static const GrGLint kDefaultMaxTextureUnits = 8;
122
123 GrGLint fPackRowLength;
124 GrGLint fUnPackRowLength;
125 GrGLuint fCurTextureUnit;
126 GrBufferObj* fArrayBuffer;
127 GrBufferObj* fElementArrayBuffer;
128 GrFrameBufferObj* fFrameBuffer;
129 GrRenderBufferObj* fRenderBuffer;
130 GrProgramObj* fProgram;
131 GrTextureObj* fTexture;
132 GrTextureUnitObj *fTextureUnits[kDefaultMaxTextureUnits];
133 GrVertexArrayObj *fVertexArray;
134
135 typedef GrFakeRefObj *(*Create)();
136
137 static Create gFactoryFunc[kObjTypeCount];
138
139 static GrDebugGL* gObj;
140 static int gStaticRefCount;
141
142 // global store of all objects
143 SkTArray<GrFakeRefObj *> fObjects;
144
145 GrDebugGL();
146 ~GrDebugGL();
147 };
148
149 ////////////////////////////////////////////////////////////////////////////////
150 // Helper macro to make creating an object (where you need to get back a derived
151 // type) easier
152 #define GR_CREATE(className, classEnum) \
153 reinterpret_cast<className *>(GrDebugGL::getInstance()->createObj(classEnum))
154
155 ////////////////////////////////////////////////////////////////////////////////
156 // Helper macro to make finding objects less painful
157 #define GR_FIND(id, className, classEnum) \
158 reinterpret_cast<className *>(GrDebugGL::getInstance()->findObject(id, classEnum))
159
160 #endif // GrDebugGL_DEFINED

mercurial