mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
some passthrough tweaks
This commit is contained in:
parent
d99fb4b05d
commit
5baeb50d1e
1
inc/dd.h
1
inc/dd.h
@ -53,6 +53,7 @@ typedef struct cnc_ddraw
|
|||||||
/* real export from system32\ddraw.dll */
|
/* real export from system32\ddraw.dll */
|
||||||
HMODULE real_dll;
|
HMODULE real_dll;
|
||||||
DIRECTDRAWCREATEPROC DirectDrawCreate;
|
DIRECTDRAWCREATEPROC DirectDrawCreate;
|
||||||
|
LPDIRECTDRAW real_dd;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -96,9 +96,12 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
|
|||||||
|
|
||||||
ret = S_OK;
|
ret = S_OK;
|
||||||
}
|
}
|
||||||
else if (IsEqualGUID(&IID_IMediaStream, riid) || IsEqualGUID(&IID_IAMMediaStream, riid))
|
else if (
|
||||||
|
!g_ddraw->passthrough &&
|
||||||
|
(IsEqualGUID(&IID_IMediaStream, riid) || IsEqualGUID(&IID_IAMMediaStream, riid)))
|
||||||
{
|
{
|
||||||
IAMMediaStreamImpl* ms = (IAMMediaStreamImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAMMediaStreamImpl));
|
IAMMediaStreamImpl* ms =
|
||||||
|
(IAMMediaStreamImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IAMMediaStreamImpl));
|
||||||
|
|
||||||
dprintf(" GUID = %08X (IID_IXXMediaStream), ms = %p\n", ((GUID*)riid)->Data1, ms);
|
dprintf(" GUID = %08X (IID_IXXMediaStream), ms = %p\n", ((GUID*)riid)->Data1, ms);
|
||||||
|
|
||||||
@ -113,6 +116,24 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
|
|||||||
{
|
{
|
||||||
dprintf("NOT_IMPLEMENTED GUID = %08X\n", ((GUID*)riid)->Data1);
|
dprintf("NOT_IMPLEMENTED GUID = %08X\n", ((GUID*)riid)->Data1);
|
||||||
|
|
||||||
|
if (g_ddraw->passthrough)
|
||||||
|
{
|
||||||
|
if (!g_ddraw->real_dll)
|
||||||
|
g_ddraw->real_dll = LoadLibrary("system32\\ddraw.dll");
|
||||||
|
|
||||||
|
if (g_ddraw->real_dll && !g_ddraw->DirectDrawCreate)
|
||||||
|
g_ddraw->DirectDrawCreate = (void*)GetProcAddress(g_ddraw->real_dll, "DirectDrawCreate");
|
||||||
|
|
||||||
|
if (g_ddraw->DirectDrawCreate == DirectDrawCreate)
|
||||||
|
g_ddraw->DirectDrawCreate = NULL;
|
||||||
|
|
||||||
|
if (!g_ddraw->real_dd && g_ddraw->DirectDrawCreate)
|
||||||
|
g_ddraw->DirectDrawCreate(NULL, &g_ddraw->real_dd, NULL);
|
||||||
|
|
||||||
|
if (g_ddraw->real_dd)
|
||||||
|
return g_ddraw->real_dd->lpVtbl->QueryInterface(g_ddraw->real_dd, riid, obj);
|
||||||
|
}
|
||||||
|
|
||||||
ret = E_NOINTERFACE;
|
ret = E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -176,7 +197,7 @@ HRESULT __stdcall IDirectDraw__CreatePalette(IDirectDrawImpl* This, DWORD dwFlag
|
|||||||
HRESULT __stdcall IDirectDraw__CreateSurface(IDirectDrawImpl* This, LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FAR* lpDDSurface, IUnknown FAR* unkOuter)
|
HRESULT __stdcall IDirectDraw__CreateSurface(IDirectDrawImpl* This, LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FAR* lpDDSurface, IUnknown FAR* unkOuter)
|
||||||
{
|
{
|
||||||
dprintf("-> %s(This=%p, lpDDSurfaceDesc=%p, lpDDSurface=%p, unkOuter=%p)\n", __FUNCTION__, This, lpDDSurfaceDesc, lpDDSurface, unkOuter);
|
dprintf("-> %s(This=%p, lpDDSurfaceDesc=%p, lpDDSurface=%p, unkOuter=%p)\n", __FUNCTION__, This, lpDDSurfaceDesc, lpDDSurface, unkOuter);
|
||||||
HRESULT ret = dd_CreateSurface(lpDDSurfaceDesc, lpDDSurface, unkOuter);
|
HRESULT ret = dd_CreateSurface(This, lpDDSurfaceDesc, lpDDSurface, unkOuter);
|
||||||
dprintf("<- %s\n", __FUNCTION__);
|
dprintf("<- %s\n", __FUNCTION__);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
5
src/dd.c
5
src/dd.c
@ -841,6 +841,11 @@ ULONG dd_Release()
|
|||||||
g_fpsl.htimer = NULL;
|
g_fpsl.htimer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_ddraw->real_dd)
|
||||||
|
{
|
||||||
|
g_ddraw->real_dd->lpVtbl->Release(g_ddraw->real_dd);
|
||||||
|
}
|
||||||
|
|
||||||
DeleteCriticalSection(&g_ddraw->cs);
|
DeleteCriticalSection(&g_ddraw->cs);
|
||||||
|
|
||||||
/* restore old wndproc, subsequent ddraw creation will otherwise fail */
|
/* restore old wndproc, subsequent ddraw creation will otherwise fail */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user