while (n--)
{
double alpha = fsrc[3];
- if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
+ if (alpha <= BABL_ALPHA_FLOOR)
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
*fdst++ = babl_trc_from_linear (trc[0], *fsrc++) * alpha;
*fdst++ = babl_trc_from_linear (trc[1], *fsrc++) * alpha;
*fdst++ = babl_trc_from_linear (trc[2], *fsrc++) * alpha;
else
{
if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
*fdst++ = linear_to_gamma_2_2_lut (red) * alpha;
*fdst++ = linear_to_gamma_2_2_lut (green) * alpha;
*fdst++ = linear_to_gamma_2_2_lut (blue) * alpha;
float green = *fsrc++;
float blue = *fsrc++;
float alpha = *fsrc++;
- if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
if (alpha >= 1.0)
{
int val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f;
float blue = *fsrc++;
float alpha = *fsrc++;
- if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
- if (alpha >= 1.0)
+ if (alpha == 1.0)
{
*fdst++ = linear_to_gamma_2_2_lut (red);
*fdst++ = linear_to_gamma_2_2_lut (green);
{
float alpha = fsrc[3];
if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
*fdst++ = babl_trc_from_linear (trc[0], *fsrc++) * alpha;
*fdst++ = babl_trc_from_linear (trc[1], *fsrc++) * alpha;
*fdst++ = babl_trc_from_linear (trc[2], *fsrc++) * alpha;
{
float alpha = fsrc[3];
if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
*fdst++ = babl_trc_from_linear (trc_srgb, *fsrc++) * alpha;
*fdst++ = babl_trc_from_linear (trc_srgb, *fsrc++) * alpha;
*fdst++ = babl_trc_from_linear (trc_srgb, *fsrc++) * alpha;
float alpha = src[3];
if (alpha == 0.0f)
{
- dst[0] = 0;
- dst[1] = 0;
- dst[2] = 0;
+ dst[0] = 0.0f;
+ dst[1] = 0.0f;
+ dst[2] = 0.0f;
}
else
{
{
float alpha = src[3];
if (alpha < BABL_ALPHA_FLOOR)
- alpha = BABL_ALPHA_FLOOR;
+ {
+ if (alpha >= 0.0f)
+ alpha = BABL_ALPHA_FLOOR;
+ else if (alpha >= -BABL_ALPHA_FLOOR)
+ alpha = -BABL_ALPHA_FLOOR;
+ }
dst[0] = src[0] * alpha;
dst[1] = src[1] * alpha;
dst[2] = src[2] * alpha;
dst[0] = src[0] * recip;
dst[1] = src[1] * recip;
dst[2] = src[2] * recip;
- if (alpha == BABL_ALPHA_FLOOR)
- dst[3] = 0.0f;
- else
- dst[3] = alpha;
+ if (alpha == BABL_ALPHA_FLOOR || alpha == -BABL_ALPHA_FLOOR)
+ alpha = 0.0f;
+ dst[3] = alpha;
src += 4;
dst += 4;
}
else
{
float recip = (1.0/alpha);
- if (alpha == BABL_ALPHA_FLOOR)
+ if (alpha == BABL_ALPHA_FLOOR || alpha == -BABL_ALPHA_FLOOR)
alpha = 0.0f;
dst[0] = table_F_8[gggl_float_to_index16 (src[0] * recip)];
dst[1] = table_F_8[gggl_float_to_index16 (src[1] * recip)];
{
float alpha = src[3] * 255;
- if (alpha < BABL_ALPHA_FLOOR)
+ if (alpha <= BABL_ALPHA_FLOOR)
{
*(int *)dst = 0;
}
float alpha1 = ((float *)s)[7];
if (alpha0 < BABL_ALPHA_FLOOR)
- ((float *)s)[3] = BABL_ALPHA_FLOOR;
+ {
+ if (alpha0 >= 0.0f)
+ ((float *)s)[3] = BABL_ALPHA_FLOOR;
+ else
+ ((float *)s)[3] = -BABL_ALPHA_FLOOR;
+ }
if (alpha1 < BABL_ALPHA_FLOOR)
- ((float *)s)[7] = BABL_ALPHA_FLOOR;
+ {
+ if (alpha1 >= 0.0f)
+ ((float *)s)[7] = BABL_ALPHA_FLOOR;
+ else
+ ((float *)s)[7] = -BABL_ALPHA_FLOOR;
+ }
{
__v4sf rbaa0, rbaa1;
while (remainder--)
{
float a = src[3];
- if (a < BABL_ALPHA_FLOOR)
- a = BABL_ALPHA_FLOOR;
+ if (a <= BABL_ALPHA_FLOOR)
+ {
+ if (a >= 0.0f)
+ a = BABL_ALPHA_FLOOR;
+ else if (a >= -BABL_ALPHA_FLOOR)
+ a = -BABL_ALPHA_FLOOR;
+ }
dst[0] = src[0] * a;
dst[1] = src[1] * a;
dst[2] = src[2] * a;
rbaa0 = _mm_shuffle_ps(rgba0, pre_rgba0, _MM_SHUFFLE(3, 3, 2, 0));
rgba0 = _mm_shuffle_ps(rgba0, rbaa0, _MM_SHUFFLE(2, 1, 1, 0));
- if (alpha0 == BABL_ALPHA_FLOOR)
+ if (alpha0 == BABL_ALPHA_FLOOR || alpha0 == -BABL_ALPHA_FLOOR)
((float *)d)[3] = 0.0f;
s++;
while (n--)
{
- if (src[3] < BABL_ALPHA_FLOOR)
+ if (src[3] <= BABL_ALPHA_FLOOR)
{
dst[0] = 0;
dst[1] = 0;