diff options
Diffstat (limited to 'Source/Core/VideoCommon/Src/PixelShaderManager.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/Src/PixelShaderManager.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp index c6a3e3da08..f298629536 100644 --- a/Source/Core/VideoCommon/Src/PixelShaderManager.cpp +++ b/Source/Core/VideoCommon/Src/PixelShaderManager.cpp @@ -31,7 +31,7 @@ static bool s_bZTextureTypeChanged; static bool s_bDepthRangeChanged; static bool s_bFogColorChanged; static bool s_bFogParamChanged; -static float lastDepthRange[2]; // 0 = far z, 1 = far - near +static float lastDepthRange[4]; // 0 = far z, 1 = far - near, 2 = scale , 3 = offset static float lastRGBAfull[2][4][4]; static float lastCustomTexScale[8][2]; static u8 s_nTexDimsChanged; @@ -54,6 +54,10 @@ void PixelShaderManager::Init() lastZBias = 0; s_texturemask = 0; memset(lastRGBAfull, 0, sizeof(lastRGBAfull)); + lastDepthRange[0]=16777216.0f; + lastDepthRange[1]=16777216.0f; + lastDepthRange[2]=16777216.0f; + lastDepthRange[3]=0.0f; Dirty(); } @@ -132,7 +136,7 @@ void PixelShaderManager::SetConstants() if (s_bZBiasChanged || s_bDepthRangeChanged) { //ERROR_LOG("pixel=%x,%x, bias=%x\n", bpmem.zcontrol.pixel_format, bpmem.ztex2.type, lastZBias); - SetPSConstant4f(C_ZBIAS+1, lastDepthRange[0] / 16777215.0f, lastDepthRange[1] / 16777215.0f, 0, (float)( (((int)lastZBias<<8)>>8))/16777215.0f); + SetPSConstant4f(C_ZBIAS+1, (lastDepthRange[0] + lastDepthRange[3]) / lastDepthRange[2], (lastDepthRange[1] + lastDepthRange[3]) / lastDepthRange[2], 0, (float)( (((int)lastZBias<<8)>>8))/16777215.0f); s_bZBiasChanged = s_bDepthRangeChanged = false; } @@ -326,6 +330,24 @@ void PixelShaderManager::SetViewport(float* viewport) } } +void PixelShaderManager::SetZScale(float data) +{ + if (lastDepthRange[2] != data) + { + lastDepthRange[2] = data; + s_bDepthRangeChanged = true; + } +} + +void PixelShaderManager::SetZOffset(float data) +{ + if (lastDepthRange[3] != data) + { + lastDepthRange[3] = data; + s_bDepthRangeChanged = true; + } +} + void PixelShaderManager::SetIndTexScaleChanged(u8 stagemask) { s_nIndTexScaleChanged |= stagemask; |
