1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

Workaround OpenGL init issue on Windows, hackish

This commit is contained in:
Toni Spets 2010-11-06 21:42:37 +02:00
parent 423c510a17
commit d245af34bb
3 changed files with 25 additions and 13 deletions

21
main.c
View File

@ -384,8 +384,19 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
if(ddraw) if(ddraw)
{ {
/* FIXME: check the calling module before passing the call! */
return ddraw->DirectDrawCreate(lpGUID, lplpDD, pUnkOuter);
/*
printf(" returning DDERR_DIRECTDRAWALREADYCREATED\n"); printf(" returning DDERR_DIRECTDRAWALREADYCREATED\n");
return DDERR_DIRECTDRAWALREADYCREATED; return DDERR_DIRECTDRAWALREADYCREATED;
*/
}
HMODULE real_dll = LoadLibrary("system32\\ddraw.dll");
if(!real_dll)
{
return DDERR_GENERIC;
} }
IDirectDrawImpl *This = (IDirectDrawImpl *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl)); IDirectDrawImpl *This = (IDirectDrawImpl *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
@ -394,6 +405,16 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
*lplpDD = (LPDIRECTDRAW)This; *lplpDD = (LPDIRECTDRAW)This;
ddraw = This; ddraw = This;
This->DirectDrawCreate = (HRESULT WINAPI (*)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*))GetProcAddress(real_dll, "DirectDrawCreate");
CloseHandle(real_dll);
if(!This->DirectDrawCreate)
{
ddraw_Release(This);
return DDERR_GENERIC;
}
/* load configuration options from ddraw.ini */ /* load configuration options from ddraw.ini */
char cwd[MAX_PATH]; char cwd[MAX_PATH];
char ini_path[MAX_PATH]; char ini_path[MAX_PATH];

3
main.h
View File

@ -39,6 +39,9 @@ typedef struct IDirectDrawImpl
DWORD freq; DWORD freq;
BOOL windowed; BOOL windowed;
/* real export from system32\ddraw.dll */
HRESULT WINAPI (*DirectDrawCreate)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*);
struct render struct render
{ {
LPTHREAD_START_ROUTINE (*main)(void *); LPTHREAD_START_ROUTINE (*main)(void *);

View File

@ -65,19 +65,7 @@ struct render_ddraw_impl render_ddraw =
HRESULT WINAPI render_ddraw_Initialize() HRESULT WINAPI render_ddraw_Initialize()
{ {
HMODULE real_dll; if(ddraw->DirectDrawCreate(NULL, &render_ddraw.ddraw, NULL) != DD_OK)
HRESULT WINAPI (*real_DirectDrawCreate)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*);
real_dll = LoadLibrary("system32\\ddraw.dll");
if(!real_dll)
{
return DDERR_GENERIC;
}
render_ddraw.ddraw = NULL;
real_DirectDrawCreate = (HRESULT WINAPI (*)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*))GetProcAddress(real_dll, "DirectDrawCreate");
if(real_DirectDrawCreate(NULL, &render_ddraw.ddraw, NULL) != DD_OK)
{ {
return DDERR_GENERIC; return DDERR_GENERIC;
} }