changeset 5142:57851a238c8f

Removed more partially functional renderers
author Sam Lantinga <slouken@libsdl.org>
date Mon, 31 Jan 2011 22:53:45 -0800
parents da10636e5eca
children e743b9c3f6d6
files configure.in include/SDL_config.h.in include/SDL_config_windows.h src/video/windows/SDL_ceddrawrender.c src/video/windows/SDL_ceddrawrender.h src/video/windows/SDL_gapirender.c src/video/windows/SDL_gapirender.h src/video/windows/SDL_gapirender_c.h src/video/windows/SDL_windowsevents.c src/video/windows/SDL_windowsvideo.c src/video/windows/SDL_windowsvideo.h src/video/windows/SDL_windowswindow.c
diffstat 12 files changed, 4 insertions(+), 2287 deletions(-) [+]
line wrap: on
line diff
--- a/configure.in	Mon Jan 31 22:44:43 2011 -0800
+++ b/configure.in	Mon Jan 31 22:53:45 2011 -0800
@@ -2345,18 +2345,6 @@
             AC_DEFINE(SDL_VIDEO_DRIVER_WINDOWS)
             SOURCES="$SOURCES $srcdir/src/video/windows/*.c"
             have_video=yes
-            AC_ARG_ENABLE(render-gapi,
-AC_HELP_STRING([--enable-render-gapi], [enable the GAPI/RAWFRAMEBUFFER render driver [[default=yes]]]),
-                                , enable_render_gapi=yes)
-            if test x$enable_render_gapi = xyes -a x$have_wince = xyes; then
-                AC_DEFINE(SDL_VIDEO_RENDER_GAPI)
-            fi
-            AC_ARG_ENABLE(render-ddraw,
-AC_HELP_STRING([--enable-render-ddraw], [enable the Mobile DirectDraw render driver [[default=yes]]]),
-                                , enable_render_ddraw=yes)
-            if test x$enable_render_ddraw = xyes -a x$have_wince = xyes -a x$have_ddraw = xyes; then
-                AC_DEFINE(SDL_VIDEO_RENDER_DDRAW)
-            fi
             AC_ARG_ENABLE(render-d3d,
 AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[default=yes]]]),
                                 , enable_render_d3d=yes)
--- a/include/SDL_config.h.in	Mon Jan 31 22:44:43 2011 -0800
+++ b/include/SDL_config.h.in	Mon Jan 31 22:53:45 2011 -0800
@@ -287,8 +287,6 @@
 #undef SDL_VIDEO_RENDER_D3D
 #undef SDL_VIDEO_RENDER_OGL
 #undef SDL_VIDEO_RENDER_OGL_ES
-#undef SDL_VIDEO_RENDER_GAPI
-#undef SDL_VIDEO_RENDER_DDRAW
 
 /* Enable OpenGL support */
 #undef SDL_VIDEO_OPENGL
--- a/include/SDL_config_windows.h	Mon Jan 31 22:44:43 2011 -0800
+++ b/include/SDL_config_windows.h	Mon Jan 31 22:53:45 2011 -0800
@@ -178,11 +178,7 @@
 #define SDL_VIDEO_DRIVER_DUMMY	1
 #define SDL_VIDEO_DRIVER_WINDOWS	1
 
-#ifdef _WIN32_WCE
-#ifndef SDL_VIDEO_RENDER_GAPI
-#define SDL_VIDEO_RENDER_GAPI	1
-#endif
-#else
+#ifndef _WIN32_WCE
 #ifndef SDL_VIDEO_RENDER_D3D
 #define SDL_VIDEO_RENDER_D3D	1
 #endif
