From 86c9c63aed9c25057f939812c1952eb4b6d5255d Mon Sep 17 00:00:00 2001 From: zeromus Date: Sat, 21 Aug 2010 18:32:59 +0000 Subject: [PATCH] win32: add vsync option under display method. a bit tricky due to our display multithreading. let me know how it works for you. --- desmume/src/windows/main.cpp | 23 +++++++++++++++++++++++ desmume/src/windows/resource.h | Bin 86754 -> 43436 bytes desmume/src/windows/resources.rc | Bin 943198 -> 945716 bytes 3 files changed, 23 insertions(+) diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index be9aaad3e..9dd07adda 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -822,6 +822,7 @@ const u32 DWS_ALWAYSONTOP = 1; const u32 DWS_LOCKDOWN = 2; const u32 DWS_FULLSCREEN = 4; const u32 DWS_DDRAW_SW = 8; +const u32 DWS_VSYNC = 16; static u32 currWindowStyle = DWS_NORMAL; static void SetStyle(u32 dws) @@ -2522,6 +2523,8 @@ int _main() if(GetPrivateProfileBool("Video","Window Always On Top", false, IniName)) style |= DWS_ALWAYSONTOP; if(GetPrivateProfileBool("Video","Window Lockdown", false, IniName)) style |= DWS_LOCKDOWN; + if(GetPrivateProfileBool("Video","VSync", false, IniName)) + style |= DWS_VSYNC; int dispMethod = GetPrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_HW, IniName); if(dispMethod == DISPMETHOD_DDRAW_SW) style |= DWS_DDRAW_SW; @@ -3951,6 +3954,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM MainWindow->checkMenu(IDC_STATEREWINDING, staterewindingenabled == 1 ); + MainWindow->checkMenu(ID_DISPLAYMETHOD_VSYNC, (GetStyle()&DWS_VSYNC)!=0); MainWindow->checkMenu(ID_DISPLAYMETHOD_DIRECTDRAWHW, (GetStyle()&DWS_DDRAW_SW)==0); MainWindow->checkMenu(ID_DISPLAYMETHOD_DIRECTDRAWSW, (GetStyle()&DWS_DDRAW_SW)!=0); @@ -5106,6 +5110,11 @@ DOKEYDOWN: WritePrivateProfileInt("Focus", "BackgroundPause", (int)lostFocusPause, IniName); return 0; + case ID_DISPLAYMETHOD_VSYNC: + SetStyle(GetStyle()^DWS_VSYNC); + WritePrivateProfileInt("Video","VSync", (GetStyle()&DWS_VSYNC)?1:0, IniName); + break; + case ID_DISPLAYMETHOD_DIRECTDRAWHW: { Lock lock (win_backbuffer_sync); @@ -6396,6 +6405,20 @@ bool DDRAW::blt(LPRECT dst, LPRECT src) if (!surface.primary) return false; if (!surface.back) return false; + if(GetStyle()&DWS_VSYNC) + { + //this seems to block the whole process. this destroys the display thread and will easily block the emulator to 30fps. + //IDirectDraw7_WaitForVerticalBlank(handle,DDWAITVB_BLOCKBEGIN,0); + + for(;;) + { + BOOL vblank; + IDirectDraw7_GetVerticalBlankStatus(handle,&vblank); + if(vblank) break; + //must be a greedy loop since vblank is small relative to 1msec minimum Sleep() resolution. + } + } + HRESULT res = surface.primary->Blt(dst, surface.back, src, DDBLT_WAIT, 0); if (FAILED(res)) { diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 2897114d71580b04f2afe4304b65fef358c44e33..13edb008bcd8b6e8ed44eb62fd5a3d8dd334a5e4 100644 GIT binary patch literal 43436 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 Rm_FItFF$?x43DPI{|DcC)0O}L literal 86754 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 YB=;ibVo9(qX8y3;G47mdfBpXd0e%d}#Q*>R diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 4ae16e38e54a0aa907c23c4277d929db4d225390..b19134ad2c85dbc4573bfb72c6eeea6884ef6a01 100644 GIT binary patch delta 507 zcmcb2!g9+U%Z3)lElfFUrz@m$NKH?$V|C&TV+dxbWXNMko_?``)qJ{NBZnM2NGy`U zZ~DX}R`KZytsF+%=dERm(VhNlCac@@2~U`Ww!hoQ(ZV?WUJJL>cD>t70zA_dwsJ_d zi@jt5V&?5)FIgs4O)rRJ65GBhh4qLaDb@+pFllU0YvOpr)V`vO6^Pk@n0@<-GLC87 z4YwqKLw>u>`AB^|Gu delta 352 zcmdmT$MW6@%Z3)lElfFUr(ek6Hrigcjwwc$k#oA?Z6?X-8}2emOin0b*>;qJk7xUX z+e{l6r=M8Is?q-GB@+-cZ~yd?Wm46&SSCJ>i0I^u>YDEG>1WhfV>n(lt_b3s@G@z7 zf&;6?^n`ybY}36uIrye0%w}@iJ|~6skRaH$cCRW{AZ7z%_U&F(9Mia`3)C=aY=6+k zam5l!K<{L zFPi(30Wn6j1C0P;9-vXYNzEX?aECBtG88c6Gbk{qO*c&C6QBO&GH<~2e+AqeoJByX q9EMbevgsFJ^J-6b=ma_h=qab^0m6Jz+dl~MorCyn`zm$5E;j&zZif^A