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

v2_03_67_src

Former-commit-id: f79ef55a7b217903f1d04a7b1ae1f2e9ffe38614
This commit is contained in:
gho tik 2016-04-05 12:45:52 -04:00 committed by Refael ACkermann
parent be8f7c439b
commit 3c0b19dc7b
29 changed files with 358 additions and 83 deletions

3
Release/-dxwnd.dll Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f65c1e7993261840d66b4fed49ccf914a83f3a90b8e269f0cb9bff6464713c25
size 648704

1
Release/.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.{dll,exe} filter=lfs diff=lfs merge=lfs -text

66
Release/dxwnd.ini Normal file
View File

@ -0,0 +1,66 @@
[window]
posx=1089
posy=686
sizx=554
sizy=320
exepath=D:\Games\Moto Racer 2 (GOG)\
exportpath=D:\DxWnd\exports\
[target]
title0=Battlezone (1998)
path0=D:\Games\Battlezone\bzone.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=-1608515533
flagg0=1241513984
flagh0=98320
flagi0=138412036
flagj0=4224
flagk0=0
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=150
posy0=150
sizx0=880
sizy0=660
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7
title1=Moto Racer 2 (GOG)
path1=D:\Games\Moto Racer 2 (GOG)\moto.exe
launchpath1=D:\Games\Moto Racer 2 (GOG)\moto.exe -noD3D
module1=
opengllib1=
notes1=
registry1=
ver1=0
coord1=0
flag1=681574450
flagg1=1207959680
flagh1=20
flagi1=138412036
flagj1=4224
flagk1=327680
flagl1=0
flagm1=0
tflag1=0
dflag1=0
posx1=50
posy1=50
sizx1=800
sizy1=600
maxfps1=0
initts1=0
winver1=0
maxres1=-1
swapeffect1=0
maxddinterface1=7

BIN
Release/dxwnd.rar Normal file

Binary file not shown.

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3bd601d4523889f0cf019a183f5bc5476c5c03662c5f5a93a98686354056a73c
size 648704
oid sha256:5851f8d55e160f90a240f655882cde9566c5edc132a20dff793d05746806f377
size 649216

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:740b5c2156b6965fee001072a8910fe5a3ae4523be53ac3e041723fa50361df1
oid sha256:0c4c24c7a4b18dbcbc807d2c4d9bdf0a8dab01a0462815c337b62a2ee56aec86
size 567296

View File

@ -27,3 +27,10 @@ notes0=
flagj0=128
winver0=0
maxres0=0
registry0=
flagk0=65536
flagl0=0
flagm0=0
dflag0=0
swapeffect0=0
maxddinterface0=7

View File

@ -27,5 +27,10 @@ maxfps0=0
initts0=0
winver0=0
maxres0=-1
flagk0=0
flagk0=65536
swapeffect0=0
registry0=
flagl0=0
flagm0=0
dflag0=0
maxddinterface0=7

View File

@ -27,3 +27,10 @@ maxres0=0
launchpath0=
notes0=
flagj0=128
registry0=
flagk0=65536
flagl0=0
flagm0=0
dflag0=0
swapeffect0=0
maxddinterface0=7

View File

@ -9,7 +9,7 @@ flag0=134234146
flagg0=1476395040
flagh0=20
flagi0=4194305
tflag0=64
tflag0=0
initx0=0
inity0=0
minx0=0
@ -27,3 +27,10 @@ notes0=May require "by default set no ALPHACHENNAL" if monitor doesn't support m
flagj0=128
winver0=0
maxres0=0
registry0=
flagk0=65536
flagl0=0
flagm0=0
dflag0=0
swapeffect0=0
maxddinterface0=7

View File

@ -3,13 +3,13 @@ title0=Magic & Mayhem
path0=D:\Games\Magic_&_Mayhem\Chaos.exe
module0=
opengllib0=
ver0=0
ver0=1
coord0=0
flag0=138428450
flag0=683687978
flagg0=1275068416
flagh0=20
flagi0=4194304
tflag0=259
tflag0=0
initx0=0
inity0=0
minx0=0
@ -29,3 +29,8 @@ notes0=
flagj0=128
flagk0=0
swapeffect0=0
registry0=
flagl0=0
flagm0=0
dflag0=0
maxddinterface0=4

View File

