Making CColor use floats instead of u8s

This commit is contained in:
parax0 2015-12-16 03:28:40 -07:00
parent f11a8b938b
commit 6b8966f0b9
24 changed files with 267 additions and 269 deletions

View File

@ -1,114 +1,120 @@
#include "CColor.h" #include "CColor.h"
CColor::CColor() CColor::CColor()
: r(0.f), g(0.f), b(0.f), a(0.f)
{ {
r = g = b = a = 0;
} }
CColor::CColor(CInputStream& src) CColor::CColor(CInputStream& rInput, bool Integral /*= false*/)
{ {
src.ReadBytes(&r, 4); if (Integral)
} {
r = (u8) rInput.ReadByte() / 255.f;
CColor::CColor(u32 rgba) g = (u8) rInput.ReadByte() / 255.f;
{ b = (u8) rInput.ReadByte() / 255.f;
r = (rgba >> 24) & 0xFF; a = (u8) rInput.ReadByte() / 255.f;
g = (rgba >> 16) & 0xFF; }
b = (rgba >> 8) & 0xFF; else
a = rgba & 0xFF; {
} r = rInput.ReadFloat();
g = rInput.ReadFloat();
CColor::CColor(u8 rgba) b = rInput.ReadFloat();
{ a = rInput.ReadFloat();
r = g = b = a = rgba; }
}
CColor::CColor(u8 _r, u8 _g, u8 _b, u8 _a)
{
r = _r;
g = _g;
b = _b;
a = _a;
} }
CColor::CColor(float rgba) CColor::CColor(float rgba)
: r(rgba), g(rgba), b(rgba), a(rgba)
{ {
r = g = b = a = u8(rgba * 255.f);
} }
CColor::CColor(float _r, float _g, float _b, float _a) CColor::CColor(float _r, float _g, float _b, float _a /*= 1.f*/)
: r(_r), g(_g), b(_b), a(_a)
{ {
r = u8(_r * 255.f);
g = u8(_g * 255.f);
b = u8(_b * 255.f);
a = u8(_a * 255.f);
} }
void CColor::Write(COutputStream &Output) void CColor::SetIntegral(u8 rgba)
{ {
Output.WriteBytes(&r, 4); float f = rgba / 255.f;
r = g = b = a = f;
} }
long CColor::AsLongRGBA() const void CColor::SetIntegral(u8 _r, u8 _g, u8 _b, u8 _a /*= 255*/)
{ {
return (r << 24) | (g << 16) | (b << 8) | a; r = _r / 255.f;
g = _g / 255.f;
b = _b / 255.f;
a = _a / 255.f;
}
void CColor::Write(COutputStream &rOutput, bool Integral /*= false*/)
{
if (Integral)
{
rOutput.WriteLong(ToLongRGBA());
}
else
{
rOutput.WriteFloat(r);
rOutput.WriteFloat(g);
rOutput.WriteFloat(b);
rOutput.WriteFloat(a);
}
}
long CColor::ToLongRGBA() const
{
u8 _r = (u8) (r * 255);
u8 _g = (u8) (g * 255);
u8 _b = (u8) (b * 255);
u8 _a = (u8) (a * 255);
return (_r << 24) | (_g << 16) | (_b << 8) | _a;
} }
long CColor::ToLongARGB() const long CColor::ToLongARGB() const
{ {
return (a << 24) | (r << 16) | (g << 8) | b; u8 _r = (u8) (r * 255);
u8 _g = (u8) (g * 255);
u8 _b = (u8) (b * 255);
u8 _a = (u8) (a * 255);
return (_a << 24) | (_r << 16) | (_g << 8) | _b;
} }
CVector4f CColor::ToVector4f() const bool CColor::operator==(const CColor& rkOther) const
{ {
return CVector4f(float(r) / 255.f, return ((r == rkOther.r) &&
float(g) / 255.f, (g == rkOther.g) &&
float(b) / 255.f, (b == rkOther.b) &&
float(a) / 255.f); (a == rkOther.a));
} }
bool CColor::operator==(const CColor& other) const bool CColor::operator!=(const CColor& rkOther) const
{ {
return ((r == other.r) && return (!(*this == rkOther));
(g == other.g) &&
(b == other.b) &&
(a == other.a));
} }
bool CColor::operator!=(const CColor& other) const CColor CColor::operator+(const CColor& rkOther) const
{ {
return (!(*this == other)); float NewR = fmin(r + rkOther.r, 1.f);
float NewG = fmin(g + rkOther.g, 1.f);
float NewB = fmin(b + rkOther.b, 1.f);
float NewA = fmin(a + rkOther.a, 1.f);
return CColor(NewR, NewG, NewB, NewA);
} }
CColor CColor::operator+(const CColor& other) const void CColor::operator+=(const CColor& rkOther)
{ {
u16 NewR = r + other.r; *this = (*this + rkOther);
if (NewR > 255) NewR = 255;
u16 NewG = g + other.g;
if (NewG > 255) NewG = 255;
u16 NewB = b + other.b;
if (NewB > 255) NewB = 255;
u16 NewA = a + other.a;
if (NewA > 255) NewA = 255;
return CColor((u8) NewR, (u8) NewG, (u8) NewB, (u8) NewA);
} }
void CColor::operator+=(const CColor& other) CColor CColor::operator-(const CColor& rkOther) const
{ {
*this = (*this + other); float NewR = fmax(r - rkOther.r, 0.f);
} float NewG = fmax(g - rkOther.g, 0.f);
float NewB = fmax(b - rkOther.b, 0.f);
CColor CColor::operator-(const CColor& other) const float NewA = fmax(a - rkOther.a, 0.f);
{ return CColor(NewR, NewG, NewB, NewA);
s16 NewR = r - other.r;
if (NewR < 0) NewR = 0;
s16 NewG = g - other.g;
if (NewG < 0) NewG = 0;
s16 NewB = b - other.b;
if (NewB < 0) NewB = 0;
s16 NewA = a - other.a;
if (NewA < 0) NewA = 0;
return CColor((u8) NewR, (u8) NewG, (u8) NewB, (u8) NewA);
} }
void CColor::operator-=(const CColor& other) void CColor::operator-=(const CColor& other)
@ -116,96 +122,106 @@ void CColor::operator-=(const CColor& other)
*this = (*this - other); *this = (*this - other);
} }
CColor CColor::operator*(const CColor& other) const CColor CColor::operator*(const CColor& rkOther) const
{ {
CVector4f A = ToVector4f(); float NewR = r * rkOther.r;
CVector4f B = other.ToVector4f(); float NewG = g * rkOther.g;
float NewB = b * rkOther.b;
float NewR = A.x * B.x; float NewA = a * rkOther.a;
float NewG = A.y * B.y;
float NewB = A.z * B.z;
float NewA = A.w * B.w;
return CColor(NewR, NewG, NewB, NewA); return CColor(NewR, NewG, NewB, NewA);
} }
void CColor::operator*=(const CColor& other) void CColor::operator*=(const CColor& rkOther)
{
*this = (*this * rkOther);
}
CColor CColor::operator*(float other) const
{
float NewR = fmin( fmax(r * other, 0.f), 1.f);
float NewG = fmin( fmax(g * other, 0.f), 1.f);
float NewB = fmin( fmax(b * other, 0.f), 1.f);
float NewA = fmin( fmax(a * other, 0.f), 1.f);
return CColor(NewR, NewG, NewB, NewA);
}
void CColor::operator*=(float other)
{ {
*this = (*this * other); *this = (*this * other);
} }
CColor CColor::operator*(const float other) const CColor CColor::operator/(const CColor& rkOther) const
{ {
CVector4f Vec4f = ToVector4f() * other; float NewR = (rkOther.r == 0.f) ? 0.f : r / rkOther.r;
return CColor(Vec4f.x, Vec4f.y, Vec4f.z, Vec4f.w); float NewG = (rkOther.g == 0.f) ? 0.f : g / rkOther.g;
float NewB = (rkOther.b == 0.f) ? 0.f : b / rkOther.b;
float NewA = (rkOther.a == 0.f) ? 0.f : a / rkOther.a;
return CColor(NewR, NewG, NewB, NewA);
} }
void CColor::operator*=(const float other) void CColor::operator/=(const CColor& rkOther)
{ {
*this = (*this * other); *this = (*this / rkOther);
}
CColor CColor::operator/(const CColor& other) const
{
u16 NewR = (other.r == 0) ? 0 : r / other.r;
u16 NewG = (other.g == 0) ? 0 : g / other.g;
u16 NewB = (other.b == 0) ? 0 : b / other.b;
u16 NewA = (other.a == 0) ? 0 : a / other.a;
return CColor((u8) NewR, (u8) NewG, (u8) NewB, (u8) NewA);
}
void CColor::operator/=(const CColor& other)
{
*this = (*this / other);
} }
// ************ STATIC ************ // ************ STATIC ************
CColor CColor::RandomColor(bool transparent) CColor CColor::Integral(u8 rgba)
{ {
CColor out; CColor out;
out.r = rand() % 255; out.SetIntegral(rgba);
out.g = rand() % 255;
out.b = rand() % 255;
out.a = (transparent ? rand() % 255 : 0);
return out; return out;
} }
CColor CColor::Integral(u8 _r, u8 _g, u8 _b, u8 _a /*= 255*/)
{
CColor out;
out.SetIntegral(_r, _g, _b, _a);
return out;
}
CColor CColor::RandomColor(bool transparent)
{
float _r = (rand() % 255) / 255.f;
float _g = (rand() % 255) / 255.f;
float _b = (rand() % 255) / 255.f;
float _a = (transparent ? (rand() % 255) / 255.f : 0);
return CColor(_r, _g, _b, _a);
}
CColor CColor::RandomLightColor(bool transparent) CColor CColor::RandomLightColor(bool transparent)
{ {
CColor out; float _r = 0.5f + (rand() % 128) / 255.f;
out.r = 127 + (rand() % 128); float _g = 0.5f + (rand() % 128) / 255.f;
out.g = 127 + (rand() % 128); float _b = 0.5f + (rand() % 128) / 255.f;
out.b = 127 + (rand() % 128); float _a = (transparent ? 0.5f + ((rand() % 128) / 255.f) : 0);
out.a = (transparent ? 127 + (rand() % 128) : 0); return CColor(_r, _g, _b, _a);
return out;
} }
CColor CColor::RandomDarkColor(bool transparent) CColor CColor::RandomDarkColor(bool transparent)
{ {
CColor out; float _r = (rand() % 128) / 255.f;
out.r = rand() % 128; float _g = (rand() % 128) / 255.f;
out.g = rand() % 128; float _b = (rand() % 128) / 255.f;
out.b = rand() % 128; float _a = (transparent ? (rand() % 128) / 255.f : 0);
out.a = (transparent ? rand() % 128 : 0); return CColor(_r, _g, _b, _a);
return out;
} }
// defining predefined colors // defining predefined colors
const CColor CColor::skRed (u32(0xFF0000FF)); const CColor CColor::skRed (1.0f, 0.0f, 0.0f);
const CColor CColor::skGreen (u32(0x00FF00FF)); const CColor CColor::skGreen (0.0f, 1.0f, 0.0f);
const CColor CColor::skBlue (u32(0x0000FFFF)); const CColor CColor::skBlue (0.0f, 0.0f, 1.0f);
const CColor CColor::skYellow(u32(0xFFFF00FF)); const CColor CColor::skYellow(1.0f, 1.0f, 0.0f);
const CColor CColor::skPurple(u32(0xFF00FFFF)); const CColor CColor::skPurple(1.0f, 0.0f, 1.0f);
const CColor CColor::skCyan (u32(0x00FFFFFF)); const CColor CColor::skCyan (0.0f, 1.0f, 1.0f);
const CColor CColor::skWhite (u32(0xFFFFFFFF)); const CColor CColor::skWhite (1.0f, 1.0f, 1.0f);
const CColor CColor::skBlack (u32(0x000000FF)); const CColor CColor::skBlack (0.0f, 0.0f, 0.0f);
const CColor CColor::skGray (u32(0x808080FF)); const CColor CColor::skGray (0.5f, 0.5f, 0.5f);
const CColor CColor::skTransparentRed (u32(0xFF000000)); const CColor CColor::skTransparentRed (1.0f, 0.0f, 0.0f, 0.0f);
const CColor CColor::skTransparentGreen (u32(0x00FF0000)); const CColor CColor::skTransparentGreen (0.0f, 1.0f, 0.0f, 0.0f);
const CColor CColor::skTransparentBlue (u32(0x0000FF00)); const CColor CColor::skTransparentBlue (0.0f, 0.0f, 1.0f, 0.0f);
const CColor CColor::skTransparentYellow(u32(0xFFFF0000)); const CColor CColor::skTransparentYellow(1.0f, 1.0f, 0.0f, 0.0f);
const CColor CColor::skTransparentPurple(u32(0xFF00FF00)); const CColor CColor::skTransparentPurple(1.0f, 0.0f, 1.0f, 0.0f);
const CColor CColor::skTransparentCyan (u32(0x00FFFF00)); const CColor CColor::skTransparentCyan (0.0f, 1.0f, 1.0f, 0.0f);
const CColor CColor::skTransparentWhite (u32(0xFFFFFF00)); const CColor CColor::skTransparentWhite (1.0f, 1.0f, 1.0f, 0.0f);
const CColor CColor::skTransparentBlack (u32(0x00000000)); const CColor CColor::skTransparentBlack (0.0f, 0.0f, 0.0f, 0.0f);
const CColor CColor::skTransparentGray (u32(0x80808000)); const CColor CColor::skTransparentGray (0.5f, 0.5f, 0.5f, 0.0f);