--- a/src/video/windows/SDL_ceddrawrender.c	Mon Jan 31 22:44:43 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,818 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-    
-    Stefan Klug
-    klug.stefan@gmx.de
-*/
-#include "SDL_config.h"
-
-#if SDL_VIDEO_RENDER_DDRAW
-
-#include "SDL_windowsvideo.h"
-#include "../SDL_yuv_sw_c.h"
-
-#if 0
-#define DDRAW_LOG(...) printf(__VA_ARGS__)
-#else
-#define DDRAW_LOG(...)
-#endif
-
-
-/* DirectDraw renderer implementation */
-
-static SDL_Renderer *DDRAW_CreateRenderer(SDL_Window * window, Uint32 flags);
-static int DDRAW_DisplayModeChanged(SDL_Renderer * renderer);
-static int DDRAW_CreateTexture(SDL_Renderer * renderer,
-                               SDL_Texture * texture);
-static int DDRAW_QueryTexturePixels(SDL_Renderer * renderer,
-                                    SDL_Texture * texture, void **pixels,
-                                    int *pitch);
-static int DDRAW_SetTextureColorMod(SDL_Renderer * renderer,
-                                    SDL_Texture * texture);
-static int DDRAW_SetTextureAlphaMod(SDL_Renderer * renderer,
-                                    SDL_Texture * texture);
-static int DDRAW_SetTextureBlendMode(SDL_Renderer * renderer,
-                                     SDL_Texture * texture);
-static int DDRAW_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
-                               const SDL_Rect * rect, const void *pixels,
-                               int pitch);
-static int DDRAW_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
-                             const SDL_Rect * rect, int markDirty,
-                             void **pixels, int *pitch);
-static void DDRAW_UnlockTexture(SDL_Renderer * renderer,
-                                SDL_Texture * texture);
-static void DDRAW_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
-                               int numrects, const SDL_Rect * rects);
-static int DDRAW_RenderPoint(SDL_Renderer * renderer, int x, int y);
-static int DDRAW_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2,
-                            int y2);
-static int DDRAW_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect);
-static int DDRAW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
-                            const SDL_Rect * srcrect,
-                            const SDL_Rect * dstrect);
-static void DDRAW_RenderPresent(SDL_Renderer * renderer);
-static void DDRAW_DestroyTexture(SDL_Renderer * renderer,
-                                 SDL_Texture * texture);
-static void DDRAW_DestroyRenderer(SDL_Renderer * renderer);
-
-
-SDL_RenderDriver DDRAW_RenderDriver = {
-    DDRAW_CreateRenderer,
-    {
-     "ddraw",
-     (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY |
-      SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 |
-      SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_ACCELERATED),
-     (SDL_TEXTUREMODULATE_NONE),
-     (SDL_BLENDMODE_NONE),
-     0,
-     {0},
-     0,
-     0}
-};
-
-typedef struct
-{
-    IDirectDraw *ddraw;
-    IDirectDrawSurface *primary;
-} DDRAW_RenderData;
-
-typedef struct
-{
-    RECT lock;
-    IDirectDrawSurface *surface;
-} DDRAW_TextureData;
-
-
-static void
-DDRAW_SetError(const char *prefix, HRESULT result)
-{
-    const char *error;
-
-    switch (result) {
-    case DDERR_CANTCREATEDC:
-        error = "CANTCREATEDC";
-        break;
-    case DDERR_CANTLOCKSURFACE:
-        error = "CANTLOCKSURFACE";
-        break;
-    case DDERR_CLIPPERISUSINGHWND:
-        error = "CLIPPERISUSINGHWND";
-        break;
-    case DDERR_COLORKEYNOTSET:
-        error = "COLORKEYNOTSET";
-        break;
-    case DDERR_CURRENTLYNOTAVAIL:
-        error = "CURRENTLYNOTAVAIL";
-        break;
-    case DDERR_DCALREADYCREATED:
-        error = "DCALREADYCREATED";
-        break;
-    case DDERR_DEVICEDOESNTOWNSURFACE:
-        error = "DEVICEDOESNTOWNSURFACE";
-        break;
-    case DDERR_DIRECTDRAWALREADYCREATED:
-        error = "DIRECTDRAWALREADYCREATED";
-        break;
-    case DDERR_EXCLUSIVEMODEALREADYSET:
-        error = "EXCLUSIVEMODEALREADYSET";
-        break;
-    case DDERR_GENERIC:
-        error = "GENERIC";
-        break;
-    case DDERR_HEIGHTALIGN:
-        error = "HEIGHTALIGN";
-        break;
-    case DDERR_IMPLICITLYCREATED:
-        error = "IMPLICITLYCREATED";
-        break;
-    case DDERR_INCOMPATIBLEPRIMARY:
-        error = "INCOMPATIBLEPRIMARY";
-        break;
-    case DDERR_INVALIDCAPS:
-        error = "INVALIDCAPS";
-        break;
-    case DDERR_INVALIDCLIPLIST:
-        error = "INVALIDCLIPLIST";
-        break;
-    case DDERR_INVALIDMODE:
-        error = "INVALIDMODE";
-        break;
-    case DDERR_INVALIDOBJECT:
-        error = "INVALIDOBJECT";
-        break;
-    case DDERR_INVALIDPARAMS:
-        error = "INVALIDPARAMS";
-        break;
-    case DDERR_INVALIDPIXELFORMAT:
-        error = "INVALIDPIXELFORMAT";
-        break;
-    case DDERR_INVALIDPOSITION:
-        error = "INVALIDPOSITION";
-        break;
-    case DDERR_INVALIDRECT:
-        error = "INVALIDRECT";
-        break;
-    case DDERR_LOCKEDSURFACES:
-        error = "LOCKEDSURFACES";
-        break;
-    case DDERR_MOREDATA:
-        error = "MOREDATA";
-        break;
-    case DDERR_NOALPHAHW:
-        error = "NOALPHAHW";
-        break;
-    case DDERR_NOBLTHW:
-        error = "NOBLTHW";
-        break;
-    case DDERR_NOCLIPLIST:
-        error = "NOCLIPLIST";
-        break;
-    case DDERR_NOCLIPPERATTACHED:
-        error = "NOCLIPPERATTACHED";
-        break;
-    case DDERR_NOCOLORCONVHW:
-        error = "NOCOLORCONVHW";
-        break;
-    case DDERR_NOCOLORKEYHW:
-        error = "NOCOLORKEYHW";
-        break;
-    case DDERR_NOCOOPERATIVELEVELSET:
-        error = "NOCOOPERATIVELEVELSET";
-        break;
-    case DDERR_NODC:
-        error = "NODC";
-        break;
-    case DDERR_NOFLIPHW:
-        error = "NOFLIPHW";
-        break;
-    case DDERR_NOOVERLAYDEST:
-        error = "NOOVERLAYDEST";
-        break;
-    case DDERR_NOOVERLAYHW:
-        error = "NOOVERLAYHW";
-        break;
-    case DDERR_NOPALETTEATTACHED:
-        error = "NOPALETTEATTACHED";
-        break;
-    case DDERR_NOPALETTEHW:
-        error = "NOPALETTEHW";
-        break;
-    case DDERR_NORASTEROPHW:
-        error = "NORASTEROPHW";
-        break;
-    case DDERR_NOSTRETCHHW:
-        error = "NOSTRETCHHW";
-        break;
-    case DDERR_NOTAOVERLAYSURFACE:
-        error = "NOTAOVERLAYSURFACE";
-        break;
-    case DDERR_NOTFLIPPABLE:
-        error = "NOTFLIPPABLE";
-        break;
-    case DDERR_NOTFOUND:
-        error = "NOTFOUND";
-        break;
-    case DDERR_NOTLOCKED:
-        error = "NOTLOCKED";
-        break;
-    case DDERR_NOTPALETTIZED:
-        error = "NOTPALETTIZED";
-        break;
-    case DDERR_NOVSYNCHW:
-        error = "NOVSYNCHW";
-        break;
-    case DDERR_NOZOVERLAYHW:
-        error = "NOZOVERLAYHW";
-        break;
-    case DDERR_OUTOFCAPS:
-        error = "OUTOFCAPS";
-        break;
-    case DDERR_OUTOFMEMORY:
-        error = "OUTOFMEMORY";
-        break;
-    case DDERR_OUTOFVIDEOMEMORY:
-        error = "OUTOFVIDEOMEMORY";
-        break;
-    case DDERR_OVERLAPPINGRECTS:
-        error = "OVERLAPPINGRECTS";
-        break;
-    case DDERR_OVERLAYNOTVISIBLE:
-        error = "OVERLAYNOTVISIBLE";
-        break;
-    case DDERR_PALETTEBUSY:
-        error = "PALETTEBUSY";
-        break;
-    case DDERR_PRIMARYSURFACEALREADYEXISTS:
-        error = "PRIMARYSURFACEALREADYEXISTS";
-        break;
-    case DDERR_REGIONTOOSMALL:
-        error = "REGIONTOOSMALL";
-        break;
-    case DDERR_SURFACEBUSY:
-        error = "SURFACEBUSY";
-        break;
-    case DDERR_SURFACELOST:
-        error = "SURFACELOST";
-        break;
-    case DDERR_TOOBIGHEIGHT:
-        error = "TOOBIGHEIGHT";
-        break;
-    case DDERR_TOOBIGSIZE:
-        error = "TOOBIGSIZE";
-        break;
-    case DDERR_TOOBIGWIDTH:
-        error = "TOOBIGWIDTH";
-        break;
-    case DDERR_UNSUPPORTED:
-        error = "UNSUPPORTED";
-        break;
-    case DDERR_UNSUPPORTEDFORMAT:
-        error = "UNSUPPORTEDFORMAT";
-        break;
-    case DDERR_VERTICALBLANKINPROGRESS:
-        error = "VERTICALBLANKINPROGRESS";
-        break;
-    case DDERR_VIDEONOTACTIVE:
-        error = "VIDEONOTACTIVE";
-        break;
-    case DDERR_WASSTILLDRAWING:
-        error = "WASSTILLDRAWING";
-        break;
-    case DDERR_WRONGMODE:
-        error = "WRONGMODE";
-        break;
-    default:
-        error = "UNKNOWN";
-        break;
-    }
-    SDL_SetError("%s: %s", prefix, error);
-}
-
-static SDL_bool
-PixelFormatToDDPIXELFORMAT(Uint32 format, LPDDPIXELFORMAT dst)
-{
-    SDL_zerop(dst);
-    dst->dwSize = sizeof(*dst);
-
-    if (SDL_ISPIXELFORMAT_FOURCC(format)) {
-        dst->dwFlags = DDPF_FOURCC;
-        dst->dwFourCC = format;
-    } else if (SDL_ISPIXELFORMAT_INDEXED(format)) {
-        SDL_SetError("Indexed pixelformats are not supported.");
-        return SDL_FALSE;
-    } else {
-        int bpp;
-        Uint32 Rmask, Gmask, Bmask, Amask;
-        if (!SDL_PixelFormatEnumToMasks
-            (format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
-            SDL_SetError("pixelformat not supported");
-            return SDL_FALSE;
-        }
-
-        if (!Rmask && !Gmask && !Bmask) {
-            dst->dwFlags = DDPF_ALPHA;
-            dst->dwAlphaBitDepth = bpp;
-        } else {
-            dst->dwFlags = DDPF_RGB;
-            dst->dwRGBBitCount = bpp;
-            dst->dwRBitMask = Rmask;
-            dst->dwGBitMask = Gmask;
-            dst->dwBBitMask = Bmask;
-
-            if (Amask) {
-                dst->dwFlags |= DDPF_ALPHAPIXELS;
-                dst->dwRGBAlphaBitMask = Amask;
-            }
-        }
-    }
-
-    return SDL_TRUE;
-}
-
-static SDL_bool
-DDRAW_IsTextureFormatAvailable(IDirectDraw * ddraw, Uint32 display_format,
-                               Uint32 texture_format)
-{
-    int bpp;
-    Uint32 Rmask, Gmask, Bmask, Amask;
-
-    if (SDL_ISPIXELFORMAT_FOURCC(texture_format)) {
-        //TODO I don't expect DDRAW to support all 4CC formats, but I don't know which ones
-        return SDL_TRUE;
-    }
-    //These are only basic checks
-    if (SDL_ISPIXELFORMAT_INDEXED(texture_format)) {
-        return SDL_FALSE;
-    }
-
-    if (!SDL_PixelFormatEnumToMasks
-        (texture_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
-        return SDL_FALSE;
-    }
-
-    switch (bpp) {
-    case 4:
-    case 8:
-    case 16:
-    case 24:
-    case 32:
-        break;
-    default:
-        return SDL_FALSE;
-    }
-
-    return SDL_TRUE;
-}
-
-void
-DDRAW_AddRenderDriver(_THIS)
-{
-    SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
-    SDL_RendererInfo *info = &DDRAW_RenderDriver.info;
-    SDL_DisplayMode *mode = &SDL_CurrentDisplay->desktop_mode;
-
-    if (data->ddraw) {
-        int i;
-        int formats[] = {
-            SDL_PIXELFORMAT_INDEX8,
-            SDL_PIXELFORMAT_RGB332,
-            SDL_PIXELFORMAT_RGB444,
-            SDL_PIXELFORMAT_RGB555,
-            SDL_PIXELFORMAT_ARGB4444,
-            SDL_PIXELFORMAT_ARGB1555,
-            SDL_PIXELFORMAT_RGB565,
-            SDL_PIXELFORMAT_RGB888,
-            SDL_PIXELFORMAT_ARGB8888,
-            SDL_PIXELFORMAT_ARGB2101010,
-        };
-
-        for (i = 0; i < SDL_arraysize(formats); ++i) {
-            if (DDRAW_IsTextureFormatAvailable
-                (data->ddraw, mode->format, formats[i])) {
-                info->texture_formats[info->num_texture_formats++] =
-                    formats[i];
-            }
-        }
-
-        //TODO the fourcc formats should get fetched from IDirectDraw::GetFourCCCodes
-        info->texture_formats[info->num_texture_formats++] =
-            SDL_PIXELFORMAT_YV12;
-        info->texture_formats[info->num_texture_formats++] =
-            SDL_PIXELFORMAT_IYUV;
-        info->texture_formats[info->num_texture_formats++] =
-            SDL_PIXELFORMAT_YUY2;
-        info->texture_formats[info->num_texture_formats++] =
-            SDL_PIXELFORMAT_UYVY;
-        info->texture_formats[info->num_texture_formats++] =
-            SDL_PIXELFORMAT_YVYU;
-
-        for (i = 0; i < _this->num_displays; ++i)
-            SDL_AddRenderDriver(&_this->displays[i], &DDRAW_RenderDriver);
-        }
-    }
-}
-
-SDL_Renderer *
-DDRAW_CreateRenderer(SDL_Window * window, Uint32 flags)
-{
-    SDL_VideoDisplay *display = window->display;
-    SDL_VideoData *videodata = (SDL_VideoData *) display->device->driverdata;
-    SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
-    SDL_Renderer *renderer;
-    DDRAW_RenderData *data;
-    HRESULT result;
-    DDSURFACEDESC ddsd;
-
-    renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer));
-    if (!renderer) {
-        SDL_OutOfMemory();
-        return NULL;
-    }
-
-    data = (DDRAW_RenderData *) SDL_calloc(1, sizeof(*data));
-    if (!data) {
-        DDRAW_DestroyRenderer(renderer);
-        SDL_OutOfMemory();
-        return NULL;
-    }
-    data->ddraw = videodata->ddraw;
-
-    videodata->render = RENDER_DDRAW;
-
-    renderer->DisplayModeChanged = DDRAW_DisplayModeChanged;
-    renderer->CreateTexture = DDRAW_CreateTexture;
-    renderer->QueryTexturePixels = DDRAW_QueryTexturePixels;
-
-    renderer->SetTextureColorMod = DDRAW_SetTextureColorMod;
-    renderer->SetTextureAlphaMod = DDRAW_SetTextureAlphaMod;
-    renderer->SetTextureBlendMode = DDRAW_SetTextureBlendMode;
-    renderer->UpdateTexture = DDRAW_UpdateTexture;
-    renderer->LockTexture = DDRAW_LockTexture;
-    renderer->UnlockTexture = DDRAW_UnlockTexture;
-    renderer->DirtyTexture = DDRAW_DirtyTexture;
-    renderer->RenderPoint = DDRAW_RenderPoint;
-    renderer->RenderLine = DDRAW_RenderLine;
-    renderer->RenderFill = DDRAW_RenderFill;
-    renderer->RenderCopy = DDRAW_RenderCopy;
-    renderer->RenderPresent = DDRAW_RenderPresent;
-    renderer->DestroyTexture = DDRAW_DestroyTexture;
-    renderer->DestroyRenderer = DDRAW_DestroyRenderer;
-    renderer->info = DDRAW_RenderDriver.info;
-    renderer->window = window;
-    renderer->driverdata = data;
-
-    renderer->info.flags = SDL_RENDERER_ACCELERATED;
-
-    SDL_zero(ddsd);
-    ddsd.dwSize = sizeof(ddsd);
-    ddsd.dwFlags = DDSD_CAPS;
-
-    if (window->flags & SDL_WINDOW_FULLSCREEN) {
-        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
-    } else {
-        //TODO handle non fullscreen
-        SDL_SetError("DirectDraw renderer has only fullscreen implemented");
-        DDRAW_DestroyRenderer(renderer);
-        return NULL;
-    }
-
-    if (flags & SDL_RENDERER_PRESENTFLIP2) {
-        ddsd.dwFlags |= DDSD_BACKBUFFERCOUNT;
-        ddsd.dwBackBufferCount = 2;
-    } else if (flags & SDL_RENDERER_PRESENTFLIP3) {
-        ddsd.dwFlags |= DDSD_BACKBUFFERCOUNT;
-        ddsd.dwBackBufferCount = 3;
-    } else if (flags & SDL_RENDERER_PRESENTCOPY) {
-        //TODO what is the best approximation to this mode
-    } else {
-
-    }
-
-    if (flags & SDL_RENDERER_PRESENTVSYNC) {
-        SDL_SetError("DirectDraw renderer with v-sync is not implemented");
-        DDRAW_DestroyRenderer(renderer);
-        return NULL;
-    }
-
-    result =
-        data->ddraw->lpVtbl->SetCooperativeLevel(data->ddraw,
-                                                 windowdata->hwnd,
-                                                 DDSCL_NORMAL);
-    if (result != DD_OK) {
-        DDRAW_SetError("CreateDevice()", result);
-        DDRAW_DestroyRenderer(renderer);
-        return NULL;
-    }
-
-    result =
-        data->ddraw->lpVtbl->CreateSurface(data->ddraw, &ddsd, &data->primary,
-                                           NULL);
-    if (result != DD_OK) {
-        DDRAW_SetError("CreateDevice()", result);
-        DDRAW_DestroyRenderer(renderer);
-        return NULL;
-    }
-
-    return renderer;
-}
-
-static int
-DDRAW_Reset(SDL_Renderer * renderer)
-{
-    //TODO implement
-    /*D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
-       HRESULT result;
-
-       result = IDirect3DDevice9_Reset(data->device, &data->pparams);
-       if (FAILED(result)) {
-       if (result == D3DERR_DEVICELOST) {
-       /* Don't worry about it, we'll reset later... *
-       return 0;
-       } else {
-       D3D_SetError("Reset()", result);
-       return -1;
-       }
-       }
-       IDirect3DDevice9_SetVertexShader(data->device, NULL);
-       IDirect3DDevice9_SetFVF(data->device,
-       D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1);
-       IDirect3DDevice9_SetRenderState(data->device, D3DRS_CULLMODE,
-       D3DCULL_NONE);
-       IDirect3DDevice9_SetRenderState(data->device, D3DRS_LIGHTING, FALSE); */
-    return 0;
-}
-
-static int
-DDRAW_DisplayModeChanged(SDL_Renderer * renderer)
-{
-    //TODO implement
-    /*D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
-       SDL_Window *window = renderer->window;
-       SDL_VideoDisplay *display = window->display;
-
-       data->pparams.BackBufferWidth = window->w;
-       data->pparams.BackBufferHeight = window->h;
-       if (window->flags & SDL_WINDOW_FULLSCREEN) {
-       data->pparams.BackBufferFormat =
-       PixelFormatToD3DFMT(display->fullscreen_mode.format);
-       } else {
-       data->pparams.BackBufferFormat = D3DFMT_UNKNOWN;
-       }
-       return D3D_Reset(renderer); */
-    return 0;
-}
-
-static int
-DDRAW_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
-{
-    DDRAW_RenderData *renderdata = (DDRAW_RenderData *) renderer->driverdata;
-    SDL_Window *window = renderer->window;
-    SDL_VideoDisplay *display = window->display;
-    Uint32 display_format = display->current_mode.format;
-    DDRAW_TextureData *data;
-    DDSURFACEDESC ddsd;
-    HRESULT result;
-
-    data = (DDRAW_TextureData *) SDL_calloc(1, sizeof(*data));
-    if (!data) {
-        SDL_OutOfMemory();
-        return -1;
-    }
-
-    SDL_zero(ddsd);
-    ddsd.dwSize = sizeof(ddsd);
-    ddsd.dwFlags = DDSD_PIXELFORMAT | DDSD_HEIGHT | DDSD_WIDTH;
-    ddsd.dwWidth = texture->w;
-    ddsd.dwHeight = texture->h;
-
-
-    if (!PixelFormatToDDPIXELFORMAT(texture->format, &ddsd.ddpfPixelFormat)) {
-        SDL_free(data);
-        return -1;
-    }
-
-    texture->driverdata = data;
-
-    result =
-        renderdata->ddraw->lpVtbl->CreateSurface(renderdata->ddraw, &ddsd,
-                                                 &data->surface, NULL);
-    if (result != DD_OK) {
-        SDL_free(data);
-        DDRAW_SetError("CreateTexture", result);
-        return -1;
-    }
-
-    return 0;
-}
-
-static int
-DDRAW_QueryTexturePixels(SDL_Renderer * renderer, SDL_Texture * texture,
-                         void **pixels, int *pitch)
-{
-    //TODO implement
-    SDL_SetError("QueryTexturePixels is not implemented");
-    return -1;
-}
-
-static int
-DDRAW_SetTextureColorMod(SDL_Renderer * renderer, SDL_Texture * texture)
-{
-    return 0;
-}
-
-static int
-DDRAW_SetTextureAlphaMod(SDL_Renderer * renderer, SDL_Texture * texture)
-{
-    return 0;
-}
-
-static int
-DDRAW_SetTextureBlendMode(SDL_Renderer * renderer, SDL_Texture * texture)
-{
-    switch (texture->blendMode) {
-    case SDL_BLENDMODE_NONE:
-        return 0;
-    default:
-        SDL_Unsupported();
-        texture->blendMode = SDL_BLENDMODE_NONE;
-        return -1;
-    }
-}
-
-static int
-DDRAW_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
-                    const SDL_Rect * rect, const void *pixels, int pitch)
-{
-    DDRAW_TextureData *data = (DDRAW_TextureData *) texture->driverdata;
-
-    //TODO implement
-    SDL_SetError("UpdateTexture is not implemented");
-    return 0;
-}
-
-static int
-DDRAW_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
-                  const SDL_Rect * rect, int markDirty, void **pixels,
-                  int *pitch)
-{
-    DDRAW_TextureData *data = (DDRAW_TextureData *) texture->driverdata;
-    HRESULT result;
-    DDSURFACEDESC ddsd;
-
-    SDL_zero(ddsd);
-    ddsd.dwSize = sizeof(ddsd);
-
-    /**
-     * On a Axim x51v locking a subrect returns the startaddress of the whole surface,
-     * wheras on my ASUS MyPal 696 the startaddress of the locked area is returned,
-     * thats why I always lock the whole surface and calculate the pixels pointer by hand.
-     * This shouldn't be a speed problem, as multiple locks aren't available on DDraw Mobile
-     * see http://msdn.microsoft.com/en-us/library/ms858221.aspx
-     */
-
-    result = data->surface->lpVtbl->Lock(data->surface, NULL, &ddsd, 0, NULL);
-    if (result != DD_OK) {
-        DDRAW_SetError("LockRect()", result);
-        return -1;
-    }
-
-    *pixels = ddsd.lpSurface + rect->y * ddsd.lPitch + rect->x * ddsd.lXPitch;
-    *pitch = ddsd.lPitch;
-    return 0;
-}
-
-static void
-DDRAW_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture)
-{
-    DDRAW_TextureData *data = (DDRAW_TextureData *) texture->driverdata;
-
-    data->surface->lpVtbl->Unlock(data->surface, NULL);
-}
-
-static void
-DDRAW_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
-                   int numrects, const SDL_Rect * rects)
-{
-}
-
-static void
-DDRAW_SetBlendMode(DDRAW_RenderData * data, int blendMode)
-{
-    switch (blendMode) {
-
-    }
-}
-
-static int
-DDRAW_RenderPoint(SDL_Renderer * renderer, int x, int y)
-{
-    return -1;
-}
-
-static int
-DDRAW_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2)
-{
-    return -1;
-}
-
-static int
-DDRAW_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
-{
-    return -1;
-}
-
-static int
-DDRAW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
-                 const SDL_Rect * srcrect, const SDL_Rect * dstrect)
-{
-    DDRAW_RenderData *data = (DDRAW_RenderData *) renderer->driverdata;
-    DDRAW_TextureData *texturedata =
-        (DDRAW_TextureData *) texture->driverdata;
-    HRESULT result;
-    RECT srcr;
-    RECT dstr;
-    DDBLTFX bltfx;
-
-    srcr.left = srcrect->x;
-    srcr.top = srcrect->y;
-    srcr.right = srcrect->x + srcrect->w;
-    srcr.bottom = srcrect->y + srcrect->h;
-
-    dstr.left = dstrect->x;
-    dstr.top = dstrect->y;
-    dstr.right = dstrect->x + dstrect->w;
-    dstr.bottom = dstrect->y + dstrect->h;
-
-    SDL_zero(bltfx);
-    bltfx.dwSize = sizeof(bltfx);
-    bltfx.dwROP = SRCCOPY;
-
-    data->primary->lpVtbl->Blt(data->primary, &dstr, texturedata->surface,
-                               &srcr, DDBLT_ROP, &bltfx);
-
-    return 0;
-}
-
-static void
-DDRAW_RenderPresent(SDL_Renderer * renderer)
-{
-    DDRAW_RenderData *data = (DDRAW_RenderData *) renderer->driverdata;
-    HRESULT result;
-
-    return;
-
-    result =
-        data->primary->lpVtbl->Flip(data->primary, NULL, DDFLIP_INTERVAL1);
-    if (result != DD_OK) {
-        DDRAW_SetError("Present()", result);
-    }
-}
-
-static void
-DDRAW_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
-{
-    DDRAW_TextureData *data = (DDRAW_TextureData *) texture->driverdata;
-
-    if (!data) {
-        return;
-    }
-
-    data->surface->lpVtbl->Release(data->surface);
-    SDL_free(data);
-    texture->driverdata = NULL;
-}
-
-static void
-DDRAW_DestroyRenderer(SDL_Renderer * renderer)
-{
-    DDRAW_RenderData *data = (DDRAW_RenderData *) renderer->driverdata;
-
-    if (data) {
-        data->primary->lpVtbl->Release(data->primary);
-        SDL_free(data);
-    }
-    SDL_free(renderer);
-}
-
-#endif /* SDL_VIDEO_RENDER_DDRAW */
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windows/SDL_ceddrawrender.h	Mon Jan 31 22:44:43 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-    
-    Stefan Klug
-    klug.stefan@gmx.de
-*/
-#include "SDL_config.h"
-
-#if SDL_VIDEO_RENDER_DDRAW
-extern void DDRAW_AddRenderDriver(_THIS);
-#endif
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windows/SDL_gapirender.c	Mon Jan 31 22:44:43 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1293 +0,0 @@
-/***************************************************************************
- *   Copyright (C) 2010 by Andrey Afletdinov <afletdinov@gmail.com>        *
- *                                                                         *
- *   WinCE RAW/GAPI video driver                                           *
- *                                                                         *
- *   Part of the SDL - (Simple DirectMedia Layer)                          *
- *   http://www.libsdl.org                                                 *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
-
-#include "SDL_config.h"
-
-#if SDL_VIDEO_RENDER_GAPI
-
-#include "SDL_windowsvideo.h"
-#include "SDL_windowswindow.h"
-#include "../SDL_yuv_sw_c.h"
-
-// RawFrameBufferInfo
-typedef struct
-{
-   WORD wFormat;
-   WORD wBPP;
-   VOID *pFramePointer;
-   int  cxStride;
-   int  cyStride;
-   int  cxPixels;
-   int  cyPixels;
-} RawFrameBufferInfo;
-
-// GXDeviceInfo
-typedef struct
-{
-    long Version;
-    void* pvFrameBuffer;
-    unsigned long cbStride;
-    unsigned long cxWidth;
-    unsigned long cyHeight;
-    unsigned long cBPP;
-    unsigned long ffFormat;
-    char unknown[0x84 - 7 * 4];
-} GXDeviceInfo;
-
-// wince: GXDisplayProperties
-struct GXDisplayProperties
-{
-    DWORD cxWidth;
-    DWORD cyHeight;
-    long cbxPitch;
-    long cbyPitch;
-    long cBPP;
-    DWORD ffFormat;
-};
-
-// gx.dll
-typedef int   (*PFNGXOpenDisplay)(HWND hWnd, DWORD dwFlags);
-typedef int   (*PFNGXCloseDisplay)();
-typedef void* (*PFNGXBeginDraw)();
-typedef int   (*PFNGXEndDraw)();
-typedef struct GXDisplayProperties (*PFNGXGetDisplayProperties)();
-typedef int   (*PFNGXSuspend)();
-typedef int   (*PFNGXResume)();
-
-typedef struct
-{
-    // gx.dll
-    void*                     hGapiLib;
-    PFNGXOpenDisplay          GXOpenDisplay;
-    PFNGXCloseDisplay         GXCloseDisplay;
-    PFNGXBeginDraw            GXBeginDraw;
-    PFNGXEndDraw              GXEndDraw;
-    PFNGXGetDisplayProperties GXGetDisplayProperties;
-    PFNGXSuspend              GXSuspend;
-    PFNGXResume               GXResume;
-} GapiInfo;
-
-//#ifndef DM_DISPLAYORIENTATION
-//#define DM_DISPLAYORIENTATION 0x00800000L
-//#endif
-
-#define FORMAT_565                1
-#define FORMAT_555                2
-#define FORMAT_OTHER                3
-
-#define GETRAWFRAMEBUFFER        0x00020001
-#define GETGXINFO                0x00020000
-
-#define kfPalette                0x10
-#define kfDirect                0x20
-#define kfDirect555                0x40
-#define kfDirect565                0x80
-
-#define GX_FULLSCREEN                0x01
-
-enum ScreenOrientation { ORIENTATION_UNKNOWN = -1, ORIENTATION_UP = DMDO_0, ORIENTATION_DOWN = DMDO_180, ORIENTATION_LEFT = DMDO_270, ORIENTATION_RIGHT = DMDO_90 };
-enum ScreenGeometry { GEOMETRY_UNKNOWN, GEOMETRY_PORTRAIT, GEOMETRY_LANDSCAPE, GEOMETRY_SQUARE };
-enum FrameBufferFlags { FB_SKIP_OFFSET = 0x0001, FB_RAW_MODE = 0x0002, FB_SUSPENDED = 0x0004 };
-
-// private framebuffer info
-typedef struct
-{
-    int width;
-    int height;
-    int xpitch;
-    int ypitch;
-    int offset;
-} FrameBufferInfo;
-
-// private display data
-typedef struct
-{
-    unsigned char* pixels;        // video memory
-    int format;                        // video format
-    FrameBufferInfo fb;                // framebuffer geometry
-    GapiInfo* gapi;                // GAPI module
-    int userOrientation;
-    int systemOrientation;
-    int hardwareGeometry;
-    int flags;                        // fb flags
-    float scale;                // scale pointer position
-    int debug;
-
-} WINCE_RenderData;
-
-typedef struct
-{
-    SDL_SW_YUVTexture *yuv;
-    Uint32 format;
-    void *pixels;
-    int pitch;
-
-} WINCE_TextureData;
-
-
-// system func
-SDL_Renderer*        WINCE_CreateRenderer(SDL_Window* window, Uint32 flags);
-void                WINCE_DestroyRenderer(SDL_Renderer* renderer);
-
-int                WINCE_CreateTexture(SDL_Renderer* renderer, SDL_Texture* texture);
-void                WINCE_DestroyTexture(SDL_Renderer* renderer, SDL_Texture* texture);
-int                WINCE_QueryTexturePixels(SDL_Renderer* renderer, SDL_Texture* texture, void** pixels, int* pitch);
-int                WINCE_UpdateTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, const void* pixels, int pitch);
-int                WINCE_LockTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, int dirty, void** pixels, int* pitch);
-void                WINCE_UnlockTexture(SDL_Renderer* renderer, SDL_Texture* texture);
-
-int                WINCE_Available(void);
-void                WINCE_SetupOrientation(WINCE_RenderData* data, int width, int height);
-
-int                WINCE_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* srect, const SDL_Rect* drect);
-void                WINCE_ShowWindow(_THIS, SDL_Window* window, int visible);
-
-void                WINCE_RenderPresent(SDL_Renderer* renderer);
-int                WINCE_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int count);
-int                WINCE_RenderDrawLines(SDL_Renderer* renderer, const SDL_Point* points, int count);
-int                WINCE_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect ** rects, int count);
-int                WINCE_RenderFillRects(SDL_Renderer* renderer, const SDL_Rect** rects, int count);
-
-void                WINCE_PointerCoordinateTransform(SDL_Window* window, POINT* pt);
-void                WINCE_DumpVideoInfo(WINCE_RenderData* data);
-void                WINCE_PortraitTransform(WINCE_RenderData* data, int width, int height);
-void                WINCE_LandscapeTransform(WINCE_RenderData* data, int width, int height);
-void                WINCE_SquareTransform(WINCE_RenderData* data, int width, int height);
-int                WINCE_FixedGeometry(FrameBufferInfo* fb, int bpp, int debug);
-int                WINCE_GetDMOrientation(void);
-int                WINCE_SetDMOrientation(int orientation);
-void                WINCE_UpdateYUVTextureData(SDL_Texture* texture);
-
-// gapi engine specific
-int                GAPI_Init(WINCE_RenderData* data, HWND hwnd);
-void                GAPI_Quit(WINCE_RenderData* data);
-
-// raw engine specific
-int                RAW_Init(WINCE_RenderData* data);
-void                RAW_Quit(WINCE_RenderData* data);
-
-// tools
-void                FrameBufferRotate(FrameBufferInfo* src, int orientation);
-int                GetFrameBufferOrientation(const FrameBufferInfo* src);
-void                PointerRotate(POINT* pt, const FrameBufferInfo* fb, int orientation);
-void                FrameBufferInitialize(FrameBufferInfo* fb);
-void                FrameBufferDumpInfo(const FrameBufferInfo* fb, const char*);
-const                char* GetOrientationName(int orientation);
-void                UpdateLine16to16(const FrameBufferInfo* fb, const Uint16* src, Uint16* dst, Uint16 width);
-
-// stdlib
-static __inline__ int        __abs(int x){ return x < 0 ? -x : x; };
-static __inline__ void        __swap(int* a, int* b){ int t = *a; *a = *b; *b = t; };
-
-#define GAPI_RENDER_NAME        "gapi"
-#define RAW_RENDER_NAME                "raw"
-//
-SDL_RenderDriver GAPI_RenderDriver = {
-    WINCE_CreateRenderer,
-    {
-        GAPI_RENDER_NAME,
-        (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD),
-        (SDL_TEXTUREMODULATE_NONE),
-        (SDL_BLENDMODE_NONE),
-        7,
-        {
-            SDL_PIXELFORMAT_RGB555,
-            SDL_PIXELFORMAT_RGB565,
-            SDL_PIXELFORMAT_YV12,
-            SDL_PIXELFORMAT_IYUV,
-            SDL_PIXELFORMAT_YUY2,
-            SDL_PIXELFORMAT_UYVY,
-            SDL_PIXELFORMAT_YVYU
-        },
-        0,
-        0
-    }
-};
-
-SDL_RenderDriver RAW_RenderDriver = {
-    WINCE_CreateRenderer,
-    {
-        RAW_RENDER_NAME,
-        (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD),
-        (SDL_TEXTUREMODULATE_NONE),
-        (SDL_BLENDMODE_NONE),
-        7,
-        {
-            SDL_PIXELFORMAT_RGB555,
-            SDL_PIXELFORMAT_RGB565,
-            SDL_PIXELFORMAT_YV12,
-            SDL_PIXELFORMAT_IYUV,
-            SDL_PIXELFORMAT_YUY2,
-            SDL_PIXELFORMAT_UYVY,
-            SDL_PIXELFORMAT_YVYU
-        },
-        0,
-        0
-    }
-};
-
-int WINCE_Available(void)
-{
-    void* render_gapi;
-    const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER");
-
-    // raw check
-    RawFrameBufferInfo rfbi = { 0 };
-    HDC hdc = GetDC(NULL);
-    int render_raw = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(RawFrameBufferInfo), (char *) &rfbi);
-    ReleaseDC(NULL, hdc);
-
-    if(render_raw != 0 && rfbi.cxPixels != 0 && rfbi.cyPixels != 0 &&
-       rfbi.pFramePointer != 0 && rfbi.cxStride != 0 && rfbi.cyStride != 0)
-        render_raw = 1;
-
-    if(preferably && 0 == SDL_strcasecmp(preferably, RAW_RENDER_NAME)) return 0 != render_raw;
-
-    // gapi check
-    render_gapi = SDL_LoadObject("\\Windows\\gx.dll");
-    if(0 == render_gapi)
-        render_gapi = SDL_LoadObject("gx.dll");
-    SDL_UnloadObject(render_gapi);
-
-    if(preferably && 0 == SDL_strcasecmp(preferably, GAPI_RENDER_NAME)) return 0 != render_gapi;
-
-    return 0 != render_raw || 0 != render_gapi;
-}
-
-void WINCE_AddRenderDriver(_THIS)
-{
-    HDC hdc;
-    void* render_gapi;
-    int render_raw, ii;
-    const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER");
-
-   // raw check
-    RawFrameBufferInfo rfbi = { 0 };
-    hdc = GetDC(NULL);
-    render_raw = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(RawFrameBufferInfo), (char *) &rfbi);
-    ReleaseDC(NULL, hdc);
-
-    if(render_raw != 0 && rfbi.cxPixels != 0 && rfbi.cyPixels != 0 &&
-            rfbi.pFramePointer != 0 && rfbi.cxStride != 0 && rfbi.cyStride != 0)
-            render_raw = 1;
-
-    // gapi check
-    render_gapi = SDL_LoadObject("\\Windows\\gx.dll");
-    if(0 == render_gapi)
-        render_gapi = SDL_LoadObject("gx.dll");
-
-    if(render_gapi)
-        SDL_UnloadObject(render_gapi);
-
-    for(ii = 0; ii < _this->num_displays; ++ii)
-    {
-        if(preferably)
-        {
-            if(0 == SDL_strcasecmp(preferably, RAW_RENDER_NAME) && render_raw)
-                SDL_AddRenderDriver(&_this->displays[ii], &RAW_RenderDriver);
-            else
-            if(0 == SDL_strcasecmp(preferably, GAPI_RENDER_NAME) && render_gapi)
-                SDL_AddRenderDriver(&_this->displays[ii], &GAPI_RenderDriver);
-        }
-        else
-        {
-            if(render_raw)
-                SDL_AddRenderDriver(&_this->displays[ii], &RAW_RenderDriver);
-            if(render_gapi)
-                SDL_AddRenderDriver(&_this->displays[ii], &GAPI_RenderDriver);
-        }
-    }
-}
-
-SDL_Renderer* WINCE_CreateRenderer(SDL_Window* window, Uint32 flags)
-{
-    SDL_VideoDisplay* display = window->display;
-    SDL_DisplayMode* displayMode = &display->current_mode;
-    SDL_WindowData* windowdata = (SDL_WindowData *) window->driverdata;
-    SDL_Renderer* renderer;
-    WINCE_RenderData* data;
-    int bpp;
-    Uint32 Rmask, Gmask, Bmask, Amask;
-
-    if(!(window->flags & SDL_WINDOW_FULLSCREEN))
-        window->flags |= SDL_WINDOW_FULLSCREEN;
-
-    if(!SDL_PixelFormatEnumToMasks(displayMode->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask))
-    {
-        SDL_SetError("Unknown display format");
-        return NULL;
-    }
-
-    switch(window->fullscreen_mode.format)
-    {
-        case SDL_PIXELFORMAT_RGB555:
-        case SDL_PIXELFORMAT_RGB565:
-            break;
-
-        default:
-            SDL_SetError("Support only 16 or 15 bpp");
-            return NULL;
-    }
-
-    renderer = (SDL_Renderer*) SDL_calloc(1, sizeof(SDL_Renderer));
-    if(!renderer)
-    {
-        SDL_OutOfMemory();
-        return NULL;
-    }
-
-    data = (WINCE_RenderData*) SDL_calloc(1, sizeof(WINCE_RenderData));
-    if(!data)
-    {
-        WINCE_DestroyRenderer(renderer);
-        SDL_OutOfMemory();
-        return NULL;
-    }
-
-    // initialize internal engine
-    if(!RAW_Init(data) && !GAPI_Init(data, windowdata->hwnd))
-    {
-        WINCE_DestroyRenderer(renderer);
-        return NULL;
-    }
-
-
-    // set debug
-    data->debug        = SDL_getenv("DEBUG_VIDEO_GAPI") || SDL_getenv("GAPI_RENDERER_DEBUG") ? 1 : 0;
-#if defined(DEBUG_VIDEO_GAPI) || defined(GAPI_RENDERER_DEBUG)
-    data->debug        = 1;
-#endif
-
-    windowdata->videodata->render = data->gapi ? RENDER_GAPI : RENDER_RAW;
-    windowdata->videodata->CoordTransform = WINCE_PointerCoordinateTransform;
-
-    window->display->device->MaximizeWindow = NULL;
-    window->display->device->MinimizeWindow = NULL;
-
-    WINCE_SetupOrientation(data, window->w, window->h);
-
-    renderer->CreateTexture = WINCE_CreateTexture;
-    renderer->DestroyTexture = WINCE_DestroyTexture;
-    renderer->QueryTexturePixels = WINCE_QueryTexturePixels;
-    renderer->UpdateTexture = WINCE_UpdateTexture;
-    renderer->LockTexture = WINCE_LockTexture;
-    renderer->UnlockTexture = WINCE_UnlockTexture;
-
-    renderer->RenderCopy = WINCE_RenderCopy;
-    renderer->DestroyRenderer = WINCE_DestroyRenderer;
-
-    renderer->RenderPresent = WINCE_RenderPresent;
-    renderer->RenderDrawPoints = WINCE_RenderDrawPoints;
-    renderer->RenderDrawLines = WINCE_RenderDrawLines;
-    renderer->RenderDrawRects = WINCE_RenderDrawRects;
-    renderer->RenderFillRects = WINCE_RenderFillRects;
-
-    renderer->info = data->gapi ? GAPI_RenderDriver.info : RAW_RenderDriver.info;
-
-    renderer->window = window;
-    renderer->driverdata = data;
-
-    return renderer;
-}
-
-void WINCE_DestroyRenderer(SDL_Renderer* renderer)
-{
-    WINCE_RenderData *renderdata = (WINCE_RenderData*) renderer->driverdata;
-
-    if(renderdata)
-    {
-        if(renderdata->gapi)
-            GAPI_Quit(renderdata);
-        else
-            RAW_Quit(renderdata);
-
-        SDL_free(renderdata);
-    }
-
-    SDL_free(renderer);
-}
-
-int WINCE_CreateTexture(SDL_Renderer* renderer, SDL_Texture* texture)
-{
-    WINCE_TextureData* texturedata = (WINCE_TextureData*) SDL_calloc(1, sizeof(WINCE_TextureData));
-    if(NULL == texturedata)
-    {
-        SDL_OutOfMemory();
-        return -1;
-    }
-
-    texturedata->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format);
-    texturedata->pixels = SDL_malloc(texture->h * texturedata->pitch);
-    if(NULL == texturedata->pixels)
-    {
-        SDL_OutOfMemory();
-        return -1;
-    }
-
-    if(SDL_ISPIXELFORMAT_FOURCC(texture->format))
-    {
-        SDL_Window* window = renderer->window;
-        SDL_VideoDisplay* display = window->display;
-
-        texturedata->yuv = SDL_SW_CreateYUVTexture(texture->format, texture->w, texture->h);
-        if(NULL == texturedata->yuv)
-        {
-            SDL_OutOfMemory();
-            return -1;
-        }
-        texturedata->format = display->current_mode.format;
-    }
-    else
-    {
-        texturedata->yuv = NULL;
-        texturedata->format = texture->format;
-    }
-
-    texture->driverdata = texturedata;
-
-    return 0;
-}
-
-void WINCE_DestroyTexture(SDL_Renderer* renderer, SDL_Texture* texture)
-{
-    WINCE_TextureData *texturedata = (WINCE_TextureData*) texture->driverdata;
-
-    if(texturedata)
-    {
-        if(texturedata->yuv) SDL_SW_DestroyYUVTexture(texturedata->yuv);
-        if(texturedata->pixels) SDL_free(texturedata->pixels);
-        SDL_free(texturedata);
-        texture->driverdata = NULL;
-    }
-}
-
-int WINCE_QueryTexturePixels(SDL_Renderer* renderer, SDL_Texture* texture, void** pixels, int* pitch)
-{
-    WINCE_TextureData* texturedata = (WINCE_TextureData*) texture->driverdata;
-
-    if(texturedata->yuv)
-        return SDL_SW_QueryYUVTexturePixels(texturedata->yuv, pixels, pitch);
-
-    *pixels = texturedata->pixels;
-    *pitch = texturedata->pitch;
-
-    return 0;
-}
-
-int WINCE_UpdateTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, const void* pixels, int pitch)
-{
-    WINCE_TextureData* texturedata = (WINCE_TextureData*) texture->driverdata;
-
-    if(texturedata->yuv)
-    {
-        if(SDL_SW_UpdateYUVTexture(texturedata->yuv, rect, pixels, pitch) < 0)
-            return -1;
-        WINCE_UpdateYUVTextureData(texture);
-        return 0;
-    }
-
-    if(0 < rect->w && 0 < rect->h)
-    {
-        const unsigned char *src = ((const unsigned char*) pixels);
-        unsigned char *dst = ((unsigned char*) texturedata->pixels) +
-                                rect->y * texturedata->pitch +
-                                rect->x * SDL_BYTESPERPIXEL(texture->format);
-        int length = rect->w * SDL_BYTESPERPIXEL(texture->format);
-        int height = rect->h;
-
-        while(height--)
-        {
-            SDL_memcpy(dst, src, length);
-            dst += texturedata->pitch;
-            src += pitch;
-        }
-    }
-
-    return 0;
-}
-
-int WINCE_LockTexture(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* rect, int dirty, void** pixels, int* pitch)
-{
-    WINCE_TextureData *texturedata = (WINCE_TextureData*) texture->driverdata;
-
-    if(texturedata->yuv)
-        return SDL_SW_LockYUVTexture(texturedata->yuv, rect, dirty, pixels, pitch);
-
-    *pixels = (void *) ((unsigned char*) texturedata->pixels +
-                    rect->y * texturedata->pitch +
-                    rect->x * SDL_BYTESPERPIXEL(texture->format));
-    *pitch = texturedata->pitch;
-    return 0;
-}
-
-void WINCE_UnlockTexture(SDL_Renderer* renderer, SDL_Texture* texture)
-{
-    WINCE_TextureData *texturedata = (WINCE_TextureData*) texture->driverdata;
-
-    if(texturedata->yuv)
-    {
-        SDL_SW_UnlockYUVTexture(texturedata->yuv);
-        WINCE_UpdateYUVTextureData(texture);
-    }
-}
-
-int WINCE_RenderCopy(SDL_Renderer* renderer, SDL_Texture* texture, const SDL_Rect* srect, const SDL_Rect* drect)
-{
-    WINCE_RenderData* dstdata = (WINCE_RenderData*) renderer->driverdata;
-    WINCE_TextureData* srcdata = (WINCE_TextureData*) texture->driverdata;
-    const unsigned char *src;
-    unsigned char *dst;
-
-    if((dstdata->flags & FB_SUSPENDED) ||
-       0 >= srect->w || 0 >= srect->h) return 0;
-
-    // lock gapi
-    if(dstdata->gapi) dstdata->gapi->GXBeginDraw();
-
-    src = ((const unsigned char*) srcdata->pixels);
-    dst = dstdata->pixels + (dstdata->flags & FB_SKIP_OFFSET ? 0 : dstdata->fb.offset) +
-                                drect->y * dstdata->fb.ypitch +
-                                drect->x * dstdata->fb.xpitch;
-    if(srcdata->yuv)
-    {
-        return SDL_SW_CopyYUVToRGB(srcdata->yuv,
-                                   srect, srcdata->format,
-                                   drect->w, drect->h, dst,
-                                   dstdata->fb.ypitch);
-    }
-    else
-    {
-        int height = drect->h;
-        int length = drect->w * SDL_BYTESPERPIXEL(texture->format); // in bytes
-
-        while(height--)
-        {
-            switch(SDL_BYTESPERPIXEL(texture->format))
-            {
-                case 2: UpdateLine16to16(&dstdata->fb, (Uint16*) src, (Uint16*) dst, length >> 1); break;
-
-                default: break;
-            }
-
-            dst += dstdata->fb.ypitch;
-            src += srcdata->pitch;
-        }
-    }
-
-    // unlock gapi
-    if(dstdata->gapi) dstdata->gapi->GXEndDraw();
-
-    return 0;
-}
-
-void WINCE_RenderPresent(SDL_Renderer* renderer)
-{
-}
-
-int WINCE_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int count)
-{
-    SDL_Unsupported();
-    return -1;
-}
-
-int WINCE_RenderDrawLines(SDL_Renderer* renderer, const SDL_Point* points, int count)
-{
-    SDL_Unsupported();
-    return -1;
-}
-
-int WINCE_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect ** rects, int count)
-{
-    SDL_Unsupported();
-    return -1;
-}
-
-int WINCE_RenderFillRects(SDL_Renderer* renderer, const SDL_Rect** rects, int count)
-{
-    SDL_Unsupported();
-    return -1;
-}
-
-
-
-void WINCE_SetupOrientation(WINCE_RenderData* data, int width, int height)
-{
-    const float maxW1 = (float)(GetSystemMetrics(SM_CXSCREEN) > GetSystemMetrics(SM_CYSCREEN) ? GetSystemMetrics(SM_CXSCREEN) : GetSystemMetrics(SM_CYSCREEN));
-    const float maxW2 = (float)(data->fb.width > data->fb.height ? data->fb.width : data->fb.height);
-
-    // scale define
-    data->scale = maxW2 / maxW1;
-
-    // init fb values
-    FrameBufferInitialize(&data->fb);
-
-    // orientation values
-    data->userOrientation = ORIENTATION_UP;
-    data->systemOrientation = WINCE_GetDMOrientation();
-    data->hardwareGeometry = data->fb.width == data->fb.height ? GEOMETRY_SQUARE :
-                                (data->fb.width < data->fb.height ? GEOMETRY_PORTRAIT : GEOMETRY_LANDSCAPE);
-
-    if(data->debug)
-        WINCE_DumpVideoInfo(data);
-
-    if(data->systemOrientation == ORIENTATION_UNKNOWN)
-        data->systemOrientation = ORIENTATION_UP;
-
-    data->userOrientation = ORIENTATION_UP;
-
-    switch(data->hardwareGeometry)
-    {
-        case GEOMETRY_PORTRAIT:  WINCE_PortraitTransform(data, width, height); break;
-        case GEOMETRY_LANDSCAPE: WINCE_LandscapeTransform(data, width, height); break;
-        case GEOMETRY_SQUARE:    WINCE_SquareTransform(data, width, height); break;
-        default: break;
-    }
-
-    // debug
-    if(data->debug)
-    {
-        printf("\n");
-        printf("user video width:          %d\n", width);
-        printf("user video height:         %d\n", height);
-        FrameBufferDumpInfo(&data->fb, "user");
-    }
-}
-
-void WINCE_DumpVideoInfo(WINCE_RenderData* data)
-{
-    // get oem info
-    WCHAR oemInfo[48];
-    SDL_memset(oemInfo, 0, sizeof(oemInfo));
-    SystemParametersInfo(SPI_GETOEMINFO, sizeof(oemInfo) - sizeof(WCHAR), oemInfo, 0);
-
-    printf("hardware oem: ");
-    wprintf(oemInfo);
-    printf("\n");
-
-    printf("video driver mode:             %s\n", (data->flags & FB_RAW_MODE ? RAW_RENDER_NAME : GAPI_RENDER_NAME));
-    printf("GetSystemMetrics(SM_CXSCREEN): %d\n", GetSystemMetrics(SM_CXSCREEN));
-    printf("GetSystemMetrics(SM_CYSCREEN): %d\n", GetSystemMetrics(SM_CYSCREEN));
-    printf("scale coord:                   %f\n", data->scale);
-
-    FrameBufferDumpInfo(&data->fb, "hardware");
-
-    printf("display format:                %p\n", data->format);
-    printf("display bits per pixel:        %d\n", SDL_BITSPERPIXEL(data->format));
-    printf("display bytes per pixel:       %d\n", SDL_BYTESPERPIXEL(data->format));
-    printf("display memory:                %p\n", data->pixels);
-    printf("system orientation:            %d, %s\n", data->systemOrientation, GetOrientationName(data->systemOrientation));
-    printf("hardware geometry:             %d\n", data->hardwareGeometry);
-}
-
-void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible)
-{
-    SDL_WindowData* windowdata = (SDL_WindowData*) window->driverdata;
-    SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
-    SDL_Renderer* renderer = (SDL_Renderer*) window->renderer;
-
-    if(visible)
-    {
-        if(window->flags & SDL_WINDOW_FULLSCREEN)
-        {
-            if(videodata->SHFullScreen)
-                videodata->SHFullScreen(windowdata->hwnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);
-            ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_HIDE);
-        }
-
-        ShowWindow(windowdata->hwnd, SW_SHOW);
-        SetForegroundWindow(windowdata->hwnd);
-
-        if(renderer &&
-            (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW))
-        {
-            WINCE_RenderData* renderdata = (WINCE_RenderData*) renderer->driverdata;
-            renderdata->flags &= ~FB_SUSPENDED;
-            if(renderdata->gapi) renderdata->gapi->GXResume();
-        }
-    }
-    else
-    {
-        if(renderer &&
-            (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW))
-        {
-            WINCE_RenderData* renderdata = (WINCE_RenderData*) renderer->driverdata;
-            if(renderdata->gapi) renderdata->gapi->GXSuspend();
-            renderdata->flags |= FB_SUSPENDED;
-        }
-
-        ShowWindow(windowdata->hwnd, SW_HIDE);
-
-        if(window->flags & SDL_WINDOW_FULLSCREEN)
-        {
-            if(videodata->SHFullScreen)
-                videodata->SHFullScreen(windowdata->hwnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON);
-            ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_SHOW);
-        }
-    }
-}
-
-
-void WINCE_PointerCoordinateTransform(SDL_Window* window, POINT* pt)
-{
-    WINCE_RenderData* data = (WINCE_RenderData*) window->renderer->driverdata;
-
-    pt->x = (LONG)(pt->x * data->scale);
-    pt->y = (LONG)(pt->y * data->scale);
-
-    PointerRotate(pt, &data->fb, data->userOrientation);
-}
-
-void WINCE_PortraitTransform(WINCE_RenderData* data, int width, int height)
-{
-    if(data->systemOrientation != ORIENTATION_UP)
-        FrameBufferRotate(&data->fb, data->systemOrientation);
-
-    if(data->fb.width != width || data->fb.height != height) {
-        switch(data->systemOrientation)
-        {
-            case ORIENTATION_UP:
-            case ORIENTATION_LEFT: data->userOrientation = ORIENTATION_RIGHT; break;
-            case ORIENTATION_RIGHT:
-            case ORIENTATION_DOWN: data->userOrientation = ORIENTATION_LEFT; break;
-            default: break;
-        }
-    }
-
-    if(data->userOrientation != ORIENTATION_UP)
-        FrameBufferRotate(&data->fb, data->userOrientation);
-}
-
-void WINCE_LandscapeTransform(WINCE_RenderData* data, int width, int height)
-{
-    switch(data->systemOrientation)
-    {
-        case ORIENTATION_UP:  FrameBufferRotate(&data->fb, ORIENTATION_LEFT); break;
-        case ORIENTATION_LEFT:FrameBufferRotate(&data->fb, ORIENTATION_DOWN); break;
-        case ORIENTATION_DOWN:FrameBufferRotate(&data->fb, ORIENTATION_RIGHT); break;
-        default: break;
-    }
-
-    if(data->fb.width != width || data->fb.height != height)
-    switch(data->systemOrientation)
-    {
-        case ORIENTATION_UP:
-        case ORIENTATION_LEFT: data->userOrientation = ORIENTATION_RIGHT; break;
-        case ORIENTATION_RIGHT:
-        case ORIENTATION_DOWN: data->userOrientation = ORIENTATION_LEFT; break;
-        default: break;
-    }
-
-    if(data->userOrientation != ORIENTATION_UP)
-        FrameBufferRotate(&data->fb, data->userOrientation);
-}
-
-void WINCE_SquareTransform(WINCE_RenderData* data, int width, int height)
-{
-    WINCE_PortraitTransform(data, width, height);
-}
-
-int WINCE_FixedGeometry(FrameBufferInfo* fb, int bpp, int debug)
-{
-    // check square
-    if(GetSystemMetrics(SM_CXSCREEN) == GetSystemMetrics(SM_CYSCREEN) &&
-        fb->width != fb->height)
-    {
-        if(fb->width < fb->height)
-            fb->height = fb->width;
-        else
-        if(fb->height < fb->width)
-            fb->width = fb->height;
-    }
-
-    // check width
-    if(__abs(fb->xpitch) == bpp &&
-        fb->width  != __abs(fb->ypitch) / bpp)
-    {
-        if(fb->height == __abs(fb->ypitch) / bpp)
-            {
-            __swap(&fb->width, &fb->height);
-
-            if(debug)
-                printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height);
-        }
-        else
-            return -1;
-    }
-    else
-    // check height
-    if(__abs(fb->ypitch) == bpp &&
-        fb->height != __abs(fb->xpitch) / bpp)
-    {
-        if(fb->width  == __abs(fb->xpitch) / bpp)
-            {
-            __swap(&fb->width, &fb->height);
-
-            if(debug)
-                printf("WINCE_FixedGeometry: width: %d, height: %d\n", fb->width, fb->height);
-        }
-        else
-            return -1;
-    }
-
-    return 0;
-}
-
-void WINCE_UpdateYUVTextureData(SDL_Texture* texture)
-{
-    WINCE_TextureData* texturedata = (WINCE_TextureData*) texture->driverdata;
-    SDL_Rect rect;
-
-    rect.x = 0;
-    rect.y = 0;
-    rect.w = texture->w;
-    rect.h = texture->h;
-    SDL_SW_CopyYUVToRGB(texturedata->yuv, &rect, texturedata->format, texture->w, texture->h, texturedata->pixels, texturedata->pitch);
-}
-
-int GAPI_Init(WINCE_RenderData* data, HWND hwnd)
-{
-    if(NULL == data->gapi)
-    {
-        struct GXDisplayProperties gxProperties;
-        GXDeviceInfo gxInfo = { 0 };
-        HDC hdc;
-        int enable, result;
-        const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER");
-        if(preferably && 0 != SDL_strcasecmp(preferably, GAPI_RENDER_NAME)) return 0;
-
-        data->gapi = (GapiInfo *) SDL_calloc(1, sizeof(GapiInfo));
-        if(NULL == data->gapi)
-        {
-            SDL_OutOfMemory();
-            return 0;
-        }
-
-        data->gapi->hGapiLib = SDL_LoadObject("\\Windows\\gx.dll");
-        if(0 == data->gapi->hGapiLib)
-        {
-            data->gapi->hGapiLib = SDL_LoadObject("gx.dll");
-            if(0 == data->gapi->hGapiLib) return 0;
-        }
-
-        // load gapi library
-#define LINK(type,name,import) name=(PFN##type)SDL_LoadFunction(data->gapi->hGapiLib,import)
-        LINK(GXOpenDisplay,         data->gapi->GXOpenDisplay,         "?GXOpenDisplay@@YAHPAUHWND__@@K@Z");
-        LINK(GXCloseDisplay,        data->gapi->GXCloseDisplay,        "?GXCloseDisplay@@YAHXZ");
-        LINK(GXBeginDraw,           data->gapi->GXBeginDraw,           "?GXBeginDraw@@YAPAXXZ");
-        LINK(GXEndDraw,             data->gapi->GXEndDraw,             "?GXEndDraw@@YAHXZ");
-        LINK(GXGetDisplayProperties,data->gapi->GXGetDisplayProperties,"?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ");
-        LINK(GXSuspend,             data->gapi->GXSuspend,             "?GXSuspend@@YAHXZ");
-        LINK(GXResume,              data->gapi->GXResume,              "?GXResume@@YAHXZ");
-#undef LINK
-
-        enable = data->gapi->GXGetDisplayProperties && data->gapi->GXCloseDisplay && data->gapi->GXOpenDisplay &&
-            data->gapi->GXBeginDraw && data->gapi->GXEndDraw && data->gapi->GXSuspend && data->gapi->GXResume;
-
-        if(!enable)
-        {
-            SDL_SetError("GAPI_Init: error gx.dll: internal error");
-            GAPI_Quit(data);
-            return 0;
-        }
-
-        if(0 == data->gapi->GXOpenDisplay(hwnd, GX_FULLSCREEN))
-        {
-            SDL_SetError("GAPI_Init: couldn't initialize GAPI");
-            GAPI_Quit(data);
-            return 0;
-        }
-
-        gxProperties = data->gapi->GXGetDisplayProperties();
-
-        // fill FrameBufferInfo
-        data->fb.xpitch = gxProperties.cbxPitch;
-        data->fb.ypitch = gxProperties.cbyPitch;
-        data->fb.width  = gxProperties.cxWidth;
-        data->fb.height = gxProperties.cyHeight;
-        data->fb.offset = 0;
-
-        if((gxProperties.ffFormat & kfDirect565) || 16 == gxProperties.cBPP)
-            data->format = SDL_PIXELFORMAT_RGB565;
-        else
-        if((gxProperties.ffFormat & kfDirect555) || 15 == gxProperties.cBPP)
-            data->format = SDL_PIXELFORMAT_RGB555;
-        else
-            data->format = 0;
-
-        // get pixels
-        hdc = GetDC(NULL);
-
-        gxInfo.Version = 100;
-        result = ExtEscape(hdc, GETGXINFO, 0, NULL, sizeof(gxInfo), (char *) &gxInfo);
-        ReleaseDC(NULL, hdc);
-
-        if(result > 0)
-        {
-            // more debug
-            if(data->debug)
-            {
-                int i;
-
-                printf("GXDeviceInfo.pvFrameBuffer:    %p\n", gxInfo.pvFrameBuffer);
-                printf("GXDeviceInfo.cxWidth:          %d\n", gxInfo.cxWidth);
-                printf("GXDeviceInfo.cyHeight:         %d\n", gxInfo.cyHeight);
-                printf("GXDeviceInfo.cbStride:         %d\n", gxInfo.cbStride);
-                printf("GXDeviceInfo.cBPP:             %d\n", gxInfo.cBPP);
-                printf("GXDeviceInfo.ffFormat:        0x%x\n", gxInfo.ffFormat);
-
-                printf("GXDeviceInfo.unk:\n");
-                for(i = 0; i <  sizeof(gxInfo.unknown); ++i)
-                    printf("0x%02hhX,", gxInfo.unknown[i]);
-                printf("\n");
-            }
-
-                if(gxInfo.ffFormat && gxInfo.ffFormat != gxProperties.ffFormat) {
-                    if((gxInfo.ffFormat & kfDirect565) || 16 == gxInfo.cBPP)
-                        data->format = SDL_PIXELFORMAT_RGB565;
-                    else
-                    if((gxInfo.ffFormat & kfDirect555) || 15 == gxInfo.cBPP)
-                        data->format = SDL_PIXELFORMAT_RGB555;
-                }
-
-                data->pixels = gxInfo.pvFrameBuffer;
-        }
-        else
-        {
-            data->flags |= FB_SKIP_OFFSET;
-            data->pixels = data->gapi->GXBeginDraw();
-            data->gapi->GXEndDraw();
-
-            if(data->debug)
-            {
-                printf("GAPI_Init\n");
-                printf("use GXBeginDraw:               %p\n", data->pixels);
-                printf("use skip offset\n");
-            }
-        }
-
-        if(0 == data->format ||
-            0 > WINCE_FixedGeometry(&data->fb, SDL_BYTESPERPIXEL(data->format), data->debug))
-        {
-            SDL_SetError("GAPI_Init: unknown hardware");
-            GAPI_Quit(data);
-            return 0;
-        }
-    }
-
-    return data->gapi && data->pixels ? 1 : 0;
-}
-
-void GAPI_Quit(WINCE_RenderData* data)
-{
-    if(data->gapi)
-    {
-        if(data->gapi->GXCloseDisplay) data->gapi->GXCloseDisplay(); 
-        if(data->gapi->hGapiLib)  SDL_UnloadObject(data->gapi->hGapiLib);
-
-        SDL_free(data->gapi);
-        data->gapi = NULL;
-    }
-}
-
-int RAW_Init(WINCE_RenderData* data)
-{
-    RawFrameBufferInfo rfbi = { 0 };
-    HDC hdc;
-    int result;
-    const char* preferably = SDL_getenv("SDL_VIDEO_RENDERER");
-    if(preferably && 0 != SDL_strcasecmp(preferably, RAW_RENDER_NAME)) return 0;
-
-    hdc = GetDC(NULL);
-    result = ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, NULL, sizeof(RawFrameBufferInfo), (char *) &rfbi);
-    ReleaseDC(NULL, hdc);
-
-    //disable
-    if(result == 0 || rfbi.pFramePointer == 0 ||
-            rfbi.cxPixels == 0 || rfbi.cyPixels == 0 ||
-        rfbi.cxStride == 0 || rfbi.cyStride == 0) return 0;
-
-    data->flags     = FB_RAW_MODE;
-
-    // fill FrameBufferInfo
-    SDL_memset(&data->fb, 0, sizeof(FrameBufferInfo));
-
-    data->fb.xpitch = rfbi.cxStride;
-    data->fb.ypitch = rfbi.cyStride;
-    data->fb.width  = rfbi.cxPixels;
-    data->fb.height = rfbi.cyPixels;
-    data->fb.offset = 0;
-
-    if((FORMAT_565 & rfbi.wFormat) || 16 == rfbi.wBPP)
-        data->format = SDL_PIXELFORMAT_RGB565;
-    else
-    if((FORMAT_555 & rfbi.wFormat) || 15 == rfbi.wBPP)
-        data->format = SDL_PIXELFORMAT_RGB555;
-    else
-        data->format = 0;
-
-    if(0 == data->format ||
-        0 > WINCE_FixedGeometry(&data->fb, SDL_BYTESPERPIXEL(data->format), data->debug))
-    {
-        SDL_SetError("RAW_Init: unknown hardware");
-        RAW_Quit(data);
-        return 0;
-    }
-
-    data->pixels = rfbi.pFramePointer;
-
-    return data->pixels ? 1 : 0;
-}
-
-void RAW_Quit(WINCE_RenderData* data)
-{
-}
-
-void FrameBufferInitialize(FrameBufferInfo* fb)
-{
-    int orientation = GetFrameBufferOrientation(fb);
-
-    // set correct start offset
-    switch(orientation)
-    {
-        case ORIENTATION_UP:
-            fb->offset = 0;
-            break;
-
-        case ORIENTATION_LEFT:
-            fb->offset = __abs(fb->ypitch * (fb->height - 1));
-            break;
-
-        case ORIENTATION_RIGHT:
-            fb->offset = __abs(fb->xpitch * (fb->width - 1));
-            break;
-
-        case ORIENTATION_DOWN:
-            fb->offset = __abs(fb->xpitch * (fb->width - 1) +
-                                fb->ypitch * (fb->height - 1));
-            break;
-
-        default: break;
-    }
-
-    //if(orientation != ORIENTATION_UP)
-    switch(orientation)
-    {
-        case ORIENTATION_LEFT: FrameBufferRotate(fb, ORIENTATION_RIGHT); break;
-        case ORIENTATION_RIGHT:FrameBufferRotate(fb, ORIENTATION_LEFT); break;
-        case ORIENTATION_DOWN: FrameBufferRotate(fb, ORIENTATION_DOWN); break;
-
-        default: break;
-    }
-}
-
-int GetFrameBufferOrientation(const FrameBufferInfo* src)
-{
-    if(src->xpitch > 0 && src->ypitch > 0)
-        return ORIENTATION_UP;
-    else
-    if(src->xpitch > 0 && src->ypitch < 0)
-        return ORIENTATION_LEFT;
-    else
-    if(src->xpitch < 0 && src->ypitch > 0)
-        return ORIENTATION_RIGHT;
-    else
-    if(src->xpitch < 0 && src->ypitch < 0)
-        return ORIENTATION_DOWN;
-
-    return ORIENTATION_UNKNOWN;
-}
-
-void FrameBufferRotate(FrameBufferInfo* dst, int orientation)
-{
-    FrameBufferInfo src;
-    // copy dst -> src
-    SDL_memcpy(&src, dst, sizeof(FrameBufferInfo));
-
-    switch(orientation)
-    {
-        case ORIENTATION_LEFT:
-            dst->width  = src.height;
-            dst->height = src.width;
-            dst->xpitch = src.ypitch;
-            dst->ypitch = -src.xpitch;
-            dst->offset = src.offset + src.xpitch * (src.width - 1);
-            break;
-
-        case ORIENTATION_RIGHT:
-            dst->width  = src.height;
-            dst->height = src.width;
-            dst->xpitch = -src.ypitch;
-            dst->ypitch = src.xpitch;
-            dst->offset = src.offset + src.ypitch * (src.height - 1);
-            break;
-
-        case ORIENTATION_DOWN:
-            FrameBufferRotate(dst, ORIENTATION_LEFT);
-            FrameBufferRotate(dst, ORIENTATION_LEFT);
-            break;
-
-        default:
-            break;
-    }
-}
-
-void PointerRotate(POINT* pt, const FrameBufferInfo* fb, int orientation)
-{
-    switch(orientation)
-    {
-        case ORIENTATION_UP:
-            break;
-
-        case ORIENTATION_LEFT:
-        {
-            int temp = pt->y;
-            pt->y = fb->height - pt->x;
-            pt->x = temp;
-        }
-            break;
-
-        case ORIENTATION_RIGHT:
-        {
-            int temp = pt->x;
-            pt->x = fb->width - pt->y;
-            pt->y = temp;
-        }
-            break;
-
-        case ORIENTATION_DOWN:
-            pt->x = fb->width  - pt->x;
-            pt->y = fb->height - pt->y;
-            break;
-
-        default: break;
-    }
-}
-
-const char* GetOrientationName(int orientation)
-{
-    switch(orientation)
-    {
-        case ORIENTATION_UP:        return "UP";
-        case ORIENTATION_DOWN:      return "DOWN";
-        case ORIENTATION_LEFT:      return "LEFT";
-        case ORIENTATION_RIGHT:     return "RIGHT";
-        default: break;
-    }
-
-    return "UNKNOWN";
-}
-
-int WINCE_GetDMOrientation(void)
-{
-    DEVMODE sDevMode = {0};
-    sDevMode.dmSize = sizeof(DEVMODE);
-    sDevMode.dmFields = DM_DISPLAYORIENTATION;
-
-    // DMDO_0, DMDO_90, DMDO_180, DMDO_270
-    if(DISP_CHANGE_BADMODE != ChangeDisplaySettingsEx(NULL, &sDevMode, 0, CDS_TEST, NULL))
-        switch(sDevMode.dmDisplayOrientation)
-        {
-            case DMDO_0:        return DMDO_0;
-            case DMDO_90:        return DMDO_90;
-            case DMDO_180:        return DMDO_180;
-            case DMDO_270:        return DMDO_270;
-            default: break;
-        }
-
-    SDL_SetError("WINCE_GetDMOrientation: ChangeDisplaySettingsEx return BADMODE");
-    return -1;
-}
-
-int WINCE_SetDMOrientation(int orientation)
-{
-    DEVMODE sDevMode = {0};
-    sDevMode.dmSize = sizeof(DEVMODE);
-    sDevMode.dmFields = DM_DISPLAYORIENTATION;
-
-    switch(orientation)
-    {
-        case DMDO_0:        sDevMode.dmDisplayOrientation = DMDO_0;   break;
-        case DMDO_90:        sDevMode.dmDisplayOrientation = DMDO_90;  break;
-        case DMDO_180:        sDevMode.dmDisplayOrientation = DMDO_180; break;
-        case DMDO_270:        sDevMode.dmDisplayOrientation = DMDO_270; break;
-        default: return 0;
-    }
-
-    if(DISP_CHANGE_BADMODE != ChangeDisplaySettingsEx(NULL, &sDevMode, 0, CDS_RESET, NULL))
-        return 1;
-
-    SDL_SetError("WINCE_SetDMOrientation: ChangeDisplaySettingsEx return BADMODE");
-    return -1;
-}
-
-void FrameBufferDumpInfo(const FrameBufferInfo* fb, const char* name)
-{
-    int orientation;
-
-    printf("%s fb.width:       %d\n", name, fb->width);
-    printf("%s fb.height:      %d\n", name, fb->height);
-    printf("%s fb.xpitch:      %d\n", name, fb->xpitch);
-    printf("%s fb.ypitch:      %d\n", name, fb->ypitch);
-    printf("%s fb.offset:      %d\n", name, fb->offset);
-
-    orientation = GetFrameBufferOrientation(fb);
-    printf("%s fb.orientation: %d, %s\n", name, orientation, GetOrientationName(orientation));
-}
-
-void UpdateLine16to16(const FrameBufferInfo* fb, const Uint16* src, Uint16* dst, Uint16 width)
-{
-    if(2 == fb->xpitch)
-    {
-        switch(width)
-        {
-            case 1:
-                *dst = *src;
-                break;
-
-            case 2:
-                *((Uint32*) dst) = *((Uint32*) src);
-                break;
-
-            default:
-                SDL_memcpy(dst, src, width * 2);
-                break;
-        }
-    }
-    else
-    if(-2 == fb->xpitch)
-    {
-        while(width--)
-            *dst-- = *src++;
-    }
-    else
-    {
-        while(width--)
-        {
-            *dst = *src++;
-            dst += fb->xpitch / 2;
-        }
-    }
-}
-
-#endif // SDL_VIDEO_RENDER_GAPI
--- a/src/video/windows/SDL_gapirender.h	Mon Jan 31 22:44:43 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-    
-    Stefan Klug
-    klug.stefan@gmx.de
-*/
-#include "SDL_config.h"
-
-/* SDL surface based renderer implementation */
-
-#if SDL_VIDEO_RENDER_GAPI
-extern void WINCE_AddRenderDriver(_THIS);
-extern int  WINCE_Available(void);
-extern void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible);
-extern int  WINCE_GetDMOrientation(void);
-extern int  WINCE_SetDMOrientation(int orientation);
-#endif
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windows/SDL_gapirender_c.h	Mon Jan 31 22:44:43 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-    
-    Stefan Klug
-    klug.stefan@gmx.de
-*/
--- a/src/video/windows/SDL_windowsevents.c	Mon Jan 31 22:44:43 2011 -0800
+++ b/src/video/windows/SDL_windowsevents.c	Mon Jan 31 22:53:45 2011 -0800
@@ -195,14 +195,12 @@
         /* transform coords for VGA, WVGA... */
         {
             SDL_VideoData *videodata = data->videodata;
-            if(videodata->CoordTransform &&
-                (videodata->render == RENDER_GAPI || videodata->render == RENDER_RAW))
-            {
+            if(videodata->CoordTransform) {
                 POINT pt;
                 pt.x = LOWORD(lParam);
                 pt.y = HIWORD(lParam);
                 videodata->CoordTransform(data->window, &pt);
-                    SDL_SendMouseMotion(data->window, 0, pt.x, pt.y);
+                SDL_SendMouseMotion(data->window, 0, pt.x, pt.y);
                 break;
             }
         }
--- a/src/video/windows/SDL_windowsvideo.c	Mon Jan 31 22:44:43 2011 -0800
+++ b/src/video/windows/SDL_windowsvideo.c	Mon Jan 31 22:53:45 2011 -0800
@@ -30,7 +30,6 @@
 #include "SDL_windowsvideo.h"
 #include "SDL_windowsshape.h"
 #include "SDL_d3drender.h"
-#include "SDL_gapirender.h"
 
 /* Initialization/Query functions */
 static int WIN_VideoInit(_THIS);
@@ -57,12 +56,6 @@
         SDL_UnloadObject(data->d3dDLL);
     }
 #endif
