Module: wine Branch: master Commit: efba6cd03b4142333813c1f7e609c3df8d49959c URL: http://source.winehq.org/git/wine.git/?a=commit;h=efba6cd03b4142333813c1f7e6...
Author: Christian Costa titan.costa@gmail.com Date: Thu Apr 12 08:36:31 2012 +0200
d3drm: Pass the first requested interface when notifying the application.
---
dlls/d3drm/d3drm.c | 39 +++++++++++++++++++++++++++------------ 1 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c index 3db6b9e..ba29e6e 100644 --- a/dlls/d3drm/d3drm.c +++ b/dlls/d3drm/d3drm.c @@ -1353,7 +1353,6 @@ static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSourc { BOOL requested = FALSE; HRESULT hr; - LPDIRECT3DRMMESHBUILDER3 pMeshBuilder;
TRACE("Found TID_D3DRMMesh\n");
@@ -1361,26 +1360,31 @@ static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSourc if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder) || IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder2) || IsEqualGUID(GUIDs[i], &IID_IDirect3DRMMeshBuilder3)) + { requested = TRUE; + break; + }
if (requested) { + LPDIRECT3DRMMESHBUILDER3 meshbuilder; + FIXME("Load mesh data and notify application\n");
- hr = IDirect3DRM3_CreateMeshBuilder(iface, &pMeshBuilder); + hr = IDirect3DRM3_CreateMeshBuilder(iface, &meshbuilder); if (SUCCEEDED(hr)) { - LPDIRECT3DRMMESHBUILDER3 pMeshBuilder3; + LPDIRECT3DRMOBJECT object = NULL;
- hr = IDirect3DRMMeshBuilder3_QueryInterface(pMeshBuilder, &IID_IDirect3DRMMeshBuilder3, (void**)&pMeshBuilder3); + hr = IDirect3DRMMeshBuilder3_QueryInterface(meshbuilder, GUIDs[i], (void**)&object); if (SUCCEEDED(hr)) { - hr = load_mesh_data(pMeshBuilder3, pData); - IDirect3DRMMeshBuilder3_Release(pMeshBuilder3); + hr = load_mesh_data(meshbuilder, pData); + if (SUCCEEDED(hr)) + LoadProc(object, GUIDs[i], ArgLP); + IDirect3DRMObject_Release(object); } - if (SUCCEEDED(hr)) - LoadProc((LPDIRECT3DRMOBJECT)pMeshBuilder3, &IID_IDirect3DRMMeshBuilder, ArgLP); - IDirect3DRMMeshBuilder_Release(pMeshBuilder3); + IDirect3DRMMeshBuilder3_Release(meshbuilder); }
if (FAILED(hr)) @@ -1391,7 +1395,6 @@ static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSourc { BOOL requested = FALSE; HRESULT hr; - LPDIRECT3DRMFRAME3 frame;
TRACE("Found TID_D3DRMFrame\n");
@@ -1399,21 +1402,33 @@ static HRESULT WINAPI IDirect3DRM3Impl_Load(IDirect3DRM3* iface, LPVOID ObjSourc if (IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame) || IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame2) || IsEqualGUID(GUIDs[i], &IID_IDirect3DRMFrame3)) + { requested = TRUE; + break; + }
if (requested) { + LPDIRECT3DRMFRAME3 frame; + FIXME("Fake frame data and notify application\n");
hr = IDirect3DRM3_CreateFrame(iface, NULL, &frame); if (SUCCEEDED(hr)) { - LoadProc((LPDIRECT3DRMOBJECT)frame, &IID_IDirect3DRMFrame, ArgLP); + LPDIRECT3DRMOBJECT object; + + hr = IDirect3DRMFrame3_QueryInterface(frame, GUIDs[i], (void**)&object); + if (SUCCEEDED(hr)) + { + LoadProc(object, GUIDs[i], ArgLP); + IDirect3DRMObject_Release(object); + } IDirect3DRMFrame3_Release(frame); }
if (FAILED(hr)) - ERR("Cannot process mesh\n"); + ERR("Cannot process frame\n");
} }