[PATCH 1/3] d2d1: Implement D2D1SinCos

Giovanni Mascellani wine at mascellani.eu
Sun Oct 25 10:49:01 CDT 2020


Signed-off-by: Giovanni Mascellani <wine at mascellani.eu>
---
 dlls/d2d1/d2d1.spec    |  2 +-
 dlls/d2d1/factory.c    |  6 ++++++
 dlls/d2d1/tests/d2d1.c | 29 +++++++++++++++++++++++++++++
 include/d2d1_1.idl     |  1 +
 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/dlls/d2d1/d2d1.spec b/dlls/d2d1/d2d1.spec
index 0ebcd0af553..410abfa5de6 100644
--- a/dlls/d2d1/d2d1.spec
+++ b/dlls/d2d1/d2d1.spec
@@ -6,6 +6,6 @@
 @ stub D2D1ConvertColorSpace
 @ stdcall D2D1CreateDevice(ptr ptr ptr)
 @ stub D2D1CreateDeviceContext
-@ stub D2D1SinCos
+@ stdcall D2D1SinCos(float ptr ptr)
 @ stub D2D1Tan
 @ stub D2D1Vec3Length
diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c
index 2f50836bbcd..2cce8afc4a4 100644
--- a/dlls/d2d1/factory.c
+++ b/dlls/d2d1/factory.c
@@ -713,6 +713,12 @@ HRESULT WINAPI D2D1CreateDevice(IDXGIDevice *dxgi_device,
     return hr;
 }
 
+void WINAPI D2D1SinCos(float angle, float *s, float *c)
+{
+    *s = sinf(angle);
+    *c = cosf(angle);
+}
+
 static BOOL get_config_key_dword(HKEY default_key, HKEY application_key, const char *name, DWORD *value)
 {
     DWORD type, data, size;
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 166cdfccda6..9ec86eac3a5 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -9425,6 +9425,34 @@ static void test_wic_bitmap_format(void)
     DestroyWindow(window);
 }
 
+static void test_math(void)
+{
+    float s, c;
+    int i;
+
+    static const struct
+    {
+        float x;
+        float s;
+        float c;
+    }
+    sc_data[] =
+    {
+        {0.0, 0.0, 1.0},
+        {1.0, 8.41470957e-001, 5.40302277e-001},
+        {2.0, 9.09297407e-001, -4.16146845e-001},
+        {M_PI / 2.0, 1.0, -4.37113883e-008},
+        {M_PI, -8.74227766e-008, -1.0},
+    };
+
+    for (i = 0; i < ARRAY_SIZE(sc_data); ++i)
+    {
+        D2D1SinCos(sc_data[i].x, &s, &c);
+        ok(compare_float(s, sc_data[i].s, 0), "Wrong sin(%.8e) (%.8e instead of %.8e).\n", sc_data[i].x, s, sc_data[i].s);
+        ok(compare_float(c, sc_data[i].c, 0), "Wrong cos(%.8e) (%.8e instead of %.8e).\n", sc_data[i].x, c, sc_data[i].c);
+    }
+}
+
 START_TEST(d2d1)
 {
     unsigned int argc, i;
@@ -9477,6 +9505,7 @@ START_TEST(d2d1)
     queue_test(test_max_bitmap_size);
     queue_test(test_dpi);
     queue_test(test_wic_bitmap_format);
+    queue_test(test_math);
 
     run_queued_tests();
 }
diff --git a/include/d2d1_1.idl b/include/d2d1_1.idl
index ddb7669c24b..6fa893edbda 100644
--- a/include/d2d1_1.idl
+++ b/include/d2d1_1.idl
@@ -794,3 +794,4 @@ interface ID2D1Factory1 : ID2D1Factory
 
 [local] HRESULT __stdcall D2D1CreateDevice(IDXGIDevice *dxgi_device,
         const D2D1_CREATION_PROPERTIES *creation_properties, ID2D1Device **device);
+[local] void __stdcall D2D1SinCos(float angle, float *s, float *c);
-- 
2.28.0




More information about the wine-devel mailing list