-#if SDL_VIDEO_RENDER_DDRAW
-    if (data->ddraw) {
-        data->ddraw->lpVtbl->Release(data->ddraw);
-        SDL_UnloadObject(data->ddrawDLL);
-    }
-#endif
 #ifdef _WIN32_WCE
     if(data->hAygShell) {
        SDL_UnloadObject(data->hAygShell);
@@ -100,42 +93,6 @@
     }
     device->driverdata = data;
 
-#if SDL_VIDEO_RENDER_D3D
-    data->d3dDLL = SDL_LoadObject("D3D9.DLL");
-    if (data->d3dDLL) {
-        IDirect3D9 *(WINAPI * D3DCreate) (UINT SDKVersion);
-
-        D3DCreate =
-            (IDirect3D9 * (WINAPI *) (UINT)) SDL_LoadFunction(data->d3dDLL,
-                                                            "Direct3DCreate9");
-        if (D3DCreate) {
-            data->d3d = D3DCreate(D3D_SDK_VERSION);
-        }
-        if (!data->d3d) {
-            SDL_UnloadObject(data->d3dDLL);
-            data->d3dDLL = NULL;
-        }
-    }
-#endif /* SDL_VIDEO_RENDER_D3D */
-#if SDL_VIDEO_RENDER_DDRAW
-    data->ddrawDLL = SDL_LoadObject("ddraw.dll");
-    if (data->ddrawDLL) {
-        IDirectDraw *(WINAPI * DDCreate) (GUID FAR * lpGUID,
-                                          LPDIRECTDRAW FAR * lplpDD,
-                                          IUnknown FAR * pUnkOuter);
-
-        DDCreate =
-            (IDirectDraw *
-             (WINAPI *) (GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *))
-            SDL_LoadFunction(data->ddrawDLL, "DirectDrawCreate");
-        if (!DDCreate || DDCreate(NULL, &data->ddraw, NULL) != DD_OK) {
-            SDL_UnloadObject(data->ddrawDLL);
-            data->ddrawDLL = NULL;
-            data->ddraw = NULL;
-        }
-    }
-#endif /* SDL_VIDEO_RENDER_DDRAW */
-
 #ifdef _WIN32_WCE
     data->hAygShell = SDL_LoadObject("\\windows\\aygshell.dll");
     if(0 == data->hAygShell)
