diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h index b5d60e518f8..4aea42ce0a3 100644 --- a/dlls/d3drm/d3drm_private.h +++ b/dlls/d3drm/d3drm_private.h @@ -165,6 +165,7 @@ struct d3drm_mesh_builder DWORD nb_materials; struct mesh_material *materials; DWORD *material_indices; + D3DRMRENDERQUALITY quality; }; struct mesh_group diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c index 4a08b32d72d..1f783baf1fe 100644 --- a/dlls/d3drm/meshbuilder.c +++ b/dlls/d3drm/meshbuilder.c @@ -670,9 +670,10 @@ static HRESULT WINAPI d3drm_mesh_builder2_SetTextureTopology(IDirect3DRMMeshBuil static HRESULT WINAPI d3drm_mesh_builder2_SetQuality(IDirect3DRMMeshBuilder2 *iface, D3DRMRENDERQUALITY quality) { - FIXME("iface %p, quality %#lx stub!\n", iface, quality); + struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder2(iface); + TRACE("iface %p, quality %#lx\n", iface, quality); - return E_NOTIMPL; + return IDirect3DRMMeshBuilder3_SetQuality(&mesh_builder->IDirect3DRMMeshBuilder3_iface, quality); } static HRESULT WINAPI d3drm_mesh_builder2_SetPerspective(IDirect3DRMMeshBuilder2 *iface, BOOL enable) @@ -815,9 +816,11 @@ static HRESULT WINAPI d3drm_mesh_builder2_CreateFace(IDirect3DRMMeshBuilder2 *if static D3DRMRENDERQUALITY WINAPI d3drm_mesh_builder2_GetQuality(IDirect3DRMMeshBuilder2 *iface) { - FIXME("iface %p stub!\n", iface); + struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder2(iface); - return 0; + TRACE("iface %p\n", iface); + + return mesh_builder->quality; } static BOOL WINAPI d3drm_mesh_builder2_GetPerspective(IDirect3DRMMeshBuilder2 *iface) @@ -1754,9 +1757,13 @@ static HRESULT WINAPI d3drm_mesh_builder3_SetTextureTopology(IDirect3DRMMeshBuil static HRESULT WINAPI d3drm_mesh_builder3_SetQuality(IDirect3DRMMeshBuilder3 *iface, D3DRMRENDERQUALITY quality) { - FIXME("iface %p, quality %#lx stub!\n", iface, quality); + struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder3(iface); - return E_NOTIMPL; + TRACE("iface %p, quality %#lx\n", iface, quality); + + mesh_builder->quality = quality; + + return S_OK; } static HRESULT WINAPI d3drm_mesh_builder3_SetPerspective(IDirect3DRMMeshBuilder3 *iface, @@ -1904,9 +1911,11 @@ static HRESULT WINAPI d3drm_mesh_builder3_CreateFace(IDirect3DRMMeshBuilder3 *if static D3DRMRENDERQUALITY WINAPI d3drm_mesh_builder3_GetQuality(IDirect3DRMMeshBuilder3 *iface) { - FIXME("iface %p stub!\n", iface); + struct d3drm_mesh_builder *mesh_builder = impl_from_IDirect3DRMMeshBuilder3(iface); - return 0; + TRACE("iface %p\n", iface); + + return mesh_builder->quality; } static BOOL WINAPI d3drm_mesh_builder3_GetPerspective(IDirect3DRMMeshBuilder3 *iface) @@ -2345,6 +2354,7 @@ HRESULT d3drm_mesh_builder_create(struct d3drm_mesh_builder **mesh_builder, IDir object->IDirect3DRMMeshBuilder3_iface.lpVtbl = &d3drm_mesh_builder3_vtbl; object->ref = 1; object->d3drm = d3drm; + object->quality = D3DRMRENDER_GOURAUD; IDirect3DRM_AddRef(object->d3drm); d3drm_object_init(&object->obj, classname); diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c index 7b591958373..209ff7ec311 100644 --- a/dlls/d3drm/tests/d3drm.c +++ b/dlls/d3drm/tests/d3drm.c @@ -863,6 +863,7 @@ static void test_Face(void) D3DCOLOR color; DWORD count; int icount; + D3DRMRENDERQUALITY quality; hr = Direct3DRMCreate(&d3drm); ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface, hr %#lx\n", hr); @@ -934,6 +935,18 @@ static void test_Face(void) icount = IDirect3DRMFace_GetVertexCount(face1); ok(!icount, "wrong VertexCount: %i\n", icount); + quality = IDirect3DRMMeshBuilder3_GetQuality(MeshBuilder2); + ok(quality == D3DRMRENDER_GOURAUD, "Unexpected %lx.\n", quality); + + hr = IDirect3DRMMeshBuilder3_SetQuality(MeshBuilder2, D3DRMRENDER_PHONG); + ok(hr == S_OK, "got %lx.\n", hr); + + quality = IDirect3DRMMeshBuilder3_GetQuality(MeshBuilder2); + ok(quality == D3DRMRENDER_PHONG, "got %lx.\n", quality); + + hr = IDirect3DRMMeshBuilder3_SetQuality(MeshBuilder2, D3DRMRENDER_GOURAUD); + ok(hr == S_OK, "got %lx.\n", hr); + IDirect3DRMFace_Release(face1); IDirect3DRMMeshBuilder2_Release(MeshBuilder2);