scaling test: Avoid dividing zero by zero

If all four of the random colours have alpha channel exactly 0.0,
then the computed premultiplied average will also be zero.
Normalize the expected colour to (0,0,0,0) rather than (NaN,NaN,NaN,0).

Resolves: https://gitlab.gnome.org/GNOME/gtk/-/issues/6977
Signed-off-by: Simon McVittie <smcv@debian.org>
This commit is contained in:
Simon McVittie 2024-09-03 00:12:48 +01:00
parent 6e54589d9e
commit 4c4d260199

View File

@ -896,10 +896,22 @@ create_stipple_texture (GdkMemoryFormat format,
}
}
average->red /= average->alpha;
average->green /= average->alpha;
average->blue /= average->alpha;
average->alpha /= 4.0f;
if (average->alpha != 0.0f)
{
average->red /= average->alpha;
average->green /= average->alpha;
average->blue /= average->alpha;
average->alpha /= 4.0f;
}
else
{
/* Each component of the average has been multiplied by the alpha
* already, so if the alpha is zero, all components should also
* be zero */
g_assert_cmpfloat (average->red, ==, 0.0f);
g_assert_cmpfloat (average->green, ==, 0.0f);
g_assert_cmpfloat (average->blue, ==, 0.0f);
}
texture_builder_init (&builder, format, width, height);
for (y = 0; y < height; y++)