From b090498d290bd3be688678888108e866c92915cf Mon Sep 17 00:00:00 2001 From: gho tik Date: Fri, 12 Jul 2013 12:38:33 -0400 Subject: [PATCH] v2_02_47_src Former-commit-id: 38a199acb7537854a60dfd48bf3af78943eb775d --- Include/dxwnd.h | 3 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 74 +++++-- build/exports/Crimson Skies.dxw | 4 +- build/exports/Star Wars Episode I Racer.dxw | 24 +++ build/issues.txt | 3 +- build/readme-relnotes.txt | 8 + dll/dxhelper.cpp | 89 +++++++++ dll/dxhelper.h | 1 + dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 448512 -> 448512 bytes dll/gdi32.cpp | 2 +- dll/hd3d7.cpp | 204 ++++++++++++++++++-- host/Resource.h | 31 ++- host/TabCompat.cpp | 2 + host/TabDebug.cpp | 2 + host/TabDirectX.cpp | 8 - host/TabMouse.cpp | 24 ++- host/TabMouse.h | 8 +- host/TabOpenGL.h | 2 +- host/TabProgram.cpp | 2 +- host/{TabGDI.cpp => TabSysLibs.cpp} | 18 +- host/{TabGDI.h => TabSysLibs.h} | 6 +- host/TabWindow.cpp | 12 ++ host/TabWindow.h | 2 +- host/TargetDlg.cpp | 13 +- host/TargetDlg.h | 3 + host/dxTabCtrl.cpp | 20 +- host/dxwndhost.aps | Bin 167908 -> 167736 bytes host/dxwndhost.rc | 131 ++++++------- host/dxwndhost.vs2008.suo | Bin 353280 -> 372736 bytes host/dxwndhost.vs2008.vcproj | 24 +-- host/dxwndhostView.cpp | 6 + 34 files changed, 530 insertions(+), 206 deletions(-) create mode 100644 build/exports/Star Wars Episode I Racer.dxw rename host/{TabGDI.cpp => TabSysLibs.cpp} (68%) rename host/{TabGDI.h => TabSysLibs.h} (88%) diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 3ea6c87..a34a3fd 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -117,6 +117,9 @@ #define SUPPRESSCHILD 0x00000002 // suppress child process generation (CreateProcessA, ...?) #define FIXREFCOUNTER 0x00000004 // fixes the reference counter for the main directdraw session (the one connected to primary surfaces) #define SHOWTIMESTRETCH 0x00000008 // Shows time stretching multiplier on screen overlay +#define ZBUFFERCLEAN 0x00000010 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer") +#define ZBUFFER0CLEAN 0x00000020 // Clean ZBUFFER upon (fix for "Star Wars Ep. I - Racer") +#define ZBUFFERALWAYS 0x00000040 // Forces ZBUFFER D3DCMP_ALWAYS condition to show all planes.... // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 07abbc0..90c719f 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c96cb2622942095b2b952937cc60ce9ba524aaf8921ddfc68088c370d79d2ff1 -size 426496 +oid sha256:404c01ee20ad1832dc37c27ab836098886b2f3363181e6976a52457ecd82d59e +size 430592 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index ba10d1d..c837a02 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97bc60a26fa1ffe141ac022b2baadea04bef5c3b2d9072c19d606d61261266bc -size 532992 +oid sha256:a5c2c347ab9be31f30206cc590f69d6d24bbd4e63aca63bea0f46931ef7afcb1 +size 531968 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index 5367e19..10cc6bc 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -75,10 +75,10 @@ opengllib3= ver3=0 coord3=0 flag3=671088674 -flagg3=1207959552 +flagg3=-939524096 flagh3=20 flagi3=4 -tflag3=0 +tflag3=3 initx3=0 inity3=0 minx3=0 @@ -284,7 +284,7 @@ coord12=0 flag12=134234148 flagg12=1207959552 flagh12=20 -flagi12=4 +flagi12=36 tflag12=258 initx12=0 inity12=0 @@ -489,7 +489,7 @@ opengllib21= ver21=0 coord21=0 flag21=679485472 -flagg21=1207959552 +flagg21=-939524096 flagh21=20 flagi21=4 tflag21=0 @@ -765,9 +765,9 @@ opengllib33= ver33=0 coord33=0 flag33=134234148 -flagg33=1207959808 +flagg33=-939523840 flagh33=20 -flagi33=0 +flagi33=16 tflag33=2 initx33=0 inity33=0 @@ -857,7 +857,7 @@ opengllib37= ver37=0 coord37=0 flag37=134217762 -flagg37=1207963648 +flagg37=-939520000 flagh37=20 flagi37=4 tflag37=0 @@ -1293,11 +1293,11 @@ module56= opengllib56= ver56=0 coord56=2 -flag56=687865888 -flagg56=1207959568 +flag56=671088672 +flagg56=1207959696 flagh56=65556 flagi56=0 -tflag56=2 +tflag56=3 initx56=0 inity56=0 minx56=0 @@ -1471,8 +1471,54 @@ sizx63=800 sizy63=600 maxfps63=0 initts63=0 +title64=Star Wars Episode I Racer +path64=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE +module64= +opengllib64= +ver64=0 +coord64=0 +flag64=679493669 +flagg64=1210056720 +flagh64=8212 +flagi64=20 +tflag64=67 +initx64=0 +inity64=0 +minx64=0 +miny64=0 +maxx64=0 +maxy64=0 +posx64=50 +posy64=50 +sizx64=800 +sizy64=600 +maxfps64=0 +initts64=0 +title65=Mageslayer +path65=D:\Games\MAGE\MAGESLAY.EXE +module65= +opengllib65= +ver65=0 +coord65=0 +flag65=134217762 +flagg65=1207959552 +flagh65=20 +flagi65=0 +tflag65=67 +initx65=0 +inity65=0 +minx65=0 +miny65=0 +maxx65=0 +maxy65=0 +posx65=50 +posy65=50 +sizx65=800 +sizy65=600 +maxfps65=0 +initts65=0 [window] -posx=1360 -posy=603 -sizx=497 -sizy=410 +posx=1056 +posy=200 +sizx=638 +sizy=670 diff --git a/build/exports/Crimson Skies.dxw b/build/exports/Crimson Skies.dxw index 8563189..741addf 100644 --- a/build/exports/Crimson Skies.dxw +++ b/build/exports/Crimson Skies.dxw @@ -8,8 +8,8 @@ coord0=0 flag0=134234148 flagg0=1207959552 flagh0=20 -flagi0=4 -tflag0=259 +flagi0=36 +tflag0=258 initx0=0 inity0=0 minx0=0 diff --git a/build/exports/Star Wars Episode I Racer.dxw b/build/exports/Star Wars Episode I Racer.dxw new file mode 100644 index 0000000..37ebbe2 --- /dev/null +++ b/build/exports/Star Wars Episode I Racer.dxw @@ -0,0 +1,24 @@ +[target] +title0=Star Wars Episode I Racer +path0=D:\Games\Star Wars Episode 1 racer\SWEP1RCR.EXE +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=679493669 +flagg0=1210056720 +flagh0=8212 +flagi0=20 +tflag0=67 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 diff --git a/build/issues.txt b/build/issues.txt index c163985..214f7c1 100644 --- a/build/issues.txt +++ b/build/issues.txt @@ -1,3 +1,4 @@ Ancient Evil: working both in emulated / direct mode, but in emulated mode the cursor is not visible. window handling for ddraw8 games - see WildFire with keep aspect ratio & client area -"devastation" intro movie - bad cooordinates \ No newline at end of file +"devastation" intro movie - bad cooordinates +Praetorians: bad splash screen & crash \ No newline at end of file diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 040864a..9a15f7f 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -312,3 +312,11 @@ A small fix for ddraw 7 games that makes Praetorians playable, though with some v2.02.46 Fixed handling of user32 CreateDialogIndirectParam call to avoid processing in non fullscreen mode - fix necessary to start "Crimson Skies". + +v2.02.47 +GUI: +Configuration tabs reorganization: now some tabs have merged making it easier to reach all options +core: +improved d3d wrapping and sdded ZBUFFER cleanup flags to fix some d3d games. In particular: +Clean ZBUFFER @1.0 fix: to fix "Star Wars Episode I Racer" +Clean ZBUFFER @0.0 fix: to fix "Crimson Skies" black blocks bug on ATI cards \ No newline at end of file diff --git a/dll/dxhelper.cpp b/dll/dxhelper.cpp index d9de4f4..90b8119 100644 --- a/dll/dxhelper.cpp +++ b/dll/dxhelper.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "dxwnd.h" @@ -1572,4 +1573,92 @@ char *ExplainRasterCaps(DWORD c) return(eb); } +char *ExplainD3DRenderState(DWORD c) +{ + char *p; + if((c>=D3DRENDERSTATE_STIPPLEPATTERN00) && (c<=D3DRENDERSTATE_STIPPLEPATTERN31)) p="STIPPLEPATTERNnn"; + else + if((c>=D3DRENDERSTATE_WRAP0) && (c<=D3DRENDERSTATE_WRAP7)) p="WRAPn"; + else + switch(c){ + case D3DRENDERSTATE_ANTIALIAS: p="ANTIALIAS"; break; + case D3DRENDERSTATE_TEXTUREPERSPECTIVE: p="TEXTUREPERSPECTIVE"; break; + case D3DRENDERSTATE_ZENABLE: p="ZENABLE"; break; + case D3DRENDERSTATE_FILLMODE: p="FILLMODE"; break; + case D3DRENDERSTATE_SHADEMODE: p="SHADEMODE"; break; + case D3DRENDERSTATE_LINEPATTERN: p="LINEPATTERN"; break; + case D3DRENDERSTATE_ZWRITEENABLE: p="ZWRITEENABLE"; break; + case D3DRENDERSTATE_ALPHATESTENABLE: p="ALPHATESTENABLE"; break; + case D3DRENDERSTATE_LASTPIXEL: p="LASTPIXEL"; break; + case D3DRENDERSTATE_SRCBLEND: p="SRCBLEND"; break; + case D3DRENDERSTATE_DESTBLEND: p="DESTBLEND"; break; + case D3DRENDERSTATE_CULLMODE: p="CULLMODE"; break; + case D3DRENDERSTATE_ZFUNC: p="ZFUNC"; break; + case D3DRENDERSTATE_ALPHAREF: p="ALPHAREF"; break; + case D3DRENDERSTATE_ALPHAFUNC: p="ALPHAFUNC"; break; + case D3DRENDERSTATE_DITHERENABLE: p="DITHERENABLE"; break; + case D3DRENDERSTATE_ALPHABLENDENABLE: p="ALPHABLENDENABLE"; break; + case D3DRENDERSTATE_FOGENABLE: p="FOGENABLE"; break; + case D3DRENDERSTATE_SPECULARENABLE: p="SPECULARENABLE"; break; + case D3DRENDERSTATE_ZVISIBLE: p="ZVISIBLE"; break; + case D3DRENDERSTATE_STIPPLEDALPHA: p="STIPPLEDALPHA"; break; + case D3DRENDERSTATE_FOGCOLOR: p="FOGCOLOR"; break; + case D3DRENDERSTATE_FOGTABLEMODE: p="FOGTABLEMODE"; break; + case D3DRENDERSTATE_FOGSTART: p="FOGSTART"; break; + case D3DRENDERSTATE_FOGEND: p="FOGEND"; break; + case D3DRENDERSTATE_FOGDENSITY: p="FOGDENSITY"; break; + case D3DRENDERSTATE_EDGEANTIALIAS: p="EDGEANTIALIAS"; break; + case D3DRENDERSTATE_COLORKEYENABLE: p="COLORKEYENABLE"; break; + case D3DRENDERSTATE_STENCILENABLE: p="STENCILENABLE"; break; + case D3DRENDERSTATE_ZBIAS: p="ZBIAS"; break; + case D3DRENDERSTATE_RANGEFOGENABLE: p="RANGEFOGENABLE"; break; + case D3DRENDERSTATE_STENCILFAIL: p="STENCILFAIL"; break; + case D3DRENDERSTATE_STENCILZFAIL: p="STENCILZFAIL"; break; + case D3DRENDERSTATE_STENCILPASS: p="STENCILPASS"; break; + case D3DRENDERSTATE_STENCILFUNC: p="STENCILFUNC"; break; + case D3DRENDERSTATE_STENCILREF: p="STENCILREF"; break; + case D3DRENDERSTATE_STENCILMASK: p="STENCILMASK"; break; + case D3DRENDERSTATE_STENCILWRITEMASK: p="STENCILWRITEMASK"; break; + case D3DRENDERSTATE_TEXTUREFACTOR: p="TEXTUREFACTOR"; break; + case D3DRENDERSTATE_CLIPPING: p="CLIPPING"; break; + case D3DRENDERSTATE_LIGHTING: p="LIGHTING"; break; + case D3DRENDERSTATE_EXTENTS: p="EXTENTS"; break; + case D3DRENDERSTATE_AMBIENT: p="AMBIENT"; break; + case D3DRENDERSTATE_FOGVERTEXMODE: p="FOGVERTEXMODE"; break; + case D3DRENDERSTATE_COLORVERTEX: p="COLORVERTEX"; break; + case D3DRENDERSTATE_LOCALVIEWER: p="LOCALVIEWER"; break; + case D3DRENDERSTATE_NORMALIZENORMALS: p="NORMALIZENORMALS"; break; + case D3DRENDERSTATE_COLORKEYBLENDENABLE: p="COLORKEYBLENDENABLE"; break; + case D3DRENDERSTATE_DIFFUSEMATERIALSOURCE: p="DIFFUSEMATERIALSOURCE"; break; + case D3DRENDERSTATE_SPECULARMATERIALSOURCE: p="SPECULARMATERIALSOURCE"; break; + case D3DRENDERSTATE_AMBIENTMATERIALSOURCE: p="AMBIENTMATERIALSOURCE"; break; + case D3DRENDERSTATE_EMISSIVEMATERIALSOURCE: p="EMISSIVEMATERIALSOURCE"; break; + case D3DRENDERSTATE_VERTEXBLEND: p="VERTEXBLEND"; break; + case D3DRENDERSTATE_CLIPPLANEENABLE: p="CLIPPLANEENABLE"; break; + // unsupported legacy + + case D3DRENDERSTATE_TEXTUREHANDLE: p="TEXTUREHANDLE"; break; + case D3DRENDERSTATE_TEXTUREADDRESS: p="TEXTUREADDRESS"; break; + case D3DRENDERSTATE_WRAPU: p="WRAPU"; break; + case D3DRENDERSTATE_WRAPV: p="WRAPV"; break; + case D3DRENDERSTATE_MONOENABLE: p="MONOENABLE"; break; + case D3DRENDERSTATE_ROP2: p="ROP2"; break; + case D3DRENDERSTATE_PLANEMASK: p="PLANEMASK"; break; + case D3DRENDERSTATE_TEXTUREMAG: p="TEXTUREMAG"; break; + case D3DRENDERSTATE_TEXTUREMIN: p="TEXTUREMIN"; break; + case D3DRENDERSTATE_TEXTUREMAPBLEND: p="TEXTUREMAPBLEND"; break; + case D3DRENDERSTATE_SUBPIXEL: p="SUBPIXEL"; break; + case D3DRENDERSTATE_SUBPIXELX: p="SUBPIXELX"; break; + case D3DRENDERSTATE_STIPPLEENABLE: p="STIPPLEENABLE"; break; + case D3DRENDERSTATE_BORDERCOLOR: p="BORDERCOLOR"; break; + case D3DRENDERSTATE_TEXTUREADDRESSU: p="TEXTUREADDRESSU"; break; + case D3DRENDERSTATE_TEXTUREADDRESSV: p="TEXTUREADDRESSV"; break; + case D3DRENDERSTATE_MIPMAPLODBIAS: p="MIPMAPLODBIAS"; break; + case D3DRENDERSTATE_ANISOTROPY: p="ANISOTROPY"; break; + case D3DRENDERSTATE_FLUSHBATCH: p="FLUSHBATCH"; break; + case D3DRENDERSTATE_FORCE_DWORD: p="FORCE_DWORD"; break; + default: p="???"; break; + } + return p; +} diff --git a/dll/dxhelper.h b/dll/dxhelper.h index 24b5669..1ef6d57 100644 --- a/dll/dxhelper.h +++ b/dll/dxhelper.h @@ -46,3 +46,4 @@ extern char *ExplainPeekRemoveMsg(DWORD); extern char *ExplainGetDCExFlags(DWORD); extern char *ExplainPaletteUse(UINT); extern char *ExplainRasterCaps(DWORD); +extern char *ExplainD3DRenderState(DWORD); \ No newline at end of file diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index ecc6d89..8d838cd 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -24,7 +24,7 @@ along with this program. If not, see . #include "dxwnd.h" #include "dxwcore.hpp" -#define VERSION "2.02.46" +#define VERSION "2.02.47" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index f126de629ab75800cf50bd5bada479e29bd90a6e..f162989207dc1f3df07695dcc354cdfe6e5387f6 100644 GIT binary patch delta 13926 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 delta 23418 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 diff --git a/dll/gdi32.cpp b/dll/gdi32.cpp index 8e2f3a0..2c302f5 100644 --- a/dll/gdi32.cpp +++ b/dll/gdi32.cpp @@ -10,7 +10,7 @@ static void Stopper(char *s, int line) { char sMsg[81]; - sprintf(sMsg,"break: \"%s\"", s); + sprintf_s(sMsg, 80, "break: \"%s\"", s); MessageBox(0, sMsg, "break", MB_OK | MB_ICONEXCLAMATION); } diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index c177003..be0164c 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -40,6 +40,10 @@ typedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC); typedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC); +typedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD); +typedef HRESULT (WINAPI *Scene3_Type)(void *); + + Initialize_Type pInitialize = NULL; EnumDevices_Type pEnumDevices = NULL; CreateLight_Type pCreateLight = NULL; @@ -54,6 +58,15 @@ SetViewport_Type pSetViewport = NULL; GetViewport_Type pGetViewport = NULL; QueryInterfaceD3_Type pQueryInterfaceD3 = NULL; +SetRenderState3_Type pSetRenderState2 = NULL; +SetRenderState3_Type pSetRenderState3 = NULL; +Scene3_Type pBeginScene1 = NULL; +Scene3_Type pBeginScene2 = NULL; +Scene3_Type pBeginScene3 = NULL; +Scene3_Type pEndScene1 = NULL; +Scene3_Type pEndScene2 = NULL; +Scene3_Type pEndScene3 = NULL; + D3DInitialize_Type pD3DInitialize = NULL; D3DGetCaps_Type pD3DGetCaps = NULL; @@ -74,6 +87,15 @@ HRESULT WINAPI extQueryInterfaceD3(void *, REFIID, LPVOID *); HRESULT WINAPI extD3DInitialize(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC); HRESULT WINAPI extD3DGetCaps(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC); +HRESULT WINAPI extSetRenderState2(void *, D3DRENDERSTATETYPE, DWORD); +HRESULT WINAPI extBeginScene1(void *); +HRESULT WINAPI extEndScene1(void *); +HRESULT WINAPI extBeginScene2(void *); +HRESULT WINAPI extEndScene2(void *); +HRESULT WINAPI extSetRenderState3(void *, D3DRENDERSTATETYPE, DWORD); +HRESULT WINAPI extBeginScene3(void *); +HRESULT WINAPI extEndScene3(void *); + extern char *ExplainDDError(DWORD); int HookDirect3D7(HMODULE module, int version){ @@ -184,28 +206,33 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int dxversion) } } -void HookDirect3DDevice(LPDIRECTDRAW *lpd3d, int dxversion) + +void HookDirect3DDevice(void **lpd3ddev, int dxversion) { - OutTraceD("HookDirect3DDevice: d3d=%x d3dversion=%d\n", *lpd3d, dxversion); + OutTraceD("HookDirect3DDevice: d3ddev=%x d3dversion=%d\n", lpd3ddev, dxversion); gD3DVersion = dxversion; switch(dxversion){ case 1: - //SetHook((void *)(**(DWORD **)lpd3d + 12), extInitialize, (void **)&pInitialize, "Initialize"); - //SetHook((void *)(**(DWORD **)lpd3d + 16), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); - //SetHook((void *)(**(DWORD **)lpd3d + 20), extCreateLight, (void **)&pCreateLight, "CreateLight"); - //SetHook((void *)(**(DWORD **)lpd3d + 24), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - //SetHook((void *)(**(DWORD **)lpd3d + 28), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); - //SetHook((void *)(**(DWORD **)lpd3d + 32), extFindDevice, (void **)&pFindDevice, "FindDevice"); + SetHook((void *)(**(DWORD **)lpd3ddev + 76), extBeginScene1, (void **)&pBeginScene1, "BeginScene(1)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 80), extEndScene1, (void **)&pEndScene1, "EndScene(1)"); break; - case 5: - case 6: - //SetHook((void *)(**(DWORD **)lpd3d + 12), extEnumDevices, (void **)&pEnumDevices, "EnumDevices"); - //SetHook((void *)(**(DWORD **)lpd3d + 16), extCreateLight, (void **)&pCreateLight, "CreateLight"); - //SetHook((void *)(**(DWORD **)lpd3d + 20), extCreateMaterial, (void **)&pCreateMaterial, "CreateMaterial"); - //SetHook((void *)(**(DWORD **)lpd3d + 24), extCreateViewport, (void **)&pCreateViewport, "CreateViewport"); - //SetHook((void *)(**(DWORD **)lpd3d + 28), extFindDevice, (void **)&pFindDevice, "FindDevice"); + case 2: + SetHook((void *)(**(DWORD **)lpd3ddev + 40), extBeginScene2, (void **)&pBeginScene2, "BeginScene(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 44), extEndScene2, (void **)&pEndScene2, "EndScene(2)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 92), extSetRenderState2, (void **)&pSetRenderState2, "SetRenderState(2)"); + if(dxw.dwFlags2 & WIREFRAME){ + (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + } + break; + case 3: + SetHook((void *)(**(DWORD **)lpd3ddev + 36), extBeginScene3, (void **)&pBeginScene3, "BeginScene(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 40), extEndScene3, (void **)&pEndScene3, "EndScene(3)"); + SetHook((void *)(**(DWORD **)lpd3ddev + 88), extSetRenderState3, (void **)&pSetRenderState3, "SetRenderState(3)"); + if(dxw.dwFlags2 & WIREFRAME){ + (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); + } break; } } @@ -439,10 +466,7 @@ HRESULT WINAPI extCreateDevice2(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE else OutTraceD("CreateDevice(D3D2): lpd3dd=%x\n", lpd3d, *lplpd3dd); - // Hook device here ...! - SetHook((void *)(**(DWORD **)lplpd3dd + 12), extD3DInitialize, (void **)&pD3DInitialize, "Initialize(D3D)"); - SetHook((void *)(**(DWORD **)lplpd3dd + 16), extD3DGetCaps, (void **)&pD3DGetCaps, "GetCaps(D3D)"); - + HookDirect3DDevice((void **)lplpd3dd, 2); return res; } @@ -475,7 +499,7 @@ HRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4 return res; } - // Hook device here ...! + HookDirect3DDevice((void **)lplpd3dd, 3); return res; } @@ -521,3 +545,143 @@ HRESULT WINAPI extEndScene(void *d3dd) HRESULT WINAPI extGetDirect3D(void *d3dd, LPDIRECT3D*) #endif +char *ExplainRenderstateValue(DWORD Value) +{ + char *p; + switch(Value){ + case D3DCMP_NEVER : p="D3DCMP_NEVER"; break; + case D3DCMP_LESS : p="D3DCMP_LESS"; break; + case D3DCMP_EQUAL : p="D3DCMP_EQUAL"; break; + case D3DCMP_LESSEQUAL : p="D3DCMP_LESSEQUAL"; break; + case D3DCMP_GREATER : p="D3DCMP_GREATER"; break; + case D3DCMP_NOTEQUAL : p="D3DCMP_NOTEQUAL"; break; + case D3DCMP_GREATEREQUAL : p="D3DCMP_GREATEREQUAL"; break; + case D3DCMP_ALWAYS : p="D3DCMP_ALWAYS"; break; + default : p="???"; break; + } + return p; +} + +HRESULT WINAPI extSetRenderState2(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value) +{ + HRESULT res; + OutTraceD("SetRenderState(2): d3dd=%x State=%x(%s) Value=%x\n", d3dd, State, ExplainD3DRenderState(State), Value); + if((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRENDERSTATE_ZFUNC)) { + DWORD OldValue; + OldValue = Value; + Value = D3DCMP_ALWAYS; + OutTraceD("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue)); + } + if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){ + Value = D3DFILL_WIREFRAME; + OutTraceD("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); + } + res=(*pSetRenderState2)(d3dd, State, Value); + if(res) OutTraceE("SetRenderState(2): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extSetRenderState3(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value) +{ + HRESULT res; + OutTraceD("SetRenderState(3): d3dd=%x State=%x(%s) Value=%x\n", d3dd, State, ExplainD3DRenderState(State), Value); + if((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRENDERSTATE_ZFUNC)) { + DWORD OldValue; + OldValue = Value; + Value = D3DCMP_ALWAYS; + OutTraceD("SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\n", ExplainRenderstateValue(OldValue)); + } + if((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){ + Value = D3DFILL_WIREFRAME; + OutTraceD("SetRenderState: FIXED State=FILLMODE Value=D3DFILL_WIREFRAME\n"); + } + res=(*pSetRenderState3)(d3dd, State, Value); + if(res) OutTraceE("SetRenderState(3): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extBeginScene1(void *d3dd) +{ + HRESULT res; + OutTraceD("BeginScene(1): d3dd=%x\n", d3dd); + res=(*pBeginScene1)(d3dd); + if(res) OutTraceE("BeginScene(1): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extBeginScene2(void *d3dd) +{ + HRESULT res; + OutTraceD("BeginScene(2): d3dd=%x\n", d3dd); + if(dxw.dwFlags4 & ZBUFFERCLEAN){ + LPDIRECT3DVIEWPORT2 vp; + D3DVIEWPORT vpd; + ((LPDIRECT3DDEVICE2)d3dd)->GetCurrentViewport(&vp); + D3DRECT d3dRect; + vpd.dwSize=sizeof(D3DVIEWPORT); + vp->GetViewport(&vpd); + d3dRect.x1 = vpd.dwX; + d3dRect.y1 = vpd.dwY; + d3dRect.x2 = vpd.dwX + vpd.dwWidth; + d3dRect.y2 = vpd.dwY + vpd.dwHeight; + OutTraceD("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); + vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER); + } + res=(*pBeginScene2)(d3dd); + if(res) OutTraceE("BeginScene(2): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extBeginScene3(void *d3dd) +{ + HRESULT res; + OutTraceD("BeginScene(3): d3dd=%x\n", d3dd); + if(dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)){ + LPDIRECT3DVIEWPORT3 vp; + D3DVIEWPORT vpd; + ((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp); + D3DRECT d3dRect; + vpd.dwSize=sizeof(D3DVIEWPORT); + vp->GetViewport(&vpd); + d3dRect.x1 = vpd.dwX; + d3dRect.y1 = vpd.dwY; + d3dRect.x2 = vpd.dwX + vpd.dwWidth; + d3dRect.y2 = vpd.dwY + vpd.dwHeight; + OutTraceD("d3dRect=(%d,%d)-(%d,%d)\n", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2); + if(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0); + if(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0); + } + res=(*pBeginScene3)(d3dd); + if(res) OutTraceE("BeginScene(3): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extEndScene1(void *d3dd) +{ + HRESULT res; + OutTraceD("EndScene(1): d3dd=%x\n", d3dd); + res=(*pEndScene1)(d3dd); + //dxw.ShowOverlay(); + if(res) OutTraceE("EndScene(1): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extEndScene2(void *d3dd) +{ + HRESULT res; + OutTraceD("EndScene(2): d3dd=%x\n", d3dd); + res=(*pEndScene2)(d3dd); + //dxw.ShowOverlay(); + if(res) OutTraceE("EndScene(2): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extEndScene3(void *d3dd) +{ + HRESULT res; + OutTraceD("EndScene(3): d3dd=%x\n", d3dd); + res=(*pEndScene3)(d3dd); + //dxw.ShowOverlay(); + if(res) OutTraceE("EndScene(3): res=%x(%s)\n", res, ExplainDDError(res)); + return res; +} diff --git a/host/Resource.h b/host/Resource.h index 558be92..1d8280b 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -22,21 +22,18 @@ #define IDI_RUN6 148 #define IDD_STATUS 149 #define IDD_TIMESLIDER 150 -#define IDD_TAB_PROGRAM 152 -#define IDD_TAB_LOG 153 +#define IDD_TAB_PROGRAM 151 +#define IDD_TAB_LOG 152 #define IDB_BIGICONS 153 #define IDD_TAB_DIRECTX 154 -#define IDD_TAB_MOUSE 155 -#define IDB_BITMAP1 155 -#define IDB_SMALLICONS 155 -#define IDD_TAB_TIMING 156 -#define IDD_TAB_WINDOW 157 -#define IDD_TAB_EMPTY 158 -#define IDB_PALETTE 158 -#define IDD_TAB_OPENGL 159 -#define IDD_TAB_COMPAT 160 -#define IDD_TAB_GDI 161 -#define IDD_TAB_COLOR 162 +#define IDD_TAB_INPUT 155 +#define IDB_SMALLICONS 156 +#define IDD_TAB_TIMING 157 +#define IDD_TAB_OUTPUT 158 +#define IDD_TAB_EMPTY 159 +#define IDB_PALETTE 160 +#define IDD_TAB_COMPAT 161 +#define IDD_TAB_SYSLIBS 162 #define IDD_TAB_DEBUG 163 #define IDD_PALETTE 164 #define IDC_AUTO 300 @@ -173,9 +170,9 @@ #define IDC_FIXD3DFRAME 1127 #define IDC_BUFFEREDIOFIX 1128 #define IDC_FILTERMESSAGES 1129 -#define IDC_PEEKALLMESSAGES 1130 -#define IDC_TRACEHOOKS 1131 -#define IDC_FULLRECTBLT2 1132 +#define IDC_ZBUFFERCLEAN 1130 +#define IDC_PEEKALLMESSAGES 1131 +#define IDC_TRACEHOOKS 1132 #define IDC_SURFACEWARN 1133 #define IDC_ANALITICALMODE 1134 #define IDC_ANALYTICMODE 1135 @@ -190,6 +187,8 @@ #define IDC_SUPPRESSCHILD 1144 #define IDC_FIXREFCOUNTER 1145 #define IDC_SHOWTIMESTRETCH 1146 +#define IDC_ZBUFFERALWAYS 1147 +#define IDC_ZBUFFER0CLEAN 1148 #define ID_MODIFY 32771 #define ID_DELETE 32772 #define ID_ADD 32773 diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 09ee744..bb1aa40 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -37,6 +37,8 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_CDROMDRIVETYPE, cTarget->m_CDROMDriveType); DDX_Check(pDX, IDC_FONTBYPASS, cTarget->m_FontBypass); DDX_Check(pDX, IDC_BUFFEREDIOFIX, cTarget->m_BufferedIOFix); + DDX_Check(pDX, IDC_ZBUFFERCLEAN, cTarget->m_ZBufferClean); + DDX_Check(pDX, IDC_ZBUFFER0CLEAN, cTarget->m_ZBuffer0Clean); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) diff --git a/host/TabDebug.cpp b/host/TabDebug.cpp index 4ee0aa5..3b7f52d 100644 --- a/host/TabDebug.cpp +++ b/host/TabDebug.cpp @@ -39,6 +39,8 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NODDRAWBLT, cTarget->m_NoDDRAWBlt); DDX_Check(pDX, IDC_NODDRAWFLIP, cTarget->m_NoDDRAWFlip); DDX_Check(pDX, IDC_NOGDIBLT, cTarget->m_NoGDIBlt); + DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); + DDX_Check(pDX, IDC_ZBUFFERALWAYS, cTarget->m_ZBufferAlways); } BEGIN_MESSAGE_MAP(CTabDebug, CDialog) diff --git a/host/TabDirectX.cpp b/host/TabDirectX.cpp index e89c020..a2daaa8 100644 --- a/host/TabDirectX.cpp +++ b/host/TabDirectX.cpp @@ -44,14 +44,6 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NOALPHACHANNEL, cTarget->m_NoAlphaChannel); DDX_Check(pDX, IDC_FIXREFCOUNTER, cTarget->m_FixRefCounter); //DDX_Check(pDX, IDC_SAVECAPS, cTarget->m_SaveCaps); - // DirectInput - DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI); - DDX_Text(pDX, IDC_INITX, cTarget->m_InitX); - DDX_Text(pDX, IDC_INITY, cTarget->m_InitY); - DDX_Text(pDX, IDC_MAXX, cTarget->m_MaxX); - DDX_Text(pDX, IDC_MAXY, cTarget->m_MaxY); - DDX_Text(pDX, IDC_MINX, cTarget->m_MinX); - DDX_Text(pDX, IDC_MINY, cTarget->m_MinY); } BEGIN_MESSAGE_MAP(CTabDirectX, CDialog) diff --git a/host/TabMouse.cpp b/host/TabMouse.cpp index 11885af..6ff8090 100644 --- a/host/TabMouse.cpp +++ b/host/TabMouse.cpp @@ -12,18 +12,18 @@ static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// -// CTabMouse dialog +// CTabInput dialog -CTabMouse::CTabMouse(CWnd* pParent /*=NULL*/) +CTabInput::CTabInput(CWnd* pParent /*=NULL*/) // : CTargetDlg(pParent) - : CDialog(CTabMouse::IDD, pParent) + : CDialog(CTabInput::IDD, pParent) { - //{{AFX_DATA_INIT(CTabMouse) + //{{AFX_DATA_INIT(CTabInput) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } -void CTabMouse::DoDataExchange(CDataExchange* pDX) +void CTabInput::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); @@ -37,13 +37,21 @@ void CTabMouse::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_MESSAGEPROC, cTarget->m_MessageProc); DDX_Check(pDX, IDC_FIXNCHITTEST, cTarget->m_FixNCHITTEST); DDX_Check(pDX, IDC_SLOW, cTarget->m_SlowDown); + // DirectInput + DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI); + DDX_Text(pDX, IDC_INITX, cTarget->m_InitX); + DDX_Text(pDX, IDC_INITY, cTarget->m_InitY); + DDX_Text(pDX, IDC_MAXX, cTarget->m_MaxX); + DDX_Text(pDX, IDC_MAXY, cTarget->m_MaxY); + DDX_Text(pDX, IDC_MINX, cTarget->m_MinX); + DDX_Text(pDX, IDC_MINY, cTarget->m_MinY); } -BEGIN_MESSAGE_MAP(CTabMouse, CDialog) - //{{AFX_MSG_MAP(CTabMouse) +BEGIN_MESSAGE_MAP(CTabInput, CDialog) + //{{AFX_MSG_MAP(CTabInput) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// -// CTabMouse message handlers +// CTabInput message handlers diff --git a/host/TabMouse.h b/host/TabMouse.h index f0c1054..8fd9ec8 100644 --- a/host/TabMouse.h +++ b/host/TabMouse.h @@ -12,16 +12,16 @@ ///////////////////////////////////////////////////////////////////////////// // CTabDirectX dialog -//class CTabMouse : public CTargetDlg -class CTabMouse : public CDialog +//class CTabInput : public CTargetDlg +class CTabInput : public CDialog { // Construction public: - CTabMouse(CWnd* pParent = NULL); // standard constructor + CTabInput(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabDirectX) - enum { IDD = IDD_TAB_MOUSE }; + enum { IDD = IDD_TAB_INPUT }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA diff --git a/host/TabOpenGL.h b/host/TabOpenGL.h index 53c0aa5..97e7884 100644 --- a/host/TabOpenGL.h +++ b/host/TabOpenGL.h @@ -20,7 +20,7 @@ public: // Dialog Data //{{AFX_DATA(CTabOpenGL) - enum { IDD = IDD_TAB_OPENGL }; + enum { IDD = IDD_TAB_SYSLIBS }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index 1df3503..bc3f919 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -33,7 +33,6 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_UNNOTIFY, cTarget->m_UnNotify); DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize); DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); - DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages); DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages); @@ -45,6 +44,7 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); DDX_Check(pDX, IDC_HANDLEALTF4, cTarget->m_HandleAltF4); DDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio); + DDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated DDX_Text(pDX, IDC_POSX, cTarget->m_PosX); DDX_Text(pDX, IDC_POSY, cTarget->m_PosY); DDX_Text(pDX, IDC_SIZX, cTarget->m_SizX); diff --git a/host/TabGDI.cpp b/host/TabSysLibs.cpp similarity index 68% rename from host/TabGDI.cpp rename to host/TabSysLibs.cpp index 9eda571..f43f3b9 100644 --- a/host/TabGDI.cpp +++ b/host/TabSysLibs.cpp @@ -3,7 +3,7 @@ #include "stdafx.h" #include "TargetDlg.h" -#include "TabGDI.h" +#include "TabSysLibs.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -14,23 +14,29 @@ static char THIS_FILE[] = __FILE__; ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog -CTabGDI::CTabGDI(CWnd* pParent /*=NULL*/) - : CDialog(CTabGDI::IDD, pParent) +CTabSysLibs::CTabSysLibs(CWnd* pParent /*=NULL*/) + : CDialog(CTabSysLibs::IDD, pParent) { - //{{AFX_DATA_INIT(CTabGDI) + //{{AFX_DATA_INIT(CTabSysLibs) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } -void CTabGDI::DoDataExchange(CDataExchange* pDX) +void CTabSysLibs::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); + + // GDI DDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode); DDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut); + + // OpenGL + DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL); + DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib); } -BEGIN_MESSAGE_MAP(CTabGDI, CDialog) +BEGIN_MESSAGE_MAP(CTabSysLibs, CDialog) //{{AFX_MSG_MAP(CTabLogs) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP diff --git a/host/TabGDI.h b/host/TabSysLibs.h similarity index 88% rename from host/TabGDI.h rename to host/TabSysLibs.h index d97b00f..9ce08e0 100644 --- a/host/TabGDI.h +++ b/host/TabSysLibs.h @@ -11,15 +11,15 @@ ///////////////////////////////////////////////////////////////////////////// // CTabLogs dialog -class CTabGDI : public CDialog +class CTabSysLibs : public CDialog { // Construction public: - CTabGDI(CWnd* pParent = NULL); // standard constructor + CTabSysLibs(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CTabLogs) - enum { IDD = IDD_TAB_GDI }; + enum { IDD = IDD_TAB_SYSLIBS }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA diff --git a/host/TabWindow.cpp b/host/TabWindow.cpp index 0bf1bca..a595c26 100644 --- a/host/TabWindow.cpp +++ b/host/TabWindow.cpp @@ -28,6 +28,8 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); + + // window management DDX_Check(pDX, IDC_FIXWINFRAME, cTarget->m_FixWinFrame); DDX_Check(pDX, IDC_PREVENTMAXIMIZE, cTarget->m_PreventMaximize); DDX_Check(pDX, IDC_LOCKWINPOS, cTarget->m_LockWinPos); @@ -42,6 +44,16 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_FIXD3DFRAME, cTarget->m_FixD3DFrame); DDX_Check(pDX, IDC_NOWINDOWMOVE, cTarget->m_NoWindowMove); DDX_Check(pDX, IDC_SUPPRESSCHILD, cTarget->m_SuppressChild); + + // color management + DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP); + DDX_Check(pDX, IDC_INIT16BPP, cTarget->m_Init16BPP); + DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp); + DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP); + DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); + DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite); + DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565); + DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors); } BOOL CTabWindow::OnInitDialog() diff --git a/host/TabWindow.h b/host/TabWindow.h index b43de83..34d87f6 100644 --- a/host/TabWindow.h +++ b/host/TabWindow.h @@ -20,7 +20,7 @@ public: // Dialog Data //{{AFX_DATA(CTabWindow) - enum { IDD = IDD_TAB_WINDOW }; + enum { IDD = IDD_TAB_OUTPUT }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 8bea190..c208288 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -53,6 +53,9 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_CDROMDriveType = FALSE; m_FontBypass = FALSE; m_BufferedIOFix = FALSE; + m_ZBufferClean = FALSE; + m_ZBuffer0Clean = FALSE; + m_ZBufferAlways = FALSE; m_UnNotify = FALSE; m_Windowize = TRUE; // default true !! m_HookDLLs = TRUE; // default true !! @@ -146,14 +149,12 @@ BOOL CTargetDlg::OnInitDialog() AfxEnableControlContainer(); CDialog::OnInitDialog(); m_tabdxTabCtrl.InsertItem(i++, _T("Main")); - m_tabdxTabCtrl.InsertItem(i++, _T("Window")); - m_tabdxTabCtrl.InsertItem(i++, _T("Color")); - m_tabdxTabCtrl.InsertItem(i++, _T("Mouse")); + m_tabdxTabCtrl.InsertItem(i++, _T("Video")); + m_tabdxTabCtrl.InsertItem(i++, _T("Input")); + m_tabdxTabCtrl.InsertItem(i++, _T("DirectX")); m_tabdxTabCtrl.InsertItem(i++, _T("Timing")); m_tabdxTabCtrl.InsertItem(i++, _T("Log")); - m_tabdxTabCtrl.InsertItem(i++, _T("DirectX")); - m_tabdxTabCtrl.InsertItem(i++, _T("OpenGL")); - m_tabdxTabCtrl.InsertItem(i++, _T("GDI")); + m_tabdxTabCtrl.InsertItem(i++, _T("Libs")); m_tabdxTabCtrl.InsertItem(i++, _T("Compat")); if (gbDebug) m_tabdxTabCtrl.InsertItem(i++, _T("Debug")); m_tabdxTabCtrl.Init(); diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 2b8dbed..1edded0 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -116,6 +116,9 @@ public: BOOL m_CDROMDriveType; BOOL m_FontBypass; BOOL m_BufferedIOFix; + BOOL m_ZBufferClean; + BOOL m_ZBuffer0Clean; + BOOL m_ZBufferAlways; BOOL m_SuppressIME; BOOL m_SetCompatibility; BOOL m_DisableHAL; diff --git a/host/dxTabCtrl.cpp b/host/dxTabCtrl.cpp index d31fe5d..7d9666b 100644 --- a/host/dxTabCtrl.cpp +++ b/host/dxTabCtrl.cpp @@ -30,7 +30,7 @@ #include "TabOpenGL.h" #include "TabCompat.h" #include "TabColor.h" -#include "TabGDI.h" +#include "TabSysLibs.h" #include "TabDebug.h" #ifdef _DEBUG @@ -49,13 +49,11 @@ CDXTabCtrl::CDXTabCtrl() int i=0; m_tabPages[i++]=new CTabProgram; m_tabPages[i++]=new CTabWindow; - m_tabPages[i++]=new CTabColor; - m_tabPages[i++]=new CTabMouse; + m_tabPages[i++]=new CTabInput; + m_tabPages[i++]=new CTabDirectX; m_tabPages[i++]=new CTabTiming; m_tabPages[i++]=new CTabLogs; - m_tabPages[i++]=new CTabDirectX; - m_tabPages[i++]=new CTabOpenGL; - m_tabPages[i++]=new CTabGDI; + m_tabPages[i++]=new CTabSysLibs; m_tabPages[i++]=new CTabCompat; if (gbDebug) m_tabPages[i++]=new CTabDebug; @@ -75,14 +73,12 @@ void CDXTabCtrl::Init() m_tabCurrent=0; m_tabPages[i++]->Create(IDD_TAB_PROGRAM, this); - m_tabPages[i++]->Create(IDD_TAB_WINDOW, this); - m_tabPages[i++]->Create(IDD_TAB_COLOR, this); - m_tabPages[i++]->Create(IDD_TAB_MOUSE, this); + m_tabPages[i++]->Create(IDD_TAB_OUTPUT, this); + m_tabPages[i++]->Create(IDD_TAB_INPUT, this); + m_tabPages[i++]->Create(IDD_TAB_DIRECTX, this); m_tabPages[i++]->Create(IDD_TAB_TIMING, this); m_tabPages[i++]->Create(IDD_TAB_LOG, this); - m_tabPages[i++]->Create(IDD_TAB_DIRECTX, this); - m_tabPages[i++]->Create(IDD_TAB_OPENGL, this); - m_tabPages[i++]->Create(IDD_TAB_GDI, this); + m_tabPages[i++]->Create(IDD_TAB_SYSLIBS, this); m_tabPages[i++]->Create(IDD_TAB_COMPAT, this); if (gbDebug) m_tabPages[i++]->Create(IDD_TAB_DEBUG, this); diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 513f1d147f90e5d62072418c7609c6a42f5b7ff9..41cb995f81f9887164fdb5bc0df565a44b027b72 100644 GIT binary patch delta 7878 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 X49hp1j6o4zXsud{ewJHvRO`P0>k&c> delta 10378 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 diff --git a/host/dxwndhost.vs2008.vcproj b/host/dxwndhost.vs2008.vcproj index 70fff2c..21aad64 100644 --- a/host/dxwndhost.vs2008.vcproj +++ b/host/dxwndhost.vs2008.vcproj @@ -377,10 +377,6 @@ RelativePath=".\SystemTray.cpp" > - - @@ -393,10 +389,6 @@ RelativePath=".\TabDirectX.cpp" > - - @@ -406,11 +398,11 @@ > - - @@ -510,10 +498,6 @@ RelativePath=".\TabDirectX.h" > - - @@ -523,11 +507,11 @@ > m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE; if(dlg->m_FontBypass) t->flags3 |= FONTBYPASS; if(dlg->m_BufferedIOFix) t->flags3 |= BUFFEREDIOFIX; + if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN; + if(dlg->m_ZBuffer0Clean) t->flags4 |= ZBUFFER0CLEAN; + if(dlg->m_ZBufferAlways) t->flags4 |= ZBUFFERALWAYS; if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME; if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT; if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; @@ -308,6 +311,9 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0; dlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0; dlg->m_BufferedIOFix = t->flags3 & BUFFEREDIOFIX ? 1 : 0; + dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0; + dlg->m_ZBuffer0Clean = t->flags4 & ZBUFFER0CLEAN ? 1 : 0; + dlg->m_ZBufferAlways = t->flags4 & ZBUFFERALWAYS ? 1 : 0; dlg->m_SaveLoad = t->flags & SAVELOAD ? 1 : 0; dlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0; dlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0;