diff --git a/project/Build.xml b/project/Build.xml index 283ca6ae0..7831a35c1 100644 --- a/project/Build.xml +++ b/project/Build.xml @@ -202,6 +202,7 @@ + diff --git a/project/src/graphics/opengl/OpenGLBindings.cpp b/project/src/graphics/opengl/OpenGLBindings.cpp index 92623e385..eb5882398 100644 --- a/project/src/graphics/opengl/OpenGLBindings.cpp +++ b/project/src/graphics/opengl/OpenGLBindings.cpp @@ -1,10 +1,10 @@ #include //#include #include +#include #include #include "OpenGL.h" #include "OpenGLBindings.h" -#include #include #include @@ -49,56 +49,69 @@ namespace lime { std::vector gc_gl_type; std::vector gc_gl_id; - std::mutex gc_gl_mutex; + Mutex gc_gl_mutex; void gc_gl_buffer (value handle) { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); + gc_gl_type.push_back (GC_BUFFER); gc_gl_id.push_back (reinterpret_cast (val_data (handle))); + gc_gl_mutex.Unlock (); + } void gc_gl_framebuffer (value handle) { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); + gc_gl_type.push_back (GC_FRAMEBUFFER); gc_gl_id.push_back (reinterpret_cast (val_data (handle))); + gc_gl_mutex.Unlock (); + } void gc_gl_program (value handle) { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); + gc_gl_type.push_back (GC_PROGRAM); gc_gl_id.push_back (reinterpret_cast (val_data (handle))); + gc_gl_mutex.Unlock (); + } void gc_gl_render_buffer (value handle) { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); + gc_gl_type.push_back (GC_RENDERBUFFER); gc_gl_id.push_back (reinterpret_cast (val_data (handle))); + gc_gl_mutex.Unlock (); + } void gc_gl_run () { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); - int i; + int size = gc_gl_type.size (); - do { + if (size > 0) { - i = gc_gl_type.size () - 1; + GCObjectType type; + GLuint id; - if (i > -1) { + for (int i = 0; i < size; i++) { GCObjectType type = gc_gl_type[i]; GLuint id = gc_gl_id[i]; @@ -137,31 +150,39 @@ namespace lime { } - gc_gl_type.pop_back (); - gc_gl_id.pop_back (); - } - } while (i > 0); + gc_gl_type.clear (); + gc_gl_id.clear (); + + } + + gc_gl_mutex.Unlock (); } void gc_gl_shader (value handle) { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); + gc_gl_type.push_back (GC_SHADER); gc_gl_id.push_back (reinterpret_cast (val_data (handle))); + gc_gl_mutex.Unlock (); + } void gc_gl_texture (value handle) { - std::lock_guard lock (gc_gl_mutex); + gc_gl_mutex.Lock (); + gc_gl_type.push_back (GC_TEXTURE); gc_gl_id.push_back (reinterpret_cast (val_data (handle))); + gc_gl_mutex.Unlock (); + }