View File

@ -3,26 +3,23 @@
#include <FileIO/CInputStream.h> #include <FileIO/CInputStream.h>
#include <FileIO/COutputStream.h> #include <FileIO/COutputStream.h>
#include "Math/CVector4f.h"
#include "types.h" #include "types.h"
class CColor class CColor
{ {
public: public:
u8 r, g, b, a; float r, g, b, a;
CColor(); CColor();
CColor(CInputStream& src); CColor(CInputStream& src, bool Integral = false);
CColor(u32 rgba);
CColor(u8 rgba);
CColor(u8 _r, u8 _g, u8 _b, u8 _a);
CColor(float rgba); CColor(float rgba);
CColor(float _r, float _g, float _b, float _a); CColor(float _r, float _g, float _b, float _a = 1.f);
void Write(COutputStream& Output); void SetIntegral(u8 rgba);
void SetIntegral(u8 _r, u8 _g, u8 _b, u8 _a = 255);
void Write(COutputStream& Output, bool Integral = false);
long AsLongRGBA() const; long ToLongRGBA() const;
long ToLongARGB() const; long ToLongARGB() const;
CVector4f ToVector4f() const;
bool operator==(const CColor& other) const; bool operator==(const CColor& other) const;
bool operator!=(const CColor& other) const; bool operator!=(const CColor& other) const;
CColor operator+(const CColor& other) const; CColor operator+(const CColor& other) const;
@ -31,12 +28,14 @@ public:
void operator-=(const CColor& other); void operator-=(const CColor& other);
CColor operator*(const CColor& other) const; CColor operator*(const CColor& other) const;
void operator*=(const CColor& other); void operator*=(const CColor& other);
CColor operator*(const float other) const; CColor operator*(float other) const;
void operator*=(const float other); void operator*=(float other);
CColor operator/(const CColor& other) const; CColor operator/(const CColor& other) const;
void operator/=(const CColor& other); void operator/=(const CColor& other);
// Static // Static
static CColor Integral(u8 rgba);
static CColor Integral(u8 _r, u8 _g, u8 _b, u8 _a = 255);
static CColor RandomColor(bool transparent); static CColor RandomColor(bool transparent);
static CColor RandomLightColor(bool transparent); static CColor RandomLightColor(bool transparent);
static CColor RandomDarkColor(bool transparent); static CColor RandomDarkColor(bool transparent);

View File

@ -233,8 +233,7 @@ void CDrawUtil::DrawBillboard(CTexture* pTexture, const CVector3f& Position, con
glUniform2f(ScaleLoc, Scale.x, Scale.y); glUniform2f(ScaleLoc, Scale.x, Scale.y);
GLuint TintLoc = mpBillboardShader->GetUniformLocation("TintColor"); GLuint TintLoc = mpBillboardShader->GetUniformLocation("TintColor");
CVector4f Tint4f = Tint.ToVector4f(); glUniform4f(TintLoc, Tint.r, Tint.g, Tint.b, Tint.a);
glUniform4f(TintLoc, Tint4f.x, Tint4f.y, Tint4f.z, Tint4f.w);
pTexture->Bind(0); pTexture->Bind(0);
@ -263,12 +262,10 @@ void CDrawUtil::DrawLightBillboard(ELightType Type, const CColor& LightColor, co
glUniform2f(ScaleLoc, Scale.x, Scale.y); glUniform2f(ScaleLoc, Scale.x, Scale.y);
GLuint ColorLoc = mpLightBillboardShader->GetUniformLocation("LightColor"); GLuint ColorLoc = mpLightBillboardShader->GetUniformLocation("LightColor");
CVector4f Color4f = LightColor.ToVector4f(); glUniform4f(ColorLoc, LightColor.r, LightColor.g, LightColor.b, LightColor.a);
glUniform4f(ColorLoc, Color4f.x, Color4f.y, Color4f.z, Color4f.w);
GLuint TintLoc = mpLightBillboardShader->GetUniformLocation("TintColor"); GLuint TintLoc = mpLightBillboardShader->GetUniformLocation("TintColor");
CVector4f Tint4f = Tint.ToVector4f(); glUniform4f(TintLoc, Tint.r, Tint.g, Tint.b, Tint.a);
glUniform4f(TintLoc, Tint4f.x, Tint4f.y, Tint4f.z, Tint4f.w);
CTexture *pTexA = GetLightTexture(Type); CTexture *pTexA = GetLightTexture(Type);
CTexture *pTexB = GetLightMask(Type); CTexture *pTexB = GetLightMask(Type);
@ -297,8 +294,7 @@ void CDrawUtil::UseColorShader(const CColor& kColor)
mpColorShader->SetCurrent(); mpColorShader->SetCurrent();
GLuint ColorLoc = mpColorShader->GetUniformLocation("ColorIn"); GLuint ColorLoc = mpColorShader->GetUniformLocation("ColorIn");
CVector4f ColorVec4 = kColor.ToVector4f(); glUniform4f(ColorLoc, kColor.r, kColor.g, kColor.b, kColor.a);
glUniform4f(ColorLoc, ColorVec4.x, ColorVec4.y, ColorVec4.z, ColorVec4.w);
CMaterial::KillCachedMaterial(); CMaterial::KillCachedMaterial();
} }
@ -312,8 +308,7 @@ void CDrawUtil::UseColorShaderLighting(const CColor& kColor)
glUniform1i(NumLightsLoc, CGraphics::sNumLights); glUniform1i(NumLightsLoc, CGraphics::sNumLights);
GLuint ColorLoc = mpColorShaderLighting->GetUniformLocation("ColorIn"); GLuint ColorLoc = mpColorShaderLighting->GetUniformLocation("ColorIn");
CVector4f ColorVec4 = kColor.ToVector4f(); glUniform4f(ColorLoc, kColor.r, kColor.g, kColor.b, kColor.a);
glUniform4f(ColorLoc, ColorVec4.x, ColorVec4.y, ColorVec4.z, ColorVec4.w);
CMaterial::KillCachedMaterial(); CMaterial::KillCachedMaterial();
} }
@ -329,8 +324,7 @@ void CDrawUtil::UseTextureShader(const CColor& TintColor)
mpTextureShader->SetCurrent(); mpTextureShader->SetCurrent();
GLuint TintColorLoc = mpTextureShader->GetUniformLocation("TintColor"); GLuint TintColorLoc = mpTextureShader->GetUniformLocation("TintColor");
CVector4f TintVec4 = TintColor.ToVector4f(); glUniform4f(TintColorLoc, TintColor.r, TintColor.g, TintColor.b, TintColor.a);
glUniform4f(TintColorLoc, TintVec4.x, TintVec4.y, TintVec4.z, TintVec4.w);
CMaterial::KillCachedMaterial(); CMaterial::KillCachedMaterial();
} }
@ -342,8 +336,7 @@ void CDrawUtil::UseCollisionShader(const CColor& TintColor /*= CColor::skWhite*/
LoadCheckerboardTexture(0); LoadCheckerboardTexture(0);
GLuint TintColorLoc = mpCollisionShader->GetUniformLocation("TintColor"); GLuint TintColorLoc = mpCollisionShader->GetUniformLocation("TintColor");
CVector4f Tint4f = TintColor.ToVector4f(); glUniform4f(TintColorLoc, TintColor.r, TintColor.g, TintColor.b, TintColor.a);
glUniform4f(TintColorLoc, Tint4f.x, Tint4f.y, Tint4f.z, Tint4f.w);
CMaterial::KillCachedMaterial(); CMaterial::KillCachedMaterial();
} }

