1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_03_90_src

Former-commit-id: 6f0f833ad11c763cb5756435f4c5f0cc639185c6
This commit is contained in:
gho tik 2016-05-10 12:47:31 -04:00 committed by Refael ACkermann
parent c22cda8a40
commit aa3fcb4bed
29 changed files with 238 additions and 85 deletions

View File

@ -237,6 +237,10 @@
#define ENUM16BITMODES 0x00080000 // Enumerates 16 bit video modes when using DirectDraw8/9::EnumAdapterModes on a Win10 OS
#define SHAREDKEYBOARD 0x00100000 // Forces DirectInput cooperative level to NONEXCLUSIVE mode for the keyboard
#define HOOKNOUPDATE 0x00200000 // Updates the original addresses when changed
#define HOOKGLUT32 0x00400000 // Hook glut32.dll opengl extension library
#define INITIALRES 0x00800000 // Set initial screen resolution accorting to sizw x sizh fields
#define MAXIMUMRES 0x01000000 // Set maximum screen resolution accorting to sizw x sizh fields
#define LOCKCOLORDEPTH 0x02000000 // lock ddraw color depth to current desktop value (used in SetDisplayMode)
// eighth flags DWORD dxw.dwFlags8:
@ -288,6 +292,8 @@ typedef struct TARGETMAP
short posy;
short sizx;
short sizy;
short resw;
short resh;
short MaxFPS;
short InitTS;
short FakeVersionId;

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9070435639bcf64aebc632f848af969aa24800cb40864ae90d5ce56a1d43b373
size 681472
oid sha256:2a2587c509901aafe87b3f75f29a007e231a916c99f1bf90a210e44fbb532a0a
size 683520

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:14ddc8f6eaa1eac7dc356e8824fb118e014fe5b5e8828432e2ffa0ac58f1f3c4
size 660992
oid sha256:90ce56d32db76f27a8364a6325927ff6ac7035303dd47f913baf2d430c49f6a7
size 661504

View File

@ -1273,3 +1273,10 @@ fix: fixed the logic for centering the main window for desktop with non-zero off
fix: improved logic for window placement in CreateWindowEx call
fix: added wrapper for winmm/GetJoyPos() virtual joystick referenced in "Jane's FA18"
v2.03.90
add: added flags/fields to define initial/maximum screen resolution
add: "Lock color depth" ddraw flag. Fixes "Ahlgrens Bilspelet" color problems
add: preliminary opengl/glut32 hook
fix: ZBUFFER capabilities - allow "Galapagos" to run in hw accelerated mode
fix: separated D3D FindDevice hookers for D3D version 1/2/3
fix: some unused code cleanup

View File

