X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmodules%2Fopengl%2Ffilter_glsl_manager.cpp;h=0fd62853e39af66df3f29ad86ec33a9f48ec0061;hb=d361382f1a14b84221cf551207bf2e7dd7431245;hp=9b01337301f5636717dc18637278c3a56caf6f45;hpb=1efe96041e015b55eb70f300cac5a1083decc868;p=mlt diff --git a/src/modules/opengl/filter_glsl_manager.cpp b/src/modules/opengl/filter_glsl_manager.cpp index 9b013373..0fd62853 100644 --- a/src/modules/opengl/filter_glsl_manager.cpp +++ b/src/modules/opengl/filter_glsl_manager.cpp @@ -42,6 +42,8 @@ extern "C" { #include #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 )