Fix buffer overrun crash in ForwardShadingFeature
This commit is contained in:
@@ -97,26 +97,22 @@ void ForwardShadingFeature::Bind(MaterialShader::BindParameters& params, byte*&
|
||||
|
||||
// Set local lights
|
||||
data.LocalLightsCount = 0;
|
||||
for (int32 i = 0; i < cache->PointLights.Count(); i++)
|
||||
for (int32 i = 0; i < cache->PointLights.Count() && data.LocalLightsCount < MaxLocalLights; i++)
|
||||
{
|
||||
const auto& light = cache->PointLights[i];
|
||||
if (BoundingSphere(light.Position, light.Radius).Contains(drawCall.World.GetTranslation()) != ContainmentType::Disjoint)
|
||||
{
|
||||
light.SetupLightData(&data.LocalLights[data.LocalLightsCount], view, false);
|
||||
data.LocalLightsCount++;
|
||||
if (data.LocalLightsCount == MaxLocalLights)
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int32 i = 0; i < cache->SpotLights.Count(); i++)
|
||||
for (int32 i = 0; i < cache->SpotLights.Count() && data.LocalLightsCount < MaxLocalLights; i++)
|
||||
{
|
||||
const auto& light = cache->SpotLights[i];
|
||||
if (BoundingSphere(light.Position, light.Radius).Contains(drawCall.World.GetTranslation()) != ContainmentType::Disjoint)
|
||||
{
|
||||
light.SetupLightData(&data.LocalLights[data.LocalLightsCount], view, false);
|
||||
data.LocalLightsCount++;
|
||||
if (data.LocalLightsCount == MaxLocalLights)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user