/** * \brief uninitialize OpenGL context, freeing textures, buffers etc. */ static void uninitGl(void) { int i = 0; if (mpglDeletePrograms && fragprog) mpglDeletePrograms(1, &fragprog); fragprog = 0; while (default_texs[i] != 0) i++; if (i) mpglDeleteTextures(i, default_texs); default_texs[0] = 0; clearOSD(); clearEOSD(); if (largeeosdtex[0]) mpglDeleteTextures(2, largeeosdtex); largeeosdtex[0] = 0; if (mpglDeleteBuffers && gl_buffer) mpglDeleteBuffers(1, &gl_buffer); gl_buffer = 0; gl_buffersize = 0; gl_bufferptr = NULL; if (mpglDeleteBuffers && gl_buffer_uv[0]) mpglDeleteBuffers(2, gl_buffer_uv); gl_buffer_uv[0] = gl_buffer_uv[1] = 0; gl_buffersize_uv = 0; gl_bufferptr_uv[0] = gl_bufferptr_uv[1] = 0; #ifdef CONFIG_GL_X11 if (mesa_bufferptr) mpglFreeMemoryMESA(mDisplay, mScreen, mesa_bufferptr); #endif mesa_bufferptr = NULL; err_shown = 0; }
/** * \brief uninitialize OpenGL context, freeing textures, buffers etc. */ static void uninitGl(void) { int i = 0; mp_msg(MSGT_VO, MSGL_V, "Drawn %i frames, %i using DR, DR refused %i\n", imgcnt, dr_imgcnt, dr_rejectcnt); if (mpglDeletePrograms && fragprog) mpglDeletePrograms(1, &fragprog); fragprog = 0; while (default_texs[i] != 0) i++; if (i) mpglDeleteTextures(i, default_texs); default_texs[0] = 0; clearOSD(); clearEOSD(); if (largeeosdtex[0]) mpglDeleteTextures(2, largeeosdtex); largeeosdtex[0] = 0; if (mpglDeleteBuffers && gl_buffer) mpglDeleteBuffers(1, &gl_buffer); gl_buffer = 0; gl_buffersize = 0; gl_bufferptr = NULL; if (mpglDeleteBuffers && gl_buffer_uv[0]) mpglDeleteBuffers(2, gl_buffer_uv); gl_buffer_uv[0] = gl_buffer_uv[1] = 0; gl_buffersize_uv = 0; gl_bufferptr_uv[0] = gl_bufferptr_uv[1] = 0; #ifdef CONFIG_GL_X11 if (mesa_bufferptr) mpglFreeMemoryMESA(mDisplay, mScreen, mesa_bufferptr); #endif mesa_bufferptr = NULL; err_shown = 0; }
/** * \brief remove all OSD textures and display-lists, thus clearing it. */ static void clearOSD(void) { int i; if (!osdtexCnt) return; mpglDeleteTextures(osdtexCnt, osdtex); #ifndef FAST_OSD mpglDeleteTextures(osdtexCnt, osdatex); for (i = 0; i < osdtexCnt; i++) mpglDeleteLists(osdaDispList[i], 1); #endif for (i = 0; i < osdtexCnt; i++) mpglDeleteLists(osdDispList[i], 1); osdtexCnt = 0; }
/** * \brief remove textures, display list and free memory used by EOSD */ static void clearEOSD(void) { if (eosdDispList) mpglDeleteLists(eosdDispList, 1); eosdDispList = 0; if (eosdtexCnt) mpglDeleteTextures(eosdtexCnt, eosdtex); eosdtexCnt = 0; free(eosdtex); eosdtex = NULL; }