[PATCH 3/4] d3drm: Implement IDirect3DRMMeshImpl_GetGroupMaterial.
Christian Costa
titan.costa at gmail.com
Sun May 27 10:44:51 CDT 2012
---
dlls/d3drm/meshbuilder.c | 19 ++++++++++++++++---
dlls/d3drm/tests/d3drm.c | 6 +++---
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index 2074702..4401a56 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -43,6 +43,7 @@ typedef struct {
unsigned vertex_per_face;
DWORD face_data_size;
unsigned* face_data;
+ IDirect3DRMMaterial2* material;
IDirect3DRMTexture3* texture;
} mesh_group;
@@ -2452,6 +2453,7 @@ static HRESULT WINAPI IDirect3DRMMeshImpl_AddGroup(IDirect3DRMMesh* iface,
memcpy(group->face_data, face_data, group->face_data_size * sizeof(unsigned));
+ group->material = NULL;
group->texture = NULL;
*return_id = This->nb_groups++;
@@ -2623,13 +2625,24 @@ static D3DRMRENDERQUALITY WINAPI IDirect3DRMMeshImpl_GetGroupQuality(IDirect3DRM
}
static HRESULT WINAPI IDirect3DRMMeshImpl_GetGroupMaterial(IDirect3DRMMesh* iface,
- D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr)
+ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *material)
{
IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
- FIXME("(%p)->(%u,%p): stub\n", This, id, returnPtr);
+ TRACE("(%p)->(%u,%p)\n", This, id, material);
- return E_NOTIMPL;
+ if (id >= This->nb_groups)
+ return D3DRMERR_BADVALUE;
+
+ if (!material)
+ return E_POINTER;
+
+ if (This->groups[id].material)
+ IDirect3DRMTexture_QueryInterface(This->groups[id].material, &IID_IDirect3DRMMaterial, (void**)material);
+ else
+ *material = NULL;
+
+ return D3DRM_OK;
}
static HRESULT WINAPI IDirect3DRMMeshImpl_GetGroupTexture(IDirect3DRMMesh* iface,
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 6603772..2f03950 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -353,7 +353,7 @@ static void test_MeshBuilder(void)
DWORD nb_groups;
unsigned nb_vertices, nb_faces, nb_face_vertices;
DWORD data_size;
- LPDIRECT3DRMMATERIAL material;
+ LPDIRECT3DRMMATERIAL material = (LPDIRECT3DRMMATERIAL)0xdeadbeef;
LPDIRECT3DRMTEXTURE texture = (LPDIRECT3DRMTEXTURE)0xdeadbeef;
D3DVALUE values[3];
@@ -371,8 +371,8 @@ static void test_MeshBuilder(void)
ok(hr == D3DRM_OK, "GetCroupTexture failed returning hr = %x\n", hr);
ok(texture == NULL, "No texture should be present\n");
hr = IDirect3DRMMesh_GetGroupMaterial(mesh, 0, &material);
- todo_wine ok(hr == D3DRM_OK, "GetCroupMaterial failed returning hr = %x\n", hr);
- todo_wine ok(material != NULL, "No material should be present\n");
+ ok(hr == D3DRM_OK, "GetCroupMaterial failed returning hr = %x\n", hr);
+ todo_wine 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