[PATCH 2/2] d3drm: Implement IDirect3DRMMeshImpl_SetGroupMaterial and forward material from mesh builder to created mesh.

Christian Costa titan.costa at gmail.com
Thu May 31 11:47:58 CDT 2012


---
 dlls/d3drm/meshbuilder.c |   19 ++++++++++++++++---
 dlls/d3drm/tests/d3drm.c |    2 +-
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index 146450c..3a6890c 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -2011,6 +2011,8 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_CreateMesh(IDirect3DRMMeshBuil
                 hr = E_OUTOFMEMORY;
             }
         }
+        if (SUCCEEDED(hr))
+            hr = IDirect3DRMMesh_SetGroupMaterial(*mesh, 0, (LPDIRECT3DRMMATERIAL)This->material);
         if (FAILED(hr))
             IDirect3DRMMesh_Release(*mesh);
     }
@@ -2652,13 +2654,24 @@ static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupQuality(IDirect3DRMMesh* iface
 }
 
 static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupMaterial(IDirect3DRMMesh* iface,
-                                                           D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value)
+                                                           D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL material)
 {
     IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
 
-    FIXME("(%p)->(%u,%p): stub\n", This, id, value);
+    TRACE("(%p)->(%u,%p)\n", This, id, material);
 
-    return E_NOTIMPL;
+    if (id >= This->nb_groups)
+        return D3DRMERR_BADVALUE;
+
+    if (This->groups[id].material)
+        IDirect3DRMMaterial2_Release(This->groups[id].material);
+
+    This->groups[id].material = (LPDIRECT3DRMMATERIAL2)material;
+
+    if (material)
+        IDirect3DRMMaterial2_AddRef(This->groups[id].material);
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupTexture(IDirect3DRMMesh* iface,
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 1e8f61a..94ac0e9 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -372,7 +372,7 @@ static void test_MeshBuilder(void)
         ok(texture == NULL, "No texture should be present\n");
         hr = IDirect3DRMMesh_GetGroupMaterial(mesh, 0, &material);
         ok(hr == D3DRM_OK, "GetCroupMaterial failed returning hr = %x\n", hr);
-        todo_wine ok(material != NULL, "No material present\n");
+        ok(material != NULL, "No material present\n");
         if ((hr == D3DRM_OK) && material)
         {
             hr = IDirect3DRMMaterial_GetEmissive(material, &values[0], &values[1], &values[2]);




More information about the wine-patches mailing list