Module: wine Branch: master Commit: 38ba9bacd0adff172c1dd7a63647d32d40bcd1fe URL: http://source.winehq.org/git/wine.git/?a=commit;h=38ba9bacd0adff172c1dd7a636...
Author: Christian Costa titan.costa@gmail.com Date: Thu May 31 18:47:58 2012 +0200
d3drm: Implement IDirect3DRMMeshImpl_SetGroupMaterial and forward material from mesh builder to created mesh.
---
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 8d35802..69aff86 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]);