@ -21,7 +21,7 @@ DWORD WINAPI CpuSlow(LPVOID lpThreadParameter)
Sleep(100);
while(TRUE) SlowCpuSpeed(dwOwnerPID, dwOwnerThread, iSlowDownRatio);
return TRUE;
}
}
DWORD WINAPI CpuLimit(LPVOID lpThreadParameter)
{

View File

@ -2124,6 +2124,12 @@ HRESULT WINAPI extSetDisplayMode(int dxversion, LPDIRECTDRAW lpdd,
if((int)dwwidth < 0) dwwidth = dxw.GetScreenWidth();
if((int)dwheight < 0) dwheight = dxw.GetScreenHeight();
// v2.03.90: add LOCKCOLORDEPTH, easiest way to manage "Ahlgrens bisplet"!
if(dxw.dwFlags7 & LOCKCOLORDEPTH){
OutTraceDW("SetDisplayMode: LOCKCOLORDEPTH bpp=%d->%d\n", dwbpp, dxw.ActualPixelFormat.dwRGBBitCount);
dwbpp = dxw.ActualPixelFormat.dwRGBBitCount;
}
dxw.SetScreenSize(dwwidth, dwheight);
GetHookInfo()->Height=(short)dxw.GetScreenHeight();
GetHookInfo()->Width=(short)dxw.GetScreenWidth();
@ -2198,9 +2204,9 @@ HRESULT WINAPI extSetDisplayMode(int dxversion, LPDIRECTDRAW lpdd,
if(res) OutTraceE("SetDisplayMode: error=%x(%s)\n", res, ExplainDDError(res));
SetVSyncDelays(dxversion, lpdd);
// set a default palette ???
if(dxw.VirtualPixelFormat.dwRGBBitCount == 8)
mySetPalette(0, 256, DefaultSystemPalette);
if(dxw.VirtualPixelFormat.dwRGBBitCount == 8) mySetPalette(0, 256, DefaultSystemPalette);
if(dxw.bAutoScale) dxw.AutoScale();
@ -4621,6 +4627,7 @@ static HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRA
// Texture Handling on Unlock
TextureHandling(lpdds, dxversion);
}
return res;
}
@ -4837,10 +4844,12 @@ HRESULT WINAPI extFlipToGDISurface4(LPDIRECTDRAW lpdd)
HRESULT WINAPI extFlipToGDISurface7(LPDIRECTDRAW lpdd)
{ return extFlipToGDISurface(pFlipToGDISurface7, lpdd); }
HRESULT WINAPI extGetGDISurface(GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
HRESULT WINAPI extGetGDISurface(int dxversion, GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{
int res;
OutTraceDDRAW("GetGDISurface(%d): lpdd=%x\n", dxversion, lpdd);
// v2.02.31:
// in EMULATED mode, should not return the actual ddraw primary surface, but the virtual one.
if(dxw.dwFlags1 & EMULATESURFACE){
@ -4861,15 +4870,15 @@ HRESULT WINAPI extGetGDISurface(GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW
}
HRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface1, lpdd, w); }
{ return extGetGDISurface(1, pGetGDISurface1, lpdd, w); }
HRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface2, lpdd, w); }
{ return extGetGDISurface(2, pGetGDISurface2, lpdd, w); }
HRESULT WINAPI extGetGDISurface3(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface3, lpdd, w); }
{ return extGetGDISurface(3, pGetGDISurface3, lpdd, w); }
HRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface4, lpdd, w); }
{ return extGetGDISurface(4, pGetGDISurface4, lpdd, w); }
HRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)
{ return extGetGDISurface(pGetGDISurface7, lpdd, w); }
{ return extGetGDISurface(7, pGetGDISurface7, lpdd, w); }
// debug function to dump all video modes queried by the DirectDrav::EnumDisplayModes method
@ -4907,20 +4916,30 @@ typedef struct {
static BOOL CheckResolutionLimit(LPDDSURFACEDESC lpDDSurfaceDesc)
{
#define HUGE 100000
DWORD maxw, maxh;
maxw=HUGE; maxh=HUGE;
switch(dxw.MaxScreenRes){
case DXW_LIMIT_320x200: maxw=320; maxh=200; break;
case DXW_LIMIT_640x480: maxw=640; maxh=480; break;
case DXW_LIMIT_800x600: maxw=800; maxh=600; break;
case DXW_LIMIT_1024x768: maxw=1024; maxh=768; break;
case DXW_LIMIT_1280x960: maxw=1280; maxh=960; break;
if(dxw.dwFlags4 & LIMITSCREENRES) {
#define HUGE 100000
DWORD maxw, maxh;
maxw=HUGE; maxh=HUGE;
switch(dxw.MaxScreenRes){
case DXW_LIMIT_320x200: maxw=320; maxh=200; break;
case DXW_LIMIT_640x480: maxw=640; maxh=480; break;
case DXW_LIMIT_800x600: maxw=800; maxh=600; break;
case DXW_LIMIT_1024x768: maxw=1024; maxh=768; break;
case DXW_LIMIT_1280x960: maxw=1280; maxh=960; break;
}
if((lpDDSurfaceDesc->dwWidth > maxw) || (lpDDSurfaceDesc->dwHeight > maxh)){
OutTraceDW("EnumDisplaySettings: hide device mode=(%d,%d)\n", maxw, maxh);
return TRUE;
}
}
if((lpDDSurfaceDesc->dwWidth > maxw) || (lpDDSurfaceDesc->dwHeight > maxh)){
OutTraceDW("EnumDisplaySettings: hide device mode=(%d,%d)\n", maxw, maxh);
return TRUE;
if(dxw.dwFlags7 & MAXIMUMRES) {
if((lpDDSurfaceDesc->dwWidth > (DWORD)dxw.iMaxW) || (lpDDSurfaceDesc->dwHeight > (DWORD)dxw.iMaxH)){
OutTraceDW("EnumDisplaySettings: hide device mode=(%d,%d)\n", dxw.iMaxW, dxw.iMaxH);
return TRUE;
}
}
return FALSE;
}
@ -4942,7 +4961,7 @@ HRESULT WINAPI myEnumModesFilterDirect(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID l
for (int ResIdx=0; SupportedRes[ResIdx].h; ResIdx++){
lpDDSurfaceDesc->dwHeight=SupportedRes[ResIdx].h;
lpDDSurfaceDesc->dwWidth=SupportedRes[ResIdx].w;
if((dxw.dwFlags4 & LIMITSCREENRES) && CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;
if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;
if (dxw.dwFlags1 & PREVENTMAXIMIZE){
// if PREVENTMAXIMIZE is set, don't let the caller know about forbidden screen settings.
if((lpDDSurfaceDesc->dwHeight > dxw.GetScreenHeight()) ||
@ -4973,7 +4992,7 @@ HRESULT WINAPI myEnumModesFilterNative(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID l
}
}
if((dxw.dwFlags4 & LIMITSCREENRES) && CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;
if(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;
res=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext);
OutTraceDW("EnumDisplayModes(D): native size=(%d,%d) res=%x\n", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight, res);
return res;
@ -5021,8 +5040,7 @@ HRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDi
for (ResIdx=0; SupportedRes[ResIdx].h; ResIdx++){
EmuDesc.dwHeight=SupportedRes[ResIdx].h;
EmuDesc.dwWidth=SupportedRes[ResIdx].w;
if((dxw.dwFlags4 & LIMITSCREENRES) &&
CheckResolutionLimit((LPDDSURFACEDESC)&EmuDesc)) break;
if(CheckResolutionLimit((LPDDSURFACEDESC)&EmuDesc)) break;
EmuDesc.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT);
EmuDesc.ddpfPixelFormat.dwFlags=DDPF_RGB;
for (DepthIdx=0; SupportedDepths[DepthIdx]; DepthIdx++) {
@ -5419,7 +5437,7 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI
caps->dwCaps |= DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE; // primary surfaces must be this way
caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way
if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM;
}
}
if (IsBack) {
IsFixed=TRUE;
@ -5431,7 +5449,8 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI
}
// v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ...
if(caps->dwCaps & DDSCAPS_ZBUFFER) {
// v2.03.90: "Galapagos" fix - if there's a DDSCAPS_SYSTEMMEMORY or DDSCAPS_VIDEOMEMORY spec, let it be.
if ((caps->dwCaps & DDSCAPS_ZBUFFER) && !(caps->dwCaps & (DDSCAPS_SYSTEMMEMORY|DDSCAPS_VIDEOMEMORY))) {
DWORD dwCaps;
dwCaps = dxwcdb.GetCaps(lpdds);
// beware! the ZBUFFER surface could have never been registered!

View File

@ -134,8 +134,8 @@ static char *Flag7Names[32]={
"NOWINERRORS", "SUPPRESSOVERLAY", "INIT24BPP", "INIT32BPP",
"FIXGLOBALUNLOCK", "SHOWHINTS", "SKIPDEVTYPEHID", "INJECTSUSPENDED",
"SSUPPRESSDIERRORS", "HOOKNORUN", "FIXBINDTEXTURE", "ENUM16BITMODES",
"SHAREDKEYBOARD", "HOOKNOUPDATE", "", "",
"", "", "", "",
"SHAREDKEYBOARD", "HOOKNOUPDATE", "HOOKGLUT32", "INITIALRES",
"MAXIMUMRES", "LOCKCOLORDEPTH", "", "",
"", "", "", "",
};
@ -1405,6 +1405,7 @@ void HookInit(TARGETMAP *target, HWND hwnd)
osinfo.dwMajorVersion, osinfo.dwMinorVersion, osinfo.dwPlatformId, osinfo.dwPlatformId, osinfo.szCSDVersion);
}
if (dxw.dwFlags4 & LIMITSCREENRES) OutTrace("HookInit: max resolution=%s\n", (dxw.MaxScreenRes<6)?Resolutions[dxw.MaxScreenRes]:"unknown");
if (dxw.dwFlags7 & MAXIMUMRES) OutTrace("HookInit: max resolution=(%dx%d)\n", dxw.iMaxW, dxw.iMaxH);
if (dxw.dwFlags7 & LIMITDDRAW) OutTrace("HookInit: max supported IDidrectDrawInterface=%d\n", dxw.MaxDdrawInterface);
if (dxw.dwFlags7 & CPUSLOWDOWN) OutTrace("HookInit: CPU slowdown ratio 1:%d\n", dxw.SlowRatio);
if (dxw.dwFlags7 & CPUMAXUSAGE) OutTrace("HookInit: CPU maxusage ratio 1:%d\n", dxw.SlowRatio);

View File

@ -130,6 +130,8 @@ void dxwCore::InitTarget(TARGETMAP *target)
iSizY = target->sizy;
iPosX = target->posx;
iPosY = target->posy;
iMaxW = target->resw;
iMaxH = target->resh;
// Aspect Ratio from window size, or traditional 4:3 by default
iRatioX = iSizX ? iSizX : 800;
iRatioY = iSizY ? iSizY : 600;
@ -156,12 +158,19 @@ void dxwCore::InitTarget(TARGETMAP *target)
bHintActive = (dwFlags7 & SHOWHINTS) ? TRUE : FALSE;
MonitorId = target->monitorid;
// if specified, set the custom initial resolution
if(dxw.dwFlags7 & INITIALRES) SetScreenSize(target->resw, target->resh);
}
void dxwCore::SetScreenSize(void)
{
if(dxw.Windowize)
// if specified, use values registered in InitTarget
if(dxw.dwFlags7 & INITIALRES) return;
if(dxw.Windowize){
SetScreenSize(800, 600); // set to default screen resolution
}
else{
int sizx, sizy;
sizx = GetSystemMetrics(SM_CXSCREEN);
@ -200,6 +209,14 @@ void dxwCore::SetScreenSize(int x, int y)
dwScreenHeight= p->Height = (short)maxh;
}
}
if(dxw.dwFlags7 & MAXIMUMRES){
if(((long)p->Width > dxw.iMaxW) || ((long)p->Height > dxw.iMaxH)){
OutTraceDW("DXWND: limit device size=(%d,%d)\n", dxw.iMaxW, dxw.iMaxH);
// v2.03.90 setting new virtual desktop size
dwScreenWidth = p->Width = (short)dxw.iMaxW;
dwScreenHeight= p->Height = (short)dxw.iMaxH;
}
}
}
void dxwCore::DumpDesktopStatus()
@ -1497,6 +1514,11 @@ BOOL dxwCore::CheckScreenResolution(unsigned int w, unsigned int h)
}
if((w > maxw) || (h > maxh)) return FALSE;
}
if(dxw.dwFlags7 & MAXIMUMRES){
if(((long)w > dxw.iMaxW) || ((long)h > dxw.iMaxH)) return FALSE;
}
return TRUE;
}

View File

@ -177,6 +177,8 @@ public: // simple data variables
long iPosY;
long iSizX;
long iSizY;
long iMaxW;
long iMaxH;
int iRatioX;
int iRatioY;
char *CustomOpenGLLib;

Binary file not shown.

View File

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "TlHelp32.h"
#define VERSION "2.03.89"
#define VERSION "2.03.90"
#define DDTHREADLOCK 1
//#define LOCKTHREADS

Binary file not shown.

View File

@ -984,35 +984,6 @@ HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
return RetHdc;
}
/*----------------------------------------*/
HBITMAP VirtualPic;
static HDC FillVirtualDC(HDC hdc)
{
HDC VirtualHDC;
HBITMAP VirtualPic;
if(!(VirtualHDC=CreateCompatibleDC(hdc)))
OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
if(!(VirtualPic=CreateCompatibleBitmap(hdc, dxw.GetScreenWidth(), dxw.GetScreenHeight())))
OutTraceE("dxwSDC::GetPrimaryDC: CreateCompatibleBitmap ERROR err=%d at=%d\n", GetLastError(), __LINE__);
if(!SelectObject(VirtualHDC, VirtualPic))
OutTraceE("dxwSDC::GetPrimaryDC: SelectObject ERROR err=%d at=%d\n", GetLastError(), __LINE__);
if(!(*pGDIBitBlt)(VirtualHDC, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), hdc, 0, 0, SRCCOPY))
OutTraceE("dxwSDC::GetPrimaryDC: StretchBlt ERROR err=%d at=%d\n", GetLastError(), __LINE__);
return VirtualHDC;
}
static void FlushVirtualDC(HDC VirtualHDC)
{
DeleteObject(VirtualHDC);
DeleteObject(VirtualPic);
}
/*-------------------------------------------*/
BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
@ -1038,12 +1009,12 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
if(hdcDest == NULL){
// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...
hdcDest = (*pGDIGetDC)(dxw.GethWnd());
OutTraceB("GDI.StretchBlt: DEBUG hdc dest=NULL->%x\n", hdcDest);
OutTraceB("GDI.BitBlt: DEBUG hdc dest=NULL->%x\n", hdcDest);
IsDCLeakageDest = TRUE;
}
if(hdcSrc == NULL){
hdcSrc = (*pGDIGetDC)(dxw.GethWnd());
OutTraceB("GDI.StretchBlt: DEBUG hdc src=NULL->%x\n", hdcSrc);
OutTraceB("GDI.BitBlt: DEBUG hdc src=NULL->%x\n", hdcSrc);
IsDCLeakageSrc = TRUE;
}

