aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2012-09-14 22:18:22 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-01-13 22:41:05 +0100
commit3d85a593bf0812f50f08f4852fae00fdd16fffd8 (patch)
tree48fa5fd4bd08b75fa9558e5e63e3cf083a2b8f19
parent82306827bd8c8b7b0a667df48bd95f5c2948c690 (diff)
downloadusdx-3d85a593bf0812f50f08f4852fae00fdd16fffd8.tar.gz
usdx-3d85a593bf0812f50f08f4852fae00fdd16fffd8.tar.xz
usdx-3d85a593bf0812f50f08f4852fae00fdd16fffd8.zip
menu/application: add possibility to query if ogl thread
opengl calls should only executed in the thread, that created the opengl context. To query whether the current thread is the opengl thread, the application class stores the current thread id of the opengl thread after initializing opengl.
-rw-r--r--src/menu/application.cpp8
-rw-r--r--src/menu/application.hpp3
2 files changed, 11 insertions, 0 deletions
diff --git a/src/menu/application.cpp b/src/menu/application.cpp
index 1e82b6e2..b8392802 100644
--- a/src/menu/application.cpp
+++ b/src/menu/application.cpp
@@ -80,6 +80,11 @@ namespace usdx
return get_instance()->config;
}
+ bool Application::is_gl_thread(void)
+ {
+ return boost::this_thread::get_id() == get_instance()->gl_thread;
+ }
+
void Application::main_loop(SDL_Surface* display)
{
SDL_Event event;
@@ -157,6 +162,9 @@ namespace usdx
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
+ // save current thread, to be able to detect whether some method is
+ // called from the thread owning the OpenGL contect
+ gl_thread = boost::this_thread::get_id();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
diff --git a/src/menu/application.hpp b/src/menu/application.hpp
index 9e6ab5c5..78b4e01d 100644
--- a/src/menu/application.hpp
+++ b/src/menu/application.hpp
@@ -27,6 +27,7 @@
#include <SDL/SDL.h>
#include <SDL/SDL_framerate.h>
+#include <boost/thread/thread.hpp>
#include <log4cpp/Category.hh>
#include <list>
@@ -55,6 +56,7 @@ namespace usdx
* This is the main loop.
*/
void main_loop(SDL_Surface* display);
+ boost::thread::id gl_thread;
void init_fps_manager(void);
@@ -66,6 +68,7 @@ namespace usdx
static Application* get_instance(void);
static Config* get_config(void);
+ static bool is_gl_thread(void);
void run(void);