1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Use _FIXED2FLOATCOLOR

This commit is contained in:
gizmo98 2018-05-31 11:59:44 +02:00 committed by Sergey Lipskiy
parent 997820c000
commit 4750e10076
6 changed files with 70 additions and 69 deletions

View File

@ -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

View File

@ -759,8 +759,8 @@ public:
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:

View File

@ -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;
@ -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;
@ -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 );
}
@ -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 );
}
@ -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))

View File

@ -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;
@ -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;
}
@ -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;
@ -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 );

View File

@ -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]);
@ -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);

View File

@ -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;
@ -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);