View File

@ -64,7 +64,7 @@ CreateMaterial3_Type pCreateMaterial3 = NULL;
CreateViewport1_Type pCreateViewport1 = NULL;
CreateViewport2_Type pCreateViewport2 = NULL;
CreateViewport3_Type pCreateViewport3 = NULL;
FindDevice_Type pFindDevice = NULL;
FindDevice_Type pFindDevice1, pFindDevice2, pFindDevice3;
CreateDevice2_Type pCreateDevice2 = NULL;
CreateDevice3_Type pCreateDevice3 = NULL;
CreateDevice7_Type pCreateDevice7 = NULL;
@ -196,7 +196,9 @@ HRESULT WINAPI extCreateMaterial3(void *, LPDIRECT3DMATERIAL3 *, IUnknown *);
HRESULT WINAPI extCreateViewport1(void *, LPDIRECT3DVIEWPORT *, IUnknown *);
HRESULT WINAPI extCreateViewport2(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);
HRESULT WINAPI extCreateViewport3(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);
HRESULT WINAPI extFindDevice(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
HRESULT WINAPI extFindDevice1(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
HRESULT WINAPI extFindDevice2(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
HRESULT WINAPI extFindDevice3(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);
HRESULT WINAPI extCreateDevice2(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);
HRESULT WINAPI extCreateDevice3(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);
HRESULT WINAPI extCreateDevice7(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *);
@ -447,7 +449,7 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateMaterial1, (void **)&pCreateMaterial1, "CreateMaterial(1)");
#endif
SetHook((void *)(**(DWORD **)lplpdd + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)");
SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)lplpdd + 32), extFindDevice1, (void **)&pFindDevice1, "FindDevice(1)");
break;
case 2:
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD32, (void **)&pQueryInterfaceD32, "QueryInterface(D3S2)");
@ -457,7 +459,7 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial2, (void **)&pCreateMaterial2, "CreateMaterial(2)");
#endif
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)");
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice2, (void **)&pFindDevice2, "FindDevice(2)");
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice2, (void **)&pCreateDevice2, "CreateDevice(D3D2)");
break;
case 3:
@ -468,7 +470,7 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
SetHook((void *)(**(DWORD **)lplpdd + 20), extCreateMaterial3, (void **)&pCreateMaterial3, "CreateMaterial(3)");
#endif
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)");
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice3, (void **)&pFindDevice3, "FindDevice(3)");
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)");
SetHook((void *)(**(DWORD **)lplpdd + 40), extEnumZBufferFormats3, (void **)&pEnumZBufferFormats3, "EnumZBufferFormats(D3D3)");
break;
@ -697,7 +699,7 @@ HRESULT WINAPI extQueryInterfaceD3(int d3dversion, QueryInterfaceD3_Type pQueryI
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateMaterial1, (void **)&pCreateMaterial1, "CreateMaterial(1)");
#endif
SetHook((void *)(**(DWORD **)ppvObj + 28), extCreateViewport1, (void **)&pCreateViewport1, "CreateViewport(1)");
SetHook((void *)(**(DWORD **)ppvObj + 32), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)ppvObj + 32), extFindDevice1, (void **)&pFindDevice1, "FindDevice(1)");
break;
case 2:
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices2, (void **)&pEnumDevices2, "EnumDevices(2)");
@ -706,16 +708,16 @@ HRESULT WINAPI extQueryInterfaceD3(int d3dversion, QueryInterfaceD3_Type pQueryI
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial2, (void **)&pCreateMaterial2, "CreateMaterial(2)");
#endif
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport2, (void **)&pCreateViewport2, "CreateViewport(2)");
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice2, (void **)&pFindDevice2, "FindDevice(2)");
break;
case 3:
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices3, (void **)&pEnumDevices3, "EnumDevices");
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices3, (void **)&pEnumDevices3, "EnumDevices(3)");
SetHook((void *)(**(DWORD **)ppvObj + 16), extCreateLight3, (void **)&pCreateLight3, "CreateLight(3)");
#ifdef TRACEMATERIAL
SetHook((void *)(**(DWORD **)ppvObj + 20), extCreateMaterial3, (void **)&pCreateMaterial3, "CreateMaterial(3)");
#endif
SetHook((void *)(**(DWORD **)ppvObj + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)");
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)ppvObj + 28), extFindDevice3, (void **)&pFindDevice3, "FindDevice(3)");
break;
case 7:
SetHook((void *)(**(DWORD **)ppvObj + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)");
@ -986,12 +988,12 @@ HRESULT WINAPI extCreateViewport3(void *lpd3d, LPDIRECT3DVIEWPORT3 *lpViewport,
return res;
}
HRESULT WINAPI extFindDevice(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)
static HRESULT WINAPI extFindDevice(int d3dversion, FindDevice_Type pFindDevice, void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)
{
HRESULT res;
OutTraceD3D("FindDevice: d3d=%x devsearch=%x (size=%d flags=%x caps=%x primcaps=%x colormodel=%x hw=%x guid=%x) p2=%x\n",
lpd3d, p1, p1->dwSize, p1->dwFlags, p1->dwCaps, p1->dpcPrimCaps, p1->dcmColorModel, p1->bHardware, p1->guid, p2);
OutTraceD3D("FindDevice(%d): d3d=%x devsearch=%x (size=%d flags=%x caps=%x primcaps=%x colormodel=%x hw=%x guid=%x) p2=%x\n",
d3dversion, lpd3d, p1, p1->dwSize, p1->dwFlags, p1->dwCaps, p1->dpcPrimCaps, p1->dcmColorModel, p1->bHardware, p1->guid, p2);
res=(*pFindDevice)(lpd3d, p1, p2);
if(res) OutTraceE("FindDevice ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
else {
@ -1002,6 +1004,13 @@ HRESULT WINAPI extFindDevice(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEV
return res;
}
HRESULT WINAPI extFindDevice1(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)
{ return extFindDevice(1, pFindDevice1, lpd3d, p1, p2); }
HRESULT WINAPI extFindDevice2(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)
{ return extFindDevice(2, pFindDevice2, lpd3d, p1, p2); }
HRESULT WINAPI extFindDevice3(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)
{ return extFindDevice(3, pFindDevice3, lpd3d, p1, p2); }
HRESULT WINAPI extSetViewport(int dxversion, SetViewport_Type pSetViewport, void *lpvp, LPD3DVIEWPORT vpd)
{
HRESULT res;

View File

@ -20,6 +20,19 @@
#define COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
#endif
typedef void (WINAPI *glutFullScreen_Type)(void);
glutFullScreen_Type pglutFullScreen;
void WINAPI extglutFullScreen(void);
typedef void (WINAPI *glutInitWindowSize_Type)(int, int);
glutInitWindowSize_Type pglutInitWindowSize;
void extglutInitWindowSize(int, int);
typedef void (WINAPI *glutInitWindowPosition_Type)(int, int);
glutInitWindowPosition_Type pglutInitWindowPosition;
void extglutInitWindowPosition(int, int);
typedef void (WINAPI *glutSetWindow_Type)(HWND);
glutSetWindow_Type pglutSetWindow;
void WINAPI extglutSetWindow(HWND);
//void WINAPI extglDrawPixels(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
//typedef void (WINAPI *glDrawPixels_Type)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
//glDrawPixels_Type pglDrawPixels = NULL;
@ -45,11 +58,20 @@ static HookEntryEx_Type Hooks[]={
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
};
static HookEntryEx_Type GlutHooks[]={
{HOOK_IAT_CANDIDATE, 0, "glutFullScreen", NULL, (FARPROC *)&pglutFullScreen, (FARPROC)extglutFullScreen},
{HOOK_IAT_CANDIDATE, 0, "glutInitWindowSize", NULL, (FARPROC *)&pglutInitWindowSize, (FARPROC)extglutInitWindowSize},
{HOOK_IAT_CANDIDATE, 0, "glutInitWindowPosition", NULL, (FARPROC *)&pglutInitWindowPosition, (FARPROC)extglutInitWindowPosition},
{HOOK_IAT_CANDIDATE, 0, "glutSetWindow", NULL, (FARPROC *)&pglutSetWindow, (FARPROC)extglutSetWindow},
{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator
};
FARPROC Remap_gl_ProcAddress(LPCSTR proc, HMODULE hModule)
{
FARPROC addr;
if(!(dxw.dwFlags2 & HOOKOPENGL)) return NULL;
if (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;
if (dxw.dwFlags7 & HOOKGLUT32) if(addr=RemapLibraryEx(proc, hModule, GlutHooks)) return addr;
// NULL -> keep the original call address
return NULL;
}
@ -115,6 +137,8 @@ void HookOpenGL(HMODULE module, char *customlib)
else
HookLibraryEx(module, Hooks, customlib);
if(dxw.dwFlags7 & HOOKGLUT32) HookLibraryEx(module, GlutHooks, "glut32.dll");
return;
}
@ -130,7 +154,6 @@ void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height
RECT client;
POINT p={0,0};
HWND hwnd;
//if (dxw.dwFlags2 & HANDLEFPS) if(dxw.HandleFPS()) return;
hwnd=dxw.GethWnd();
(*pGetClientRect)(hwnd, &client);
OutTraceDW("glViewport: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
@ -570,4 +593,45 @@ void WINAPI extglPixelStorei(GLenum pname, GLint param)
(*pglPixelStorei)(pname, param);
if ((glerr=extglGetError())!= GL_NO_ERROR) OutTrace("GLERR %d ad %d\n", glerr, __LINE__);
return;
}
}
void WINAPI extglutFullScreen(void)
{
if(!dxw.Windowize) return (*pglutFullScreen)();
OutTrace("glutFullScreen BYPASS\n");
dxw.SetFullScreen(TRUE);
}
void extglutInitWindowSize(int width, int height)
{
int dummy1, dummy2;
if(dxw.Windowize){
dummy1=0;
dummy2=0;
OutTrace("glutInitWindowSize: width=%d height=%d\n", width, height);
dxw.MapWindow(&dummy1, &dummy2, &width, &height);
OutTrace("glutInitWindowSize: FIXED width=%d height=%d\n", width, height);
}
(*pglutInitWindowSize)(width, height);
}
void extglutInitWindowPosition(int x, int y)
{
int dummy1, dummy2;
if(dxw.Windowize){
dummy1=0;
dummy2=0;
OutTrace("glutInitWindowPosition: x=%d y=%d\n", x, y);
dxw.MapWindow(&x, &y, &dummy1, &dummy2);
OutTrace("glutInitWindowPosition: FIXED x=%d y=%d\n", x, y);
}
(*pglutInitWindowPosition)(x, y);
}
void WINAPI extglutSetWindow(HWND win)
{
OutTrace("glutSetWindow: win=%x\n", win);
if(dxw.Windowize && dxw.IsRealDesktop(win)) win=dxw.GethWnd();
(*pglutSetWindow)(win);
}

View File

@ -503,7 +503,6 @@ extern BOOL WINAPI extImmGetOpenStatus(HIMC);
// GDI32.dll:
extern BOOL WINAPI extGDIBitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);
extern HDC WINAPI extGDICreateCompatibleDC(HDC);
extern HDC WINAPI extEMUCreateCompatibleDC(HDC);
extern HDC WINAPI extGDICreateDCA(LPSTR, LPSTR, LPSTR, CONST DEVMODE *);
extern HDC WINAPI extGDICreateDCW(LPWSTR, LPWSTR, LPWSTR, CONST DEVMODE *);
extern HFONT WINAPI extCreateFont(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);

View File

@ -1166,6 +1166,7 @@ BOOL WINAPI extScreenToClient(HWND hwnd, LPPOINT lppoint)
else {
res=(*pScreenToClient)(hwnd, lppoint);
}
OutTraceB("ScreenToClient: returned point=(%d,%d)\n", lppoint->x, lppoint->y);
return res;
}
@ -1564,7 +1565,8 @@ static HWND WINAPI CreateWindowCommon(
}
nWidth=dxw.GetScreenWidth();
nHeight=dxw.GetScreenHeight();
OutTraceDW("%s: fixed client pos=(%d,%d) size=(%d,%d)\n", ApiName, x, y, nWidth, nHeight);
OutTraceDW("%s: fixed client pos=(%d,%d) size=(%d,%d) valid=%x\n",
ApiName, x, y, nWidth, nHeight, isValidHandle);
dxw.SetFullScreen(TRUE);
}
@ -2095,6 +2097,13 @@ LONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMO
lpDevMode->dmPelsHeight = maxh;
}
}
if(dxw.dwFlags7 & MAXIMUMRES){
if((lpDevMode->dmPelsWidth > (DWORD)dxw.iMaxW) || (lpDevMode->dmPelsHeight > (DWORD)dxw.iMaxH)){
OutTraceDW("EnumDisplaySettings: limit device size=(%d,%d)\n", dxw.iMaxW, dxw.iMaxH);
lpDevMode->dmPelsWidth = dxw.iMaxW;
lpDevMode->dmPelsHeight = dxw.iMaxH;
}
}
OutTraceDW("EnumDisplaySettings: color=%dBPP size=(%dx%d) refresh=%dHz\n",
lpDevMode->dmBitsPerPel, lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmDisplayFrequency);

