# HG changeset patch # User Sam Lantinga # Date 1228090249 0 # Node ID e759ad5e6f4339c8c10fee502206cccc61a77205 # Parent e841aa93e6be00378c03924db7ccf87596df786b 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 diff -r e841aa93e6be -r e759ad5e6f43 README.DirectFB --- 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. - diff -r e841aa93e6be -r e759ad5e6f43 src/video/directfb/SDL_DirectFB_modes.c --- 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;