1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

#101 clear backbuffer on flip

This commit is contained in:
FunkyFr3sh 2022-09-13 07:41:01 +02:00
parent 19c4d67087
commit b03600fb4f
4 changed files with 12 additions and 0 deletions

View File

@ -21,6 +21,7 @@ typedef struct IDirectDrawSurfaceImpl
DWORD width;
DWORD height;
DWORD bpp;
DWORD size;
DWORD flags;
DWORD caps;

View File

@ -146,6 +146,7 @@ typedef struct CNCDDRAW
int fixchilds;
BOOL fixwndprochook;
BOOL fixnotresponding;
BOOL flipclear;
BOOL locktopleft;
BOOL d3d9linear;
BOOL gdilinear;

View File

@ -39,6 +39,7 @@ void cfg_load()
g_ddraw->fixpitch = cfg_get_bool("fixpitch", TRUE);
g_ddraw->fixchilds = cfg_get_int("fixchilds", FIX_CHILDS_DETECT_PAINT);
g_ddraw->fixwndprochook = cfg_get_bool("fixwndprochook", FALSE);
g_ddraw->flipclear = cfg_get_bool("flipclear", FALSE);
g_ddraw->novidmem = cfg_get_bool("novidmem", FALSE);
g_ddraw->fixnotresponding = cfg_get_bool("fixnotresponding", FALSE);
g_ddraw->locktopleft = cfg_get_bool("locktopleft", FALSE);
@ -357,6 +358,7 @@ static void cfg_create_ini()
"gdilinear=false\n"
"allow_wmactivate=false\n"
"dinputhook=false\n"
"flipclear=false\n"
"bpp=0\n"
"\n"
"\n"
@ -491,6 +493,7 @@ static void cfg_create_ini()
"[CARMA95]\n"
"renderer=opengl\n"
"noactivateapp=true\n"
"flipclear=true\n"
"\n"
"; Carmageddon\n"
"[CARM95]\n"

View File

@ -545,6 +545,12 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa
InterlockedExchangePointer(&backbuffer->surface, buf);
InterlockedExchangePointer(&backbuffer->bitmap, bitmap);
InterlockedExchangePointer(&backbuffer->hdc, dc);
if (g_ddraw->flipclear)
{
memset(buf, 0, backbuffer->size);
}
LeaveCriticalSection(&g_ddraw->cs);
if (!lpDDSurfaceTargetOverride && This->backbuffer->backbuffer)
@ -1092,6 +1098,7 @@ HRESULT dd_CreateSurface(
CreateDIBSection(dst_surface->hdc, dst_surface->bmi, DIB_RGB_COLORS, (void**)&dst_surface->surface, NULL, 0);
dst_surface->bmi->bmiHeader.biHeight = -((int)bmp_height);
dst_surface->size = dst_surface->l_pitch * bmp_height * dst_surface->lx_pitch;
if (!dst_surface->bitmap)
{