src/video/directfb/SDL_DirectFB_video.c
changeset 2998 d364ee9b9c15
parent 2860 6ce28e5287e9
child 3011 8f4ed5ec2b06
equal deleted inserted replaced
2997:e4f025078c1c 2998:d364ee9b9c15
    44 #include "SDL_DirectFB_video.h"
    44 #include "SDL_DirectFB_video.h"
    45 #include "SDL_DirectFB_events.h"
    45 #include "SDL_DirectFB_events.h"
    46 #include "SDL_DirectFB_render.h"
    46 #include "SDL_DirectFB_render.h"
    47 #include "SDL_DirectFB_mouse.h"
    47 #include "SDL_DirectFB_mouse.h"
    48 
    48 
       
    49 #include "SDL_DirectFB_dyn.h"
       
    50 
    49 /* Initialization/Query functions */
    51 /* Initialization/Query functions */
    50 static int DirectFB_VideoInit(_THIS);
    52 static int DirectFB_VideoInit(_THIS);
    51 static void DirectFB_VideoQuit(_THIS);
    53 static void DirectFB_VideoQuit(_THIS);
    52 
    54 
    53 static int DirectFB_Available(void);
    55 static int DirectFB_Available(void);
    64 /* DirectFB driver bootstrap functions */
    66 /* DirectFB driver bootstrap functions */
    65 
    67 
    66 static int
    68 static int
    67 DirectFB_Available(void)
    69 DirectFB_Available(void)
    68 {
    70 {
       
    71     if (!SDL_DirectFB_LoadLibrary())
       
    72         return 0;
       
    73     SDL_DirectFB_UnLoadLibrary();
    69     return 1;
    74     return 1;
    70 }
    75 }
    71 
    76 
    72 static void
    77 static void
    73 DirectFB_DeleteDevice(SDL_VideoDevice * device)
    78 DirectFB_DeleteDevice(SDL_VideoDevice * device)
    74 {
    79 {
    75     SDL_free(device->driverdata);
    80     SDL_DirectFB_UnLoadLibrary();
    76     SDL_free(device);
    81     SDL_DFB_FREE(device->driverdata);
       
    82     SDL_DFB_FREE(device);
    77 }
    83 }
    78 
    84 
    79 static SDL_VideoDevice *
    85 static SDL_VideoDevice *
    80 DirectFB_CreateDevice(int devindex)
    86 DirectFB_CreateDevice(int devindex)
    81 {
    87 {
    82     SDL_VideoDevice *device;
    88     SDL_VideoDevice *device;
       
    89 
       
    90     if (!SDL_DirectFB_LoadLibrary())
       
    91         return NULL;
    83 
    92 
    84     /* Initialize all variables that we clean on shutdown */
    93     /* Initialize all variables that we clean on shutdown */
    85     SDL_DFB_CALLOC(device, 1, sizeof(SDL_VideoDevice));
    94     SDL_DFB_CALLOC(device, 1, sizeof(SDL_VideoDevice));
    86 
    95 
    87     /* Set the function pointers */
    96     /* Set the function pointers */
   138 
   147 
   139 static int
   148 static int
   140 DirectFB_VideoInit(_THIS)
   149 DirectFB_VideoInit(_THIS)
   141 {
   150 {
   142     IDirectFB *dfb = NULL;
   151     IDirectFB *dfb = NULL;
   143     DFB_DeviceData *devdata;
   152     DFB_DeviceData *devdata = NULL;
   144     char *stemp;
   153     char *stemp;
   145     DFBResult ret;
   154     DFBResult ret;
   146 
   155 
       
   156     SDL_DFB_CALLOC(devdata, 1, sizeof(*devdata));
       
   157 
   147     SDL_DFB_CHECKERR(DirectFBInit(NULL, NULL));
   158     SDL_DFB_CHECKERR(DirectFBInit(NULL, NULL));
       
   159 
       
   160     /* avoid switching to the framebuffer when we
       
   161      * are running X11 */
       
   162     stemp = getenv(DFBENV_USE_X11_CHECK);
       
   163     if (stemp)
       
   164         ret = atoi(stemp);
       
   165     else
       
   166         ret = 1;
       
   167 
       
   168     if (ret) {
       
   169         if (getenv("DISPLAY"))
       
   170             DirectFBSetOption("system", "x11");
       
   171         else
       
   172             DirectFBSetOption("disable-module", "x11input");
       
   173     }
       
   174 
       
   175     devdata->use_linux_input = 1;       /* default: on */
       
   176     stemp = getenv(DFBENV_USE_LINUX_INPUT);
       
   177     if (stemp)
       
   178         devdata->use_linux_input = atoi(stemp);
       
   179 
       
   180     if (!devdata->use_linux_input)
       
   181         DirectFBSetOption("disable-module", "linux_input");
       
   182 
   148     SDL_DFB_CHECKERR(DirectFBCreate(&dfb));
   183     SDL_DFB_CHECKERR(DirectFBCreate(&dfb));
   149 
       
   150     SDL_DFB_CALLOC(devdata, 1, sizeof(*devdata));
       
   151 
   184 
   152     devdata->use_yuv_underlays = 0;     /* default: off */
   185     devdata->use_yuv_underlays = 0;     /* default: off */
   153     stemp = getenv(DFBENV_USE_YUV_UNDERLAY);
   186     stemp = getenv(DFBENV_USE_YUV_UNDERLAY);
   154     if (stemp)
   187     if (stemp)
   155         devdata->use_yuv_underlays = atoi(stemp);
   188         devdata->use_yuv_underlays = atoi(stemp);
   156 
   189 
       
   190 
   157     /* Create global Eventbuffer for axis events */
   191     /* Create global Eventbuffer for axis events */
   158     if (LINUX_INPUT_SUPPORT) {
   192     if (devdata->use_linux_input) {
   159         SDL_DFB_CHECKERR(dfb->
   193         SDL_DFB_CHECKERR(dfb->
   160                          CreateInputEventBuffer(dfb, DICAPS_ALL,
   194                          CreateInputEventBuffer(dfb, DICAPS_ALL,
   161                                                 DFB_TRUE, &devdata->events));
   195                                                 DFB_TRUE, &devdata->events));
   162     } else {
   196     } else {
   163         SDL_DFB_CHECKERR(dfb->
   197         SDL_DFB_CHECKERR(dfb->
   185 
   219 
   186     return 0;
   220     return 0;
   187 
   221 
   188 
   222 
   189   error:
   223   error:
       
   224     SDL_DFB_FREE(devdata);
   190     SDL_DFB_RELEASE(dfb);
   225     SDL_DFB_RELEASE(dfb);
   191     return -1;
   226     return -1;
   192 }
   227 }
   193 
   228 
   194 static void
   229 static void
   200     DirectFB_QuitKeyboard(_this);
   235     DirectFB_QuitKeyboard(_this);
   201     DirectFB_QuitMouse(_this);
   236     DirectFB_QuitMouse(_this);
   202 
   237 
   203     SDL_DFB_RELEASE(devdata->events);
   238     SDL_DFB_RELEASE(devdata->events);
   204     SDL_DFB_RELEASE(devdata->dfb);
   239     SDL_DFB_RELEASE(devdata->dfb);
   205     SDL_DFB_FREE(_this->driverdata);
       
   206 
   240 
   207 #if SDL_DIRECTFB_OPENGL
   241 #if SDL_DIRECTFB_OPENGL
   208     DirectFB_GL_Shutdown(_this);
   242     DirectFB_GL_Shutdown(_this);
   209 #endif
   243 #endif
   210 
   244