Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
VideoSoftware: Implement fog range adjustment, fixing issue 6147.
  • Loading branch information
neobrain committed Mar 25, 2013
1 parent d4fadf4 commit ae146e8
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 4 deletions.
2 changes: 2 additions & 0 deletions Source/Core/VideoCommon/Src/BPMemory.h
Expand Up @@ -686,6 +686,8 @@ union FogRangeKElement
u32 LO : 12;
u32 regid : 8;
};
// TODO: Which scaling coefficient should we use here? This is just a guess!
float GetValue(int i) { return (i ? HI : LO) / 32.f; }
u32 HEX;
};

Expand Down
13 changes: 9 additions & 4 deletions Source/Plugins/Plugin_VideoSoftware/Src/Tev.cpp
Expand Up @@ -748,10 +748,15 @@ void Tev::Draw()

}

// stuff to do!
// here, where we'll have to add/handle x range adjustment (if related BP register it's enabled)
// x_adjust = sqrt((x-center)^2 + k^2)/k
// ze *= x_adjust
if(bpmem.fogRange.Base.Enabled)
{
// TODO: Check if this is correct (especially the magic values)
float offset = Position[0] - bpmem.fogRange.Base.Center + 324.f;
int index = 9 - abs(Position[0] - bpmem.fogRange.Base.Center + 324) / (162/5);
float k = bpmem.fogRange.K[index/2].GetValue(index%2);
float x_adjust = sqrt(offset*offset/162.f/162.f + k*k)/k;
ze *= x_adjust;
}

ze -= bpmem.fog.c_proj_fsel.GetC();

Expand Down

0 comments on commit ae146e8

Please sign in to comment.