MeVisLab Toolbox Reference
mlGLResourceManager.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2007, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef ML_GLRESOURCE_MANAGER_H
14 #define ML_GLRESOURCE_MANAGER_H
15 
17 
18 #include "mlOpenGLSystem.h"
19 #include "mlOpenGL.h"
20 
21 class FTFont;
22 
24 
25 class GLResource;
26 
29 public:
31  virtual ~GLResourceManager();
32 
33 public:
35  static void init();
36 
38  static void cleanup();
39 
41  static GLResourceManager* self() { return _self; }
42 
44  bool isContextActive() const { return !_contextLocked; }
45 
47  void destroyTextures(int num, GLuint* textures);
49  void destroyFragmentProgramARB(GLuint program);
51  void destroyRenderBuffer(GLuint id);
53  void destroyFrameBuffer(GLuint id);
55  void destroyBuffer(GLuint id);
57  void destroyPixelBuffer(GLuint id) { destroyBuffer(id); }
59  void destroyVertexBuffer(GLuint id) { destroyBuffer(id); }
61  void destroyGLSLShader(GLuint id);
63  void destroyGLSLProgram(GLuint id);
65  void destroyFTFont(FTFont* font);
66 
68  void detachGLSLShader(GLuint program, GLuint shader);
69 
72 
74  void unlockContext(unsigned int cacheContextId);
75 
77  void lockContext();
78 
80  unsigned int cacheContextID() { return _cacheContextID; };
81 
83  GLenum getGLError() const;
84 
85 protected:
87  void addResource(GLResource* program);
89  void removeResource(GLResource* program);
90 
93 
95  void freeResources();
96 
99  public:
100  GLResourceList() { _head = nullptr; _tail = nullptr; _length = 0; }
101 
104  int _length;
105  };
106 
107  void add(GLResourceList& list, GLResource* resource);
108  void remove(GLResourceList& list, GLResource* resource);
109 
110  friend class GLResource;
111 
113  unsigned int _cacheContextID;
114 
116 
117  typedef std::pair<GLuint, GLuint> GLSLProgramShaderPair;
118 
119  std::vector<GLuint> _texturesToFree;
120  std::vector<GLuint> _programsARBToFree;
121  std::vector<GLuint> _frameBuffersToFree;
122  std::vector<GLuint> _renderBuffersToFree;
123  std::vector<GLuint> _buffersToFree;
124  std::vector<GLuint> _GLSLProgramsToFree;
125  std::vector<GLuint> _GLSLShadersToFree;
126  std::vector<GLSLProgramShaderPair> _GLSLShadersToDetach;
127  std::vector<FTFont*> _FTFontsToFree;
128 
130 };
131 
133 
134 #endif
Dynamic list of GLResource objects.
Manages OpenGL resources.
std::vector< GLuint > _buffersToFree
bool isContextActive() const
Checks whether the current context is active.
GLResourceList _resources
std::pair< GLuint, GLuint > GLSLProgramShaderPair
void destroyFragmentProgramARB(GLuint program)
Destroys the given fragment program ID (destroys it later if no GL context is currently active).
virtual ~GLResourceManager()
void destroyGLSLProgram(GLuint id)
Destroys the given program (destroys it later if no GL context is currently active).
std::vector< GLuint > _GLSLShadersToFree
static GLResourceManager * _self
void destroyVertexBuffer(GLuint id)
Destroys the given pixel buffer (destroys it later if no GL context is currently active).
void freeResources()
Frees resources that could not be destroyed earlier.
std::vector< FTFont * > _FTFontsToFree
GLenum getGLError() const
Checks for OpenGL error (returns GL_INVALID_OPERATION if there is no valid OpenGL context).
void destroyBuffer(GLuint id)
Destroys the given vertex buffer (destroys it later if no GL context is currently active).
std::vector< GLuint > _renderBuffersToFree
void destroyFrameBuffer(GLuint id)
Destroys the given render buffer (destroys it later if no GL context is currently active).
void add(GLResourceList &list, GLResource *resource)
void remove(GLResourceList &list, GLResource *resource)
std::vector< GLuint > _GLSLProgramsToFree
static void cleanup()
Destroys singleton.
void contextDestroyed()
Forgets about all resources; the shared context was destroyed.
void lockContext()
Sets that the context is locked.
void destroyPixelBuffer(GLuint id)
Destroys the given pixel buffer (destroys it later if no GL context is currently active).
void destroyFTFont(FTFont *font)
Destroys the given font (destroys it later if no GL context is currently active).
unsigned int cacheContextID()
Returns the current cache context ID.
std::vector< GLuint > _programsARBToFree
void unlockContext(unsigned int cacheContextId)
Sets that the context is active.
std::vector< GLuint > _frameBuffersToFree
unsigned int _cacheContextID
std::vector< GLuint > _texturesToFree
void disableGLSLProgram()
Removes currently active program.
void addResource(GLResource *program)
Adds the given resource.
std::vector< GLSLProgramShaderPair > _GLSLShadersToDetach
void destroyTextures(int num, GLuint *textures)
Destroys the given texture IDs (destroys them later if no GL context is currently active).
void destroyGLSLShader(GLuint id)
Destroys the given shader (destroys it later if no GL context is currently active).
void removeResource(GLResource *program)
Removes the given resource.
void detachGLSLShader(GLuint program, GLuint shader)
Detaches the given shader from the program (this is done later of the GL context is not currently act...
void destroyRenderBuffer(GLuint id)
Destroys the given render buffer (destroys it later if no GL context is currently active).
static void init()
Creates singleton.
Collection of OpenGL related resource classes, such as textures, buffers, fragment programs etc.
Definition: mlGLResources.h:27
#define ML_OPENGL_END_NAMESPACE
Closes the namespace for all ML code after the usage of ML_UTILS_START_NAMESPACE.
#define ML_OPENGL_START_NAMESPACE
Macro to put all following code into the namespace ML_NAMESPACE to avoid collisions with symbols of o...
#define MLOPENGL_EXPORT