mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +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
|
struct
|
||||||
{
|
{
|
||||||
|
LONG frame_skip;
|
||||||
BOOL enabled;
|
BOOL enabled;
|
||||||
} zoom;
|
} zoom;
|
||||||
} CNCDDRAW;
|
} CNCDDRAW;
|
||||||
|
@ -418,6 +418,9 @@ HRESULT dds_Blt(
|
|||||||
|
|
||||||
if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw.ref && g_ddraw.render.run)
|
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);
|
InterlockedExchange(&g_ddraw.render.surface_updated, TRUE);
|
||||||
|
|
||||||
if (!(This->flags & DDSD_BACKBUFFERCOUNT) || This->last_flip_tick + FLIP_REDRAW_TIMEOUT < timeGetTime())
|
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());
|
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
|
||||||
|
|
||||||
g_ddraw.zoom.enabled = TRUE;
|
g_ddraw.zoom.enabled = TRUE;
|
||||||
|
InterlockedExchange(&g_ddraw.zoom.frame_skip, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL DDIsWindowed()
|
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_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED) &&
|
||||||
g_ddraw.render.run)
|
g_ddraw.render.run)
|
||||||
{
|
{
|
||||||
|
if (InterlockedDecrement(&g_ddraw.zoom.frame_skip) > 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
#if _DEBUG
|
#if _DEBUG
|
||||||
dbg_draw_frame_info_start();
|
dbg_draw_frame_info_start();
|
||||||
#endif
|
#endif
|
||||||
|
@ -887,6 +887,9 @@ static void ogl_render()
|
|||||||
(g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED) &&
|
(g_config.minfps < 0 || WaitForSingleObject(g_ddraw.render.sem, timeout) != WAIT_FAILED) &&
|
||||||
g_ddraw.render.run)
|
g_ddraw.render.run)
|
||||||
{
|
{
|
||||||
|
if (InterlockedDecrement(&g_ddraw.zoom.frame_skip) > 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
#if _DEBUG
|
#if _DEBUG
|
||||||
dbg_draw_frame_info_start();
|
dbg_draw_frame_info_start();
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user