OSDN Git Service

ui/sdl2: Support shared surface for more pixman formats
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 9 Jan 2015 08:27:09 +0000 (09:27 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 19 Jan 2015 12:33:26 +0000 (13:33 +0100)
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
include/ui/sdl2.h
ui/sdl2-2d.c
ui/sdl2.c

index f56c596..51fff2e 100644 (file)
@@ -28,5 +28,7 @@ void sdl2_2d_switch(DisplayChangeListener *dcl,
                     DisplaySurface *new_surface);
 void sdl2_2d_refresh(DisplayChangeListener *dcl);
 void sdl2_2d_redraw(struct sdl2_console *scon);
+bool sdl2_2d_check_format(DisplayChangeListener *dcl,
+                          pixman_format_code_t format);
 
 #endif /* SDL2_H */
index 9264817..f907c21 100644 (file)
@@ -120,3 +120,16 @@ void sdl2_2d_redraw(struct sdl2_console *scon)
                    surface_width(scon->surface),
                    surface_height(scon->surface));
 }
+
+bool sdl2_2d_check_format(DisplayChangeListener *dcl,
+                          pixman_format_code_t format)
+{
+    /*
+     * We let SDL convert for us a few more formats than,
+     * the native ones. Thes are the ones I have tested.
+     */
+    return (format == PIXMAN_x8r8g8b8 ||
+            format == PIXMAN_b8g8r8x8 ||
+            format == PIXMAN_x1r5g5b5 ||
+            format == PIXMAN_r5g6b5);
+}
index 1ae2781..60e3c3b 100644 (file)
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -668,12 +668,13 @@ static void sdl_cleanup(void)
 }
 
 static const DisplayChangeListenerOps dcl_2d_ops = {
-    .dpy_name          = "sdl2-2d",
-    .dpy_gfx_update    = sdl2_2d_update,
-    .dpy_gfx_switch    = sdl2_2d_switch,
-    .dpy_refresh       = sdl2_2d_refresh,
-    .dpy_mouse_set     = sdl_mouse_warp,
-    .dpy_cursor_define = sdl_mouse_define,
+    .dpy_name             = "sdl2-2d",
+    .dpy_gfx_update       = sdl2_2d_update,
+    .dpy_gfx_switch       = sdl2_2d_switch,
+    .dpy_gfx_check_format = sdl2_2d_check_format,
+    .dpy_refresh          = sdl2_2d_refresh,
+    .dpy_mouse_set        = sdl_mouse_warp,
+    .dpy_cursor_define    = sdl_mouse_define,
 };
 
 void sdl_display_init(DisplayState *ds, int full_screen, int no_frame)