Skip to content

Commit

Permalink
Use _FIXED2FLOATCOLOR
Browse files Browse the repository at this point in the history
  • Loading branch information
gizmo98 authored and gonetz committed Jun 2, 2018
1 parent 997820c commit 4750e10
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 69 deletions.
1 change: 1 addition & 0 deletions src/GBI.h
Expand Up @@ -55,6 +55,7 @@
#define _FIXED2FLOAT( v, b ) \
((f32)v * FIXED2FLOATRECIP##b)

#define FIXED2FLOATRECIPCOLOR5 3.22580635547637939453125e-02f
#define FIXED2FLOATRECIPCOLOR7 7.8740157186985015869140625e-03f
#define FIXED2FLOATRECIPCOLOR8 3.9215688593685626983642578125e-03f

Expand Down
Expand Up @@ -759,8 +759,8 @@ class UColors : public UniformGroup
uEnvColor.set(&gDP.envColor.r, _force);
uPrimColor.set(&gDP.primColor.r, _force);
uPrimLod.set(gDP.primColor.l, _force);
uK4.set(gDP.convert.k4*0.0039215689f, _force);
uK5.set(gDP.convert.k5*0.0039215689f, _force);
uK4.set(_FIXED2FLOATCOLOR(gDP.convert.k4, 8 ), _force);
uK5.set(_FIXED2FLOATCOLOR(gDP.convert.k5, 8 ), _force);
}

private:
Expand Down
70 changes: 35 additions & 35 deletions src/gDP.cpp
Expand Up @@ -180,20 +180,20 @@ void gDPSetDepthImage( u32 address )

void gDPSetEnvColor( u32 r, u32 g, u32 b, u32 a )
{
gDP.envColor.r = r * 0.0039215689f;
gDP.envColor.g = g * 0.0039215689f;
gDP.envColor.b = b * 0.0039215689f;
gDP.envColor.a = a * 0.0039215689f;
gDP.envColor.r = _FIXED2FLOATCOLOR( r, 8 );
gDP.envColor.g = _FIXED2FLOATCOLOR( g, 8 );
gDP.envColor.b = _FIXED2FLOATCOLOR( b, 8 );
gDP.envColor.a = _FIXED2FLOATCOLOR( a, 8 );

DebugMsg( DEBUG_NORMAL, "gDPSetEnvColor( %i, %i, %i, %i );\n", r, g, b, a );
}

