Christian Costa : d3drm: Pass the first requested interface when notifying the application.
Alexandre Julliard
julliard at winehq.org
Mon Apr 16 13:35:47 CDT 2012
Module: wine
Branch: master
Commit: efba6cd03b4142333813c1f7e609c3df8d49959c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=efba6cd03b4142333813c1f7e609c3df8d49959c
Author: Christian Costa <titan.costa at 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");
}
}
More information about the wine-cvs
mailing list