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:
parent
423c510a17
commit
d245af34bb
21
main.c
21
main.c
@ -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
3
main.h
@ -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 *);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user