[gtk+/wip/mir-gdkgl: 2/7] mir: initialize pixel formats once and keep in display



commit 165b5a9f53acf7e8b05279844f07ef7bfcefc585
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Tue Nov 18 22:23:52 2014 +0100

    mir: initialize pixel formats once and keep in display

 gdk/mir/gdkmir-private.h |    2 ++
 gdk/mir/gdkmirdisplay.c  |   45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h
index 8305096..22a1fa4 100644
--- a/gdk/mir/gdkmir-private.h
+++ b/gdk/mir/gdkmir-private.h
@@ -77,6 +77,8 @@ void _gdk_mir_window_reference_unref (GdkMirWindowReference *ref);
 
 void _gdk_mir_event_source_queue (GdkMirWindowReference *window_ref, const MirEvent *event);
 
+MirPixelFormat _gdk_mir_display_get_pixel_format (GdkDisplay *display, MirBufferUsage usage);
+
 void _gdk_mir_print_modifiers (unsigned int modifiers);
 
 void _gdk_mir_print_key_event (const MirKeyEvent *event);
diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
index b44cc79..0374be3 100644
--- a/gdk/mir/gdkmirdisplay.c
+++ b/gdk/mir/gdkmirdisplay.c
@@ -46,6 +46,9 @@ typedef struct GdkMirDisplay
   GdkScreen *screen;
 
   GdkKeymap *keymap;
+
+  MirPixelFormat sw_pixel_format;
+  MirPixelFormat hw_pixel_format;
 } GdkMirDisplay;
 
 typedef struct GdkMirDisplayClass
@@ -53,6 +56,8 @@ typedef struct GdkMirDisplayClass
   GdkDisplayClass parent_class;
 } GdkMirDisplayClass;
 
+static void initialize_pixel_formats (GdkMirDisplay *display);
+
 /**
  * SECTION:mir_interaction
  * @Short_description: Mir backend-specific functions
@@ -112,6 +117,7 @@ _gdk_mir_display_open (const gchar *display_name)
   display->connection = connection;
   GDK_DISPLAY (display)->device_manager = _gdk_mir_device_manager_new (GDK_DISPLAY (display));
   display->screen = _gdk_mir_screen_new (GDK_DISPLAY (display));
+  initialize_pixel_formats (display);
 
   g_signal_emit_by_name (display, "opened");
 
@@ -488,6 +494,45 @@ gdk_mir_display_utf8_to_string_target (GdkDisplay  *display,
 }
 
 static void
+initialize_pixel_formats (GdkMirDisplay *display)
+{
+  MirPixelFormat formats[mir_pixel_formats];
+  unsigned int n_formats, i;
+
+  mir_connection_get_available_surface_formats (display->connection, formats,
+                                                mir_pixel_formats, &n_formats);
+
+  display->sw_pixel_format = mir_pixel_format_invalid;
+  display->hw_pixel_format = mir_pixel_format_invalid;
+
+  for (i = 0; i < n_formats; i++)
+    {
+      switch (formats[i])
+      {
+        case mir_pixel_format_abgr_8888:
+        case mir_pixel_format_xbgr_8888:
+        case mir_pixel_format_argb_8888:
+        case mir_pixel_format_xrgb_8888:
+          display->hw_pixel_format = formats[i];
+          break;
+        default:
+          continue;
+      }
+
+      if (display->hw_pixel_format != mir_pixel_format_invalid)
+        break;
+    }
+
+  for (i = 0; i < n_formats; i++)
+    {
+      if (formats[i] == mir_pixel_format_argb_8888)
+        {
+          display->sw_pixel_format = formats[i];
+          break;
+        }
+    }
+}
+
 gdk_mir_display_init (GdkMirDisplay *display)
 {
   display->event_source = _gdk_mir_event_source_new (GDK_DISPLAY (display));


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