| OLD | NEW |
| (Empty) |
| 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 = curTextu
reUnit; } | |
| 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 fEl
ementArrayBuffer; } | |
| 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 (nullptr == gObj) { | |
| 96 gObj = new 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 delete gObj; | |
| 113 gObj = nullptr; | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 static void abandon() { | |
| 118 SkASSERT(gStaticRefCount > 0); | |
| 119 gObj->fAbandoned = true; | |
| 120 } | |
| 121 | |
| 122 protected: | |
| 123 | |
| 124 private: | |
| 125 // the OpenGLES 2.0 spec says this must be >= 2 | |
| 126 static const GrGLint kDefaultMaxTextureUnits = 8; | |
| 127 | |
| 128 GrGLint fPackRowLength; | |
| 129 GrGLint fUnPackRowLength; | |
| 130 GrGLuint fCurTextureUnit; | |
| 131 GrBufferObj* fArrayBuffer; | |
| 132 GrBufferObj* fElementArrayBuffer; | |
| 133 GrFrameBufferObj* fFrameBuffer; | |
| 134 GrRenderBufferObj* fRenderBuffer; | |
| 135 GrProgramObj* fProgram; | |
| 136 GrTextureObj* fTexture; | |
| 137 GrTextureUnitObj *fTextureUnits[kDefaultMaxTextureUnits]; | |
| 138 GrVertexArrayObj *fVertexArray; | |
| 139 | |
| 140 bool fAbandoned; | |
| 141 | |
| 142 typedef GrFakeRefObj *(*Create)(); | |
| 143 | |
| 144 static Create gFactoryFunc[kObjTypeCount]; | |
| 145 | |
| 146 static GrDebugGL* gObj; | |
| 147 static int gStaticRefCount; | |
| 148 | |
| 149 // global store of all objects | |
| 150 SkTArray<GrFakeRefObj *> fObjects; | |
| 151 | |
| 152 GrDebugGL(); | |
| 153 ~GrDebugGL(); | |
| 154 }; | |
| 155 | |
| 156 //////////////////////////////////////////////////////////////////////////////// | |
| 157 // Helper macro to make creating an object (where you need to get back a derived | |
| 158 // type) easier | |
| 159 #define GR_CREATE(className, classEnum) \ | |
| 160 reinterpret_cast<className *>(GrDebugGL::getInstance()->createObj(classEnum)
) | |
| 161 | |
| 162 //////////////////////////////////////////////////////////////////////////////// | |
| 163 // Helper macro to make finding objects less painful | |
| 164 #define GR_FIND(id, className, classEnum) \ | |
| 165 reinterpret_cast<className *>(GrDebugGL::getInstance()->findObject(id, class
Enum)) | |
| 166 | |
| 167 #endif // GrDebugGL_DEFINED | |
| OLD | NEW |