void gDPSetBlendColor( u32 r, u32 g, u32 b, u32 a )
{
gDP.blendColor.r = r * 0.0039215689f;
gDP.blendColor.g = g * 0.0039215689f;
gDP.blendColor.b = b * 0.0039215689f;
gDP.blendColor.a = a * 0.0039215689f;
gDP.blendColor.r = _FIXED2FLOATCOLOR( r, 8 );
gDP.blendColor.g = _FIXED2FLOATCOLOR( g, 8 );
gDP.blendColor.b = _FIXED2FLOATCOLOR( b, 8 );
gDP.blendColor.a = _FIXED2FLOATCOLOR( a, 8 );

gDP.changed |= CHANGED_BLENDCOLOR;

Expand All @@ -202,10 +202,10 @@ void gDPSetBlendColor( u32 r, u32 g, u32 b, u32 a )

void gDPSetFogColor( u32 r, u32 g, u32 b, u32 a )
{
gDP.fogColor.r = r * 0.0039215689f;
gDP.fogColor.g = g * 0.0039215689f;
gDP.fogColor.b = b * 0.0039215689f;
gDP.fogColor.a = a * 0.0039215689f;
gDP.fogColor.r = _FIXED2FLOATCOLOR( r, 8 );
gDP.fogColor.g = _FIXED2FLOATCOLOR( g, 8 );
gDP.fogColor.b = _FIXED2FLOATCOLOR( b, 8 );
gDP.fogColor.a = _FIXED2FLOATCOLOR( a, 8 );

gDP.changed |= CHANGED_FOGCOLOR;

Expand All @@ -225,26 +225,26 @@ void gDPGetFillColor(f32 _fillColor[4])
{
const u32 c = gDP.fillColor.color;
if (gDP.colorImage.size < 3) {
_fillColor[0] = _SHIFTR( c, 11, 5 ) * 0.032258064f;
_fillColor[1] = _SHIFTR( c, 6, 5 ) * 0.032258064f;
_fillColor[2] = _SHIFTR( c, 1, 5 ) * 0.032258064f;
_fillColor[0] = _FIXED2FLOATCOLOR( _SHIFTR( c, 11, 5 ), 5 );
_fillColor[1] = _FIXED2FLOATCOLOR( _SHIFTR( c, 6, 5 ), 5 );
_fillColor[2] = _FIXED2FLOATCOLOR( _SHIFTR( c, 1, 5 ), 5 );
_fillColor[3] = (f32)_SHIFTR( c, 0, 1 );
} else {
_fillColor[0] = _SHIFTR( c, 24, 8 ) * 0.0039215686f;
_fillColor[1] = _SHIFTR( c, 16, 8 ) * 0.0039215686f;
_fillColor[2] = _SHIFTR( c, 8, 8 ) * 0.0039215686f;
_fillColor[3] = _SHIFTR( c, 0, 8 ) * 0.0039215686f;
_fillColor[0] = _FIXED2FLOATCOLOR( _SHIFTR( c, 24, 8 ), 8 );
_fillColor[1] = _FIXED2FLOATCOLOR( _SHIFTR( c, 16, 8 ), 8 );
_fillColor[2] = _FIXED2FLOATCOLOR( _SHIFTR( c, 8, 8 ), 8 );
_fillColor[3] = _FIXED2FLOATCOLOR( _SHIFTR( c, 0, 8 ), 8 );
}
}

void gDPSetPrimColor( u32 m, u32 l, u32 r, u32 g, u32 b, u32 a )
{
gDP.primColor.m = m * 0.0312500000f;
gDP.primColor.l = l * 0.0039215689f;
gDP.primColor.r = r * 0.0039215689f;
gDP.primColor.g = g * 0.0039215689f;
gDP.primColor.b = b * 0.0039215689f;
gDP.primColor.a = a * 0.0039215689f;
gDP.primColor.m = _FIXED2FLOAT( m, 5 );
gDP.primColor.l = _FIXED2FLOATCOLOR( l, 8 );
gDP.primColor.r = _FIXED2FLOATCOLOR( r, 8 );
gDP.primColor.g = _FIXED2FLOATCOLOR( g, 8 );
gDP.primColor.b = _FIXED2FLOATCOLOR( b, 8 );
gDP.primColor.a = _FIXED2FLOATCOLOR( a, 8 );

DebugMsg( DEBUG_NORMAL, "gDPSetPrimColor( %i, %i, %i, %i, %i, %i );\n", m, l, r, g, b, a );
}
Expand Down Expand Up @@ -781,20 +781,20 @@ void gDPSetConvert( s32 k0, s32 k1, s32 k2, s32 k3, s32 k4, s32 k5 )

void gDPSetKeyR( u32 cR, u32 sR, u32 wR )
{
gDP.key.center.r = cR * 0.0039215689f;
gDP.key.scale.r = sR * 0.0039215689f;
gDP.key.width.r = wR * 0.0039215689f;
gDP.key.center.r = _FIXED2FLOATCOLOR( cR, 8 );
gDP.key.scale.r = _FIXED2FLOATCOLOR( sR, 8 );
gDP.key.width.r = _FIXED2FLOATCOLOR( wR, 8 );
DebugMsg( DEBUG_NORMAL, "gDPSetKeyR( %u, %u, %u );\n", cR, sR, wR );
}

void gDPSetKeyGB(u32 cG, u32 sG, u32 wG, u32 cB, u32 sB, u32 wB )
{
gDP.key.center.g = cG * 0.0039215689f;
gDP.key.scale.g = sG * 0.0039215689f;
gDP.key.width.g = wG * 0.0039215689f;
gDP.key.center.b = cB * 0.0039215689f;
gDP.key.scale.b = sB * 0.0039215689f;
gDP.key.width.b = wB * 0.0039215689f;
gDP.key.center.g = _FIXED2FLOATCOLOR( cG, 8 );
gDP.key.scale.g = _FIXED2FLOATCOLOR( sG, 8 );
gDP.key.width.g = _FIXED2FLOATCOLOR( wG, 8 );
gDP.key.center.b = _FIXED2FLOATCOLOR( cB, 8 );
gDP.key.scale.b = _FIXED2FLOATCOLOR( sB, 8 );
gDP.key.width.b = _FIXED2FLOATCOLOR( wB, 8 );
DebugMsg( DEBUG_NORMAL, "gDPSetKeyGB( %u, %u, %u, %u, %u, %u );\n",
cG, sG, wG, cB, sB, wB );
}
Expand Down Expand Up @@ -1003,7 +1003,7 @@ void gDPLLETriangle(u32 _w1, u32 _w2, int _shade, int _texture, int _zbuffer, u3
#define ZSCALE(z) ((gDP.otherMode.depthSource == G_ZS_PRIM)? gDP.primDepth.z : float(u32(z))/0xffff0000)
#define PERSP_EN (gDP.otherMode.texturePersp != 0)
#define WSCALE(z) 1.0f/(PERSP_EN? (float(u32(z) + 0x10000)/0xffff0000) : 1.0f)
#define CSCALE(c) ((((c)>0x3ff0000? 0x3ff0000:((c)<0? 0 : (c)))>>18)*0.0039215689f)
#define CSCALE(c) _FIXED2FLOATCOLOR((((c)>0x3ff0000? 0x3ff0000:((c)<0? 0 : (c)))>>18), 8)
#define _PERSP(w) ( w )
#define PERSP(s, w) ( ((s64)(s) << 20) / (_PERSP(w)? _PERSP(w):1) )
#define SSCALE(s, _w) (PERSP_EN? float(PERSP(s, _w))/(1 << 10) : float(s)/(1<<21))
Expand Down
30 changes: 15 additions & 15 deletions src/gSP.cpp
Expand Up @@ -314,9 +314,9 @@ void gSPLight( u32 l, s32 n )
Light *light = (Light*)&RDRAM[addrByte];

if (n < 8) {
gSP.lights.rgb[n][R] = light->r * 0.0039215689f;
gSP.lights.rgb[n][G] = light->g * 0.0039215689f;
gSP.lights.rgb[n][B] = light->b * 0.0039215689f;
gSP.lights.rgb[n][R] = _FIXED2FLOATCOLOR(light->r,8);
gSP.lights.rgb[n][G] = _FIXED2FLOATCOLOR(light->g,8);
gSP.lights.rgb[n][B] = _FIXED2FLOATCOLOR(light->b,8);

gSP.lights.xyz[n][X] = light->x;
gSP.lights.xyz[n][Y] = light->y;
Expand Down Expand Up @@ -1144,12 +1144,12 @@ u32 gSPLoadF3DAMVertexData(const Vertex *orgVtx, SPVertex * spVtx, u32 v0, u32 v
vtx.nx = _FIXED2FLOATCOLOR( orgVtx->normal.x, 7 );
vtx.ny = _FIXED2FLOATCOLOR( orgVtx->normal.y, 7 );
vtx.nz = _FIXED2FLOATCOLOR( orgVtx->normal.z, 7 );
vtx.a = orgVtx->color.a * 0.0039215689f;
vtx.a = _FIXED2FLOATCOLOR(orgVtx->color.a,8);
} else {
vtx.r = orgVtx->color.r * 0.0039215689f;
vtx.g = orgVtx->color.g * 0.0039215689f;
vtx.b = orgVtx->color.b * 0.0039215689f;
vtx.a = orgVtx->color.a * 0.0039215689f;
vtx.r = _FIXED2FLOATCOLOR(orgVtx->color.r,8);
vtx.g = _FIXED2FLOATCOLOR(orgVtx->color.g,8);
vtx.b = _FIXED2FLOATCOLOR(orgVtx->color.b,8);
vtx.a = _FIXED2FLOATCOLOR(orgVtx->color.a,8);
}
++orgVtx;
}
Expand Down Expand Up @@ -1614,10 +1614,10 @@ void gSPModifyVertex( u32 _vtx, u32 _where, u32 _val )
SPVertex & vtx0 = drawer.getVertex(_vtx);
switch (_where) {
case G_MWO_POINT_RGBA:
vtx0.r = _SHIFTR( _val, 24, 8 ) * 0.0039215689f;
vtx0.g = _SHIFTR( _val, 16, 8 ) * 0.0039215689f;
vtx0.b = _SHIFTR( _val, 8, 8 ) * 0.0039215689f;
vtx0.a = _SHIFTR( _val, 0, 8 ) * 0.0039215689f;
vtx0.r = _FIXED2FLOATCOLOR(_SHIFTR( _val, 24, 8 ),8);
vtx0.g = _FIXED2FLOATCOLOR(_SHIFTR( _val, 16, 8 ),8);
vtx0.b = _FIXED2FLOATCOLOR(_SHIFTR( _val, 8, 8 ),8);
vtx0.a = _FIXED2FLOATCOLOR(_SHIFTR( _val, 0, 8 ),8);
vtx0.modify |= MODIFY_RGBA;
DebugMsg(DEBUG_NORMAL, "gSPModifyVertex: RGBA(%02f, %02f, %02f, %02f);\n", vtx0.r, vtx0.g, vtx0.b, vtx0.a);
break;
Expand Down Expand Up @@ -1687,9 +1687,9 @@ void gSPLightColor( u32 lightNum, u32 packedColor )

if (lightNum < 8)
{
gSP.lights.rgb[lightNum][R] = _SHIFTR( packedColor, 24, 8 ) * 0.0039215689f;
gSP.lights.rgb[lightNum][G] = _SHIFTR( packedColor, 16, 8 ) * 0.0039215689f;
gSP.lights.rgb[lightNum][B] = _SHIFTR( packedColor, 8, 8 ) * 0.0039215689f;
gSP.lights.rgb[lightNum][R] = _FIXED2FLOATCOLOR(_SHIFTR( packedColor, 24, 8 ),8);
gSP.lights.rgb[lightNum][G] = _FIXED2FLOATCOLOR(_SHIFTR( packedColor, 16, 8 ),8);
gSP.lights.rgb[lightNum][B] = _FIXED2FLOATCOLOR(_SHIFTR( packedColor, 8, 8 ),8);
gSP.changed |= CHANGED_HW_LIGHT;
}
DebugMsg(DEBUG_NORMAL, "gSPLightColor( %i, 0x%08X );\n", lightNum, packedColor );
Expand Down
20 changes: 10 additions & 10 deletions src/uCodes/ZSort.cpp
Expand Up @@ -206,16 +206,16 @@ void ZSort_XFMLight( u32 _w0, u32 _w1 )
*/


gSP.lights.rgb[gSP.numLights][R] = (f32)(((u8*)DMEM)[(addr+0)^3]) * 0.0039215689f;
gSP.lights.rgb[gSP.numLights][G] = (f32)(((u8*)DMEM)[(addr+1)^3]) * 0.0039215689f;
gSP.lights.rgb[gSP.numLights][B] = (f32)(((u8*)DMEM)[(addr+2)^3]) * 0.0039215689f;
gSP.lights.rgb[gSP.numLights][R] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+0)^3], 8 );
gSP.lights.rgb[gSP.numLights][G] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+1)^3], 8 );
gSP.lights.rgb[gSP.numLights][B] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+2)^3], 8 );
addr += 8;
u32 i;
for (i = 0; i < gSP.numLights; ++i)
{
gSP.lights.rgb[i][R] = (f32)(((u8*)DMEM)[(addr+0)^3]) * 0.0039215689f;
gSP.lights.rgb[i][G] = (f32)(((u8*)DMEM)[(addr+1)^3]) * 0.0039215689f;
gSP.lights.rgb[i][B] = (f32)(((u8*)DMEM)[(addr+2)^3]) * 0.0039215689f;
gSP.lights.rgb[i][R] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+0)^3], 8 );
gSP.lights.rgb[i][G] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+1)^3], 8 );
gSP.lights.rgb[i][B] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+2)^3], 8 );
gSP.lights.xyz[i][X] = (f32)(((s8*)DMEM)[(addr+8)^3]);
gSP.lights.xyz[i][Y] = (f32)(((s8*)DMEM)[(addr+9)^3]);
gSP.lights.xyz[i][Z] = (f32)(((s8*)DMEM)[(addr+10)^3]);
Expand Down Expand Up @@ -273,10 +273,10 @@ void ZSort_Lighting( u32 _w0, u32 _w1 )
vtx.a = 1.0f;
if (use_material)
{
vtx.r *= DMEM[(csrs++)^3] * 0.0039215689f;
vtx.g *= DMEM[(csrs++)^3] * 0.0039215689f;
vtx.b *= DMEM[(csrs++)^3] * 0.0039215689f;
vtx.a = DMEM[(csrs++)^3] * 0.0039215689f;
vtx.r *= _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 );
vtx.g *= _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 );
vtx.b *= _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 );
vtx.a = _FIXED2FLOATCOLOR(DMEM[(csrs++)^3], 8 );
}
DMEM[(cdest++)^3] = (u8)(vtx.r * 255.0f);
DMEM[(cdest++)^3] = (u8)(vtx.g * 255.0f);
Expand Down
14 changes: 7 additions & 7 deletions src/uCodes/ZSortBOSS.cpp
Expand Up @@ -383,10 +383,10 @@ void ZSortBOSS_DrawObject(u8 * _addr, u32 _type)
vtx.x = _FIXED2FLOAT(((s16*)_addr)[0 ^ 1], 2);
vtx.y = _FIXED2FLOAT(((s16*)_addr)[1 ^ 1], 2);
vtx.z = 0.0f;
vtx.r = _addr[4^3] * 0.0039215689f;
vtx.g = _addr[5^3] * 0.0039215689f;
vtx.b = _addr[6^3] * 0.0039215689f;
vtx.a = _addr[7^3] * 0.0039215689f;
vtx.r = _FIXED2FLOATCOLOR(_addr[4^3], 8 );
vtx.g = _FIXED2FLOATCOLOR(_addr[5^3], 8 );
vtx.b = _FIXED2FLOATCOLOR(_addr[6^3], 8 );
vtx.a = _FIXED2FLOATCOLOR(_addr[7^3], 8 );
vtx.flag = 0;
vtx.HWLight = 0;
vtx.clip = 0;
Expand Down Expand Up @@ -601,9 +601,9 @@ void ZSortBOSS_TransformLights( u32 _w0, u32 _w1 )
{
assert(0);

gSP.lights.rgb[i][R] = (f32)(((u8*)DMEM)[(addr+8+0)^3]) * 0.0039215689f;
gSP.lights.rgb[i][G] = (f32)(((u8*)DMEM)[(addr+8+1)^3]) * 0.0039215689f;
gSP.lights.rgb[i][B] = (f32)(((u8*)DMEM)[(addr+8+2)^3]) * 0.0039215689f;
gSP.lights.rgb[i][R] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+8+0)^3], 8 );
gSP.lights.rgb[i][G] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+8+1)^3], 8 );
gSP.lights.rgb[i][B] = _FIXED2FLOATCOLOR(((u8*)DMEM)[(addr+8+2)^3], 8 );

gSP.lights.xyz[i][X] = _FIXED2FLOAT((((s8*)DMEM)[(addr+16+0)^3]),8);
gSP.lights.xyz[i][Y] = _FIXED2FLOAT((((s8*)DMEM)[(addr+16+1)^3]),8);
Expand Down

0 comments on commit 4750e10

Please sign in to comment.