mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
#121 return empty device identifier
This commit is contained in:
parent
daeac4be45
commit
3f9ac549bc
@ -14,6 +14,7 @@ typedef struct IDirectDrawImpl
|
|||||||
struct IDirectDrawImplVtbl* lpVtbl;
|
struct IDirectDrawImplVtbl* lpVtbl;
|
||||||
|
|
||||||
ULONG ref;
|
ULONG ref;
|
||||||
|
GUID guid;
|
||||||
|
|
||||||
} IDirectDrawImpl;
|
} IDirectDrawImpl;
|
||||||
|
|
||||||
|
1
inc/dd.h
1
inc/dd.h
@ -20,6 +20,7 @@ HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
|
|||||||
HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq);
|
HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq);
|
||||||
HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree);
|
HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree);
|
||||||
HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB);
|
HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB);
|
||||||
|
HRESULT dd_GetDeviceIdentifier(LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags, REFIID riid);
|
||||||
HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter);
|
HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter);
|
||||||
|
|
||||||
#define FIX_CHILDS_DISABLED 0
|
#define FIX_CHILDS_DISABLED 0
|
||||||
|
@ -26,6 +26,7 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
|
|||||||
|
|
||||||
TRACE(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", ((GUID*)riid)->Data1, dd);
|
TRACE(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", ((GUID*)riid)->Data1, dd);
|
||||||
|
|
||||||
|
memcpy(&dd->guid, riid, sizeof(dd->guid));
|
||||||
dd->lpVtbl = &g_dd_vtblx;
|
dd->lpVtbl = &g_dd_vtblx;
|
||||||
IDirectDraw_AddRef(dd);
|
IDirectDraw_AddRef(dd);
|
||||||
|
|
||||||
@ -40,6 +41,7 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
|
|||||||
|
|
||||||
TRACE(" GUID = %08X (IID_IDirectDraw), ddraw = %p\n", ((GUID*)riid)->Data1, dd);
|
TRACE(" GUID = %08X (IID_IDirectDraw), ddraw = %p\n", ((GUID*)riid)->Data1, dd);
|
||||||
|
|
||||||
|
memcpy(&dd->guid, riid, sizeof(dd->guid));
|
||||||
dd->lpVtbl = &g_dd_vtbl1;
|
dd->lpVtbl = &g_dd_vtbl1;
|
||||||
IDirectDraw_AddRef(dd);
|
IDirectDraw_AddRef(dd);
|
||||||
|
|
||||||
@ -138,9 +140,9 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
|
|||||||
g_ddraw->DirectDrawCreate(NULL, &g_ddraw->real_dd, NULL);
|
g_ddraw->DirectDrawCreate(NULL, &g_ddraw->real_dd, NULL);
|
||||||
|
|
||||||
if (g_ddraw->real_dd)
|
if (g_ddraw->real_dd)
|
||||||
return IDirectDraw_QueryInterface(g_ddraw->real_dd, riid, ppvObj);
|
ret = IDirectDraw_QueryInterface(g_ddraw->real_dd, riid, ppvObj);
|
||||||
|
else
|
||||||
ret = E_NOINTERFACE;
|
ret = E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,8 +479,8 @@ HRESULT __stdcall IDirectDraw__TestCooperativeLevel(IDirectDrawImpl* This)
|
|||||||
|
|
||||||
HRESULT __stdcall IDirectDraw__GetDeviceIdentifier(IDirectDrawImpl* This, LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags)
|
HRESULT __stdcall IDirectDraw__GetDeviceIdentifier(IDirectDrawImpl* This, LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
TRACE("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This);
|
TRACE("NOT_IMPLEMENTED -> %s(This=%p, pDDDI=%p, dwFlags=%08X)\n", __FUNCTION__, This, pDDDI, dwFlags);
|
||||||
HRESULT ret = DDERR_INVALIDPARAMS;
|
HRESULT ret = dd_GetDeviceIdentifier((LPDDDEVICEIDENTIFIER)pDDDI, dwFlags, &This->guid);
|
||||||
TRACE("NOT_IMPLEMENTED <- %s\n", __FUNCTION__);
|
TRACE("NOT_IMPLEMENTED <- %s\n", __FUNCTION__);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
26
src/dd.c
26
src/dd.c
@ -1016,7 +1016,26 @@ HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpd
|
|||||||
|
|
||||||
HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB)
|
HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB)
|
||||||
{
|
{
|
||||||
*lpbIsInVB = TRUE;
|
if (lpbIsInVB)
|
||||||
|
*lpbIsInVB = TRUE;
|
||||||
|
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT dd_GetDeviceIdentifier(LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags, REFIID riid)
|
||||||
|
{
|
||||||
|
if (!pDDDI)
|
||||||
|
return DDERR_INVALIDPARAMS;
|
||||||
|
|
||||||
|
if (IsEqualGUID(&IID_IDirectDraw7, riid))
|
||||||
|
{
|
||||||
|
memset(pDDDI, 0, sizeof(DDDEVICEIDENTIFIER2));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset(pDDDI, 0, sizeof(DDDEVICEIDENTIFIER));
|
||||||
|
}
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1037,8 +1056,9 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute
|
|||||||
}
|
}
|
||||||
|
|
||||||
IDirectDrawImpl* dd = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
IDirectDrawImpl* dd = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
||||||
|
memcpy(&dd->guid, iid, sizeof(dd->guid));
|
||||||
|
|
||||||
if (iid && IsEqualGUID(&IID_IDirectDraw, iid))
|
if (IsEqualGUID(&IID_IDirectDraw, iid))
|
||||||
{
|
{
|
||||||
TRACE(" GUID = %08X (IID_IDirectDraw), ddraw = %p\n", ((GUID*)iid)->Data1, dd);
|
TRACE(" GUID = %08X (IID_IDirectDraw), ddraw = %p\n", ((GUID*)iid)->Data1, dd);
|
||||||
|
|
||||||
@ -1046,7 +1066,7 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TRACE(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", iid ? ((GUID*)iid)->Data1 : 0, dd);
|
TRACE(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", ((GUID*)iid)->Data1, dd);
|
||||||
|
|
||||||
dd->lpVtbl = &g_dd_vtblx;
|
dd->lpVtbl = &g_dd_vtblx;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ HRESULT WINAPI DirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR* l
|
|||||||
HRESULT WINAPI DirectDrawCreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter)
|
HRESULT WINAPI DirectDrawCreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter)
|
||||||
{
|
{
|
||||||
TRACE("-> %s(lpGUID=%p, lplpDD=%p, riid=%08X, pUnkOuter=%p)\n", __FUNCTION__, lpGuid, lplpDD, iid, pUnkOuter);
|
TRACE("-> %s(lpGUID=%p, lplpDD=%p, riid=%08X, pUnkOuter=%p)\n", __FUNCTION__, lpGuid, lplpDD, iid, pUnkOuter);
|
||||||
HRESULT ret = dd_CreateEx(lpGuid, lplpDD, iid, pUnkOuter);
|
HRESULT ret = dd_CreateEx(lpGuid, lplpDD, &IID_IDirectDraw7, pUnkOuter);
|
||||||
TRACE("<- %s\n", __FUNCTION__);
|
TRACE("<- %s\n", __FUNCTION__);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -654,7 +654,7 @@ HRESULT WINAPI fake_CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD
|
|||||||
IsEqualGUID(&IID_IDirectDraw4, riid) ||
|
IsEqualGUID(&IID_IDirectDraw4, riid) ||
|
||||||
IsEqualGUID(&IID_IDirectDraw7, riid))
|
IsEqualGUID(&IID_IDirectDraw7, riid))
|
||||||
{
|
{
|
||||||
return dd_CreateEx(NULL, ppv, NULL, NULL);
|
return dd_CreateEx(NULL, ppv, riid, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user