src/video/photon/SDL_ph_video.c
changeset 886 05c551e5bc64
parent 837 4bc7e16a13ed
child 910 4ab6d1fd028f
equal deleted inserted replaced
885:9f6ad2286011 886:05c551e5bc64
    81         }
    81         }
    82     }
    82     }
    83     return 1;
    83     return 1;
    84 }
    84 }
    85 
    85 
    86 static SDL_VideoDevice *ph_CreateDevice(int devindex)
    86 static SDL_VideoDevice* ph_CreateDevice(int devindex)
    87 {
    87 {
    88     SDL_VideoDevice *device;
    88     SDL_VideoDevice* device;
    89 
    89 
    90     /* Initialize all variables that we clean on shutdown */
    90     /* Initialize all variables that we clean on shutdown */
    91     device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
    91     device = (SDL_VideoDevice *)malloc(sizeof(SDL_VideoDevice));
    92     if (device) {
    92     if (device)
       
    93     {
    93         memset(device, 0, (sizeof *device));
    94         memset(device, 0, (sizeof *device));
    94         device->hidden = (struct SDL_PrivateVideoData *)
    95         device->hidden = (struct SDL_PrivateVideoData*)malloc((sizeof *device->hidden));
    95                 malloc((sizeof *device->hidden));
       
    96         device->gl_data = NULL;
    96         device->gl_data = NULL;
    97     }
    97     }
    98     if ((device == NULL) || (device->hidden == NULL)) {
    98     if ((device == NULL) || (device->hidden == NULL))
       
    99     {
    99         SDL_OutOfMemory();
   100         SDL_OutOfMemory();
   100         ph_DeleteDevice(device);
   101         ph_DeleteDevice(device);
   101         return(0);
   102         return NULL;
   102     }
   103     }
   103     memset(device->hidden, 0, (sizeof *device->hidden));
   104     memset(device->hidden, 0, (sizeof *device->hidden));
   104 
   105 
   105     /* Set the driver flags */
   106     /* Set the driver flags */
   106     device->handles_any_size = 1; /* JB not true for fullscreen */
   107     device->handles_any_size = 1;
   107 
   108 
   108     /* Set the function pointers */
   109     /* Set the function pointers */
   109     device->CreateYUVOverlay = ph_CreateYUVOverlay;
   110     device->CreateYUVOverlay = ph_CreateYUVOverlay;
   110     device->VideoInit = ph_VideoInit;
   111     device->VideoInit = ph_VideoInit;
   111     device->ListModes = ph_ListModes;
   112     device->ListModes = ph_ListModes;
   112     device->SetVideoMode = ph_SetVideoMode;
   113     device->SetVideoMode = ph_SetVideoMode;
   113     device->ToggleFullScreen = ph_ToggleFullScreen;
   114     device->ToggleFullScreen = ph_ToggleFullScreen;
   114     device->UpdateMouse = ph_UpdateMouse;
   115     device->UpdateMouse = ph_UpdateMouse;
   115     device->SetColors = ph_SetColors;
   116     device->SetColors = ph_SetColors;
   116     device->UpdateRects = NULL;         /* set up in ph_SetupUpdateFunction */
   117     device->UpdateRects = NULL;                        /* set up in ph_SetupUpdateFunction */
   117     device->VideoQuit = ph_VideoQuit;
   118     device->VideoQuit = ph_VideoQuit;
   118     device->AllocHWSurface = ph_AllocHWSurface;
   119     device->AllocHWSurface = ph_AllocHWSurface;
   119     device->CheckHWBlit = ph_CheckHWBlit;
   120     device->CheckHWBlit = ph_CheckHWBlit;
   120     device->FillHWRect = ph_FillHWRect;
   121     device->FillHWRect = ph_FillHWRect;
   121     device->SetHWColorKey = ph_SetHWColorKey;
   122     device->SetHWColorKey = ph_SetHWColorKey;
   252         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, Ph_WM_FFRONT | Ph_WM_MAX | Ph_WM_TOFRONT | Ph_WM_CONSWITCH);
   253         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, Ph_WM_FFRONT | Ph_WM_MAX | Ph_WM_TOFRONT | Ph_WM_CONSWITCH);
   253         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISFRONT | Ph_WM_STATE_ISFOCUS | Ph_WM_STATE_ISALTKEY);
   254         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISFRONT | Ph_WM_STATE_ISFOCUS | Ph_WM_STATE_ISALTKEY);
   254     }
   255     }
   255     else
   256     else
   256     {
   257     {
       
   258         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_FFRONT | Ph_WM_CONSWITCH);
       
   259         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_FALSE, Ph_WM_STATE_ISFRONT);
       
   260         PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISALTKEY);
       
   261 
   257         if ((flags & SDL_HWSURFACE) == SDL_HWSURFACE)
   262         if ((flags & SDL_HWSURFACE) == SDL_HWSURFACE)
   258         {
   263         {
   259             PtSetArg(&args[nargs++], Pt_ARG_BASIC_FLAGS, Pt_TRUE, Pt_BASIC_PREVENT_FILL);
   264             PtSetArg(&args[nargs++], Pt_ARG_BASIC_FLAGS, Pt_TRUE, Pt_BASIC_PREVENT_FILL);
   260         }
   265         }
   261         else
   266         else
   448     OCImage.CurrentFrameData = NULL;
   453     OCImage.CurrentFrameData = NULL;
   449     OCImage.FrameData0 = NULL;
   454     OCImage.FrameData0 = NULL;
   450     OCImage.FrameData1 = NULL;
   455     OCImage.FrameData1 = NULL;
   451     videomode_emulatemode = 0;
   456     videomode_emulatemode = 0;
   452     
   457     
   453     this->info.video_mem=hwcaps.currently_available_video_ram/1024;
       
   454     this->info.wm_available = 1;
   458     this->info.wm_available = 1;
   455     this->info.hw_available = 1;
   459 
   456     this->info.blit_fill = 1;
   460     ph_UpdateHWInfo(this);
   457     this->info.blit_hw = 1;
       
   458     this->info.blit_hw_A = 0;
       
   459     this->info.blit_hw_CC = 1;
       
   460     
   461     
   461     return 0;
   462     return 0;
   462 }
   463 }
   463 
   464 
   464 static SDL_Surface* ph_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags)
   465 static SDL_Surface* ph_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags)
   465 {
   466 {
   466     PgHWCaps_t hwcaps;
       
   467     const struct ColourMasks* mask;
   467     const struct ColourMasks* mask;
   468 
   468 
   469     /* Lock the event thread, in multi-threading environments */
   469     /* Lock the event thread, in multi-threading environments */
   470     SDL_Lock_EventThread();
   470     SDL_Lock_EventThread();
   471 
   471 
   556     }
   556     }
   557 
   557 
   558     /* Must call at least once for setup image planes */
   558     /* Must call at least once for setup image planes */
   559     if (ph_SetupUpdateFunction(this, current, current->flags)==-1)
   559     if (ph_SetupUpdateFunction(this, current, current->flags)==-1)
   560     {
   560     {
       
   561         /* Error string was filled in the ph_SetupUpdateFunction() */
   561         return NULL;
   562         return NULL;
   562     }
   563     }
   563 
   564 
   564     /* finish window drawing, if we are not in fullscreen, of course */
   565     /* finish window drawing, if we are not in fullscreen, of course */
   565     if ((current->flags & SDL_FULLSCREEN) != SDL_FULLSCREEN)
   566     if ((current->flags & SDL_FULLSCREEN) != SDL_FULLSCREEN)
   571        PgFlush();
   572        PgFlush();
   572     }
   573     }
   573 
   574 
   574     visualbpp=bpp;
   575     visualbpp=bpp;
   575 
   576 
   576     if (PgGetGraphicsHWCaps(&hwcaps) < 0)
   577     ph_UpdateHWInfo(this);
   577     {
       
   578         SDL_SetError("ph_SetVideoMode(): GetGraphicsHWCaps function failed !\n");
       
   579         return NULL;
       
   580     }
       
   581     this->info.video_mem=hwcaps.currently_available_video_ram/1024;
       
   582 
   578 
   583     SDL_Unlock_EventThread();
   579     SDL_Unlock_EventThread();
   584 
   580 
   585     /* We've done! */
   581     /* We've done! */
   586     return (current);
   582     return (current);