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
21class FTFont;
22
24
25class GLResource;
26
29public:
32
33public:
35 static void init();
36
38 static void cleanup();
39
41 static GLResourceManager* self() { return _self; }
42
44 bool isContextActive() const { return !_contextLocked; }
45
57 void destroyPixelBuffer(GLuint id) { destroyBuffer(id); }
59 void destroyVertexBuffer(GLuint id) { destroyBuffer(id); }
66
69
72
74 void unlockContext(unsigned int cacheContextId);
75
78
80 unsigned int cacheContextID() { return _cacheContextID; };
81
84
85protected:
87 void addResource(GLResource* program);
89 void removeResource(GLResource* program);
90
93
96
99 public:
100 GLResourceList() { _head = nullptr; _tail = nullptr; _length = 0; }
101
105 };
106
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
check if the current context is ac
GLResourceList _resources
std::pair< GLuint, GLuint > GLSLProgramShaderPair
void destroyFragmentProgramARB(GLuint program)
destroy the given fragment program id (destroys it later if no GL context is currently active)
virtual ~GLResourceManager()
void destroyGLSLProgram(GLuint id)
destroy the given program (destroys it later if no GL context is currently active)
std::vector< GLuint > _GLSLShadersToFree
static GLResourceManager * _self
void destroyVertexBuffer(GLuint id)
destroy the given pixel buffer (destroys it later if no GL context is currently active)
void freeResources()
free resources that could not be destroyed earlier
std::vector< FTFont * > _FTFontsToFree
GLenum getGLError() const
check for OpenGL error (returns GL_INVALID_OPERATION if there is no valid OpenGL context)
void destroyBuffer(GLuint id)
destroy the given vertex buffer (destroys it later if no GL context is currently active)
std::vector< GLuint > _renderBuffersToFree
void destroyFrameBuffer(GLuint id)
destroy 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)
static GLResourceManager * self()
get singleton instance
std::vector< GLuint > _GLSLProgramsToFree
static void cleanup()
destroy singleton
void contextDestroyed()
forget about all resources, the shared context was destroyed
void lockContext()
set that the context is locked
void destroyPixelBuffer(GLuint id)
destroy the given pixel buffer (destroys it later if no GL context is currently active)
void destroyFTFont(FTFont *font)
destroy the given font (destroys it later if no GL context is currently active)
unsigned int cacheContextID()
get the current cache context id
std::vector< GLuint > _programsARBToFree
void unlockContext(unsigned int cacheContextId)
set that the context is active
std::vector< GLuint > _frameBuffersToFree
std::vector< GLuint > _texturesToFree
void disableGLSLProgram()
remove currently active program
void addResource(GLResource *program)
add the given resource
std::vector< GLSLProgramShaderPair > _GLSLShadersToDetach
void destroyTextures(int num, GLuint *textures)
destroy the given texture ids (destroys them later if no GL context is currently active)
void destroyGLSLShader(GLuint id)
destroy the given shader (destroys it later if no GL context is currently active)
void removeResource(GLResource *program)
remove the given resource
void detachGLSLShader(GLuint program, GLuint shader)
detach the given shader from the program (this is done later of the GL context is not currently activ...
void destroyRenderBuffer(GLuint id)
destroy the given render buffer (destroys it later if no GL context is currently active)
static void init()
create singleton
Collection of OpenGL related resource classes, such as textures, buffers, fragment programs etc.
#define ML_OPENGL_END_NAMESPACE
Closes the namespace for all ML stuff after the usage of ML_UTILS_START_NAMESPACE.
#define ML_OPENGL_START_NAMESPACE
Macro to put all following stuff into the namespace ML_NAMESPACE to avoid collisions with symbols of ...
#define MLOPENGL_EXPORT
Target mlrange_cast(Source arg)
Generic version of checked ML casts.