# HG changeset patch # User Couriersud # Date 1231881458 0 # Node ID 490f3e4fe75328e46c3867766f565a5e674d46be # Parent 76a1692fcec5010dff92ffc23ad8baf0c425aae9 Added DFB_VERSION_ATLEAST macro First attempt at replacing MakeSubSurface for pre 1.2.0 ==> Scaling not yet working diff -r 76a1692fcec5 -r 490f3e4fe753 src/video/directfb/SDL_DirectFB_events.c --- a/src/video/directfb/SDL_DirectFB_events.c Tue Jan 13 19:31:06 2009 +0000 +++ b/src/video/directfb/SDL_DirectFB_events.c Tue Jan 13 21:17:38 2009 +0000 @@ -48,7 +48,7 @@ static void DirectFB_SetContext(_THIS, SDL_WindowID id) { -#if (DIRECTFB_MAJOR_VERSION >= 1) +#if (DFB_VERSION_ATLEAST(1,0,0)) /* FIXME: does not work on 1.0/1.2 with radeon driver * the approach did work with the matrox driver * This has simply no effect. diff -r 76a1692fcec5 -r 490f3e4fe753 src/video/directfb/SDL_DirectFB_modes.c --- a/src/video/directfb/SDL_DirectFB_modes.c Tue Jan 13 19:31:06 2009 +0000 +++ b/src/video/directfb/SDL_DirectFB_modes.c Tue Jan 13 21:17:38 2009 +0000 @@ -335,7 +335,7 @@ display.current_mode = mode; display.driverdata = dispdata; -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT | DLCONF_OPTIONS; @@ -438,7 +438,7 @@ 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) +#if (DFB_VERSION_ATLEAST(1,2,0)) /* Need to call this twice ! */ SDL_DFB_CHECKERR(data->layer->SetConfiguration(data->layer, &config)); #endif diff -r 76a1692fcec5 -r 490f3e4fe753 src/video/directfb/SDL_DirectFB_render.c --- a/src/video/directfb/SDL_DirectFB_render.c Tue Jan 13 19:31:06 2009 +0000 +++ b/src/video/directfb/SDL_DirectFB_render.c Tue Jan 13 21:17:38 2009 +0000 @@ -140,7 +140,7 @@ IDirectFBPalette *palette; SDL_VideoDisplay *display; SDL_DirtyRectList dirty; -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) DFBSurfaceRenderOptions render_options; #endif } DirectFB_TextureData; @@ -387,7 +387,7 @@ case SDL_PIXELFORMAT_INDEX4MSB: return DSPF_UNKNOWN; case SDL_PIXELFORMAT_RGB444: -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) return DSPF_RGB444; #else return DSPF_UNKNOWN; @@ -543,7 +543,7 @@ } } -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) data->render_options = DSRO_NONE; #endif @@ -673,7 +673,7 @@ static int DirectFB_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture) { -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) DirectFB_TextureData *data = (DirectFB_TextureData *) texture->driverdata; @@ -847,7 +847,7 @@ PrepareDraw(renderer); /* Use antialiasing when available */ -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) SDL_DFB_CHECKERR(data->surface->SetRenderOptions(data->surface, DSRO_ANTIALIAS)); #endif @@ -961,7 +961,7 @@ data->blitFlags | flags)); -#if (DIRECTFB_MAJOR_VERSION == 1) && (DIRECTFB_MINOR_VERSION >= 2) +#if (DFB_VERSION_ATLEAST(1,2,0)) SDL_DFB_CHECKERR(data->surface->SetRenderOptions(data->surface, texturedata-> render_options)); diff -r 76a1692fcec5 -r 490f3e4fe753 src/video/directfb/SDL_DirectFB_video.h --- a/src/video/directfb/SDL_DirectFB_video.h Tue Jan 13 19:31:06 2009 +0000 +++ b/src/video/directfb/SDL_DirectFB_video.h Tue Jan 13 21:17:38 2009 +0000 @@ -34,13 +34,20 @@ #define DEBUG 0 #define LOG_CHANNEL stdout -#if (DIRECTFB_MAJOR_VERSION < 1) -#error "SDL_DIRECTFB: Please compile against libdirectfb version >= 1.0.0" -#endif +#define DFB_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +#define DFB_COMPILEDVERSION \ + DFB_VERSIONNUM(DIRECTFB_MAJOR_VERSION, DIRECTFB_MINOR_VERSION, DIRECTFB_MICRO_VERSION) -#if (DIRECTFB_MAJOR_VERSION >= 1) && (DIRECTFB_MINOR_VERSION >= 0) && (DIRECTFB_MICRO_VERSION >= 0 ) -#define SDL_DIRECTFB_OPENGL 1 -#include +#define DFB_VERSION_ATLEAST(X, Y, Z) \ + (DFB_COMPILEDVERSION >= DFB_VERSIONNUM(X, Y, Z)) + +#if (DFB_VERSION_ATLEAST(1,0,0)) + #define SDL_DIRECTFB_OPENGL 1 + #include +#else + #error "SDL_DIRECTFB: Please compile against libdirectfb version >= 1.0.0" #endif #if SDL_DIRECTFB_OPENGL diff -r 76a1692fcec5 -r 490f3e4fe753 src/video/directfb/SDL_DirectFB_window.c --- a/src/video/directfb/SDL_DirectFB_window.c Tue Jan 13 19:31:06 2009 +0000 +++ b/src/video/directfb/SDL_DirectFB_window.c Tue Jan 13 21:17:38 2009 +0000 @@ -420,14 +420,28 @@ } if (adjust) { - SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window, +#if DFB_VERSION_ATLEAST(1,2,0) + SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window, windata->size.w, windata->size.h)); - SDL_DFB_CHECKERR(windata->surface->MakeSubSurface(windata->surface, + SDL_DFB_CHECKERR(windata->surface->MakeSubSurface(windata->surface, windata-> window_surface, &windata->client)); - DirectFB_WM_RedrawLayout(window); +#else + /* recreate subsurface */ + windata->surface->ReleaseSource(windata->surface); + windata->window_surface->ReleaseSource(windata->window_surface); + SDL_DFB_RELEASE(windata->surface); + windata->surface = NULL; + SDL_DFB_CHECKERR(windata->window->ResizeSurface(windata->window, + windata->size.w, + windata->size.h)); + SDL_DFB_CHECKERR(windata->window_surface-> + GetSubSurface(windata->window_surface, &windata->client, + &windata->surface)); +#endif + DirectFB_WM_RedrawLayout(window); } error: return;