diff --git a/ddraw.dll b/ddraw.dll index 63fdd7d..a54de68 100644 Binary files a/ddraw.dll and b/ddraw.dll differ diff --git a/main.c b/main.c index be460b7..7fa3abf 100644 --- a/main.c +++ b/main.c @@ -374,8 +374,6 @@ void ToggleFullscreen() LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - RECT rc = { 0, 0, ddraw->render.width, ddraw->render.height }; - switch(uMsg) { case WM_MOVE: @@ -521,11 +519,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } break; - case WM_ERASEBKGND: - EnterCriticalSection(&ddraw->cs); - FillRect(ddraw->render.hDC, &rc, (HBRUSH) GetStockObject(BLACK_BRUSH)); - LeaveCriticalSection(&ddraw->cs); - break; } return ddraw->WndProc(hWnd, uMsg, wParam, lParam); diff --git a/surface.c b/surface.c index c15aa40..70db93b 100644 --- a/surface.c +++ b/surface.c @@ -120,11 +120,22 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR unsigned char* from=Source->surface + y0*Source->width + x0; int s = x1-x0; - int y; - for(y=y0; ywidth, from+=Source->width) - { - memcpy(to, from, s); - } + if((This->caps & DDSCAPS_PRIMARYSURFACE) && !(This->flags & DDSD_BACKBUFFERCOUNT)) + { + EnterCriticalSection(&ddraw->cs); + + int y; + for(y=y0; ywidth, from+=Source->width) + memcpy(to, from, s); + + LeaveCriticalSection(&ddraw->cs); + } + else + { + int y; + for(y=y0; ywidth, from+=Source->width) + memcpy(to, from, s); + } } return DD_OK;