diff --git a/src/Features/LightLimitFix.cpp b/src/Features/LightLimitFix.cpp index e42e930ef3..51f2811a15 100644 --- a/src/Features/LightLimitFix.cpp +++ b/src/Features/LightLimitFix.cpp @@ -222,9 +222,14 @@ void LightLimitFix::BSLightingShader_SetupGeometry_GeometrySetupConstantPointLig strictLightDataTemp.NumStrictLights = inWorld ? 0 : (a_pass->numLights - 1); + uint32_t writeIdx = 0; for (uint32_t i = 0; i < strictLightDataTemp.NumStrictLights; i++) { auto bsLight = a_pass->sceneLights[i + 1]; + if (!bsLight) + continue; auto niLight = bsLight->light.get(); + if (!niLight) + continue; auto& runtimeData = niLight->GetLightRuntimeData(); @@ -251,14 +256,17 @@ void LightLimitFix::BSLightingShader_SetupGeometry_GeometrySetupConstantPointLig light.lightFlags.set(LightFlags::Shadow); } - strictLightDataTemp.StrictLights[i] = light; + strictLightDataTemp.StrictLights[writeIdx++] = light; } + strictLightDataTemp.NumStrictLights = writeIdx; for (uint32_t i = 0; i < a_pass->numShadowLights; i++) { auto bsLight = a_pass->sceneLights[i + 1]; + if (!bsLight) + continue; auto* shadowLight = static_cast(bsLight); GET_INSTANCE_MEMBER(maskIndex, shadowLight); - strictLightDataTemp.ShadowBitMask |= (1 << maskIndex); + strictLightDataTemp.ShadowBitMask |= (1u << maskIndex); } }