1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-14 22:03:27 +01:00

#121 return empty device identifier

This commit is contained in:
FunkyFr3sh 2021-09-02 22:22:48 +02:00
parent daeac4be45
commit 3f9ac549bc
6 changed files with 34 additions and 10 deletions

View File

@ -14,6 +14,7 @@ typedef struct IDirectDrawImpl
struct IDirectDrawImplVtbl* lpVtbl;
ULONG ref;
GUID guid;
} IDirectDrawImpl;

View File

@ -20,6 +20,7 @@ HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq);
HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree);
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);
#define FIX_CHILDS_DISABLED 0

View File

@ -26,6 +26,7 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
TRACE(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", ((GUID*)riid)->Data1, dd);
memcpy(&dd->guid, riid, sizeof(dd->guid));
dd->lpVtbl = &g_dd_vtblx;
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);
memcpy(&dd->guid, riid, sizeof(dd->guid));
dd->lpVtbl = &g_dd_vtbl1;
IDirectDraw_AddRef(dd);
@ -138,9 +140,9 @@ HRESULT __stdcall IDirectDraw__QueryInterface(IDirectDrawImpl* This, REFIID riid
g_ddraw->DirectDrawCreate(NULL, &g_ddraw->real_dd, NULL);
if (g_ddraw->real_dd)
return IDirectDraw_QueryInterface(g_ddraw->real_dd, riid, ppvObj);
ret = E_NOINTERFACE;
ret = IDirectDraw_QueryInterface(g_ddraw->real_dd, riid, ppvObj);
else
ret = E_NOINTERFACE;
}
}
@ -477,8 +479,8 @@ HRESULT __stdcall IDirectDraw__TestCooperativeLevel(IDirectDrawImpl* This)
HRESULT __stdcall IDirectDraw__GetDeviceIdentifier(IDirectDrawImpl* This, LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags)
{
TRACE("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This);
HRESULT ret = DDERR_INVALIDPARAMS;
TRACE("NOT_IMPLEMENTED -> %s(This=%p, pDDDI=%p, dwFlags=%08X)\n", __FUNCTION__, This, pDDDI, dwFlags);
HRESULT ret = dd_GetDeviceIdentifier((LPDDDEVICEIDENTIFIER)pDDDI, dwFlags, &This->guid);
TRACE("NOT_IMPLEMENTED <- %s\n", __FUNCTION__);
return ret;
}

View File

@ -1016,7 +1016,26 @@ HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpd
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;
}
@ -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));
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);
@ -1046,7 +1066,7 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute
}
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;
}

View File

@ -136,7 +136,7 @@ HRESULT WINAPI DirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR* l
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);
HRESULT ret = dd_CreateEx(lpGuid, lplpDD, iid, pUnkOuter);
HRESULT ret = dd_CreateEx(lpGuid, lplpDD, &IID_IDirectDraw7, pUnkOuter);
TRACE("<- %s\n", __FUNCTION__);
return ret;
}

View File

@ -654,7 +654,7 @@ HRESULT WINAPI fake_CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD
IsEqualGUID(&IID_IDirectDraw4, riid) ||
IsEqualGUID(&IID_IDirectDraw7, riid))
{
return dd_CreateEx(NULL, ppv, NULL, NULL);
return dd_CreateEx(NULL, ppv, riid, NULL);
}
else
{