From 897fdb5bbbced35a71f443a067295c4d7f9714ab Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 1 Jul 2018 21:27:44 +0200 Subject: [PATCH] allocate memory for surfaces on CreateDIBSection failure --- src/render.c | 2 +- src/surface.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/render.c b/src/render.c index 6acf8b3..b0f1fbe 100644 --- a/src/render.c +++ b/src/render.c @@ -426,7 +426,7 @@ DWORD WINAPI render_main(void) { snprintf( debugText, sizeof(debugText), - "FPS: %lu | Time: %2.2f ms", + "FPS: %lu | Time: %2.2f ms ", frame_count, frameTime); frame_count = 0; diff --git a/src/surface.c b/src/surface.c index 78600fb..2a65289 100644 --- a/src/surface.c +++ b/src/surface.c @@ -51,11 +51,14 @@ ULONG __stdcall ddraw_surface_Release(IDirectDrawSurfaceImpl *This) ddraw->primary = NULL; LeaveCriticalSection(&ddraw->cs); } - if(This->surface) - { + + if (This->bitmap) DeleteObject(This->bitmap); + else if (This->surface) + HeapFree(GetProcessHeap(), 0, This->surface); + + if (This->hDC) DeleteDC(This->hDC); - } if (This->bmi) HeapFree(GetProcessHeap(), 0, This->bmi); @@ -519,6 +522,10 @@ HRESULT __stdcall ddraw_CreateSurface(IDirectDrawImpl *This, LPDDSURFACEDESC lpD Surface->hDC = CreateCompatibleDC(ddraw->render.hDC); Surface->bitmap = CreateDIBSection(Surface->hDC, Surface->bmi, DIB_RGB_COLORS, (void **)&Surface->surface, NULL, 0); + + if (!Surface->bitmap) + Surface->surface = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Surface->lPitch * Surface->height * Surface->lXPitch); + SelectObject(Surface->hDC, Surface->bitmap); }