testsuite: Imitate gdk_memory_convert() correctly
authorBenjamin Otte <otte@redhat.com>
Mon, 29 May 2023 21:32:25 +0000 (23:32 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 29 May 2023 22:39:46 +0000 (00:39 +0200)
The formula use to compute pixel values from GdkRGBA floats was slightly
adapted some time ago, copy that adaptation

testsuite/gdk/memorytexture.c

index 5b0b146c4abb40822086ed14498c0e5cdc4df46e..836047c02dda508029a4135af0d92b24f3b3eeb7 100644 (file)
@@ -183,18 +183,18 @@ set_pixel_u8 (guchar          *data,
               const GdkRGBA   *color)
 {
   if (a >= 0)
-    data[a] = CLAMP (color->alpha * 256.f, 0.f, 255.f);
+    data[a] = CLAMP (color->alpha * 255.f + 0.5f, 0.f, 255.f);
   if (premultiply)
     {
-      data[r] = CLAMP (color->red * color->alpha * 256.f, 0.f, 255.f);
-      data[g] = CLAMP (color->green * color->alpha * 256.f, 0.f, 255.f);
-      data[b] = CLAMP (color->blue * color->alpha * 256.f, 0.f, 255.f);
+      data[r] = CLAMP (color->red * color->alpha * 255.f + 0.5f, 0.f, 255.f);
+      data[g] = CLAMP (color->green * color->alpha * 255.f + 0.5f, 0.f, 255.f);
+      data[b] = CLAMP (color->blue * color->alpha * 255.f + 0.5f, 0.f, 255.f);
     }
   else
     {
-      data[r] = CLAMP (color->red * 256.f, 0.f, 255.f);
-      data[g] = CLAMP (color->green * 256.f, 0.f, 255.f);
-      data[b] = CLAMP (color->blue * 256.f, 0.f, 255.f);
+      data[r] = CLAMP (color->red * 255.f + 0.5f, 0.f, 255.f);
+      data[g] = CLAMP (color->green * 255.f + 0.5f, 0.f, 255.f);
+      data[b] = CLAMP (color->blue * 255.f + 0.5f, 0.f, 255.f);
     }
 }
 
@@ -257,9 +257,9 @@ texture_builder_set_pixel (TextureBuilder  *builder,
     case GDK_MEMORY_R16G16B16:
       {
         guint16 pixels[3] = {
-          CLAMP (color->red * color->alpha * 65536.f, 0, 65535.f),
-          CLAMP (color->green * color->alpha * 65536.f, 0, 65535.f),
-          CLAMP (color->blue * color->alpha * 65536.f, 0, 65535.f),
+          CLAMP (color->red * color->alpha * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->green * color->alpha * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->blue * color->alpha * 65535.f + 0.5f, 0, 65535.f),
         };
         memcpy (data, pixels, 3 * sizeof (guint16));
       }
@@ -267,10 +267,10 @@ texture_builder_set_pixel (TextureBuilder  *builder,
     case GDK_MEMORY_R16G16B16A16_PREMULTIPLIED:
       {
         guint16 pixels[4] = {
-          CLAMP (color->red * color->alpha * 65536.f, 0, 65535.f),
-          CLAMP (color->green * color->alpha * 65536.f, 0, 65535.f),
-          CLAMP (color->blue * color->alpha * 65536.f, 0, 65535.f),
-          CLAMP (color->alpha * 65536.f, 0, 65535.f),
+          CLAMP (color->red * color->alpha * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->green * color->alpha * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->blue * color->alpha * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->alpha * 65535.f + 0.5f, 0, 65535.f),
         };
         memcpy (data, pixels, 4 * sizeof (guint16));
       }
@@ -278,10 +278,10 @@ texture_builder_set_pixel (TextureBuilder  *builder,
     case GDK_MEMORY_R16G16B16A16:
       {
         guint16 pixels[4] = {
-          CLAMP (color->red * 65536.f, 0, 65535.f),
-          CLAMP (color->green * 65536.f, 0, 65535.f),
-          CLAMP (color->blue * 65536.f, 0, 65535.f),
-          CLAMP (color->alpha * 65536.f, 0, 65535.f),
+          CLAMP (color->red * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->green * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->blue * 65535.f + 0.5f, 0, 65535.f),
+          CLAMP (color->alpha * 65535.f + 0.5f, 0, 65535.f),
         };
         memcpy (data, pixels, 4 * sizeof (guint16));
       }