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