Oklab: disable only Oklch not Oklab
authorØyvind Kolås <pippin@gimp.org>
Fri, 29 Oct 2021 01:34:36 +0000 (03:34 +0200)
committerØyvind Kolås <pippin@gimp.org>
Sat, 30 Oct 2021 02:56:25 +0000 (04:56 +0200)
Oklab itself is enabled by default now for testing, but does not seem to
produce correct values with the Oklab test vectors, even with manual
attempt at converting the test vector (presumed) CIE XYZ D65 to CIE XYZ
D50 before running the conversion.

The failure to pass symmetry tests as mentioned in issue #63 seems to be
limited to Oklch, Oklab itself is fine.

extensions/oklab.c

index 6dab0a793670218729235bd1fdfb2b2ef6d5b367..4add977b502901150f82753103f8abcd6eff1f36 100644 (file)
@@ -44,12 +44,14 @@ static void formats (void);
 \r
 int init (void);\r
 \r
+static int enable_lch = 0;\r
+ // the Oklch conversions are not fully symmetric,\r
+ // thus not allowing the tests to pass if we register\r
+ // the code\r
+\r
 int\r
 init (void)\r
 {\r
-  return 0; // the oklab conversions are not fully symmetric,\r
-            // thus not allowing the tests to pass if we register\r
-            // the code\r
   components ();\r
   models ();\r
   formats ();\r
@@ -84,15 +86,18 @@ models (void)
       babl_component ("Ok L"), babl_component ("Ok a"),\r
       babl_component ("Ok b"), babl_component ("A"), "alpha", NULL);\r
 \r
-  babl_model_new ("name", "Oklch", "doc",\r
-                  "Cylindrical representation of Oklab.",\r
-                  babl_component ("Ok L"), babl_component ("Ok C"),\r
-                  babl_component ("Ok H"), NULL);\r
+  if (enable_lch)\r
+  {\r
+    babl_model_new ("name", "Oklch", "doc",\r
+                    "Cylindrical representation of Oklab.",\r
+                    babl_component ("Ok L"), babl_component ("Ok C"),\r
+                    babl_component ("Ok H"), NULL);\r
 \r
-  babl_model_new (\r
-      "name", "OklchA", "doc", "Oklch color model with separate alpha.",\r
-      babl_component ("Ok L"), babl_component ("Ok C"),\r
-      babl_component ("Ok H"), babl_component ("A"), "alpha", NULL);\r
+    babl_model_new (\r
+        "name", "OklchA", "doc", "Oklch color model with separate alpha.",\r
+        babl_component ("Ok L"), babl_component ("Ok C"),\r
+        babl_component ("Ok H"), babl_component ("A"), "alpha", NULL);\r
+  }\r
 }\r
 \r
 static void\r
@@ -108,15 +113,6 @@ formats (void)
     NULL\r
   );\r
 \r
-  babl_format_new (\r
-    "name", "Oklch float",\r
-    babl_model ("Oklch"),\r
-    babl_type ("float"),\r
-    babl_component ("Ok L"),\r
-    babl_component ("Ok C"),\r
-    babl_component ("Ok H"),\r
-    NULL\r
-  );\r
 \r
   babl_format_new (\r
     "name", "Oklab alpha float",\r
@@ -129,6 +125,18 @@ formats (void)
     NULL\r
   );\r
 \r
+  if (enable_lch)\r
+  {\r
+  babl_format_new (\r
+    "name", "Oklch float",\r
+    babl_model ("Oklch"),\r
+    babl_type ("float"),\r
+    babl_component ("Ok L"),\r
+    babl_component ("Ok C"),\r
+    babl_component ("Ok H"),\r
+    NULL\r
+  );\r
+\r
   babl_format_new (\r
     "name", "Oklch alpha float",\r
     babl_model ("OklchA"),\r
@@ -139,6 +147,7 @@ formats (void)
     babl_component ("A"),\r
     NULL\r
   );\r
+  }\r
 }\r
 \r
 /* Convertion routine (space definition). */\r
@@ -323,12 +332,12 @@ constants (void)
   babl_matrix_mul_matrix (tmp, M1, M1);\r
 \r
   babl_matrix_invert (M1, inv_M1);\r
-  babl_matrix_to_float (inv_M1, inv_M1f);\r
   babl_matrix_invert (M2, inv_M2);\r
-  babl_matrix_to_float (inv_M2, inv_M2f);\r
 \r
   babl_matrix_to_float (M1, M1f);\r
   babl_matrix_to_float (M2, M2f);\r
+  babl_matrix_to_float (inv_M1, inv_M1f);\r
+  babl_matrix_to_float (inv_M2, inv_M2f);\r
 \r
   mat_ready = 1;\r
 }\r
@@ -809,6 +818,12 @@ conversions (void)
                        "linear", lab_to_rgba,\r
                        NULL);\r
 \r
+  _pair ("RGB float", "Oklab float", rgb_to_lab_float, lab_to_rgb_float);\r
+  _pair ("RGBA float", "Oklab alpha float", rgba_to_laba_float, laba_to_rgba_float);\r
+  _pair ("RGBA float", "Oklab float", rgba_to_lab_float, lab_to_rgba_float);\r
+\r
+  if (enable_lch)\r
+  {\r
   babl_conversion_new (babl_model("RGBA"),\r
                        babl_model("OklchA"),\r
                        "linear", rgba_to_lcha,\r
@@ -826,17 +841,12 @@ conversions (void)
                        babl_model("RGBA"),\r
                        "linear", lch_to_rgba,\r
                        NULL);\r
-\r
-\r
-  _pair ("RGB float", "Oklab float", rgb_to_lab_float, lab_to_rgb_float);\r
-  _pair ("RGBA float", "Oklab alpha float", rgba_to_laba_float, laba_to_rgba_float);\r
-  _pair ("RGBA float", "Oklab float", rgba_to_lab_float, lab_to_rgba_float);\r
-\r
   _pair ("RGBA float", "Oklch float", rgba_to_lch_float, lch_to_rgba_float);\r
   _pair ("RGB float", "Oklch float", rgb_to_lch_float, lch_to_rgb_float);\r
   _pair ("RGBA float", "Oklch alpha float", rgba_to_lcha_float, lcha_to_rgba_float);\r
   \r
   _pair ("Oklab float", "Oklch float", lab_to_lch_float, lch_to_lab_float);\r
   _pair ("Oklab alpha float", "Oklch alpha float", laba_to_lcha_float, lcha_to_laba_float);\r
+  }\r
   #undef _pair\r
 }\r