View File

@ -158,16 +158,16 @@ void CGraphics::SetDefaultLighting()
sDefaultDirectionalLights[2].Load(); sDefaultDirectionalLights[2].Load();
UpdateLightBlock(); UpdateLightBlock();
sVertexBlock.COLOR0_Amb = CColor::skGray.ToVector4f(); sVertexBlock.COLOR0_Amb = CColor::skGray;
UpdateVertexBlock(); UpdateVertexBlock();
} }
void CGraphics::SetupAmbientColor() void CGraphics::SetupAmbientColor()
{ {
if (sLightMode == eWorldLighting) if (sLightMode == eWorldLighting)
sVertexBlock.COLOR0_Amb = sAreaAmbientColor.ToVector4f() * sWorldLightMultiplier; sVertexBlock.COLOR0_Amb = sAreaAmbientColor * sWorldLightMultiplier;
else else
sVertexBlock.COLOR0_Amb = skDefaultAmbientColor.ToVector4f(); sVertexBlock.COLOR0_Amb = skDefaultAmbientColor;
} }
void CGraphics::SetIdentityMVP() void CGraphics::SetIdentityMVP()

View File

@ -13,7 +13,9 @@
/** /**
* todo: should probably be replaced with a CGraphicsState class which * todo: should probably be replaced with a CGraphicsState class which
* can be instantiated and is probably more safe/functional than global access. * can be instantiated and is probably more safe/functional than global access.
* also, * also, should probably have inline set/get functions rather than having all
* members public so that we can track when a value is modified and maybe
* execute extra functionality when certain values are changed
*/ */
class CGraphics class CGraphics
{ {
@ -41,9 +43,9 @@ public:
{ {
CMatrix4f TexMatrices[10]; CMatrix4f TexMatrices[10];
CMatrix4f PostMatrices[20]; CMatrix4f PostMatrices[20];
CVector4f COLOR0_Amb; CColor COLOR0_Amb;
CVector4f COLOR0_Mat; CColor COLOR0_Mat;
CVector4f COLOR1_Amb; CColor COLOR1_Amb;
CVector4f COLOR1_Mat; CVector4f COLOR1_Mat;
}; };
static SVertexBlock sVertexBlock; static SVertexBlock sVertexBlock;
@ -51,9 +53,9 @@ public:
// SPixelBlock // SPixelBlock
struct SPixelBlock struct SPixelBlock
{ {
CVector4f Konst[4]; CColor Konst[4];
CVector4f TevColor; CColor TevColor;
CVector4f TintColor; CColor TintColor;
}; };
static SPixelBlock sPixelBlock; static SPixelBlock sPixelBlock;
@ -64,7 +66,7 @@ public:
{ {
CVector4f Position; CVector4f Position;
CVector4f Direction; CVector4f Direction;
CVector4f Color; CColor Color;
CVector4f DistAtten; CVector4f DistAtten;
CVector4f AngleAtten; CVector4f AngleAtten;
}; };

View File

@ -46,8 +46,7 @@ void CRenderer::Init()
{ {
if (!mInitialized) if (!mInitialized)
{ {
CVector4f ClearVec = mClearColor.ToVector4f(); glClearColor(mClearColor.r, mClearColor.g, mClearColor.b, mClearColor.a);
glClearColor(ClearVec.x, ClearVec.y, ClearVec.z, ClearVec.w);
mContextIndex = CGraphics::GetContextIndex(); mContextIndex = CGraphics::GetContextIndex();
mInitialized = true; mInitialized = true;
} }
@ -134,16 +133,11 @@ void CRenderer::SetBloom(EBloomMode BloomMode)
mOptions &= ~eEnableBloom; mOptions &= ~eEnableBloom;
} }
void CRenderer::SetFont(CFont* /*pFont*/) void CRenderer::SetClearColor(const CColor& Clear)
{
}
void CRenderer::SetClearColor(CColor Clear)
{ {
mClearColor = Clear; mClearColor = Clear;
CVector4f ClearVec = Clear.ToVector4f(); mClearColor.a = 0.f;
ClearVec.w = 0.f; glClearColor(mClearColor.r, mClearColor.g, mClearColor.b, mClearColor.a);
glClearColor(ClearVec.x, ClearVec.y, ClearVec.z, ClearVec.w);
} }
void CRenderer::SetViewportSize(u32 Width, u32 Height) void CRenderer::SetViewportSize(u32 Width, u32 Height)
@ -191,12 +185,12 @@ void CRenderer::RenderBloom()
static const float skVOffset[6] = { -0.012275f, -0.007815f, -0.003350f, static const float skVOffset[6] = { -0.012275f, -0.007815f, -0.003350f,
0.003350f, 0.007815f, 0.012275f }; 0.003350f, 0.007815f, 0.012275f };
static const CColor skTintColors[6] = { CColor((u8) 17, 17, 17, 255), static const CColor skTintColors[6] = { CColor::Integral(17, 17, 17),
CColor((u8) 53, 53, 53, 255), CColor::Integral(53, 53, 53),
CColor((u8) 89, 89, 89, 255), CColor::Integral(89, 89, 89),
CColor((u8) 89, 89, 89, 255), CColor::Integral(89, 89, 89),
CColor((u8) 53, 53, 53, 255), CColor::Integral(53, 53, 53),
CColor((u8) 17, 17, 17, 255) }; CColor::Integral(17, 17, 17) };
u32 BloomWidth = (mBloomMode == eBloom ? mBloomWidth : mViewportWidth); u32 BloomWidth = (mBloomMode == eBloom ? mBloomWidth : mViewportWidth);
u32 BloomHeight = (mBloomMode == eBloom ? mBloomHeight : mViewportHeight); u32 BloomHeight = (mBloomMode == eBloom ? mBloomHeight : mViewportHeight);
@ -295,9 +289,9 @@ void CRenderer::RenderSky(CModel *pSkyboxModel, const SViewInfo& ViewInfo)
glEnable(GL_CULL_FACE); glEnable(GL_CULL_FACE);
CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity; CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity;
CGraphics::sVertexBlock.COLOR0_Amb = CVector4f(1.f, 1.f, 1.f, 1.f); CGraphics::sVertexBlock.COLOR0_Amb = CColor::skWhite;
CGraphics::sPixelBlock.TevColor = CVector4f(1.f, 1.f, 1.f, 1.f); CGraphics::sPixelBlock.TevColor = CColor::skWhite;
CGraphics::sPixelBlock.TintColor = CColor::skWhite.ToVector4f(); CGraphics::sPixelBlock.TintColor = CColor::skWhite;
CGraphics::sNumLights = 0; CGraphics::sNumLights = 0;
CGraphics::UpdateVertexBlock(); CGraphics::UpdateVertexBlock();
CGraphics::UpdatePixelBlock(); CGraphics::UpdatePixelBlock();
@ -377,9 +371,7 @@ void CRenderer::ClearDepthBuffer()
// ************ PRIVATE ************ // ************ PRIVATE ************
void CRenderer::InitFramebuffer() void CRenderer::InitFramebuffer()
{ {
CVector4f Clear = mClearColor.ToVector4f(); glClearColor(mClearColor.r, mClearColor.g, mClearColor.b, mClearColor.a);
Clear.w = 0.f;
glClearColor(Clear.x, Clear.y, Clear.z, Clear.w);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDepthMask(GL_TRUE); glDepthMask(GL_TRUE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

View File

@ -67,8 +67,7 @@ public:
void ToggleOccluders(bool b); void ToggleOccluders(bool b);
void ToggleAlphaDisabled(bool b); void ToggleAlphaDisabled(bool b);
void SetBloom(EBloomMode BloomMode); void SetBloom(EBloomMode BloomMode);
void SetFont(CFont *pFont); void SetClearColor(const CColor& Clear);
void SetClearColor(CColor Clear);
void SetViewportSize(u32 Width, u32 Height); void SetViewportSize(u32 Width, u32 Height);
// Render // Render

View File

@ -36,8 +36,6 @@ CVector2f CFont::RenderString(const TString& String, CRenderer* /*pRenderer*/, f
GLuint ModelMtxLoc = pTextShader->GetUniformLocation("ModelMtx"); GLuint ModelMtxLoc = pTextShader->GetUniformLocation("ModelMtx");
GLuint ColorLoc = pTextShader->GetUniformLocation("FontColor"); GLuint ColorLoc = pTextShader->GetUniformLocation("FontColor");
GLuint LayerLoc = pTextShader->GetUniformLocation("RGBALayer"); GLuint LayerLoc = pTextShader->GetUniformLocation("RGBALayer");
CVector4f FillColor4f = FillColor.ToVector4f();
CVector4f StrokeColor4f = StrokeColor.ToVector4f();
mpFontTexture->Bind(0); mpFontTexture->Bind(0);
smGlyphVertices.Bind(); smGlyphVertices.Bind();
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
@ -117,7 +115,7 @@ CVector2f CFont::RenderString(const TString& String, CRenderer* /*pRenderer*/, f
// Draw fill // Draw fill
glUniform1i(LayerLoc, GlyphLayer); glUniform1i(LayerLoc, GlyphLayer);
glUniform4fv(ColorLoc, 1, &FillColor4f.x); glUniform4fv(ColorLoc, 1, &FillColor.r);
smGlyphIndices.DrawElements(); smGlyphIndices.DrawElements();
// Draw stroke // Draw stroke
@ -129,7 +127,7 @@ CVector2f CFont::RenderString(const TString& String, CRenderer* /*pRenderer*/, f
else if (mTextureFormat == 8) StrokeLayer = GlyphLayer - 2; else if (mTextureFormat == 8) StrokeLayer = GlyphLayer - 2;
glUniform1i(LayerLoc, StrokeLayer); glUniform1i(LayerLoc, StrokeLayer);
glUniform4fv(ColorLoc, 1, &StrokeColor4f.x); glUniform4fv(ColorLoc, 1, &StrokeColor.r);
smGlyphIndices.DrawElements(); smGlyphIndices.DrawElements();
} }

View File

@ -200,21 +200,21 @@ void CLight::Load() const
case eDirectional: case eDirectional:
Light->Position = CVector4f(-mDirection * 1048576.f, 1.f); Light->Position = CVector4f(-mDirection * 1048576.f, 1.f);
Light->Direction = CVector4f(mDirection, 0.f); Light->Direction = CVector4f(mDirection, 0.f);
Light->Color = mColor.ToVector4f() * CGraphics::sWorldLightMultiplier; Light->Color = mColor * CGraphics::sWorldLightMultiplier;
Light->DistAtten = CVector4f(1.f, 0.f, 0.f, 0.f); Light->DistAtten = CVector4f(1.f, 0.f, 0.f, 0.f);
Light->AngleAtten = CVector4f(1.f, 0.f, 0.f, 0.f); Light->AngleAtten = CVector4f(1.f, 0.f, 0.f, 0.f);
break; break;
case eSpot: case eSpot:
Light->Position = CVector4f(mPosition, 1.f); Light->Position = CVector4f(mPosition, 1.f);
Light->Direction = CVector4f(mDirection, 0.f); Light->Direction = CVector4f(mDirection, 0.f);
Light->Color = mColor.ToVector4f() * CGraphics::sWorldLightMultiplier; Light->Color = mColor * CGraphics::sWorldLightMultiplier;
Light->DistAtten = mDistAttenCoefficients; Light->DistAtten = mDistAttenCoefficients;
Light->AngleAtten = mAngleAttenCoefficients; Light->AngleAtten = mAngleAttenCoefficients;
break; break;
case eCustom: case eCustom:
Light->Position = CVector4f(mPosition, 1.f); Light->Position = CVector4f(mPosition, 1.f);
Light->Direction = CVector4f(mDirection, 0.f); Light->Direction = CVector4f(mDirection, 0.f);
Light->Color = mColor.ToVector4f() * CGraphics::sWorldLightMultiplier; Light->Color = mColor * CGraphics::sWorldLightMultiplier;
Light->DistAtten = mDistAttenCoefficients; Light->DistAtten = mDistAttenCoefficients;
Light->AngleAtten = mAngleAttenCoefficients; Light->AngleAtten = mAngleAttenCoefficients;
break; break;

View File

@ -131,11 +131,11 @@ bool CMaterial::SetCurrent(ERenderOptions Options)
// Set konst inputs // Set konst inputs
for (u32 iKonst = 0; iKonst < 4; iKonst++) for (u32 iKonst = 0; iKonst < 4; iKonst++)
CGraphics::sPixelBlock.Konst[iKonst] = mKonstColors[iKonst].ToVector4f(); CGraphics::sPixelBlock.Konst[iKonst] = mKonstColors[iKonst];
// Set color channels // Set color channels
// COLOR0_Amb is initialized by the node instead of by the material // COLOR0_Amb is initialized by the node instead of by the material
CGraphics::sVertexBlock.COLOR0_Mat = CColor::skWhite.ToVector4f(); CGraphics::sVertexBlock.COLOR0_Mat = CColor::skWhite;
// Set depth write - force on if alpha is disabled (lots of weird depth issues otherwise) // Set depth write - force on if alpha is disabled (lots of weird depth issues otherwise)
if ((mOptions & eDepthWrite) || (Options & eNoAlpha)) glDepthMask(GL_TRUE); if ((mOptions & eDepthWrite) || (Options & eNoAlpha)) glDepthMask(GL_TRUE);

View File

@ -173,7 +173,7 @@ void CMaterialCooker::WriteMaterialPrime(COutputStream& Out)
{ {
Out.WriteLong(NumKonst); Out.WriteLong(NumKonst);
for (u32 iKonst = 0; iKonst < NumKonst; iKonst++) for (u32 iKonst = 0; iKonst < NumKonst; iKonst++)
Out.WriteLong( mpMat->Konst(iKonst).AsLongRGBA() ); Out.WriteLong( mpMat->Konst(iKonst).ToLongRGBA() );
} }
// Blend Mode // Blend Mode

View File

@ -81,7 +81,7 @@ CMaterial* CMaterialLoader::ReadPrimeMaterial()
for (u32 iKonst = 0; iKonst < KonstCount; iKonst++) for (u32 iKonst = 0; iKonst < KonstCount; iKonst++)
{ {
if (iKonst >= 4) break; if (iKonst >= 4) break;
pMat->mKonstColors[iKonst] = CColor(*mpFile); pMat->mKonstColors[iKonst] = CColor(*mpFile, true);
} }
if (KonstCount > 4) mpFile->Seek(0x4 * (KonstCount - 4), SEEK_CUR); if (KonstCount > 4) mpFile->Seek(0x4 * (KonstCount - 4), SEEK_CUR);
} }
@ -303,7 +303,7 @@ CMaterial* CMaterialLoader::ReadCorruptionMaterial()
if (Type == "CLR ") if (Type == "CLR ")
{ {
CFourCC ClrType = mpFile->ReadLong(); CFourCC ClrType = mpFile->ReadLong();
CColor ClrVal(*mpFile); CColor ClrVal(*mpFile, true);
if (ClrType == "DIFB") if (ClrType == "DIFB")
{ {

View File

@ -97,8 +97,7 @@ CPropertyStruct* CScriptLoader::LoadStructMP1(CInputStream& SCLY, CStructTemplat
break; break;
} }
case eColorProperty: { case eColorProperty: {
CVector4f color(SCLY); CColor v(SCLY);
CColor v(color.x, color.y, color.z, color.w);
pProp = new CColorProperty(v); pProp = new CColorProperty(v);
break; break;
} }
@ -334,8 +333,7 @@ void CScriptLoader::LoadStructMP2(CInputStream& SCLY, CPropertyStruct *pStruct,
case eColorProperty: { case eColorProperty: {
CColorProperty *pColorCast = static_cast<CColorProperty*>(pProp); CColorProperty *pColorCast = static_cast<CColorProperty*>(pProp);
CVector4f Color(SCLY); pColorCast->Set(CColor(SCLY));
pColorCast->Set(CColor(Color.x, Color.y, Color.z, Color.w));
break; break;
} }

View File

@ -339,7 +339,7 @@ void CTextureDecoder::FullDecodeGXTexture(CInputStream& TXTR)
else if (mTexelFormat == eGX_C8) Pixel = DecodePixelC8(TXTR.ReadByte(), mPaletteInput); else if (mTexelFormat == eGX_C8) Pixel = DecodePixelC8(TXTR.ReadByte(), mPaletteInput);
else if (mTexelFormat == eGX_RGB565) Pixel = DecodePixelRGB565(TXTR.ReadShort()); else if (mTexelFormat == eGX_RGB565) Pixel = DecodePixelRGB565(TXTR.ReadShort());
else if (mTexelFormat == eGX_RGB5A3) Pixel = DecodePixelRGB5A3(TXTR.ReadShort()); else if (mTexelFormat == eGX_RGB5A3) Pixel = DecodePixelRGB5A3(TXTR.ReadShort());
else if (mTexelFormat == eGX_RGBA8) Pixel = CColor(TXTR); else if (mTexelFormat == eGX_RGBA8) Pixel = CColor(TXTR, true);
Out.WriteLong(Pixel.ToLongARGB()); Out.WriteLong(Pixel.ToLongARGB());
} }
@ -558,25 +558,26 @@ void CTextureDecoder::ReadPixelRGB565(CInputStream& src, COutputStream& dst)
void CTextureDecoder::ReadPixelRGB5A3(CInputStream& src, COutputStream& dst) void CTextureDecoder::ReadPixelRGB5A3(CInputStream& src, COutputStream& dst)
{ {
u16 px = src.ReadShort(); u16 px = src.ReadShort();
CColor c; u8 r, g, b, a;
if (px & 0x8000) // RGB5 if (px & 0x8000) // RGB5
{ {
c.b = Extend5to8(px >> 10); b = Extend5to8(px >> 10);
c.g = Extend5to8(px >> 5); g = Extend5to8(px >> 5);
c.r = Extend5to8(px >> 0); r = Extend5to8(px >> 0);
c.a = 0xFF; a = 255;
} }
else // RGB4A3 else // RGB4A3
{ {
c.a = Extend3to8(px >> 12); a = Extend3to8(px >> 12);
c.b = Extend4to8(px >> 8); b = Extend4to8(px >> 8);
c.g = Extend4to8(px >> 4); g = Extend4to8(px >> 4);
c.r = Extend4to8(px >> 0); r = Extend4to8(px >> 0);
} }
dst.WriteLong(c.ToLongARGB()); u32 c = (a << 24) | (r << 16) | (g << 8) | b;
dst.WriteLong(c);
} }
void CTextureDecoder::ReadPixelRGBA8(CInputStream& src, COutputStream& dst) void CTextureDecoder::ReadPixelRGBA8(CInputStream& src, COutputStream& dst)
@ -606,26 +607,26 @@ CColor CTextureDecoder::DecodePixelI4(u8 Byte, u8 WhichPixel)
{ {
if (WhichPixel == 1) Byte >>= 4; if (WhichPixel == 1) Byte >>= 4;
u8 px = Extend4to8(Byte); u8 px = Extend4to8(Byte);
return CColor(px, px, px, 0xFF); return CColor::Integral(px, px, px);
} }
CColor CTextureDecoder::DecodePixelI8(u8 Byte) CColor CTextureDecoder::DecodePixelI8(u8 Byte)
{ {
return CColor(Byte, Byte, Byte, 0xFF); return CColor::Integral(Byte, Byte, Byte);
} }
CColor CTextureDecoder::DecodePixelIA4(u8 Byte) CColor CTextureDecoder::DecodePixelIA4(u8 Byte)
{ {
u8 Alpha = Extend4to8(Byte >> 4); u8 Alpha = Extend4to8(Byte >> 4);
u8 Lum = Extend4to8(Byte); u8 Lum = Extend4to8(Byte);
return CColor(Lum, Lum, Lum, Alpha); return CColor::Integral(Lum, Lum, Lum, Alpha);
} }
CColor CTextureDecoder::DecodePixelIA8(u16 Short) CColor CTextureDecoder::DecodePixelIA8(u16 Short)
{ {
u8 Alpha = (Short >> 8) & 0xFF; u8 Alpha = (Short >> 8) & 0xFF;
u8 Lum = Short & 0xFF; u8 Lum = Short & 0xFF;
return CColor(Lum, Lum, Lum, Alpha); return CColor::Integral(Lum, Lum, Lum, Alpha);
} }
CColor CTextureDecoder::DecodePixelC4(u8 Byte, u8 WhichPixel, CInputStream& PaletteStream) CColor CTextureDecoder::DecodePixelC4(u8 Byte, u8 WhichPixel, CInputStream& PaletteStream)
@ -654,7 +655,7 @@ CColor CTextureDecoder::DecodePixelRGB565(u16 Short)
u8 b = Extend5to8( (u8) (Short >> 11) ); u8 b = Extend5to8( (u8) (Short >> 11) );
u8 g = Extend6to8( (u8) (Short >> 5) ); u8 g = Extend6to8( (u8) (Short >> 5) );
u8 r = Extend5to8( (u8) (Short) ); u8 r = Extend5to8( (u8) (Short) );
return CColor(r, g, b, 0xFF); return CColor::Integral(r, g, b, 0xFF);
} }
CColor CTextureDecoder::DecodePixelRGB5A3(u16 Short) CColor CTextureDecoder::DecodePixelRGB5A3(u16 Short)
@ -664,7 +665,7 @@ CColor CTextureDecoder::DecodePixelRGB5A3(u16 Short)
u8 b = Extend5to8( (u8) (Short >> 10)); u8 b = Extend5to8( (u8) (Short >> 10));
u8 g = Extend5to8( (u8) (Short >> 5)); u8 g = Extend5to8( (u8) (Short >> 5));
u8 r = Extend5to8( (u8) (Short) ); u8 r = Extend5to8( (u8) (Short) );
return CColor(r, g, b, 0xFF); return CColor::Integral(r, g, b, 0xFF);
} }
else // RGB4A3 else // RGB4A3
@ -673,7 +674,7 @@ CColor CTextureDecoder::DecodePixelRGB5A3(u16 Short)
u8 b = Extend4to8( (u8) (Short >> 8) ); u8 b = Extend4to8( (u8) (Short >> 8) );
u8 g = Extend4to8( (u8) (Short >> 4) ); u8 g = Extend4to8( (u8) (Short >> 4) );
u8 r = Extend4to8( (u8) (Short) ); u8 r = Extend4to8( (u8) (Short) );
return CColor(r, g, b, a); return CColor::Integral(r, g, b, a);
} }
} }
@ -819,9 +820,8 @@ void CTextureDecoder::DecodeBlockBC3(CInputStream& src, COutputStream& dst, u32
} }
} }
CColor CTextureDecoder::DecodeDDSPixel(CInputStream&) CColor CTextureDecoder::DecodeDDSPixel(CInputStream& /*DDS*/)
{ {
// Not using parameter 1 (CInputStream& - DDS)
return CColor::skWhite; return CColor::skWhite;
} }

