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

Fix fog for F3DSWRS

This commit is contained in:
Sergey Lipskiy 2017-04-27 15:05:28 +07:00
parent a0c2b39a65
commit 089dd2df0e
5 changed files with 15 additions and 7 deletions

View File

@ -30,6 +30,8 @@
#define F3DSWRS_TRI1 0xBF
#define F3DSWRS_MV_TEXSCALE 0x82
#define F3DSWRS_MW_FOG_MULTIPLIER 0x08
#define F3DSWRS_MW_FOG_OFFSET 0x0A
void F3DSWRS_VertexColor(u32, u32 _w1)
{
@ -181,11 +183,13 @@ void F3DSWRS_MoveWord(u32 _w0, u32 _w1)
case G_MW_SEGMENT:
gSPSegment( _SHIFTR( _w0, 8, 16 ) >> 2, _w1 & 0x00FFFFFF );
break;
case G_MW_FOG:
gSPFogFactor( (s16)_SHIFTR( _w1, 16, 16 ), (s16)_SHIFTR( _w1, 0, 16 ) );
case F3DSWRS_MW_FOG_MULTIPLIER:
gSP.fog.multiplierf = _FIXED2FLOAT((s32)_w1, 16);
gSP.changed |= CHANGED_FOGPOSITION;
break;
case G_MW_LIGHTCOL:
gSPLightColor((_SHIFTR( _w0, 8, 8 ) / 32) + 1, _w1 );
case F3DSWRS_MW_FOG_OFFSET:
gSP.fog.offsetf = _FIXED2FLOAT((s32)_w1, 16);
gSP.changed |= CHANGED_FOGPOSITION;
break;
case G_MW_PERSPNORM:
gSPPerspNormalize( _w1 );

View File

@ -261,7 +261,7 @@ public:
nFogUsage = 2;
}
uFogUsage.set(nFogUsage, _force);
uFogScale.set((float)gSP.fog.multiplier / 256.0f, (float)gSP.fog.offset / 256.0f, _force);
uFogScale.set(gSP.fog.multiplierf, gSP.fog.offsetf, _force);
}
private:

View File

@ -511,11 +511,12 @@ void ZSort_MoveMem( u32 _w0, u32 _w1 )
const f32 scale_x = _FIXED2FLOAT( *(s16*)&RDRAM[(a+0)^1], 2 );
const f32 scale_y = _FIXED2FLOAT( *(s16*)&RDRAM[(a+1)^1], 2 );
const f32 scale_z = _FIXED2FLOAT( *(s16*)&RDRAM[(a+2)^1], 10 );
gSP.fog.multiplier = ((s16*)RDRAM)[(a+3)^1];
const s16 fm = ((s16*)RDRAM)[(a+3)^1];
const f32 trans_x = _FIXED2FLOAT( *(s16*)&RDRAM[(a+4)^1], 2 );
const f32 trans_y = _FIXED2FLOAT( *(s16*)&RDRAM[(a+5)^1], 2 );
const f32 trans_z = _FIXED2FLOAT( *(s16*)&RDRAM[(a+6)^1], 10 );
gSP.fog.offset = ((s16*)RDRAM)[(a+7)^1];
const s16 fo = ((s16*)RDRAM)[(a+7)^1];
gSPFogFactor(fm, fo);
gSP.viewport.vscale[0] = scale_x;
gSP.viewport.vscale[1] = scale_y;

View File

@ -1899,6 +1899,8 @@ void gSPFogFactor( s16 fm, s16 fo )
{
gSP.fog.multiplier = fm;
gSP.fog.offset = fo;
gSP.fog.multiplierf = _FIXED2FLOAT(fm, 8);
gSP.fog.offsetf = _FIXED2FLOAT(fo, 8);
gSP.changed |= CHANGED_FOGPOSITION;
DebugMsg(DEBUG_NORMAL, "gSPFogFactor( %i, %i );\n", fm, fo);

View File

@ -110,6 +110,7 @@ struct gSPInfo
struct
{
s16 multiplier, offset;
f32 multiplierf, offsetf;
} fog;
struct