Tony Wasserka : d3dx8: Implement the C++ stuff of the D3DXMATRIX structure.
Alexandre Julliard
julliard at winehq.org
Mon Nov 12 06:27:35 CST 2007
Module: wine
Branch: master
Commit: f422aead30c726701557da382857b5736e98adf4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f422aead30c726701557da382857b5736e98adf4
Author: Tony Wasserka <tony.wasserka at freenet.de>
Date: Sat Nov 10 14:27:26 2007 +0100
d3dx8: Implement the C++ stuff of the D3DXMATRIX structure.
---
include/d3dx8math.h | 39 ++++++++++++
include/d3dx8math.inl | 160 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 199 insertions(+), 0 deletions(-)
diff --git a/include/d3dx8math.h b/include/d3dx8math.h
index fa7eee6..c8af5a4 100644
--- a/include/d3dx8math.h
+++ b/include/d3dx8math.h
@@ -125,7 +125,46 @@ typedef struct D3DXVECTOR4
FLOAT x, y, z, w;
} D3DXVECTOR4, *LPD3DXVECTOR4;
+#ifdef __cplusplus
+typedef struct D3DXMATRIX : public D3DMATRIX
+{
+ D3DXMATRIX();
+ D3DXMATRIX(CONST FLOAT *pf);
+ D3DXMATRIX(CONST D3DMATRIX& mat);
+ D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
+ FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
+ FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
+ FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44);
+
+ FLOAT& operator () (UINT row, UINT col);
+ FLOAT operator () (UINT row, UINT col) const;
+
+ operator FLOAT* ();
+ operator CONST FLOAT* () const;
+
+ D3DXMATRIX& operator *= (CONST D3DXMATRIX&);
+ D3DXMATRIX& operator += (CONST D3DXMATRIX&);
+ D3DXMATRIX& operator -= (CONST D3DXMATRIX&);
+ D3DXMATRIX& operator *= (FLOAT);
+ D3DXMATRIX& operator /= (FLOAT);
+
+ D3DXMATRIX operator + () const;
+ D3DXMATRIX operator - () const;
+
+ D3DXMATRIX operator * (CONST D3DXMATRIX&) const;
+ D3DXMATRIX operator + (CONST D3DXMATRIX&) const;
+ D3DXMATRIX operator - (CONST D3DXMATRIX&) const;
+ D3DXMATRIX operator * (FLOAT) const;
+ D3DXMATRIX operator / (FLOAT) const;
+
+ friend D3DXMATRIX operator * (FLOAT, CONST D3DXMATRIX&);
+
+ BOOL operator == (CONST D3DXMATRIX&) const;
+ BOOL operator != (CONST D3DXMATRIX&) const;
+} D3DXMATRIX, *LPD3DXMATRIX;
+#else /* !__cplusplus */
typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;
+#endif /* !__cplusplus */
typedef struct D3DXQUATERNION
{
diff --git a/include/d3dx8math.inl b/include/d3dx8math.inl
index c034eba..a634c73 100644
--- a/include/d3dx8math.inl
+++ b/include/d3dx8math.inl
@@ -348,6 +348,166 @@ inline BOOL D3DXVECTOR4::operator != (CONST D3DXVECTOR4& v) const
return x != v.x || y != v.y || z != v.z || w != v.w;
}
+inline D3DXMATRIX::D3DXMATRIX()
+{
+}
+
+inline D3DXMATRIX::D3DXMATRIX(CONST FLOAT *pf)
+{
+ if(!pf) return;
+ memcpy(&_11, pf, sizeof(D3DXMATRIX));
+}
+
+inline D3DXMATRIX::D3DXMATRIX(CONST D3DMATRIX& mat)
+{
+ memcpy(&_11, &mat, sizeof(D3DXMATRIX));
+}
+
+inline D3DXMATRIX::D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
+ FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
+ FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
+ FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44)
+{
+ _11 = f11; _12 = f12; _13 = f13; _14 = f14;
+ _21 = f21; _22 = f22; _23 = f23; _24 = f24;
+ _31 = f31; _32 = f32; _33 = f33; _34 = f34;
+ _41 = f41; _42 = f42; _43 = f43; _44 = f44;
+}
+
+inline FLOAT& D3DXMATRIX::operator () (UINT row, UINT col)
+{
+ return m[row][col];
+}
+
+inline FLOAT D3DXMATRIX::operator () (UINT row, UINT col) const
+{
+ return m[row][col];
+}
+
+inline D3DXMATRIX::operator FLOAT* ()
+{
+ return (FLOAT*)&_11;
+}
+
+inline D3DXMATRIX::operator CONST FLOAT* () const
+{
+ return (CONST FLOAT*)&_11;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator *= (CONST D3DXMATRIX& mat)
+{
+ D3DXMatrixMultiply(this, this, &mat);
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator += (CONST D3DXMATRIX& mat)
+{
+ _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;
+ _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;
+ _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;
+ _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator -= (CONST D3DXMATRIX& mat)
+{
+ _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;
+ _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;
+ _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;
+ _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator *= (FLOAT f)
+{
+ _11 *= f; _12 *= f; _13 *= f; _14 *= f;
+ _21 *= f; _22 *= f; _23 *= f; _24 *= f;
+ _31 *= f; _32 *= f; _33 *= f; _34 *= f;
+ _41 *= f; _42 *= f; _43 *= f; _44 *= f;
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator /= (FLOAT f)
+{
+ FLOAT inv = 1.0f / f;
+ _11 *= inv; _12 *= inv; _13 *= inv; _14 *= inv;
+ _21 *= inv; _22 *= inv; _23 *= inv; _24 *= inv;
+ _31 *= inv; _32 *= inv; _33 *= inv; _34 *= inv;
+ _41 *= inv; _42 *= inv; _43 *= inv; _44 *= inv;
+ return *this;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator + () const
+{
+ return *this;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator - () const
+{
+ return D3DXMATRIX(-_11, -_12, -_13, -_14,
+ -_21, -_22, -_23, -_24,
+ -_31, -_32, -_33, -_34,
+ -_41, -_42, -_43, -_44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator * (CONST D3DXMATRIX& mat) const
+{
+ D3DXMATRIX buf;
+ D3DXMatrixMultiply(&buf, this, &mat);
+ return buf;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator + (CONST D3DXMATRIX& mat) const
+{
+ return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14,
+ _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24,
+ _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34,
+ _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator - (CONST D3DXMATRIX& mat) const
+{
+ return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14,
+ _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24,
+ _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34,
+ _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator * (FLOAT f) const
+{
+ return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f,
+ _21 * f, _22 * f, _23 * f, _24 * f,
+ _31 * f, _32 * f, _33 * f, _34 * f,
+ _41 * f, _42 * f, _43 * f, _44 * f);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator / (FLOAT f) const
+{
+ FLOAT inv = 1.0f / f;
+ return D3DXMATRIX(_11 * inv, _12 * inv, _13 * inv, _14 * inv,
+ _21 * inv, _22 * inv, _23 * inv, _24 * inv,
+ _31 * inv, _32 * inv, _33 * inv, _34 * inv,
+ _41 * inv, _42 * inv, _43 * inv, _44 * inv);
+}
+
+inline D3DXMATRIX operator * (FLOAT f, CONST D3DXMATRIX& mat)
+{
+ return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,
+ f * mat._21, f * mat._22, f * mat._23, f * mat._24,
+ f * mat._31, f * mat._32, f * mat._33, f * mat._34,
+ f * mat._41, f * mat._42, f * mat._43, f * mat._44);
+}
+
+inline BOOL D3DXMATRIX::operator == (CONST D3DXMATRIX& mat) const
+{
+ return (memcmp(this, &mat, sizeof(D3DXMATRIX)) == 0);
+}
+
+inline BOOL D3DXMATRIX::operator != (CONST D3DXMATRIX& mat) const
+{
+ return (memcmp(this, &mat, sizeof(D3DXMATRIX)) != 0);
+}
+
#endif /* __cplusplus */
/*_______________D3DXCOLOR_____________________*/
More information about the wine-cvs
mailing list