diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-09-03 08:44:36 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-09-03 08:44:36 +0000 |
commit | e1e588421fc7e826d6bf65d838d3efb434827210 (patch) | |
tree | f7ba0120d324f77acc33965111ce88051d402f40 /libvo | |
parent | a522f65ac28f8e4185b5481dc94480666563e077 (diff) | |
download | mpv-e1e588421fc7e826d6bf65d838d3efb434827210.tar.bz2 mpv-e1e588421fc7e826d6bf65d838d3efb434827210.tar.xz |
Remove global vo_hdc, since it is recommended to release a DC as soon as possible.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24334 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/gl_common.c | 18 | ||||
-rw-r--r-- | libvo/w32_common.c | 6 |
2 files changed, 15 insertions, 9 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c index 2804187e49..2c47189768 100644 --- a/libvo/gl_common.c +++ b/libvo/gl_common.c @@ -1341,6 +1341,7 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win) HDC windc = GetDC(win); HGLRC new_context = 0; int keep_context = 0; + int res = SET_WINDOW_FAILED; // should only be needed when keeping context, but not doing glFinish // can cause flickering even when we do not keep it. @@ -1356,7 +1357,7 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win) new_context = wglCreateContext(windc); if (!new_context) { mp_msg(MSGT_VO, MSGL_FATAL, "[gl] Could not create GL context!\n"); - return SET_WINDOW_FAILED; + goto out; } } @@ -1366,12 +1367,11 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win) if (!keep_context) { wglDeleteContext(new_context); } - return SET_WINDOW_FAILED; + goto out; } // set new values vo_w32_window = win; - vo_hdc = windc; { RECT rect; GetClientRect(win, &rect); @@ -1386,9 +1386,13 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win) getFunctions(w32gpa, NULL); // and inform that reinit is neccessary - return SET_WINDOW_REINIT; - } - return SET_WINDOW_OK; + res = SET_WINDOW_REINIT; + } else + res = SET_WINDOW_OK; + +out: + ReleaseDC(windc); + return res; } void releaseGlContext(int *vinfo, HGLRC *context) { @@ -1401,7 +1405,9 @@ void releaseGlContext(int *vinfo, HGLRC *context) { } void swapGlBuffers() { + HDC vo_hdc = GetDC(vo_w32_window); SwapBuffers(vo_hdc); + ReleaseDC(vo_hdc); } #else #ifdef HAVE_LIBDL diff --git a/libvo/w32_common.c b/libvo/w32_common.c index ebd1edb1d9..feafbe59df 100644 --- a/libvo/w32_common.c +++ b/libvo/w32_common.c @@ -20,7 +20,6 @@ extern int enable_mouse_movements; static const char* classname = "MPlayer - Media player for Win32"; int vo_vm = 0; -HDC vo_hdc = 0; // last non-fullscreen extends int prev_width; @@ -250,6 +249,7 @@ static void resetMode(void) { static int createRenderingContext(void) { HWND layer = HWND_NOTOPMOST; PIXELFORMATDESCRIPTOR pfd; + HDC vo_hdc = GetDC(vo_window); RECT r; int pf; if (WinID < 0) { @@ -308,6 +308,7 @@ static int createRenderingContext(void) { pf = ChoosePixelFormat(vo_hdc, &pfd); if (!pf) { mp_msg(MSGT_VO, MSGL_ERR, "vo: win32: unable to select a valid pixel format!\n"); + ReleaseDC(vo_hdc); return 0; } @@ -315,6 +316,7 @@ static int createRenderingContext(void) { mp_msg(MSGT_VO, MSGL_V, "vo: win32: running at %dx%d with depth %d\n", vo_screenwidth, vo_screenheight, vo_depthonscreen); + ReleaseDC(vo_hdc); return 1; } @@ -369,8 +371,6 @@ int vo_w32_init(void) { } } - vo_hdc = GetDC(vo_window); - myMonitorFromWindow = NULL; myGetMonitorInfo = NULL; myEnumDisplayMonitors = NULL; |