[PATCH 3/3] d2d1: Implement D2D1Vec3Length
Giovanni Mascellani
wine at mascellani.eu
Sun Oct 25 10:49:03 CDT 2020
Signed-off-by: Giovanni Mascellani <wine at mascellani.eu>
---
dlls/d2d1/d2d1.spec | 2 +-
dlls/d2d1/factory.c | 5 +++++
dlls/d2d1/tests/d2d1.c | 26 +++++++++++++++++++++++++-
include/d2d1_1.idl | 1 +
4 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/dlls/d2d1/d2d1.spec b/dlls/d2d1/d2d1.spec
index 7b624c7096e..0ae894109fb 100644
--- a/dlls/d2d1/d2d1.spec
+++ b/dlls/d2d1/d2d1.spec
@@ -8,4 +8,4 @@
@ stub D2D1CreateDeviceContext
@ stdcall D2D1SinCos(float ptr ptr)
@ stdcall D2D1Tan(float)
-@ stub D2D1Vec3Length
+@ stdcall D2D1Vec3Length(float float float)
diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c
index d21520bb8c3..e1a6191dfa9 100644
--- a/dlls/d2d1/factory.c
+++ b/dlls/d2d1/factory.c
@@ -724,6 +724,11 @@ float WINAPI D2D1Tan(float angle)
return tanf(angle);
}
+float WINAPI D2D1Vec3Length(float x, float y, float z)
+{
+ return sqrtf(x * x + y * y + z * z);
+}
+
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 2bad058feb1..7957866a040 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -9427,7 +9427,7 @@ static void test_wic_bitmap_format(void)
static void test_math(void)
{
- float s, c, t;
+ float s, c, t, l;
int i;
static const struct
@@ -9459,6 +9459,23 @@ static void test_math(void)
{M_PI, 8.74227766e-008},
};
+ static const struct {
+ float x;
+ float y;
+ float z;
+ float l;
+ }
+ l_data[] =
+ {
+ {0.0, 0.0, 0.0, 0.0},
+ {1.0, 0.0, 0.0, 1.0},
+ {0.0, 1.0, 0.0, 1.0},
+ {0.0, 0.0, 1.0, 1.0},
+ {1.0, 1.0, 1.0, 1.73205078},
+ {1.0, 2.0, 2.0, 3.0},
+ {1.0, 2.0, 3.0, 3.74165750},
+ };
+
for (i = 0; i < ARRAY_SIZE(sc_data); ++i)
{
D2D1SinCos(sc_data[i].x, &s, &c);
@@ -9471,6 +9488,13 @@ static void test_math(void)
t = D2D1Tan(t_data[i].x);
ok(compare_float(t, t_data[i].t, 1), "Wrong tan(%.8e) (%.8e instead of %.8e).\n", t_data[i].x, t, t_data[i].t);
}
+
+ for (i = 0; i < ARRAY_SIZE(l_data); ++i)
+ {
+ l = D2D1Vec3Length(l_data[i].x, l_data[i].y, l_data[i].z);
+ ok(compare_float(l, l_data[i].l, 0), "Wrong len(%.8e, %.8e, %.8e) (%.8e instead of %.8e).\n",
+ l_data[i].x, l_data[i].y, l_data[i].z, l, l_data[i].l);
+ }
}
START_TEST(d2d1)
diff --git a/include/d2d1_1.idl b/include/d2d1_1.idl
index bd111bd6628..6eab3959cd1 100644
--- a/include/d2d1_1.idl
+++ b/include/d2d1_1.idl
@@ -796,3 +796,4 @@ interface ID2D1Factory1 : ID2D1Factory
const D2D1_CREATION_PROPERTIES *creation_properties, ID2D1Device **device);
[local] void __stdcall D2D1SinCos(float angle, float *s, float *c);
[local] float __stdcall D2D1Tan(float angle);
+[local] float __stdcall D2D1Vec3Length(float x, float y, float z);
--
2.28.0
More information about the wine-devel
mailing list