diff --git a/src/win32/fb_ddraw.cpp b/src/win32/fb_ddraw.cpp index 3a9b3d35e..2521d6193 100644 --- a/src/win32/fb_ddraw.cpp +++ b/src/win32/fb_ddraw.cpp @@ -461,7 +461,7 @@ bool DDrawFB::CreateSurfacesComplex () { DDSURFACEDESC ddsd = { sizeof(ddsd), }; HRESULT hr; - int tries = 2; + int tries = 0; LOG ("creating surfaces using a complex primary\n"); @@ -801,10 +801,14 @@ bool DDrawFB::Lock () bool DDrawFB::Lock (bool useSimpleCanvas) { + static int lock_num; bool wasLost; // LOG2 (" Lock (%d) <%d>\n", buffered, LockCount); + LOG3("Lock %5x <%d> %d\n", (AppActive << 16) | (SessionState << 12) | (MustBuffer << 8) | + (useSimpleCanvas << 4) | (int)UseBlitter, LockCount, lock_num++); + if (LockCount++ > 0) { return false; @@ -812,15 +816,16 @@ bool DDrawFB::Lock (bool useSimpleCanvas) wasLost = false; - if (NeedResRecreate) + if (NeedResRecreate && LockCount == 1) { + LOG("Recreating resources\n"); NeedResRecreate = false; ReleaseResources (); CreateResources (); + // ReleaseResources sets LockCount to 0. + LockCount = 1; } - LOG5 ("Lock %d %d %d %d %d\n", AppActive, SessionState, MustBuffer, useSimpleCanvas, UseBlitter); - if (!AppActive || SessionState || MustBuffer || useSimpleCanvas || !UseBlitter) { Buffer = MemBuffer; @@ -859,6 +864,7 @@ void DDrawFB::Unlock () if (LockCount == 0) { + LOG("Unlock called when already unlocked\n"); return; } @@ -895,6 +901,7 @@ DDrawFB::LockSurfRes DDrawFB::LockSurf (LPRECT lockrect, LPDIRECTDRAWSURFACE toL lockingLocker = true; if (LockingSurf == NULL) { + LOG("LockingSurf lost\n"); if (!CreateResources ()) { if (LastHR != DDERR_UNSUPPORTEDMODE) diff --git a/src/win32/win32iface.h b/src/win32/win32iface.h index e6745b6cf..fc75af0a3 100644 --- a/src/win32/win32iface.h +++ b/src/win32/win32iface.h @@ -498,7 +498,7 @@ enum }; #if 0 -#define STARTLOG do { if (!dbg) dbg = fopen ("k:/vid.log", "w"); } while(0) +#define STARTLOG do { if (!dbg) dbg = fopen ("e:/vid.log", "w"); } while(0) #define STOPLOG do { if (dbg) { fclose (dbg); dbg=NULL; } } while(0) #define LOG(x) do { if (dbg) { fprintf (dbg, x); fflush (dbg); } } while(0) #define LOG1(x,y) do { if (dbg) { fprintf (dbg, x, y); fflush (dbg); } } while(0) @@ -506,7 +506,8 @@ enum #define LOG3(x,y,z,zz) do { if (dbg) { fprintf (dbg, x, y, z, zz); fflush (dbg); } } while(0) #define LOG4(x,y,z,a,b) do { if (dbg) { fprintf (dbg, x, y, z, a, b); fflush (dbg); } } while(0) #define LOG5(x,y,z,a,b,c) do { if (dbg) { fprintf (dbg, x, y, z, a, b, c); fflush (dbg); } } while(0) -FILE *dbg; +extern FILE *dbg; +#define VID_FILE_DEBUG 1 #elif _DEBUG && 0 #define STARTLOG #define STOPLOG diff --git a/src/win32/win32video.cpp b/src/win32/win32video.cpp index b35138fd6..06fdaff1f 100644 --- a/src/win32/win32video.cpp +++ b/src/win32/win32video.cpp @@ -112,6 +112,10 @@ IDirect3DDevice9 *D3Device; CVAR (Bool, vid_forceddraw, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) CVAR (Int, vid_adapter, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +#if VID_FILE_DEBUG +FILE *dbg; +#endif + // CODE -------------------------------------------------------------------- Win32Video::Win32Video (int parm)