diff --git a/src/render_ogl.c b/src/render_ogl.c index b13f153..3af28c0 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -548,6 +548,7 @@ static void ogl_init_scale_program() static void ogl_render() { BOOL needs_update = FALSE; + LONG clear_count = 0; glViewport( g_ddraw->render.viewport.x, g_ddraw->render.viewport.y, @@ -578,6 +579,9 @@ static void ogl_render() BOOL scale_changed = FALSE; + if (InterlockedExchange(&g_ddraw->render.clear_screen, FALSE)) + clear_count = 10; + fpsl_frame_start(); EnterCriticalSection(&g_ddraw->cs); @@ -652,17 +656,11 @@ static void ogl_render() if (error_check_count < 20) { - glClear(GL_COLOR_BUFFER_BIT); - error_check_count++; if (glGetError() != GL_NO_ERROR) g_ogl.use_opengl = FALSE; } - else if (g_ddraw->wine || InterlockedExchange(&g_ddraw->render.clear_screen, FALSE)) - { - glClear(GL_COLOR_BUFFER_BIT); - } g_ddraw->child_window_exists = FALSE; EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); @@ -692,6 +690,16 @@ static void ogl_render() LeaveCriticalSection(&g_ddraw->cs); + if (g_ddraw->wine) + { + glClear(GL_COLOR_BUFFER_BIT); + } + else if (clear_count > 0) + { + clear_count--; + glClear(GL_COLOR_BUFFER_BIT); + } + if (scale_changed) { if (g_ogl.scale_program && g_ogl.main_program)