View File

@ -38,7 +38,6 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_SUPPRESSRELEASE, cTarget->m_SuppressRelease);
DDX_Check(pDX, IDC_VIDEOTOSYSTEMMEM, cTarget->m_VideoToSystemMem);
DDX_Check(pDX, IDC_SUPPRESSDXERRORS, cTarget->m_SuppressDXErrors);
DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach);
DDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate);
DDX_Check(pDX, IDC_NOPIXELFORMAT, cTarget->m_NoPixelFormat);
DDX_Check(pDX, IDC_NOALPHACHANNEL, cTarget->m_NoAlphaChannel);
@ -46,6 +45,7 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_FLIPEMULATION, cTarget->m_FlipEmulation);
DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility);
DDX_Check(pDX, IDC_AEROBOOST, cTarget->m_AEROBoost);
DDX_Check(pDX, IDC_LOCKCOLORDEPTH, cTarget->m_LockColorDepth);
}
BEGIN_MESSAGE_MAP(CTabDirectX, CDialog)

View File

@ -40,7 +40,10 @@ void CTabDirectX2::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_DEINTERLACE, cTarget->m_Deinterlace);
DDX_Check(pDX, IDC_LIMITDDRAW, cTarget->m_LimitDdraw);
DDX_Check(pDX, IDC_SUPPRESSOVERLAY, cTarget->m_SuppressOverlay);
DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite);
DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);
DDX_CBIndex(pDX, IDC_DDWAWLIMITCOMBO, cTarget->m_MaxDdrawInterface);
DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach);
}
BEGIN_MESSAGE_MAP(CTabDirectX2, CDialog)

