Tony Wasserka : d3dx8: Implement the C++ stuff of the D3DXCOLOR structure.
Alexandre Julliard
julliard at winehq.org
Mon Nov 12 06:27:37 CST 2007
Module: wine
Branch: master
Commit: f40955bf54db00f2a84a48e9473c60f135a27d2c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f40955bf54db00f2a84a48e9473c60f135a27d2c
Author: Tony Wasserka <tony.wasserka at freenet.de>
Date: Sat Nov 10 15:22:57 2007 +0100
d3dx8: Implement the C++ stuff of the D3DXCOLOR structure.
---
include/d3dx8math.h | 36 +++++++++++
include/d3dx8math.inl | 161 +++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 197 insertions(+), 0 deletions(-)
diff --git a/include/d3dx8math.h b/include/d3dx8math.h
index 0c60b66..40081fd 100644
--- a/include/d3dx8math.h
+++ b/include/d3dx8math.h
@@ -220,6 +220,42 @@ typedef struct D3DXPLANE
typedef struct D3DXCOLOR
{
+#ifdef __cplusplus
+ D3DXCOLOR();
+ D3DXCOLOR(DWORD col);
+ D3DXCOLOR(CONST FLOAT *pf);
+ D3DXCOLOR(CONST D3DCOLORVALUE& col);
+ D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa);
+
+ operator DWORD () const;
+
+ operator FLOAT* ();
+ operator CONST FLOAT* () const;
+
+ operator D3DCOLORVALUE* ();
+ operator CONST D3DCOLORVALUE* () const;
+
+ operator D3DCOLORVALUE& ();
+ operator CONST D3DCOLORVALUE& () const;
+
+ D3DXCOLOR& operator += (CONST D3DXCOLOR&);
+ D3DXCOLOR& operator -= (CONST D3DXCOLOR&);
+ D3DXCOLOR& operator *= (FLOAT);
+ D3DXCOLOR& operator /= (FLOAT);
+
+ D3DXCOLOR operator + () const;
+ D3DXCOLOR operator - () const;
+
+ D3DXCOLOR operator + (CONST D3DXCOLOR&) const;
+ D3DXCOLOR operator - (CONST D3DXCOLOR&) const;
+ D3DXCOLOR operator * (FLOAT) const;
+ D3DXCOLOR operator / (FLOAT) const;
+
+ friend D3DXCOLOR operator * (FLOAT, CONST D3DXCOLOR&);
+
+ BOOL operator == (CONST D3DXCOLOR&) const;
+ BOOL operator != (CONST D3DXCOLOR&) const;
+#endif /* __cplusplus */
FLOAT r, g, b, a;
} D3DXCOLOR, *LPD3DXCOLOR;
diff --git a/include/d3dx8math.inl b/include/d3dx8math.inl
index c04c9d1..01e7af3 100644
--- a/include/d3dx8math.inl
+++ b/include/d3dx8math.inl
@@ -690,6 +690,167 @@ inline BOOL D3DXPLANE::operator != (CONST D3DXPLANE& pl) const
return a != pl.a || b != pl.b || c != pl.c || d != pl.d;
}
+inline D3DXCOLOR::D3DXCOLOR()
+{
+}
+
+inline D3DXCOLOR::D3DXCOLOR(DWORD col)
+{
+ CONST FLOAT f = 1.0f / 255.0f;
+ r = f * (FLOAT)(unsigned char)(col >> 16);
+ g = f * (FLOAT)(unsigned char)(col >> 8);
+ b = f * (FLOAT)(unsigned char)col;
+ a = f * (FLOAT)(unsigned char)(col >> 24);
+}
+
+inline D3DXCOLOR::D3DXCOLOR(CONST FLOAT *pf)
+{
+ if(!pf) return;
+ r = pf[0];
+ g = pf[1];
+ b = pf[2];
+ a = pf[3];
+}
+
+inline D3DXCOLOR::D3DXCOLOR(CONST D3DCOLORVALUE& col)
+{
+ r = col.r;
+ g = col.g;
+ b = col.b;
+ a = col.a;
+}
+
+inline D3DXCOLOR::D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa)
+{
+ r = fr;
+ g = fg;
+ b = fb;
+ a = fa;
+}
+
+inline D3DXCOLOR::operator DWORD () const
+{
+ DWORD _r = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD)(r * 255.0f + 0.5f);
+ DWORD _g = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD)(g * 255.0f + 0.5f);
+ DWORD _b = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD)(b * 255.0f + 0.5f);
+ DWORD _a = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD)(a * 255.0f + 0.5f);
+
+ return (_a << 24) | (_r << 16) | (_g << 8) | _b;
+}
+
+inline D3DXCOLOR::operator FLOAT * ()
+{
+ return (FLOAT*)&r;
+}
+
+inline D3DXCOLOR::operator CONST FLOAT * () const
+{
+ return (CONST FLOAT*)&r;
+}
+
+inline D3DXCOLOR::operator D3DCOLORVALUE * ()
+{
+ return (D3DCOLORVALUE*)&r;
+}
+
+inline D3DXCOLOR::operator CONST D3DCOLORVALUE * () const
+{
+ return (CONST D3DCOLORVALUE*)&r;
+}
+
+inline D3DXCOLOR::operator D3DCOLORVALUE& ()
+{
+ return *((D3DCOLORVALUE*)&r);
+}
+
+inline D3DXCOLOR::operator CONST D3DCOLORVALUE& () const
+{
+ return *((CONST D3DCOLORVALUE*)&r);
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator += (CONST D3DXCOLOR& col)
+{
+ r += col.r;
+ g += col.g;
+ b += col.b;
+ a += col.a;
+ return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator -= (CONST D3DXCOLOR& col)
+{
+ r -= col.r;
+ g -= col.g;
+ b -= col.b;
+ a -= col.a;
+ return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator *= (FLOAT f)
+{
+ r *= f;
+ g *= f;
+ b *= f;
+ a *= f;
+ return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator /= (FLOAT f)
+{
+ FLOAT inv = 1.0f / f;
+ r *= inv;
+ g *= inv;
+ b *= inv;
+ a *= inv;
+ return *this;
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator + () const
+{
+ return *this;
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator - () const
+{
+ return D3DXCOLOR(-r, -g, -b, -a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator + (CONST D3DXCOLOR& col) const
+{
+ return D3DXCOLOR(r + col.r, g + col.g, b + col.b, a + col.a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator - (CONST D3DXCOLOR& col) const
+{
+ return D3DXCOLOR(r - col.r, g - col.g, b - col.b, a - col.a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator * (FLOAT f) const
+{
+ return D3DXCOLOR(r * f, g * f, b * f, a * f);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator / (FLOAT f) const
+{
+ FLOAT inv = 1.0f / f;
+ return D3DXCOLOR(r * inv, g * inv, b * inv, a * inv);
+}
+
+inline D3DXCOLOR operator * (FLOAT f, CONST D3DXCOLOR& col)
+{
+ return D3DXCOLOR(f * col.r, f * col.g, f * col.b, f * col.a);
+}
+
+inline BOOL D3DXCOLOR::operator == (CONST D3DXCOLOR& col) const
+{
+ return r == col.r && g == col.g && b == col.b && a == col.a;
+}
+
+inline BOOL D3DXCOLOR::operator != (CONST D3DXCOLOR& col) const
+{
+ return r != col.r || g != col.g || b != col.b || a != col.a;
+}
+
#endif /* __cplusplus */
/*_______________D3DXCOLOR_____________________*/
More information about the wine-cvs
mailing list