]> git.sesse.net Git - mlt/blobdiff - src/modules/opengl/filter_glsl_manager.cpp
Set glsl_supported property to result of init_movit().
[mlt] / src / modules / opengl / filter_glsl_manager.cpp
index 9b01337301f5636717dc18637278c3a56caf6f45..0fd62853e39af66df3f29ad86ec33a9f48ec0061 100644 (file)
@@ -42,6 +42,8 @@ extern "C" {
 #include <GL/glx.h>
 #endif
 
+using namespace movit;
+
 void dec_ref_and_delete(GlslManager *p)
 {
        if (p->dec_ref() == 0) {
@@ -117,29 +119,18 @@ glsl_texture GlslManager::get_texture(int width, int height, GLint internal_form
                        return tex;
                }
        }
-
-       // Recycle a glsl_texture with deleted glTexture.
-       glsl_texture gtex = 0;
-       for (int i = 0; i < texture_list.count(); ++i) {
-               glsl_texture tex = (glsl_texture) texture_list.peek(i);
-               if (!tex->used && !tex->width && !tex->height) {
-                       gtex = tex;
-                       break;
-               }
-       }
        unlock();
 
        GLuint tex = 0;
        glGenTextures(1, &tex);
        if (!tex) {
-               glDeleteTextures(1, &tex);
                return NULL;
        }
 
+       glsl_texture gtex = new glsl_texture_s;
        if (!gtex) {
-               gtex = new glsl_texture_s;
-               if (!gtex)
-                       return NULL;
+               glDeleteTextures(1, &tex);
+               return NULL;
        }
 
        glBindTexture( GL_TEXTURE_2D, tex );
@@ -210,12 +201,11 @@ glsl_pbo GlslManager::get_pbo(int size)
 void GlslManager::cleanupContext()
 {
        lock();
-       for (int i = 0; i < texture_list.count(); ++i) {
-               glsl_texture texture = (glsl_texture) texture_list.peek(i);
+       while (texture_list.peek_back()) {
+               glsl_texture texture = (glsl_texture) texture_list.peek_back();
                glDeleteTextures(1, &texture->texture);
-               texture->used = 0;
-               texture->width = 0;
-               texture->height = 0;
+               delete texture;
+               texture_list.pop_back();
        }
        if (pbo) {
                glDeleteBuffers(1, &pbo->pbo);
@@ -235,8 +225,8 @@ void GlslManager::onInit( mlt_properties owner, GlslManager* filter )
 #else
        std::string path = std::string(getenv("MLT_MOVIT_PATH") ? getenv("MLT_MOVIT_PATH") : SHADERDIR);
 #endif
-       ::init_movit( path, mlt_log_get_level() == MLT_LOG_DEBUG? MOVIT_DEBUG_ON : MOVIT_DEBUG_OFF );
-       filter->set( "glsl_supported", movit_initialized );
+       bool success = init_movit( path, mlt_log_get_level() == MLT_LOG_DEBUG? MOVIT_DEBUG_ON : MOVIT_DEBUG_OFF );
+       filter->set( "glsl_supported", success );
 }
 
 void GlslManager::onClose( mlt_properties owner, GlslManager *filter )