[gtk/gamma-shenanigans] wip: Support floating point textures



commit 9198114d57f4fdbe6eef8ad797743ee46cabe2a0
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Sep 6 08:27:42 2021 -0400

    wip: Support floating point textures
    
    This is still incomplete; it needs format conversions
    and the tests need adjustments.

 gdk/gdkglcontext.c     | 7 +++++++
 gdk/gdkmemorytexture.c | 6 +++++-
 gdk/gdkmemorytexture.h | 2 ++
 3 files changed, 14 insertions(+), 1 deletion(-)
---
diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c
index 464612e616..8abd6a6ef1 100644
--- a/gdk/gdkglcontext.c
+++ b/gdk/gdkglcontext.c
@@ -285,6 +285,13 @@ gdk_gl_context_upload_texture (GdkGLContext    *context,
           gl_type = GL_UNSIGNED_SHORT;
           bpp = 8;
         }
+      else if (data_format == GDK_MEMORY_R16G16B16A16_FLOAT)
+        {
+          gl_internalformat = GL_RGBA16F;
+          gl_format = GL_RGBA;
+          gl_type = GL_HALF_FLOAT;
+          bpp = 6;
+        }
       else /* Fall-back, convert to cairo-surface-format */
         {
           copy = g_malloc (width * height * 4);
diff --git a/gdk/gdkmemorytexture.c b/gdk/gdkmemorytexture.c
index 69d0e0317e..a249134225 100644
--- a/gdk/gdkmemorytexture.c
+++ b/gdk/gdkmemorytexture.c
@@ -65,6 +65,9 @@ gdk_memory_format_bytes_per_pixel (GdkMemoryFormat format)
     case GDK_MEMORY_R16G16B16A16_PREMULTIPLIED:
       return 8;
 
+    case GDK_MEMORY_R16G16B16_FLOAT:
+      return 6;
+
     case GDK_MEMORY_N_FORMATS:
     default:
       g_assert_not_reached ();
@@ -347,7 +350,8 @@ static ConversionFunc converters[GDK_MEMORY_N_FORMATS][3] =
   { convert_swizzle_premultiply_3210_0321, convert_swizzle_premultiply_0123_0321, 
convert_swizzle_premultiply_3012_0321 },
   { convert_swizzle_opaque_3210, convert_swizzle_opaque_0123, convert_swizzle_opaque_3012 },
   { convert_swizzle_opaque_3012, convert_swizzle_opaque_0321, convert_swizzle_opaque_3210 },
-  { convert_16to8_swizzle_2103, convert_16to8_swizzle_1230, convert_16to8_swizzle_0123 }
+  { convert_16to8_swizzle_2103, convert_16to8_swizzle_1230, convert_16to8_swizzle_0123 },
+  { NULL, NULL, NULL } // FIXME
 };
 
 void
diff --git a/gdk/gdkmemorytexture.h b/gdk/gdkmemorytexture.h
index eeeb3ad4a7..83ac29462b 100644
--- a/gdk/gdkmemorytexture.h
+++ b/gdk/gdkmemorytexture.h
@@ -44,6 +44,7 @@ G_BEGIN_DECLS
  * @GDK_MEMORY_B8G8R8: 3 bytes; for blue, green, red. The data is opaque.
  * @GDK_MEMORY_R16G16B16A16_PREMULTIPLIED: 4 guint16 values; for red, green, blue, alpha.
  *   The color values are premultiplied with the alpha value.
+ * @GDK_MEMORY_B16G16R16_FLOAT: 3 half-float values; for blue, green, red. The data is opaque.
  * @GDK_MEMORY_N_FORMATS: The number of formats. This value will change as
  *   more formats get added, so do not rely on its concrete integer.
  *
@@ -70,6 +71,7 @@ typedef enum {
   GDK_MEMORY_R8G8B8,
   GDK_MEMORY_B8G8R8,
   GDK_MEMORY_R16G16B16A16_PREMULTIPLIED,
+  GDK_MEMORY_R16G16B16_FLOAT,
 
   GDK_MEMORY_N_FORMATS
 } GdkMemoryFormat;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]