@@ -221,12 +178,6 @@
 #if SDL_VIDEO_RENDER_D3D
     D3D_AddRenderDriver(_this);
 #endif
-#if SDL_VIDEO_RENDER_DDRAW
-    DDRAW_AddRenderDriver(_this);
-#endif
-#if SDL_VIDEO_RENDER_GAPI
-    WINCE_AddRenderDriver(_this);
-#endif
 
     WIN_InitKeyboard(_this);
     WIN_InitMouse(_this);
--- a/src/video/windows/SDL_windowsvideo.h	Mon Jan 31 22:44:43 2011 -0800
+++ b/src/video/windows/SDL_windowsvideo.h	Mon Jan 31 22:53:45 2011 -0800
@@ -45,12 +45,6 @@
 #include "d3d9.h"
 #endif
 
-#if SDL_VIDEO_RENDER_DDRAW
-/* WIN32_LEAN_AND_MEAN was defined, so we have to include this by hand */
-#include <objbase.h>
-#include "ddraw.h"
-#endif
-
 #include "SDL_windowsclipboard.h"
 #include "SDL_windowsevents.h"
 #include "SDL_windowsgamma.h"
@@ -63,7 +57,7 @@
 #include "SDL_loadso.h"
 
 
-enum { RENDER_NONE, RENDER_D3D, RENDER_DDRAW, RENDER_GDI, RENDER_GAPI, RENDER_RAW };
+enum { RENDER_NONE, RENDER_D3D };
 
 #if WINVER < 0x0601
 /* Touch input definitions */
@@ -135,10 +129,6 @@
     void* d3dDLL;
     IDirect3D9 *d3d;
 #endif
-#if SDL_VIDEO_RENDER_DDRAW
-    void* ddrawDLL;
-    IDirectDraw *ddraw;
-#endif
 #ifdef _WIN32_WCE
     void* hAygShell;
     PFNSHFullScreen SHFullScreen;
--- a/src/video/windows/SDL_windowswindow.c	Mon Jan 31 22:44:43 2011 -0800
+++ b/src/video/windows/SDL_windowswindow.c	Mon Jan 31 22:53:45 2011 -0800
@@ -30,7 +30,6 @@
 
 /* This is included after SDL_windowsvideo.h, which includes windows.h */
 #include "SDL_syswm.h"
-#include "SDL_gapirender.h"
 
 /* Windows CE compatibility */
 #ifndef SWP_NOCOPYBITS