View File

@ -41,16 +41,16 @@ void CModelNode::Draw(ERenderOptions Options, int ComponentIndex, const SViewInf
{ {
CGraphics::SetDefaultLighting(); CGraphics::SetDefaultLighting();
CGraphics::UpdateLightBlock(); CGraphics::UpdateLightBlock();
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor.ToVector4f(); CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
} }
else else
{ {
CGraphics::sNumLights = 0; CGraphics::sNumLights = 0;
CGraphics::sVertexBlock.COLOR0_Amb = CColor::skBlack.ToVector4f(); CGraphics::sVertexBlock.COLOR0_Amb = CColor::skBlack;
} }
CGraphics::sPixelBlock.TevColor = CVector4f(1,1,1,1); CGraphics::sPixelBlock.TevColor = CColor::skWhite;
CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo).ToVector4f(); CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo);
LoadModelMatrix(); LoadModelMatrix();
if (ComponentIndex < 0) if (ComponentIndex < 0)

View File

@ -182,27 +182,28 @@ void CSceneNode::BuildLightList(CGameArea *pArea)
void CSceneNode::LoadLights(const SViewInfo& ViewInfo) void CSceneNode::LoadLights(const SViewInfo& ViewInfo)
{ {
CGraphics::sNumLights = 0; CGraphics::sNumLights = 0;
CGraphics::ELightingMode Mode = (ViewInfo.GameMode ? CGraphics::eWorldLighting : CGraphics::sLightMode);
if (CGraphics::sLightMode == CGraphics::eWorldLighting || ViewInfo.GameMode) switch (Mode)
{ {
case CGraphics::eNoLighting:
// No lighting: default ambient color, no dynamic lights
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
break;
case CGraphics::eBasicLighting:
// Basic lighting: default ambient color, default dynamic lights
CGraphics::SetDefaultLighting();
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
break;
case CGraphics::eWorldLighting:
// World lighting: world ambient color, node dynamic lights // World lighting: world ambient color, node dynamic lights
CGraphics::sVertexBlock.COLOR0_Amb = mAmbientColor.ToVector4f(); CGraphics::sVertexBlock.COLOR0_Amb = mAmbientColor;
for (u32 iLight = 0; iLight < mLightCount; iLight++) for (u32 iLight = 0; iLight < mLightCount; iLight++)
mLights[iLight]->Load(); mLights[iLight]->Load();
} break;
else if (CGraphics::sLightMode == CGraphics::eBasicLighting)
{
// Basic lighting: default ambient color, default dynamic lights
CGraphics::SetDefaultLighting();
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor.ToVector4f();
}
else if (CGraphics::sLightMode == CGraphics::eNoLighting)
{
// No lighting: default ambient color, no dynamic lights
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor.ToVector4f();
} }
CGraphics::UpdateLightBlock(); CGraphics::UpdateLightBlock();

View File

@ -163,9 +163,9 @@ void CScriptNode::Draw(ERenderOptions Options, int ComponentIndex, const SViewIn
// Draw model if possible! // Draw model if possible!
if (mpActiveModel) if (mpActiveModel)
{ {
if (mpExtra) CGraphics::sPixelBlock.TevColor = mpExtra->TevColor().ToVector4f(); if (mpExtra) CGraphics::sPixelBlock.TevColor = mpExtra->TevColor();
else CGraphics::sPixelBlock.TevColor = CColor::skWhite.ToVector4f(); else CGraphics::sPixelBlock.TevColor = CColor::skWhite;
CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo).ToVector4f(); CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo);
CGraphics::UpdatePixelBlock(); CGraphics::UpdatePixelBlock();
if (ComponentIndex < 0) if (ComponentIndex < 0)
@ -447,7 +447,7 @@ void CScriptNode::GeneratePosition()
CColor CScriptNode::WireframeColor() const CColor CScriptNode::WireframeColor() const
{ {
return CColor((u8) 12, 135, 194, 255); return CColor::Integral(12, 135, 194);
} }
CScriptObject* CScriptNode::Object() const CScriptObject* CScriptNode::Object() const

View File

@ -48,10 +48,10 @@ void CStaticNode::Draw(ERenderOptions Options, int ComponentIndex, const SViewIn
{ {
if (!mpModel) return; if (!mpModel) return;
CGraphics::sVertexBlock.COLOR0_Amb = CVector4f(0, 0, 0, 1); CGraphics::sVertexBlock.COLOR0_Amb = CColor::skBlack;
float Multiplier = CGraphics::sWorldLightMultiplier; float Mul = CGraphics::sWorldLightMultiplier;
CGraphics::sPixelBlock.TevColor = CVector4f(Multiplier,Multiplier,Multiplier,1); CGraphics::sPixelBlock.TevColor = CColor(Mul,Mul,Mul);
CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo).ToVector4f(); CGraphics::sPixelBlock.TintColor = TintColor(ViewInfo);
CGraphics::sNumLights = 0; CGraphics::sNumLights = 0;
CGraphics::UpdateLightBlock(); CGraphics::UpdateLightBlock();
LoadModelMatrix(); LoadModelMatrix();

View File

@ -201,7 +201,7 @@ void CDamageableTriggerExtra::AddToRenderer(CRenderer *pRenderer, const SViewInf
void CDamageableTriggerExtra::Draw(ERenderOptions Options, int /*ComponentIndex*/, const SViewInfo& ViewInfo) void CDamageableTriggerExtra::Draw(ERenderOptions Options, int /*ComponentIndex*/, const SViewInfo& ViewInfo)
{ {
LoadModelMatrix(); LoadModelMatrix();
CGraphics::sPixelBlock.TintColor = mpParent->TintColor(ViewInfo).ToVector4f(); CGraphics::sPixelBlock.TintColor = mpParent->TintColor(ViewInfo);
mpMat->SetCurrent(Options); mpMat->SetCurrent(Options);
// Note: The plane the game renders this onto is 5x4.5, which is why we divide the tex coords by this value // Note: The plane the game renders this onto is 5x4.5, which is why we divide the tex coords by this value

View File

@ -67,8 +67,8 @@ void CDoorExtra::Draw(ERenderOptions Options, int ComponentIndex, const SViewInf
if (mpShieldColorProp) if (mpShieldColorProp)
Tint *= mpShieldColorProp->Get(); Tint *= mpShieldColorProp->Get();
CGraphics::sPixelBlock.TintColor = Tint.ToVector4f(); CGraphics::sPixelBlock.TintColor = Tint;
CGraphics::sPixelBlock.TevColor = CColor::skWhite.ToVector4f(); CGraphics::sPixelBlock.TevColor = CColor::skWhite;
CGraphics::UpdatePixelBlock(); CGraphics::UpdatePixelBlock();
if (ComponentIndex < 0) if (ComponentIndex < 0)

View File

@ -1,7 +1,7 @@
#include "CPointOfInterestExtra.h" #include "CPointOfInterestExtra.h"
const CColor CPointOfInterestExtra::skRegularColor ((u32) 0xFF7000FF); const CColor CPointOfInterestExtra::skRegularColor = CColor::Integral(0xFF,0x70,0x00);
const CColor CPointOfInterestExtra::skImportantColor((u32) 0xFF0000FF); const CColor CPointOfInterestExtra::skImportantColor = CColor::Integral(0xFF,0x00,0x00);
CPointOfInterestExtra::CPointOfInterestExtra(CScriptObject *pInstance, CSceneManager *pScene, CSceneNode *pParent) CPointOfInterestExtra::CPointOfInterestExtra(CScriptObject *pInstance, CSceneManager *pScene, CSceneNode *pParent)
: CScriptExtra(pInstance, pScene, pParent) : CScriptExtra(pInstance, pScene, pParent)

View File

@ -86,7 +86,7 @@ void CGizmo::Draw(ERenderOptions /*Options*/, int ComponentIndex, const SViewInf
CGraphics::UpdateMVPBlock(); CGraphics::UpdateMVPBlock();
// Clear tint color // Clear tint color
CGraphics::sPixelBlock.TintColor = CColor::skWhite.ToVector4f(); CGraphics::sPixelBlock.TintColor = CColor::skWhite;
CGraphics::UpdatePixelBlock(); CGraphics::UpdatePixelBlock();
// Choose material set // Choose material set

View File

@ -62,7 +62,7 @@ void CModelEditorViewport::Paint()
if (!mpActiveMaterial) return; if (!mpActiveMaterial) return;
glEnable(GL_CULL_FACE); glEnable(GL_CULL_FACE);
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor.ToVector4f(); CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity; CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity;
CGraphics::UpdateMVPBlock(); CGraphics::UpdateMVPBlock();
CGraphics::SetDefaultLighting(); CGraphics::SetDefaultLighting();
@ -79,7 +79,7 @@ void CModelEditorViewport::Paint()
CGraphics::SetDefaultLighting(); CGraphics::SetDefaultLighting();
CGraphics::UpdateLightBlock(); CGraphics::UpdateLightBlock();
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor.ToVector4f(); CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity; CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity;
CGraphics::sMVPBlock.ViewMatrix = CMatrix4f::skIdentity; CGraphics::sMVPBlock.ViewMatrix = CMatrix4f::skIdentity;

View File

@ -47,7 +47,7 @@ void WTextureGLWidget::paintGL()
CDrawUtil::DrawSquare(&mCheckerCoords[0].x); CDrawUtil::DrawSquare(&mCheckerCoords[0].x);
// Make it darker // Make it darker
CDrawUtil::UseColorShader(CColor((u8) 0, 0, 0, 128)); CDrawUtil::UseColorShader(CColor::Integral(0.0f, 0.0f, 0.0f, 0.5f));
glDepthMask(GL_FALSE); glDepthMask(GL_FALSE);
CDrawUtil::DrawSquare(); CDrawUtil::DrawSquare();