glide2x, h3, win_mode.c: build fixes / mysterious bug fixes from glide3
This commit is contained in:
@@ -23,61 +23,58 @@
|
||||
#include <gdebug.h>
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#if (WINVER < 0x0500) && !defined(HMONITOR_DECLARED) /* <--- HACK */
|
||||
DECLARE_HANDLE(HMONITOR);
|
||||
#define HMONITOR_DECLARED
|
||||
#endif
|
||||
#include <ddraw.h>
|
||||
#include <sst1vid.h>
|
||||
#include "qmodes.h"
|
||||
#if 0 /* moved to asm so we don't need w9x ddk headers. */
|
||||
#define IS_32
|
||||
#define Not_VxD
|
||||
#include <minivdd.h>
|
||||
#include <vmm.h>
|
||||
#include <configmg.h>
|
||||
#else
|
||||
extern DWORD __cdecl CM_Get_DevNode_Key(DWORD,PCHAR,PVOID,ULONG,ULONG);
|
||||
#define CM_REGISTRY_HARDWARE 0
|
||||
#define CM_REGISTRY_SOFTWARE 1
|
||||
#endif
|
||||
|
||||
/* Windows */
|
||||
#define SEPARATOR '\\'
|
||||
/* UNIX */
|
||||
#define SEPARATOR2 '/'
|
||||
#ifndef IDirectDraw7_CreateSurface /* ddraw.h not from dx7 sdk */
|
||||
typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXA)(GUID FAR *, LPSTR, LPSTR, LPVOID, HMONITOR);
|
||||
typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)(LPDDENUMCALLBACKEXA, LPVOID, DWORD);
|
||||
#ifndef DDENUM_ATTACHEDSECONDARYDEVICES
|
||||
#define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001L
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* parseFilename
|
||||
*
|
||||
* Return the file name portion of a filename/path.
|
||||
*/
|
||||
|
||||
static char *
|
||||
_parseFilename(char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (name == NULL)
|
||||
return NULL;
|
||||
for(i = strlen(name); i >= 0; i--)
|
||||
if ((name[i] == SEPARATOR) ||
|
||||
(name[i] == SEPARATOR2))
|
||||
return (name + i + 1);
|
||||
return name;
|
||||
} /* End of parseFilename*/
|
||||
static HWND hwndApp = 0;
|
||||
|
||||
/* Direct Draw stuff */
|
||||
LPDIRECTDRAW lpDD1 = NULL;
|
||||
LPDIRECTDRAW2 lpDD = NULL;
|
||||
|
||||
static int _set_exclusive_relaxed;
|
||||
static int _set_vidmode_relaxed;
|
||||
|
||||
typedef struct _enumInfoStruct {
|
||||
GUID guid;
|
||||
HMONITOR hmon;
|
||||
} EnumInfo;
|
||||
|
||||
static BOOL FAR PASCAL
|
||||
ddEnumCbEx( GUID FAR *guid, LPSTR desc, LPSTR name, LPVOID ctx, HMONITOR hmon )
|
||||
{
|
||||
DWORD *data = (DWORD*)ctx;
|
||||
HMONITOR target = (HMONITOR)data[0];
|
||||
EnumInfo* pEnumInfo = (EnumInfo*)ctx;
|
||||
BOOL rv = DDENUMRET_OK;
|
||||
|
||||
if ( target == hmon ) {
|
||||
if ( guid ) {
|
||||
fooGuid = *guid;
|
||||
data[1] = (DWORD)&fooGuid;
|
||||
} else {
|
||||
/* guid for primary display device */
|
||||
data[1] = 0;
|
||||
}
|
||||
if(pEnumInfo->hmon == hmon) {
|
||||
if ( guid ) CopyMemory(&pEnumInfo->guid, guid, sizeof(GUID));
|
||||
rv = DDENUMRET_CANCEL;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -228,16 +225,16 @@ setVideoMode( HWND hwnd, int xRes, int yRes, int refresh, void *hmon )
|
||||
LPDIRECTDRAWENUMERATEEXA ddEnumEx;
|
||||
ddEnumEx = (void*)GetProcAddress( ddraw, "DirectDrawEnumerateExA" );
|
||||
if ( ddEnumEx ) {
|
||||
DWORD data[2];
|
||||
data[0] = (DWORD)hmon;
|
||||
data[1] = 0;
|
||||
ddEnumEx( ddEnumCbEx, data, DDENUM_ATTACHEDSECONDARYDEVICES );
|
||||
if ( data[1] ) {
|
||||
ddGuid = (LPGUID)data[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
EnumInfo enumInfo;
|
||||
|
||||
ZeroMemory(&enumInfo, sizeof(enumInfo));
|
||||
ZeroMemory(&enumInfo.guid, sizeof(GUID));
|
||||
enumInfo.hmon = (HMONITOR)hmon;
|
||||
ddEnumEx( ddEnumCbEx, &enumInfo, DDENUM_ATTACHEDSECONDARYDEVICES );
|
||||
ddGuid = &enumInfo.guid;
|
||||
GDBG_INFO(80, "GUID %d\n", ddGuid);
|
||||
}
|
||||
}
|
||||
|
||||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devMode);
|
||||
|
||||
@@ -256,7 +253,7 @@ setVideoMode( HWND hwnd, int xRes, int yRes, int refresh, void *hmon )
|
||||
bpp = 8;
|
||||
}
|
||||
|
||||
checkSpecialList();
|
||||
//checkSpecialList(); /* [dBorca] disable for now */
|
||||
if (lpDD == NULL) {
|
||||
/* only create directdraw object once */
|
||||
if ( DirectDrawCreate( ddGuid, &lpDD1, NULL ) != DD_OK) {
|
||||
@@ -315,7 +312,6 @@ setVideoMode( HWND hwnd, int xRes, int yRes, int refresh, void *hmon )
|
||||
/* Figure out if we can support the requested display mode. If not,
|
||||
try to use the same x & y res, but the default refresh rate.*/
|
||||
|
||||
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT;
|
||||
ddsd.dwWidth = xRes;
|
||||
@@ -553,33 +549,6 @@ static WidthHeight_t widthHeightByResolution[] = {
|
||||
{2048, 2048} /* GR_RESOLUTION_2048x2048 */
|
||||
};
|
||||
|
||||
static char *resNames[] = {
|
||||
"GR_RESOLUTION_320x200",
|
||||
"GR_RESOLUTION_320x240",
|
||||
"GR_RESOLUTION_400x256",
|
||||
"GR_RESOLUTION_512x384",
|
||||
"GR_RESOLUTION_640x200",
|
||||
"GR_RESOLUTION_640x350",
|
||||
"GR_RESOLUTION_640x400",
|
||||
"GR_RESOLUTION_640x480",
|
||||
"GR_RESOLUTION_800x600",
|
||||
"GR_RESOLUTION_960x720",
|
||||
"GR_RESOLUTION_856x480",
|
||||
"GR_RESOLUTION_512x256",
|
||||
"GR_RESOLUTION_1024x768",
|
||||
"GR_RESOLUTION_1280x1024",
|
||||
"GR_RESOLUTION_1600x1200",
|
||||
"GR_RESOLUTION_400x300",
|
||||
"GR_RESOLUTION_1152x864",
|
||||
"GR_RESOLUTION_1280x960",
|
||||
"GR_RESOLUTION_1600x1024",
|
||||
"GR_RESOLUTION_1792x1344",
|
||||
"GR_RESOLUTION_1856x1392",
|
||||
"GR_RESOLUTION_1920x1440",
|
||||
"GR_RESOLUTION_2048x1536",
|
||||
"GR_RESOLUTION_2048x2048"
|
||||
};
|
||||
|
||||
|
||||
static HRESULT WINAPI
|
||||
checkResEMCallback(LPDDSURFACEDESC surfaceDesc, LPVOID lpContext)
|
||||
@@ -644,21 +613,22 @@ checkResolutions(FxBool *supportedByResolution, void *hmon)
|
||||
LPDIRECTDRAWENUMERATEEXA ddEnumEx;
|
||||
ddEnumEx = (void*)GetProcAddress( ddraw, "DirectDrawEnumerateExA" );
|
||||
if ( ddEnumEx ) {
|
||||
DWORD data[2];
|
||||
data[0] = (DWORD)hmon;
|
||||
data[1] = 0;
|
||||
ddEnumEx( ddEnumCbEx, data, DDENUM_ATTACHEDSECONDARYDEVICES );
|
||||
if ( data[1] ) {
|
||||
ddGuid = (LPGUID)data[1];
|
||||
}
|
||||
EnumInfo enumInfo;
|
||||
|
||||
ZeroMemory(&enumInfo, sizeof(enumInfo));
|
||||
ZeroMemory(&enumInfo.guid, sizeof(GUID));
|
||||
enumInfo.hmon = (HMONITOR)hmon;
|
||||
ddEnumEx( ddEnumCbEx, &enumInfo, DDENUM_ATTACHEDSECONDARYDEVICES );
|
||||
ddGuid = &enumInfo.guid;
|
||||
GDBG_INFO(80, "GUID %d\n", ddGuid);
|
||||
}
|
||||
}
|
||||
|
||||
checkSpecialList();
|
||||
// checkSpecialList(); /* [dBorca] disable for now */
|
||||
if (lpDD == NULL) {
|
||||
/* only create directdraw object once */
|
||||
if ( DirectDrawCreate( ddGuid, &lpDD1, NULL ) != DD_OK) {
|
||||
GDBG_INFO(80, "DDraw Obj Create Failed!\n");
|
||||
GDBG_INFO(80, "DDraw Obj Create Failed!3\n");
|
||||
}
|
||||
else GDBG_INFO(80, "DDraw Obj created!\n");
|
||||
if ( IDirectDraw_QueryInterface( lpDD1, &IID_IDirectDraw2,
|
||||
|
||||
Reference in New Issue
Block a user