@ -5,10 +5,10 @@ module0=
opengllib0=
ver0=0
coord0=0
flag0=134217760
flag0=134217762
flagg0=1207959552
flagh0=20
flagi0=4
flagi0=4194308
tflag0=0
initx0=0
inity0=0
@ -22,3 +22,15 @@ sizx0=800
sizy0=600
maxfps0=0
initts0=0
launchpath0=
notes0=
registry0=
flagj0=0
flagk0=65536
flagl0=0
flagm0=0
dflag0=0
winver0=0
maxres0=0
swapeffect0=0
maxddinterface0=7

View File

@ -0,0 +1,30 @@
[target]
title0=Moto Racer 2 (GOG)
path0=D:\Games\Moto Racer 2 (GOG)\moto.exe
launchpath0=D:\Games\Moto Racer 2 (GOG)\moto.exe -noD3D
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=681574434
flagg0=1207959680
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=327680
flagl0=0
flagm0=0
tflag0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7

View File

@ -0,0 +1,29 @@
[target]
title0=Restricted Area
path0=D:\Games\Restricted Area\Ra.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=681574440
flagg0=1744830464
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=65536
flagl0=0
flagm0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7

View File

@ -7,7 +7,7 @@ opengllib0=
notes0=
ver0=0
coord0=0
flag0=134217762
flag0=134217770
flagg0=1744830464
flagh0=1040
flagi0=1212153860
@ -30,3 +30,7 @@ maxres0=-1
flagk0=0
swapeffect0=0
registry0=[HKEY_LOCAL_MACHINE\SOFTWARE]\n\n; Road Rash\n\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\RoadRash 95]\n""=""\n"Path"="."\n"CheckDialup"=hex:00\n"ChatState"=hex:02\n"MiniDash"=hex:00\n"OpponentList"=hex:01\n
flagl0=0
flagm0=0
dflag0=0
maxddinterface0=7

View File

@ -0,0 +1,29 @@
[target]
title0=Sports Car GT Demo
path0=D:\Games\Sports Car GT Demo\Spcar.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136331298
flagg0=1207959552
flagh0=20
flagi0=136445956
flagj0=2101376
flagk0=65536
flagl0=0
flagm0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7

View File

@ -0,0 +1,29 @@
[target]
title0=The Westerner
path0=D:\Games\The Westerner\PICTuRE.exe
launchpath0=
module0=
opengllib0=
notes0=
registry0=
ver0=0
coord0=0
flag0=136315426
flagg0=1207959552
flagh0=20
flagi0=138412036
flagj0=4224
flagk0=268500992
flagl0=0
flagm0=0
dflag0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7

View File

@ -1,35 +0,0 @@
[window]
posx=981
posy=578
sizx=320
sizy=200
exportpath=D:\DxWnd\exports\
[target]
title0=Imperialism
path0=D:\Games\Imperialism\Imperialism.exe
launchpath0=
module0=
opengllib0=
notes0=Note:\nMap zooming is currently not workind. Do not click on the magnifying glass, \nor the game will crash.
registry0=
ver0=0
coord0=0
flag0=1746935851
flagg0=1207959553
flagh0=20
flagi0=4194308
flagj0=128
flagk0=262144
flagl0=4
flagm0=0
tflag0=-2147477245
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1
swapeffect0=0
maxddinterface0=7

View File

