[PATCH 0/1] MR10069: ddraw: Pass the active device to material_activate.
Fixes an assertion in FS2000 in d3d_material3_GetHandle as provided device is not a wined3d device, but probably a wrapper around it. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10069
From: Rémi Bernon <rbernon@codeweavers.com> Fixes an assertion in FS2000 in d3d_material3_GetHandle as provided device is not a wined3d device, but probably a wrapper around it. --- dlls/ddraw/ddraw_private.h | 4 +--- dlls/ddraw/device.c | 2 +- dlls/ddraw/material.c | 6 ++---- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index bd1df8e1b82..f2c99a30d57 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -488,14 +488,12 @@ struct d3d_material /* IDirect3DMaterial2 fields */ struct ddraw *ddraw; - struct d3d_device *active_device; - D3DMATERIAL mat; DWORD Handle; }; /* Helper functions */ -void material_activate(struct d3d_material *material); +void material_activate(struct d3d_device *device, struct d3d_material *material); struct d3d_material *d3d_material_create(struct ddraw *ddraw); enum ddraw_viewport_version diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 9882c2613b6..44f9973e938 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -2943,7 +2943,7 @@ static HRESULT WINAPI d3d_device3_SetLightState(IDirect3DDevice3 *iface, return DDERR_INVALIDPARAMS; } - material_activate(m); + material_activate(device, m); } device->material = value; diff --git a/dlls/ddraw/material.c b/dlls/ddraw/material.c index efc739c8dbb..90d514844c0 100644 --- a/dlls/ddraw/material.c +++ b/dlls/ddraw/material.c @@ -292,12 +292,10 @@ static HRESULT WINAPI d3d_material3_GetHandle(IDirect3DMaterial3 *iface, IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle) { struct d3d_material *material = impl_from_IDirect3DMaterial3(iface); - struct d3d_device *device_impl = unsafe_impl_from_IDirect3DDevice3(device); TRACE("iface %p, device %p, handle %p.\n", iface, device, handle); wined3d_mutex_lock(); - material->active_device = device_impl; if (!material->Handle) { DWORD h = ddraw_allocate_handle(NULL, material, DDRAW_HANDLE_MATERIAL); @@ -441,7 +439,7 @@ static HRESULT WINAPI d3d_material1_GetMaterial(IDirect3DMaterial *iface, D3DMAT * This: Pointer to the material implementation to activate * *****************************************************************************/ -void material_activate(struct d3d_material *material) +void material_activate(struct d3d_device *device, struct d3d_material *material) { D3DMATERIAL7 d3d7mat; @@ -453,7 +451,7 @@ void material_activate(struct d3d_material *material) d3d7mat.emissive = material->mat.emissive; d3d7mat.power = material->mat.power; - IDirect3DDevice7_SetMaterial(&material->active_device->IDirect3DDevice7_iface, &d3d7mat); + IDirect3DDevice7_SetMaterial(&device->IDirect3DDevice7_iface, &d3d7mat); } static const struct IDirect3DMaterial3Vtbl d3d_material3_vtbl = -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10069
This merge request was approved by Elizabeth Figura. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10069
participants (3)
-
Elizabeth Figura (@zfigura) -
Rémi Bernon -
Rémi Bernon (@rbernon)