From 657a8ef7c30abb98df8a7bfdce4586d4dd080377 Mon Sep 17 00:00:00 2001 From: Anthony Date: Sat, 3 Apr 2021 19:58:27 +1300 Subject: [PATCH] Disable lighting for point sprites --- src/core/hle/D3D8/Direct3D9/Direct3D9.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp index 4b7a6a55d..65b524a0a 100644 --- a/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp +++ b/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp @@ -6448,7 +6448,11 @@ void UpdateFixedFunctionVertexShaderState() } // Lighting - ffShaderState.Modes.Lighting = (float)XboxRenderStates.GetXboxRenderState(X_D3DRS_LIGHTING); + // Point sprites aren't lit - 'each point is always rendered with constant colors.' + // https://docs.microsoft.com/en-us/windows/win32/direct3d9/point-sprites + bool PointSpriteEnable = XboxRenderStates.GetXboxRenderState(X_D3DRS_POINTSPRITEENABLE); + bool LightingEnable = XboxRenderStates.GetXboxRenderState(X_D3DRS_LIGHTING); + ffShaderState.Modes.Lighting = LightingEnable && !PointSpriteEnable; ffShaderState.Modes.TwoSidedLighting = (float)XboxRenderStates.GetXboxRenderState(X_D3DRS_TWOSIDEDLIGHTING); ffShaderState.Modes.LocalViewer = (float)XboxRenderStates.GetXboxRenderState(X_D3DRS_LOCALVIEWER); @@ -6464,7 +6468,6 @@ void UpdateFixedFunctionVertexShaderState() ffShaderState.Modes.BackEmissiveMaterialSource = (float)(ColorVertex ? XboxRenderStates.GetXboxRenderState(X_D3DRS_BACKEMISSIVEMATERIALSOURCE) : D3DMCS_MATERIAL); // Point sprites; Fetch required variables - bool PointSpriteEnable = XboxRenderStates.GetXboxRenderState(X_D3DRS_POINTSPRITEENABLE); float pointSize = XboxRenderStates.GetXboxRenderStateAsFloat(X_D3DRS_POINTSIZE); float pointSize_Min = XboxRenderStates.GetXboxRenderStateAsFloat(X_D3DRS_POINTSIZE_MIN); float pointSize_Max = XboxRenderStates.GetXboxRenderStateAsFloat(X_D3DRS_POINTSIZE_MAX);