Nikolay Sivov : d3drm: Store face color.

Alexandre Julliard julliard at winehq.org
Tue Jul 4 15:25:57 CDT 2017


Module: wine
Branch: master
Commit: 88220785b3daf1cfda1bd7e5cb3eb58e84e7da23
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=88220785b3daf1cfda1bd7e5cb3eb58e84e7da23

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Jul  4 10:43:12 2017 +0300

d3drm: Store face color.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3drm/d3drm_private.h |  1 +
 dlls/d3drm/face.c          | 72 ++++++++++++++++++++++++++++------------------
 dlls/d3drm/tests/d3drm.c   | 12 ++++++++
 3 files changed, 57 insertions(+), 28 deletions(-)

diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index e3ee75a..1ce29e5 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -120,6 +120,7 @@ struct d3drm_face
     IDirect3DRMFace IDirect3DRMFace_iface;
     IDirect3DRMFace2 IDirect3DRMFace2_iface;
     LONG ref;
+    D3DCOLOR color;
 };
 
 struct d3drm_mesh_builder
diff --git a/dlls/d3drm/face.c b/dlls/d3drm/face.c
index 49284f0..95e6e58 100644
--- a/dlls/d3drm/face.c
+++ b/dlls/d3drm/face.c
@@ -214,19 +214,45 @@ static HRESULT WINAPI d3drm_face1_AddVertexAndNormalIndexed(IDirect3DRMFace *ifa
     return E_NOTIMPL;
 }
 
+static HRESULT WINAPI d3drm_face2_SetColorRGB(IDirect3DRMFace2 *iface, D3DVALUE red, D3DVALUE green, D3DVALUE blue)
+{
+    struct d3drm_face *face = impl_from_IDirect3DRMFace2(iface);
+
+    TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue);
+
+    d3drm_set_color(&face->color, red, green, blue, 1.0f);
+
+    return D3DRM_OK;
+}
+
 static HRESULT WINAPI d3drm_face1_SetColorRGB(IDirect3DRMFace *iface,
-        D3DVALUE r, D3DVALUE g, D3DVALUE b)
+        D3DVALUE red, D3DVALUE green, D3DVALUE blue)
 {
-    FIXME("iface %p, r %.8e, g %.8e, b %.8e stub!\n", iface, r, g, b);
+    struct d3drm_face *face = impl_from_IDirect3DRMFace(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue);
+
+    return d3drm_face2_SetColorRGB(&face->IDirect3DRMFace2_iface, red, green, blue);
+}
+
+static HRESULT WINAPI d3drm_face2_SetColor(IDirect3DRMFace2 *iface, D3DCOLOR color)
+{
+    struct d3drm_face *face = impl_from_IDirect3DRMFace2(iface);
+
+    TRACE("iface %p, color 0x%08x.\n", iface, color);
+
+    face->color = color;
+
+    return D3DRM_OK;
 }
 
 static HRESULT WINAPI d3drm_face1_SetColor(IDirect3DRMFace *iface, D3DCOLOR color)
 {
-    FIXME("iface %p, color 0x%08x stub!\n", iface, color);
+    struct d3drm_face *face = impl_from_IDirect3DRMFace(iface);
 
-    return E_NOTIMPL;
+    TRACE("iface %p, color 0x%08x.\n", iface, color);
+
+    return d3drm_face2_SetColor(&face->IDirect3DRMFace2_iface, color);
 }
 
 static HRESULT WINAPI d3drm_face1_SetTexture(IDirect3DRMFace *iface, IDirect3DRMTexture *texture)
@@ -332,11 +358,22 @@ static int WINAPI d3drm_face1_GetTextureCoordinateIndex(IDirect3DRMFace *iface,
     return 0;
 }
 
+static D3DCOLOR WINAPI d3drm_face2_GetColor(IDirect3DRMFace2 *iface)
+{
+    struct d3drm_face *face = impl_from_IDirect3DRMFace2(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return face->color;
+}
+
 static D3DCOLOR WINAPI d3drm_face1_GetColor(IDirect3DRMFace *iface)
 {
-    FIXME("iface %p stub!\n", iface);
+    struct d3drm_face *face = impl_from_IDirect3DRMFace(iface);
 
-    return 0;
+    TRACE("iface %p.\n", iface);
+
+    return d3drm_face2_GetColor(&face->IDirect3DRMFace2_iface);
 }
 
 static const struct IDirect3DRMFaceVtbl d3drm_face1_vtbl =
@@ -446,20 +483,6 @@ static HRESULT WINAPI d3drm_face2_AddVertexAndNormalIndexed(IDirect3DRMFace2 *if
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI d3drm_face2_SetColorRGB(IDirect3DRMFace2 *iface, D3DVALUE r, D3DVALUE g, D3DVALUE b)
-{
-    FIXME("iface %p, r %.8e, g %.8e, b %.8e stub!\n", iface, r, g, b);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI d3drm_face2_SetColor(IDirect3DRMFace2 *iface, D3DCOLOR color)
-{
-    FIXME("iface %p, color 0x%08x stub!\n", iface, color);
-
-    return E_NOTIMPL;
-}
-
 static HRESULT WINAPI d3drm_face2_SetTexture(IDirect3DRMFace2 *iface, IDirect3DRMTexture3 *texture)
 {
     FIXME("iface %p, texture %p stub!\n", iface, texture);
@@ -563,13 +586,6 @@ static int WINAPI d3drm_face2_GetTextureCoordinateIndex(IDirect3DRMFace2 *iface,
     return 0;
 }
 
-static D3DCOLOR WINAPI d3drm_face2_GetColor(IDirect3DRMFace2 *iface)
-{
-    FIXME("iface %p stub!\n", iface);
-
-    return 0;
-}
-
 static const struct IDirect3DRMFace2Vtbl d3drm_face2_vtbl =
 {
     d3drm_face2_QueryInterface,
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 5cccb43..5fea2f0 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -781,6 +781,7 @@ static void test_Face(void)
     IDirect3DRMFaceArray *array1;
     D3DRMLOADMEMORY info;
     D3DVECTOR v1[4], n1[4], v2[4], n2[4];
+    D3DCOLOR color;
     DWORD count;
     int icount;
 
@@ -963,6 +964,17 @@ static void test_Face(void)
         IDirect3DRMFaceArray_Release(array1);
     }
 
+    /* Setting face color. */
+    hr = IDirect3DRMFace2_SetColor(face2, 0x1f180587);
+    ok(SUCCEEDED(hr), "Failed to set face color, hr %#x.\n", hr);
+    color = IDirect3DRMFace2_GetColor(face2);
+    ok(color == 0x1f180587, "Unexpected color %8x.\n", color);
+
+    hr = IDirect3DRMFace2_SetColorRGB(face2, 0.5f, 0.5f, 0.5f);
+    ok(SUCCEEDED(hr), "Failed to set color, hr %#x.\n", hr);
+    color = IDirect3DRMFace2_GetColor(face2);
+    ok(color == 0xff7f7f7f, "Unexpected color %8x.\n", color);
+
     IDirect3DRMFace2_Release(face2);
     IDirect3DRMMeshBuilder3_Release(MeshBuilder3);
     IDirect3DRM3_Release(d3drm3);




More information about the wine-cvs mailing list