View File

@ -41,6 +41,7 @@ void CTabSysLibs::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL);
DDX_Check(pDX, IDC_FIXPIXELZOOM, cTarget->m_FixPixelZoom);
DDX_Check(pDX, IDC_FIXBINDTEXTURE, cTarget->m_FixBindTexture);
DDX_Check(pDX, IDC_HOOKGLUT32, cTarget->m_HookGlut32);
DDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib);
// Glide

View File

@ -52,8 +52,6 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX)
DDX_Radio(pDX, IDC_COLORCURRENT, cTarget->m_InitColorDepth);
DDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp);
DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP);
DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite);
DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);
DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors);
DDX_Check(pDX, IDC_LOCKRESERVEDPALETTE, cTarget->m_LockReservedPalette);
@ -61,6 +59,10 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_LIMITSCREENRES, cTarget->m_LimitScreenRes);
DDX_LBIndex(pDX, IDC_LISTRES, cTarget->m_MaxScreenRes);
DDX_Radio(pDX, IDC_SUPPORTSVGA, cTarget->m_ResTypes);
DDX_Check(pDX, IDC_INITIALRES, cTarget->m_InitialRes);
DDX_Check(pDX, IDC_MAXIMUMRES, cTarget->m_MaximumRes);
DDX_Text(pDX, IDC_INITW, cTarget->m_InitResW);
DDX_Text(pDX, IDC_INITH, cTarget->m_InitResH);
}
static char *Resolutions[]={

View File

@ -137,6 +137,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_SlowDown = FALSE;
m_BlitFromBackBuffer = FALSE;
m_NoFlipEmulation = FALSE;
m_LockColorDepth = FALSE;
m_SuppressClipping = FALSE;
m_ForceClipper = FALSE;
m_DisableGammaRamp = FALSE;
@ -212,6 +213,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_ForceHookOpenGL = FALSE;
m_FixPixelZoom = FALSE;
m_FixBindTexture = FALSE;
m_HookGlut32 = FALSE;
m_FakeVersion = FALSE;
m_FullRectBlt = FALSE;
m_CenterToWin = FALSE;
@ -234,10 +236,14 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_NoTextures = FALSE;
m_BlackWhite = FALSE;
m_AssertDialog = FALSE;
m_InitialRes = FALSE;
m_MaximumRes = FALSE;
m_PosX = 50;
m_PosY = 50;
m_SizX = 800;
m_SizY = 600;
m_InitResW = 800;
m_InitResH = 600;
m_MaxFPS = 0;
m_InitTS = 8;
m_SwapEffect = 0;

View File

@ -100,6 +100,7 @@ public:
BOOL m_SlowDown;
BOOL m_BlitFromBackBuffer;
BOOL m_NoFlipEmulation;
BOOL m_LockColorDepth;
BOOL m_SuppressClipping;
BOOL m_ForceClipper;
BOOL m_DisableGammaRamp;
@ -175,6 +176,7 @@ public:
BOOL m_ForceHookOpenGL;
BOOL m_FixPixelZoom;
BOOL m_FixBindTexture;
BOOL m_HookGlut32;
BOOL m_FakeVersion;
BOOL m_FullRectBlt;
BOOL m_CenterToWin;
@ -251,10 +253,14 @@ public:
BOOL m_Enum16bitModes;
BOOL m_Force16BPP;
BOOL m_LimitScreenRes;
BOOL m_InitialRes;
BOOL m_MaximumRes;
int m_PosX;
int m_PosY;
int m_SizX;
int m_SizY;
int m_InitResW;
int m_InitResH;
int m_MaxFPS;
int m_InitTS;
int m_FakeVersionId;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -384,6 +384,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_SlowDown) t->flags |= SLOWDOWN;
if(dlg->m_BlitFromBackBuffer) t->flags |= BLITFROMBACKBUFFER;
if(dlg->m_NoFlipEmulation) t->flags4 |= NOFLIPEMULATION;
if(dlg->m_LockColorDepth) t->flags7 |= LOCKCOLORDEPTH;
if(dlg->m_SuppressClipping) t->flags |= SUPPRESSCLIPPING;
if(dlg->m_ForceClipper) t->flags3 |= FORCECLIPPER;
if(dlg->m_DisableGammaRamp) t->flags2 |= DISABLEGAMMARAMP;
@ -457,6 +458,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_ForceHookOpenGL) t->flags3 |= FORCEHOOKOPENGL;
if(dlg->m_FixPixelZoom) t->flags6 |= FIXPIXELZOOM;
if(dlg->m_FixBindTexture) t->flags7 |= FIXBINDTEXTURE;
if(dlg->m_HookGlut32) t->flags7 |= HOOKGLUT32;
if(dlg->m_WireFrame) t->flags2 |= WIREFRAME;
if(dlg->m_NoTextures) t->flags4 |= NOTEXTURES;
if(dlg->m_BlackWhite) t->flags3 |= BLACKWHITE;
@ -479,6 +481,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_NoWinErrors) t->flags7 |= NOWINERRORS;
if(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE;
if(dlg->m_ReplacePrivOps) t->flags5 |= REPLACEPRIVOPS;
if(dlg->m_InitialRes) t->flags7 |= INITIALRES;
if(dlg->m_MaximumRes) t->flags7 |= MAXIMUMRES;
t->posx = dlg->m_PosX;
t->posy = dlg->m_PosY;
t->sizx = dlg->m_SizX;
@ -488,6 +492,8 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
t->FakeVersionId = dlg->m_FakeVersionId;
t->MaxScreenRes = dlg->m_MaxScreenRes;
t->SwapEffect = dlg->m_SwapEffect;
t->resw = dlg->m_InitResW;
t->resh = dlg->m_InitResH;
strcpy_s(t->module, sizeof(t->module), dlg->m_Module);
strcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib);
}
@ -662,6 +668,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0;
dlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0;
dlg->m_NoFlipEmulation = t->flags4 & NOFLIPEMULATION ? 1 : 0;
dlg->m_LockColorDepth = t->flags7 & LOCKCOLORDEPTH ? 1 : 0;
dlg->m_SuppressClipping = t->flags & SUPPRESSCLIPPING ? 1 : 0;
dlg->m_ForceClipper = t->flags3 & FORCECLIPPER ? 1 : 0;
dlg->m_DisableGammaRamp = t->flags2 & DISABLEGAMMARAMP ? 1 : 0;
@ -733,6 +740,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_ForceHookOpenGL = t->flags3 & FORCEHOOKOPENGL ? 1 : 0;
dlg->m_FixPixelZoom = t->flags6 & FIXPIXELZOOM ? 1 : 0;
dlg->m_FixBindTexture = t->flags7 & FIXBINDTEXTURE ? 1 : 0;
dlg->m_HookGlut32 = t->flags7 & HOOKGLUT32 ? 1 : 0;
dlg->m_WireFrame = t->flags2 & WIREFRAME ? 1 : 0;
dlg->m_NoTextures = t->flags4 & NOTEXTURES ? 1 : 0;
dlg->m_BlackWhite = t->flags3 & BLACKWHITE ? 1 : 0;
@ -755,6 +763,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_NoWinErrors = t->flags7 & NOWINERRORS ? 1 : 0;
dlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0;
dlg->m_ReplacePrivOps = t->flags5 & REPLACEPRIVOPS ? 1 : 0;
dlg->m_InitialRes = t->flags7 & INITIALRES ? 1 : 0;
dlg->m_MaximumRes = t->flags7 & MAXIMUMRES ? 1 : 0;
dlg->m_PosX = t->posx;
dlg->m_PosY = t->posy;
dlg->m_SizX = t->sizx;
@ -763,6 +773,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_InitTS = t->InitTS+8;
dlg->m_FakeVersionId = t->FakeVersionId;
dlg->m_MaxScreenRes = t->MaxScreenRes;
dlg->m_InitResW = t->resw;
dlg->m_InitResH = t->resh;
dlg->m_SwapEffect = t->SwapEffect;
}
@ -897,6 +909,14 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i,
sprintf_s(key, sizeof(key), "slowratio%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMap->SlowRatio);
WritePrivateProfileString("target", key, val, InitPath);
// -------
sprintf_s(key, sizeof(key), "initresw%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMap->resw);
WritePrivateProfileString("target", key, val, InitPath);
// -------
sprintf_s(key, sizeof(key), "initresh%i", i);
sprintf_s(val, sizeof(val), "%i", TargetMap->resh);
WritePrivateProfileString("target", key, val, InitPath);
free(EscBuf);
EscBuf = NULL;
@ -1085,6 +1105,12 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c
// -------
sprintf_s(key, sizeof(key), "slowratio%i", i);
TargetMap->SlowRatio = GetPrivateProfileInt("target", key, 1, InitPath);
// -------
sprintf_s(key, sizeof(key), "initresw%i", i);
TargetMap->resw = GetPrivateProfileInt("target", key, 0, InitPath);
// -------
sprintf_s(key, sizeof(key), "initresh%i", i);
TargetMap->resh = GetPrivateProfileInt("target", key, 0, InitPath);
if (!gbDebug){
// clear debug flags

Binary file not shown.

Binary file not shown.