Fix color endianness problems.
Remove operator== and != from POD types. Scope the disabled warning better.
This commit is contained in:
@@ -307,11 +307,11 @@ void BitmapText::DrawPrimitives()
|
|||||||
DISPLAY->PushMatrix();
|
DISPLAY->PushMatrix();
|
||||||
DISPLAY->TranslateLocal( m_fShadowLength, m_fShadowLength, 0 ); // shift by 5 units
|
DISPLAY->TranslateLocal( m_fShadowLength, m_fShadowLength, 0 ); // shift by 5 units
|
||||||
|
|
||||||
DWORD dwColor = RageColor(0,0,0,0.5f*m_temp.diffuse[0].a); // semi-transparent black
|
RageColor dim(0,0,0,0.5f*m_temp.diffuse[0].a); // semi-transparent black
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for( i=0; i<iNumV; i++ )
|
for( i=0; i<iNumV; i++ )
|
||||||
v[i].c = dwColor;
|
v[i].c = dim;
|
||||||
DISPLAY->DrawQuads( v, iNumV );
|
DISPLAY->DrawQuads( v, iNumV );
|
||||||
|
|
||||||
DISPLAY->PopMatrix();
|
DISPLAY->PopMatrix();
|
||||||
|
|||||||
+41
-20
@@ -11,11 +11,6 @@
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* nonstandard extension used : nameless struct/union
|
|
||||||
* It is, in fact, nonstandard. G++ 3.x can handle it. 2.95.x can not. XXX */
|
|
||||||
#pragma warning (push)
|
|
||||||
#pragma warning (disable : 4201)
|
|
||||||
|
|
||||||
struct RageVector2
|
struct RageVector2
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -41,8 +36,9 @@ public:
|
|||||||
|
|
||||||
friend RageVector2 operator * ( float f, const RageVector2& other ) { return other*f; }
|
friend RageVector2 operator * ( float f, const RageVector2& other ) { return other*f; }
|
||||||
|
|
||||||
bool operator == ( const RageVector2& other ) const { return x==other.x && y==other.y; }
|
/* unneeded; this is a POD type */
|
||||||
bool operator != ( const RageVector2& other ) const { return x!=other.x || y!=other.y; }
|
// bool operator == ( const RageVector2& other ) const { return x==other.x && y==other.y; }
|
||||||
|
// bool operator != ( const RageVector2& other ) const { return x!=other.x || y!=other.y; }
|
||||||
|
|
||||||
float x, y;
|
float x, y;
|
||||||
};
|
};
|
||||||
@@ -73,8 +69,9 @@ public:
|
|||||||
|
|
||||||
friend RageVector3 operator * ( float f, const RageVector3& other ) { return other*f; }
|
friend RageVector3 operator * ( float f, const RageVector3& other ) { return other*f; }
|
||||||
|
|
||||||
bool operator == ( const RageVector3& other ) const { return x==other.x && y==other.y && z==other.z; }
|
/* unneeded; this is a POD type */
|
||||||
bool operator != ( const RageVector3& other ) const { return x!=other.x || y!=other.y || z!=other.z; }
|
// bool operator == ( const RageVector3& other ) const { return x==other.x && y==other.y && z==other.z; }
|
||||||
|
// bool operator != ( const RageVector3& other ) const { return x!=other.x || y!=other.y || z!=other.z; }
|
||||||
|
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
};
|
};
|
||||||
@@ -104,21 +101,22 @@ public:
|
|||||||
|
|
||||||
friend RageVector4 operator * ( float f, const RageVector4& other ) { return other*f; }
|
friend RageVector4 operator * ( float f, const RageVector4& other ) { return other*f; }
|
||||||
|
|
||||||
bool operator == ( const RageVector4& other ) const { return x==other.x && y==other.y && z==other.z && w==other.w; }
|
/* unneeded; this is a POD type */
|
||||||
bool operator != ( const RageVector4& other ) const { return x!=other.x || y!=other.y || z!=other.z || w!=other.w; }
|
// bool operator == ( const RageVector4& other ) const { return x==other.x && y==other.y && z==other.z && w==other.w; }
|
||||||
|
// bool operator != ( const RageVector4& other ) const { return x!=other.x || y!=other.y || z!=other.z || w!=other.w; }
|
||||||
|
|
||||||
float x, y, z, w;
|
float x, y, z, w;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* nuke this stuff once we're sure RageVColor is OK */
|
||||||
#define RAGECOLOR_ARGB(a,r,g,b) \
|
/* #define RAGECOLOR_ARGB(a,r,g,b) \
|
||||||
((DWORD)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
|
((DWORD)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
|
||||||
|
|
||||||
#define RAGECOLOR_RGBA(r,g,b,a) RAGECOLOR_ARGB(a,r,g,b)
|
#define RAGECOLOR_RGBA(r,g,b,a) RAGECOLOR_ARGB(a,r,g,b)
|
||||||
|
|
||||||
#define RAGECOLOR_COLORVALUE(r,g,b,a) \
|
#define RAGECOLOR_COLORVALUE(r,g,b,a) \
|
||||||
RAGECOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
|
RAGECOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
|
||||||
|
*/
|
||||||
|
|
||||||
struct RageColor
|
struct RageColor
|
||||||
{
|
{
|
||||||
@@ -126,16 +124,16 @@ public:
|
|||||||
RageColor() {}
|
RageColor() {}
|
||||||
RageColor( const float * f ) { r=f[0]; g=f[1]; b=f[2]; a=f[3]; }
|
RageColor( const float * f ) { r=f[0]; g=f[1]; b=f[2]; a=f[3]; }
|
||||||
RageColor( float r1, float g1, float b1, float a1 ) { r=r1; g=g1; b=b1; a=a1; }
|
RageColor( float r1, float g1, float b1, float a1 ) { r=r1; g=g1; b=b1; a=a1; }
|
||||||
RageColor( unsigned long c )
|
/* RageColor( unsigned long c )
|
||||||
{
|
{
|
||||||
a = ((c>>24)&0xff) / 255.f;
|
a = ((c>>24)&0xff) / 255.f;
|
||||||
r = ((c>>16)&0xff) / 255.f;
|
r = ((c>>16)&0xff) / 255.f;
|
||||||
g = ((c>>8)&0xff) / 255.f;
|
g = ((c>>8)&0xff) / 255.f;
|
||||||
b = (c&0xff) / 255.f;
|
b = (c&0xff) / 255.f;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// casting
|
// casting
|
||||||
operator unsigned long () const { return RAGECOLOR_COLORVALUE(min(1.f,max(0.f,r)),min(1.f,max(0.f,g)),min(1.f,max(0.f,b)),min(1.f,max(0.f,a))); }
|
// operator unsigned long () const { return RAGECOLOR_COLORVALUE(min(1.f,max(0.f,r)),min(1.f,max(0.f,g)),min(1.f,max(0.f,b)),min(1.f,max(0.f,a))); }
|
||||||
operator float* () { return &r; };
|
operator float* () { return &r; };
|
||||||
operator const float* () const { return &r; };
|
operator const float* () const { return &r; };
|
||||||
|
|
||||||
@@ -153,12 +151,30 @@ public:
|
|||||||
|
|
||||||
friend RageVector4 operator * ( float f, const RageVector4& other ) { return other*f; }
|
friend RageVector4 operator * ( float f, const RageVector4& other ) { return other*f; }
|
||||||
|
|
||||||
bool operator == ( const RageColor& other ) const { return r==other.r && g==other.g && b==other.b && a==other.a; }
|
/* unneeded; this is a POD type */
|
||||||
bool operator != ( const RageColor& other ) const { return r!=other.r || g!=other.g || b!=other.b || a!=other.a; }
|
// bool operator == ( const RageColor& other ) const { return r==other.r && g==other.g && b==other.b && a==other.a; }
|
||||||
|
// bool operator != ( const RageColor& other ) const { return r!=other.r || g!=other.g || b!=other.b || a!=other.a; }
|
||||||
|
|
||||||
float r, g, b, a;
|
float r, g, b, a;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Convert floating-point 0..1 value to integer 0..255 value. */
|
||||||
|
inline unsigned char FTOC(float a) { return (unsigned char)(max(min(a, 1.f), 0.f) * 255.f); }
|
||||||
|
|
||||||
|
/* Color type used only in vertex lists. OpenGL expects colors in
|
||||||
|
* r, g, b, a order, independent of endianness, so storing them this
|
||||||
|
* way avoids endianness problems. Don't try to manipulate this; only
|
||||||
|
* manip RageColors. */
|
||||||
|
class RageVColor
|
||||||
|
{
|
||||||
|
unsigned char r, g, b, a;
|
||||||
|
public:
|
||||||
|
|
||||||
|
RageVColor() { }
|
||||||
|
RageVColor(const RageColor &rc) {
|
||||||
|
r = FTOC(rc.r); g = FTOC(rc.g); b = FTOC(rc.b); a = FTOC(rc.a);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
@@ -185,13 +201,18 @@ struct RageVertex
|
|||||||
{
|
{
|
||||||
// This is the format expected by OpenGL. D3D expects the reverse!
|
// This is the format expected by OpenGL. D3D expects the reverse!
|
||||||
RageVector2 t; // texture coordinates
|
RageVector2 t; // texture coordinates
|
||||||
unsigned long c; // diffuse color
|
RageVColor c; // diffuse color
|
||||||
RageVector3 p; // position
|
RageVector3 p; // position
|
||||||
};
|
};
|
||||||
|
|
||||||
#define D3DFVF_RAGEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1) // D3D FVF flags which describe our vertex structure
|
#define D3DFVF_RAGEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1) // D3D FVF flags which describe our vertex structure
|
||||||
|
|
||||||
|
|
||||||
|
/* nonstandard extension used : nameless struct/union
|
||||||
|
* It is, in fact, nonstandard. G++ 3.x can handle it. 2.95.x can not. XXX */
|
||||||
|
#pragma warning (push)
|
||||||
|
#pragma warning (disable : 4201)
|
||||||
|
|
||||||
struct RageMatrix
|
struct RageMatrix
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
Reference in New Issue
Block a user