mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 22:14:49 +01:00
add workaround for flickering (black frames) during zoom
This commit is contained in:
parent
918037dd3e
commit
ec0dbeca6b
1
inc/dd.h
1
inc/dd.h
@ -168,6 +168,7 @@ typedef struct CNCDDRAW
|
||||
|
||||
struct
|
||||
{
|
||||
LONG frame_skip;
|
||||
BOOL enabled;
|
||||
} zoom;
|
||||
} CNCDDRAW;
|
||||
|
@ -418,6 +418,9 @@ HRESULT dds_Blt(
|
||||
|
||||
if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run)
|
||||
{
|
||||
if (!(dwFlags & DDBLT_COLORFILL))
|
||||
InterlockedExchange(&g_ddraw.zoom.frame_skip, 0);
|
||||
|
||||
InterlockedExchange(&g_ddraw.render.surface_updated, TRUE);
|
||||
|
||||
if (!(This->flags & DDSD_BACKBUFFERCOUNT) || This->last_flip_tick + FLIP_REDRAW_TIMEOUT < timeGetTime())
|
||||
|
@ -152,6 +152,7 @@ void DDEnableZoom()
|
||||
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
|
||||
|
||||
g_ddraw.zoom.enabled = TRUE;
|
||||
InterlockedExchange(&g_ddraw.zoom.frame_skip, 20);
|
||||
}
|
||||
|
||||
BOOL DDIsWindowed()
|
||||
|
@ -552,6 +552,9 @@ DWORD WINAPI d3d9_render_main(void)
|
||||
(g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED) &&
|
||||
g_ddraw.render.run)
|
||||
{
|
||||
if (InterlockedDecrement(&g_ddraw.zoom.frame_skip) > 0)
|
||||
continue;
|
||||
|
||||
#if _DEBUG
|
||||
dbg_draw_frame_info_start();
|
||||
#endif
|
||||
|
@ -887,6 +887,9 @@ static void ogl_render()
|
||||
(g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED) &&
|
||||
g_ddraw.render.run)
|
||||
{
|
||||
if (InterlockedDecrement(&g_ddraw.zoom.frame_skip) > 0)
|
||||
continue;
|
||||
|
||||
#if _DEBUG
|
||||
dbg_draw_frame_info_start();
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user