Date: Mon, 01 Dec 2008 00:57:15 +0100
authorSam Lantinga <slouken@libsdl.org>
Mon, 01 Dec 2008 00:10:49 +0000
changeset 2815 e759ad5e6f43
parent 2814 e841aa93e6be
child 2816 22e393158355
Date: Mon, 01 Dec 2008 00:57:15 +0100 From: Couriersud Subject: SDL : Diff for directfb driver please find attached a diff against SVN containing the following: - Updated README.DirectFB a bit - Fix compile issue with debug output - Fix display mode setting/switching for directfb >= 1.2.2
README.DirectFB
src/video/directfb/SDL_DirectFB_modes.c
--- a/README.DirectFB	Mon Dec 01 00:07:45 2008 +0000
+++ b/README.DirectFB	Mon Dec 01 00:10:49 2008 +0000
@@ -5,13 +5,45 @@
 - Hardware YUV overlays
 - OpenGL - software only
 - 2D/3D accelerations (depends on directfb driver)
+- multiple displays
+- windows
 
 What you need:
 
-DirectFB 1.0.0 - required
+DirectFB 1.0.1, 1.2.x, 1.3.0
 Kernel-Framebuffer support: required: vesafb, radeonfb .... 
 Mesa 7.0.x	   - optional for OpenGL
 
+/etc/directfbrc
+
+This file should contain the following lines to make
+your joystick work and avoid crashes:
+------------------------
+disable-module=joystick
+disable-module=linux_input
+disable-module=cle266
+disable-module=cyber5k
+disable-module=x11input
+------------------------
+
+To use hardware accelerated YUV-overlays for YUV-textures, use:
+
+export SDL_DIRECTFB_YUV_DIRECT=1
+
+This is disabled by default. It will only support one 
+YUV texture, namely the first. Every other YUV texture will be
+rendered in software.
+
+In addition, you may use (directfb-1.2.x)
+
+export SDL_DIRECTFB_YUV_UNDERLAY=1
+
+to make the YUV texture an underlay. This will make the cursor to
+be shown.
+
+OPENGL Support
+==============
+
 As of this writing 20070810 you need to pull Mesa from git and do the following:
 
 ------------------------
@@ -19,7 +51,7 @@
 make linux-directfb
 make
 
-echo Installing - pleaser enter sudo pw.
+echo Installing - please enter sudo pw.
 
 sudo make install INSTALL_DIR=/usr/local/dfb_GL
 cd src/mesa/drivers/directfb
@@ -27,15 +59,6 @@
 sudo make install INSTALL_DIR=/usr/local/dfb_GL
 ------------------------
 
-/etc/directfbrc
-
-This file should contain the following two lines to make
-your joystick work:
-------------------------
-disable-module=joystick
-disable-module=linux_input
-------------------------
-
 To run the SDL - testprograms:
 
 export SDL_VIDEODRIVER=directfb
@@ -43,19 +66,3 @@
 export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7
 
 ./testgl
-
-To use hardware accelerated YUV-overlays for YUV-textures, use:
-
-export SDL_DIRECTFB_YUV_DIRECT=1
-
-This is disabled by default. It will only support one 
-YUV texture, namely the first. Every other YUV texture will be
-rendered in software.
-
-In addition, you may use 
-
-export SDL_DIRECTFB_YUV_UNDERLAY=1
-
-to make the YUV texture an underlay. This will make the cursor to
-be shown.
-
--- a/src/video/directfb/SDL_DirectFB_modes.c	Mon Dec 01 00:07:45 2008 +0000
+++ b/src/video/directfb/SDL_DirectFB_modes.c	Mon Dec 01 00:10:49 2008 +0000
@@ -290,7 +290,7 @@
 
     SDL_DFB_DEBUG("SDL directfb video driver - %s %s\n", __DATE__, __TIME__);
     SDL_DFB_DEBUG("Using %s (%s) driver.\n", caps.name, caps.vendor);
-    SDL_DFB_DEBUG("Found %d screens\n", devdata->numscreens);
+    SDL_DFB_DEBUG("Found %d screens\n", screencbdata->numscreens);
 
     for (i = 0; i < screencbdata->numscreens; i++) {
         SDL_DFB_CHECKERR(devdata->dfb->
@@ -315,9 +315,8 @@
             }
         }
 
-        SDL_DFB_CHECKERR(layer->SetCooperativeLevel(layer, DLSCL_SHARED));
-
         /* Query layer configuration to determine the current mode and pixelformat */
+        dlc.flags = DLCONF_ALL;
         layer->GetConfiguration(layer, &dlc);
 
         if (DFBToSDLPixelFormat(dlc.pixelformat, &mode.format) != 0) {
@@ -348,6 +347,13 @@
         display.current_mode = mode;
         display.driverdata = dispdata;
 
+#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2)
+       	dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT | DLCONF_OPTIONS;
+       	ret = layer->SetConfiguration(layer, &dlc);
+ #endif
+
+        SDL_DFB_CHECKERR(layer->SetCooperativeLevel(layer, DLSCL_SHARED));
+
         SDL_AddVideoDisplay(&display);
     }
     SDL_DFB_FREE(screencbdata);
@@ -442,6 +448,11 @@
     SDL_DFB_DEBUG("Trace\n");
     config.flags &= ~fail;
     SDL_DFB_CHECKERR(data->layer->SetConfiguration(data->layer, &config));
+#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2)
+    /* Need to call this twice ! */
+    SDL_DFB_CHECKERR(data->layer->SetConfiguration(data->layer, &config));
+    //SDL_DFB_CHECKERR(data->layer->SetSourceRectangle(data->layer, 0, 0, config.width, config.height));
+#endif
 
     /* Double check */
     SDL_DFB_CHECKERR(data->layer->GetConfiguration(data->layer, &rconfig));
@@ -456,7 +467,7 @@
                     mode->format);
         return -1;
     }
-
+    
     data->pixelformat = rconfig.pixelformat;
     data->cw = config.width;
     data->ch = config.height;