[Bug 30786] King's Bounty: Armored Princess and Crossworlds need d3dx9_36.dll.D3DXQuaternionSquadSetup
wine-bugs at winehq.org
wine-bugs at winehq.org
Wed Jun 6 23:26:26 CDT 2012
http://bugs.winehq.org/show_bug.cgi?id=30786
--- Comment #4 from nozomi kodama <nozomi.kodama at yahoo.com> 2012-06-06 23:26:26 CDT ---
Comment on attachment 40421
--> http://bugs.winehq.org/attachment.cgi?id=40421
Implemention od D3DXQuaternionSquadSetup
>From 667f9f7e55d1e1505f6af2d557f891b6b6575a31 Mon Sep 17 00:00:00 2001
>From: Nozomi Kodama <Nozomi.Kodama at yahoo.com>
>Date: Thu, 7 Jun 2012 13:16:16 +0800
>Subject: Implement D3DXQuaternionSquadSetup
>
>---
> dlls/d3dx9_36/d3dx9_36.spec | 2 +-
> dlls/d3dx9_36/math.c | 76 +++++++++++++++++++++++++++++++++++++++++++
> include/d3dx9math.h | 1 +
> 3 files changed, 78 insertions(+), 1 deletions(-)
>
>diff --git a/dlls/d3dx9_36/d3dx9_36.spec b/dlls/d3dx9_36/d3dx9_36.spec
>index 8d7143e..2fbd403 100644
>--- a/dlls/d3dx9_36/d3dx9_36.spec
>+++ b/dlls/d3dx9_36/d3dx9_36.spec
>@@ -252,7 +252,7 @@
> @ stdcall D3DXQuaternionRotationYawPitchRoll(ptr float float float)
> @ stdcall D3DXQuaternionSlerp(ptr ptr ptr float)
> @ stdcall D3DXQuaternionSquad(ptr ptr ptr ptr ptr float)
>-@ stub D3DXQuaternionSquadSetup(ptr ptr ptr ptr ptr ptr ptr)
>+@ stdcall D3DXQuaternionSquadSetup(ptr ptr ptr ptr ptr ptr ptr)
> @ stdcall D3DXQuaternionToAxisAngle(ptr ptr ptr)
> @ stub D3DXRectPatchSize(ptr ptr ptr)
> @ stub D3DXSaveMeshHierarchyToFileA(ptr long ptr ptr ptr)
>diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c
>index 10a6cb9..38e44f5 100644
>--- a/dlls/d3dx9_36/math.c
>+++ b/dlls/d3dx9_36/math.c
>@@ -1375,6 +1375,82 @@ D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, CONST D3DXQUATE
> return pout;
> }
>
>+static D3DXQUATERNION sum(D3DXQUATERNION q1, D3DXQUATERNION q2)
>+{
>+ D3DXQUATERNION temp;
>+
>+ temp.x = q1.x + q2.x;
>+ temp.y = q1.y + q2.y;
>+ temp.z = q1.z + q2.z;
>+ temp.w = q1.w + q2.w;
>+
>+ return temp;
>+}
>+
>+static D3DXQUATERNION diff(D3DXQUATERNION q1, D3DXQUATERNION q2)
>+{
>+ D3DXQUATERNION temp;
>+
>+ temp.x = q1.x - q2.x;
>+ temp.y = q1.y - q2.y;
>+ temp.z = q1.z - q2.z;
>+ temp.w = q1.w - q2.w;
>+
>+ return temp;
>+}
>+
>+void WINAPI D3DXQuaternionSquadSetup(D3DXQUATERNION *paout, D3DXQUATERNION *pbout, D3DXQUATERNION *pcout, CONST D3DXQUATERNION *pq0, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3)
>+{
>+ D3DXQUATERNION pqt0, pqt1, pqt2, pqt3, q1, q2, temp, temp0, temp2, temp3, zero;
>+
>+ zero.x = 0.0f;
>+ zero.y = 0.0f;
>+ zero.z = 0.0f;
>+ zero.w = 0.0f;
>+
>+ pqt0 = *pq0;
>+ pqt1 = *pq1;
>+ pqt2 = *pq2;
>+ pqt3 = *pq3;
>+
>+ q1 = sum(pqt0, pqt1);
>+ q2 = diff(pqt0, pqt1);
>+ if( D3DXQuaternionLengthSq(&q1) < D3DXQuaternionLengthSq(&q2) ) temp0 = diff(zero, pqt0);
>+ else temp0 = pqt0;
>+
>+ q1 = sum(pqt1, pqt2);
>+ q2 = diff(pqt1, pqt2);
>+ if( D3DXQuaternionLengthSq(&q1) < D3DXQuaternionLengthSq(&q2) ) temp2 = diff(zero, pqt2);
>+ else temp2 = pqt2;
>+
>+ q1 = sum(pqt2, pqt3);
>+ q2 = diff(pqt2, pqt3);
>+ if( D3DXQuaternionLengthSq(&q1) < D3DXQuaternionLengthSq(&q2) ) temp3 = diff(zero, pqt3);
>+ else temp3 = pqt3;
>+
>+ D3DXQuaternionInverse(&temp, &pqt1);
>+ D3DXQuaternionMultiply(&q1, &temp, &temp0);
>+ D3DXQuaternionLn(&q1, &q1);
>+ D3DXQuaternionMultiply(&q2, &temp, &temp2);
>+ temp = sum(q1, q2);
>+ temp.x *= -0.25f; temp.y *= -0.25f; temp.z *= -0.25f; temp.w *= -0.25f;
>+ D3DXQuaternionExp(&temp, &temp);
>+ D3DXQuaternionMultiply(paout, &pqt1, &temp);
>+
>+ D3DXQuaternionInverse(&temp, &temp2);
>+ D3DXQuaternionMultiply(&q1, &temp, &pqt1);
>+ D3DXQuaternionLn(&q1, &q1);
>+ D3DXQuaternionMultiply(&q2, &temp, &temp3);
>+ temp = sum(q1, q2);
>+ temp.x *= -0.25f; temp.y *= -0.25f; temp.z *= -0.25f; temp.w *= -0.25f;
>+ D3DXQuaternionExp(&temp, &temp);
>+ D3DXQuaternionMultiply(pbout, &temp2, &temp);
>+
>+ *pcout = temp2;
>+
>+ return;
>+}
>+
> void WINAPI D3DXQuaternionToAxisAngle(CONST D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle)
> {
> paxis->x = pq->x;
>diff --git a/include/d3dx9math.h b/include/d3dx9math.h
>index c31b652..a1fd70a 100644
>--- a/include/d3dx9math.h
>+++ b/include/d3dx9math.h
>@@ -337,6 +337,7 @@ D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, CONST
> D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
> D3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, FLOAT t);
> D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3, CONST D3DXQUATERNION *pq4, FLOAT t);
>+void WINAPI D3DXQuaternionSquadSetup(D3DXQUATERNION *paout, D3DXQUATERNION *pbout, D3DXQUATERNION *pcout, CONST D3DXQUATERNION *pq0, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3);
> void WINAPI D3DXQuaternionToAxisAngle(CONST D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle);
>
> D3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pv3, FLOAT f, FLOAT g);
>--
>1.7.9
>
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the wine-bugs
mailing list