@ -1101,4 +1101,9 @@ fix: X,Y starting win position can now be negative integer (in multimonitor syst
v2.03.66
fix: terminated the separation between ddraw method interfaces
fix: force clipper now builds a clipper for the real primary surface (useful when desktop composition is disabled)
fix: force clipper now builds a clipper for the real primary surface (useful when desktop composition is disabled and on XP)
v2.03.67
fix: D3D7 hooks to make NBA2002 working
fix: better virtual color depth settings to allow "Moto Racer 2" believe it is running on a fake 16bpp desktop
fix: GUI placement coordinates are not saved when terminating in minimized or maximized state

View File

@ -89,8 +89,8 @@ HRESULT WINAPI extWaitForVerticalBlank4(LPDIRECTDRAW, DWORD, HANDLE);
HRESULT WINAPI extWaitForVerticalBlank7(LPDIRECTDRAW, DWORD, HANDLE);
/*** Added in the V2 Interface ***/
HRESULT WINAPI extGetAvailableVidMem2(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);
HRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);
HRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);
HRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD);
HRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD);
/*** Added in the V4 Interface ***/
HRESULT WINAPI extTestCooperativeLevel4(LPDIRECTDRAW);
HRESULT WINAPI extTestCooperativeLevel7(LPDIRECTDRAW);
@ -283,7 +283,8 @@ SetDisplayMode1_Type pSetDisplayMode1;
SetDisplayMode2_Type pSetDisplayMode2, pSetDisplayMode4, pSetDisplayMode7;
WaitForVerticalBlank_Type pWaitForVerticalBlank1, pWaitForVerticalBlank2, pWaitForVerticalBlank4, pWaitForVerticalBlank7;
GetSurfaceFromDC_Type pGetSurfaceFromDC;
GetAvailableVidMem_Type pGetAvailableVidMem2, pGetAvailableVidMem4, pGetAvailableVidMem7;
GetAvailableVidMem_Type pGetAvailableVidMem2;
GetAvailableVidMem4_Type pGetAvailableVidMem4, pGetAvailableVidMem7;
RestoreAllSurfaces_Type pRestoreAllSurfaces;
TestCooperativeLevel_Type pTestCooperativeLevel4, pTestCooperativeLevel7;
GetDeviceIdentifier_Type pGetDeviceIdentifier;
@ -619,6 +620,7 @@ void InitDSScreenParameters(int dxversion, LPDIRECTDRAWSURFACE lpdds)
void InitScreenParameters(int dxversion)
{
extern void FixPixelFormat(int , DDPIXELFORMAT *);
DEVMODE CurrDevMode;
static int DoOnce = FALSE;
@ -642,6 +644,8 @@ void InitScreenParameters(int dxversion)
// initialize to default null values, but dwRGBBitCount
dxw.ActualPixelFormat.dwRGBBitCount=CurrDevMode.dmBitsPerPel;
dxw.VirtualPixelFormat.dwRGBBitCount=CurrDevMode.dmBitsPerPel; // until set differently
if(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &dxw.VirtualPixelFormat);
if(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &dxw.VirtualPixelFormat);
OutTraceDW("InitScreenParameters: dxversion=%d RGBBitCount=%d\n", dxversion, CurrDevMode.dmBitsPerPel);
SetBltTransformations(dxversion);
@ -1616,6 +1620,16 @@ HRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, I
if(lpPrimaryDD==NULL) lpPrimaryDD=*lplpdd; // do not override the value set when creating the primary surface!
bFlippedDC = FALSE; // v02.03.30
#ifdef AUTOSETCOOPERATIVELEVEL
OutTrace("Setting cooperative level version=%d hwnd=%x\n", dxw.dwDDVersion, dxw.GethWnd());
switch(dxw.dwDDVersion){
case 1: res=(*pSetCooperativeLevel1)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;
case 2: res=(*pSetCooperativeLevel2)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;
case 4: res=(*pSetCooperativeLevel4)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;
case 7: res=(*pSetCooperativeLevel7)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;
}
if(res) OutTraceE("SetCooperativeLevel ERROR: err=%x(%s)\n", res, ExplainDDError(res));
#endif
return DD_OK;
}
@ -2087,24 +2101,13 @@ HRESULT WINAPI extGetDisplayMode(GetDisplayMode_Type pGetDisplayMode, LPDIRECTDR
}
HRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)
{
return extGetDisplayMode(pGetDisplayMode1, lpdd, lpddsd);
}
{ return extGetDisplayMode(pGetDisplayMode1, lpdd, lpddsd); }
HRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)
{
return extGetDisplayMode(pGetDisplayMode2, lpdd, lpddsd);
}
{ return extGetDisplayMode(pGetDisplayMode2, lpdd, lpddsd); }
HRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd)
{
return extGetDisplayMode((GetDisplayMode_Type)pGetDisplayMode4, lpdd, (LPDDSURFACEDESC)lpddsd);
}
{ return extGetDisplayMode((GetDisplayMode_Type)pGetDisplayMode4, lpdd, (LPDDSURFACEDESC)lpddsd); }
HRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd)
{
return extGetDisplayMode((GetDisplayMode_Type)pGetDisplayMode7, lpdd, (LPDDSURFACEDESC)lpddsd);
}
{ return extGetDisplayMode((GetDisplayMode_Type)pGetDisplayMode7, lpdd, (LPDDSURFACEDESC)lpddsd); }
HRESULT WINAPI extSetCooperativeLevel(int dxversion, SetCooperativeLevel_Type pSetCooperativeLevel, LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)
{
@ -2329,8 +2332,7 @@ static void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurfa
dxwss.PopSurface(lpDDSEmu_Prim);
if (dxw.dwFlags3 & FORCECLIPPER){
OutTraceDW("CreateSurface: FORCE SetClipper on primary hwnd=%x lpdds=%x\n",
dxw.GethWnd(), lpDDSEmu_Prim);
OutTraceDW("CreateSurface: FORCE SetClipper on primary hwnd=%x lpdds=%x\n", dxw.GethWnd(), lpDDSEmu_Prim);
res=lpdd->CreateClipper(0, &lpddC, NULL);
if (res) OutTraceE("CreateSurface: CreateClipper ERROR res=%x(%s)\n", res, ExplainDDError(res));
res=lpddC->SetHWnd(0, dxw.GethWnd());
@ -5657,14 +5659,14 @@ HRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDG
return ret;
}
static HRESULT WINAPI extGetAvailableVidMem(GetAvailableVidMem_Type pGetAvailableVidMem, LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
static HRESULT WINAPI extGetAvailableVidMem(int dxversion, GetAvailableVidMem4_Type pGetAvailableVidMem, LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
{
HRESULT res;
//const DWORD dwMaxMem = 0x7FFFF000;
// v03.01.01: limit to smaller value to allow "Breath of Fire IV" card detection
const DWORD dwMaxMem = 0x70000000;
const DWORD dwHugeMem = 0xF0000000;
OutTraceDDRAW("GetAvailableVidMem(D): lpdd=%x\n", lpdd);
OutTraceDDRAW("GetAvailableVidMem(D%d): lpdd=%x\n", dxversion, lpdd);
res=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree);
if(res){
if((dxw.dwFlags3 & FORCESHEL) && (res==DDERR_NODIRECTDRAWHW)){
@ -5678,8 +5680,17 @@ static HRESULT WINAPI extGetAvailableVidMem(GetAvailableVidMem_Type pGetAvailabl
return res;
}
OutTraceDW("GetAvailableVidMem(D): DDSCaps=%x(%s) Total=%x Free=%x\n",
*lpDDSCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);
if(dxversion == 2){
OutTraceDW("GetAvailableVidMem(D2): DDSCaps=%x(%s) Total=%x Free=%x\n",
lpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);
}
else{
OutTraceDW("GetAvailableVidMem(D%d): DDSCaps=%x(%s).%x.%x.%x volumedepth=%d Total=%x Free=%x\n",
dxversion,
lpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps),
lpDDSCaps->dwCaps2, lpDDSCaps->dwCaps3, lpDDSCaps->dwCaps4, lpDDSCaps->dwVolumeDepth,
lpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);
}
if(!(dxw.dwFlags2 & LIMITRESOURCES)) return res;
@ -5714,12 +5725,11 @@ static HRESULT WINAPI extGetAvailableVidMem(GetAvailableVidMem_Type pGetAvailabl
}
HRESULT WINAPI extGetAvailableVidMem2(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
{ return extGetAvailableVidMem(pGetAvailableVidMem2, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }
HRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
{ return extGetAvailableVidMem(pGetAvailableVidMem4, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }
HRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
{ return extGetAvailableVidMem(pGetAvailableVidMem7, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }
{ return extGetAvailableVidMem(2, (GetAvailableVidMem4_Type)pGetAvailableVidMem2, lpdd, (LPDDSCAPS2)lpDDSCaps, lpdwTotal, lpdwFree); }
HRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
{ return extGetAvailableVidMem(4, pGetAvailableVidMem4, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }
HRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)
{ return extGetAvailableVidMem(7, pGetAvailableVidMem7, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }
HRESULT WINAPI extSetSurfaceDesc(SetSurfaceDesc_Type pSetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags)
{

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.66"
#define VERSION "2.03.67"
#define DDTHREADLOCK 1
//#define LOCKTHREADS

Binary file not shown.

View File

@ -2652,6 +2652,7 @@ int WINAPI extDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXE
{
int res;
OutTraceDW("DescribePixelFormat: hdc=%x PixelFormat=%d Bytes=%d\n", hdc, iPixelFormat, nBytes);
res=(*pDescribePixelFormat)(hdc, iPixelFormat, nBytes, ppfd);
if(!res){
OutTraceE("DescribePixelFormat: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
@ -2663,6 +2664,48 @@ int WINAPI extDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXE
ppfd->dwFlags, ppfd->iPixelType, ppfd->iPixelType?"PFD_TYPE_COLORINDEX":"PFD_TYPE_RGBA", ppfd->cColorBits,
ppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits,
ppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift);
if((hdc==0) && dxw.IsFullScreen() && (ppfd->iPixelType==PFD_TYPE_RGBA)){
OutTraceDW("DescribePixelFormat: emulating virtual desktop pixelformat bpp=%d\n", dxw.VirtualPixelFormat.dwRGBBitCount);
switch(dxw.VirtualPixelFormat.dwRGBBitCount){
case 8:
ppfd->cColorBits = 8;
OutTrace("colorbits=%d to be fixed!\n", ppfd->cColorBits);
break;
case 16:
ppfd->cColorBits = 16;
switch(dxw.VirtualPixelFormat.dwGBitMask){
case 0x0007E0: // RGB565
ppfd->cColorBits=16;
ppfd->cRedBits=5;
ppfd->cRedShift=0;
ppfd->cGreenBits=6;
ppfd->cGreenShift=5;
ppfd->cBlueBits=5;
ppfd->cBlueShift=11;
ppfd->cAlphaBits=0;
ppfd->cAlphaShift=0;
break;
case 0x0003E0: // RGB555
ppfd->cColorBits=15;
ppfd->cRedBits=5;
ppfd->cRedShift=0;
ppfd->cGreenBits=5;
ppfd->cGreenShift=5;
ppfd->cBlueBits=5;
ppfd->cBlueShift=10;
ppfd->cAlphaBits=1;
ppfd->cAlphaShift=15;
break;
}
break;
case 24:
if (ppfd->cColorBits != 24) OutTrace("colorbits=%d to be fixed!\n", ppfd->cColorBits);
break;
case 32:
if (ppfd->cColorBits != 24) OutTrace("colorbits=%d to be fixed!\n", ppfd->cColorBits);
break;
}
}
}
else {
OutTraceDW("DescribePixelFormat: res=%d\n", res);

View File

@ -68,7 +68,8 @@ FindDevice_Type pFindDevice = NULL;
CreateDevice2_Type pCreateDevice2 = NULL;
CreateDevice3_Type pCreateDevice3 = NULL;
CreateDevice7_Type pCreateDevice7 = NULL;
EnumZBufferFormats_Type pEnumZBufferFormats = NULL;
EnumZBufferFormats_Type pEnumZBufferFormats3 = NULL;
EnumZBufferFormats_Type pEnumZBufferFormats7 = NULL;
HRESULT WINAPI extQueryInterfaceD31(void *, REFIID, LPVOID *);
HRESULT WINAPI extQueryInterfaceD32(void *, REFIID, LPVOID *);
@ -82,7 +83,8 @@ HRESULT WINAPI extCreateLight1(void *, LPDIRECT3DLIGHT *, IUnknown *);
HRESULT WINAPI extCreateLight2(void *, LPDIRECT3DLIGHT *, IUnknown *);
HRESULT WINAPI extCreateLight3(void *, LPDIRECT3DLIGHT *, IUnknown *);
HRESULT WINAPI extEnumZBufferFormats(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);
HRESULT WINAPI extEnumZBufferFormats3(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);
HRESULT WINAPI extEnumZBufferFormats7(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);
// Direct3DDevice-n interfaces
@ -447,13 +449,13 @@ void HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)
SetHook((void *)(**(DWORD **)lplpdd + 24), extCreateViewport3, (void **)&pCreateViewport3, "CreateViewport(3)");
SetHook((void *)(**(DWORD **)lplpdd + 28), extFindDevice, (void **)&pFindDevice, "FindDevice");
SetHook((void *)(**(DWORD **)lplpdd + 32), extCreateDevice3, (void **)&pCreateDevice3, "CreateDevice(D3D3)");
SetHook((void *)(**(DWORD **)lplpdd + 40), extEnumZBufferFormats, (void **)&pEnumZBufferFormats, "EnumZBufferFormats(D3D)");
SetHook((void *)(**(DWORD **)lplpdd + 40), extEnumZBufferFormats3, (void **)&pEnumZBufferFormats3, "EnumZBufferFormats(D3D3)");
break;
case 7:
SetHook((void *)(**(DWORD **)lplpdd + 0), extQueryInterfaceD37, (void **)&pQueryInterfaceD37, "QueryInterface(D3S7)");
SetHook((void *)(**(DWORD **)lplpdd + 12), extEnumDevices7, (void **)&pEnumDevices7, "EnumDevices(7)");
SetHook((void *)(**(DWORD **)lplpdd + 16), extCreateDevice7, (void **)&pCreateDevice7, "CreateDevice(D3D7)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extEnumZBufferFormats, (void **)&pEnumZBufferFormats, "EnumZBufferFormats(D3D3)");
SetHook((void *)(**(DWORD **)lplpdd + 24), extEnumZBufferFormats7, (void **)&pEnumZBufferFormats7, "EnumZBufferFormats(D3D7)");
break;
}
}
@ -1638,7 +1640,7 @@ HRESULT WINAPI extZBufferProxy(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext)
return res;
}
HRESULT WINAPI extEnumZBufferFormats(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)
static HRESULT WINAPI extEnumZBufferFormats(EnumZBufferFormats_Type pEnumZBufferFormats, void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)
{
HRESULT ret;
CallbackZBufArg Arg;
@ -1650,6 +1652,11 @@ HRESULT WINAPI extEnumZBufferFormats(void *lpd3d, REFCLSID riidDevice, LPD3DENUM
return ret;
}
HRESULT WINAPI extEnumZBufferFormats3(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)
{ return extEnumZBufferFormats(pEnumZBufferFormats3, lpd3d, riidDevice, lpEnumCallback, lpContext); }
HRESULT WINAPI extEnumZBufferFormats7(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)
{ return extEnumZBufferFormats(pEnumZBufferFormats7, lpd3d, riidDevice, lpEnumCallback, lpContext); }
// Beware: using service surfaces with DDSCAPS_SYSTEMMEMORY capability may lead to crashes in D3D operations
// like Vievport::Clear() in "Forsaken" set in emulation AERO-friendly mode. To avoid the problem, you can
// suppress the offending cap by use of the NOSYSMEMPRIMARY or NOSYSMEMBACKBUF flags

View File

@ -46,6 +46,7 @@ typedef HRESULT (WINAPI *SetDisplayMode2_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD
typedef HRESULT (WINAPI *SetDisplayMode1_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD);
typedef HRESULT (WINAPI *WaitForVerticalBlank_Type)(LPDIRECTDRAW, DWORD, HANDLE);
typedef HRESULT (WINAPI *GetAvailableVidMem_Type)(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);
typedef HRESULT (WINAPI *GetAvailableVidMem4_Type)(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD);
typedef HRESULT (WINAPI *GetSurfaceFromDC_Type)(LPDIRECTDRAW, HDC, LPDIRECTDRAWSURFACE*);
typedef HRESULT (WINAPI *RestoreAllSurfaces_Type)(LPDIRECTDRAW);
typedef HRESULT (WINAPI *TestCooperativeLevel_Type)(LPDIRECTDRAW);

View File

@ -83,6 +83,7 @@ CMainFrame::~CMainFrame()
rect.left = x;
rect.right = x + cx;
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, 1);
x = rect.left;
y = rect.top;
cx = rect.right - rect.left;
@ -143,6 +144,11 @@ BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
void CMainFrame::OnMove(int x, int y)
{
CFrameWnd::OnMove(x, y);
WINDOWPLACEMENT wndpl;
wndpl.length = sizeof(wndpl);
this->GetWindowPlacement(&wndpl);
if(wndpl.showCmd != SW_SHOWNORMAL) return;
this->x=x;
this->y=y;
}
@ -150,6 +156,10 @@ void CMainFrame::OnMove(int x, int y)
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
WINDOWPLACEMENT wndpl;
wndpl.length = sizeof(wndpl);
this->GetWindowPlacement(&wndpl);
if(wndpl.showCmd != SW_SHOWNORMAL) return;
this->cx=cx;
this->cy=cy;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.