symbian-qemu-0.9.1-12/libsdl-trunk/src/video/SDL_sysvideo.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /*
       
     2     SDL - Simple DirectMedia Layer
       
     3     Copyright (C) 1997-2006 Sam Lantinga
       
     4 
       
     5     This library is free software; you can redistribute it and/or
       
     6     modify it under the terms of the GNU Lesser General Public
       
     7     License as published by the Free Software Foundation; either
       
     8     version 2.1 of the License, or (at your option) any later version.
       
     9 
       
    10     This library is distributed in the hope that it will be useful,
       
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    13     Lesser General Public License for more details.
       
    14 
       
    15     You should have received a copy of the GNU Lesser General Public
       
    16     License along with this library; if not, write to the Free Software
       
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
       
    18 
       
    19     Sam Lantinga
       
    20     slouken@libsdl.org
       
    21 */
       
    22 #include "SDL_config.h"
       
    23 
       
    24 #ifndef _SDL_sysvideo_h
       
    25 #define _SDL_sysvideo_h
       
    26 
       
    27 #include "SDL_mouse.h"
       
    28 #define SDL_PROTOTYPES_ONLY
       
    29 #include "SDL_syswm.h"
       
    30 #undef SDL_PROTOTYPES_ONLY
       
    31 
       
    32 /* This file prototypes the video driver implementation.
       
    33    This is designed to be easily converted to C++ in the future.
       
    34  */
       
    35 
       
    36 #if SDL_VIDEO_OPENGL
       
    37 #include "SDL_opengl.h"
       
    38 #endif /* SDL_VIDEO_OPENGL */
       
    39 
       
    40 /* The SDL video driver */
       
    41 typedef struct SDL_VideoDevice SDL_VideoDevice;
       
    42 
       
    43 /* Define the SDL video driver structure */
       
    44 #define _THIS	SDL_VideoDevice *_this
       
    45 #ifndef _STATUS
       
    46 #define _STATUS	SDL_status *status
       
    47 #endif
       
    48 struct SDL_VideoDevice {
       
    49 	/* * * */
       
    50 	/* The name of this video driver */
       
    51 	const char *name;
       
    52 
       
    53 	/* * * */
       
    54 	/* Initialization/Query functions */
       
    55 
       
    56 	/* Initialize the native video subsystem, filling 'vformat' with the 
       
    57 	   "best" display pixel format, returning 0 or -1 if there's an error.
       
    58 	 */
       
    59 	int (*VideoInit)(_THIS, SDL_PixelFormat *vformat);
       
    60 
       
    61 	/* List the available video modes for the given pixel format, sorted
       
    62 	   from largest to smallest.
       
    63 	 */
       
    64 	SDL_Rect **(*ListModes)(_THIS, SDL_PixelFormat *format, Uint32 flags);
       
    65 
       
    66 	/* Set the requested video mode, returning a surface which will be
       
    67 	   set to the SDL_VideoSurface.  The width and height will already
       
    68 	   be verified by ListModes(), and the video subsystem is free to
       
    69 	   set the mode to a supported bit depth different from the one
       
    70 	   specified -- the desired bpp will be emulated with a shadow
       
    71 	   surface if necessary.  If a new mode is returned, this function
       
    72 	   should take care of cleaning up the current mode.
       
    73 	 */
       
    74 	SDL_Surface *(*SetVideoMode)(_THIS, SDL_Surface *current,
       
    75 				int width, int height, int bpp, Uint32 flags);
       
    76 
       
    77 	/* Toggle the fullscreen mode */
       
    78 	int (*ToggleFullScreen)(_THIS, int on);
       
    79 
       
    80 	/* This is called after the video mode has been set, to get the
       
    81 	   initial mouse state.  It should queue events as necessary to
       
    82 	   properly represent the current mouse focus and position.
       
    83 	 */
       
    84 	void (*UpdateMouse)(_THIS);
       
    85 
       
    86 	/* Create a YUV video surface (possibly overlay) of the given
       
    87 	   format.  The hardware should be able to perform at least 2x
       
    88 	   scaling on display.
       
    89 	 */
       
    90 	SDL_Overlay *(*CreateYUVOverlay)(_THIS, int width, int height,
       
    91 	                                 Uint32 format, SDL_Surface *display);
       
    92 
       
    93         /* Sets the color entries { firstcolor .. (firstcolor+ncolors-1) }
       
    94 	   of the physical palette to those in 'colors'. If the device is
       
    95 	   using a software palette (SDL_HWPALETTE not set), then the
       
    96 	   changes are reflected in the logical palette of the screen
       
    97 	   as well.
       
    98 	   The return value is 1 if all entries could be set properly
       
    99 	   or 0 otherwise.
       
   100 	*/
       
   101 	int (*SetColors)(_THIS, int firstcolor, int ncolors,
       
   102 			 SDL_Color *colors);
       
   103 
       
   104 	/* This pointer should exist in the native video subsystem and should
       
   105 	   point to an appropriate update function for the current video mode
       
   106 	 */
       
   107 	void (*UpdateRects)(_THIS, int numrects, SDL_Rect *rects);
       
   108 
       
   109 	/* Reverse the effects VideoInit() -- called if VideoInit() fails
       
   110 	   or if the application is shutting down the video subsystem.
       
   111 	*/
       
   112 	void (*VideoQuit)(_THIS);
       
   113 
       
   114 	/* * * */
       
   115 	/* Hardware acceleration functions */
       
   116 
       
   117 	/* Information about the video hardware */
       
   118 	SDL_VideoInfo info;
       
   119 
       
   120 	/* The pixel format used when SDL_CreateRGBSurface creates SDL_HWSURFACEs with alpha */
       
   121 	SDL_PixelFormat* displayformatalphapixel;
       
   122 	
       
   123 	/* Allocates a surface in video memory */
       
   124 	int (*AllocHWSurface)(_THIS, SDL_Surface *surface);
       
   125 
       
   126 	/* Sets the hardware accelerated blit function, if any, based
       
   127 	   on the current flags of the surface (colorkey, alpha, etc.)
       
   128 	 */
       
   129 	int (*CheckHWBlit)(_THIS, SDL_Surface *src, SDL_Surface *dst);
       
   130 
       
   131 	/* Fills a surface rectangle with the given color */
       
   132 	int (*FillHWRect)(_THIS, SDL_Surface *dst, SDL_Rect *rect, Uint32 color);
       
   133 
       
   134 	/* Sets video mem colorkey and accelerated blit function */
       
   135 	int (*SetHWColorKey)(_THIS, SDL_Surface *surface, Uint32 key);
       
   136 
       
   137 	/* Sets per surface hardware alpha value */
       
   138 	int (*SetHWAlpha)(_THIS, SDL_Surface *surface, Uint8 value);
       
   139 
       
   140 	/* Returns a readable/writable surface */
       
   141 	int (*LockHWSurface)(_THIS, SDL_Surface *surface);
       
   142 	void (*UnlockHWSurface)(_THIS, SDL_Surface *surface);
       
   143 
       
   144 	/* Performs hardware flipping */
       
   145 	int (*FlipHWSurface)(_THIS, SDL_Surface *surface);
       
   146 
       
   147 	/* Frees a previously allocated video surface */
       
   148 	void (*FreeHWSurface)(_THIS, SDL_Surface *surface);
       
   149 
       
   150 	/* * * */
       
   151 	/* Gamma support */
       
   152 
       
   153 	Uint16 *gamma;
       
   154 
       
   155 	/* Set the gamma correction directly (emulated with gamma ramps) */
       
   156 	int (*SetGamma)(_THIS, float red, float green, float blue);
       
   157 
       
   158 	/* Get the gamma correction directly (emulated with gamma ramps) */
       
   159 	int (*GetGamma)(_THIS, float *red, float *green, float *blue);
       
   160 
       
   161 	/* Set the gamma ramp */
       
   162 	int (*SetGammaRamp)(_THIS, Uint16 *ramp);
       
   163 
       
   164 	/* Get the gamma ramp */
       
   165 	int (*GetGammaRamp)(_THIS, Uint16 *ramp);
       
   166 
       
   167 	/* * * */
       
   168 	/* OpenGL support */
       
   169 
       
   170 	/* Sets the dll to use for OpenGL and loads it */
       
   171 	int (*GL_LoadLibrary)(_THIS, const char *path);
       
   172 
       
   173 	/* Retrieves the address of a function in the gl library */
       
   174 	void* (*GL_GetProcAddress)(_THIS, const char *proc);
       
   175 
       
   176 	/* Get attribute information from the windowing system. */
       
   177 	int (*GL_GetAttribute)(_THIS, SDL_GLattr attrib, int* value);
       
   178 
       
   179 	/* Make the context associated with this driver current */
       
   180 	int (*GL_MakeCurrent)(_THIS);
       
   181 
       
   182 	/* Swap the current buffers in double buffer mode. */
       
   183 	void (*GL_SwapBuffers)(_THIS);
       
   184 
       
   185   	/* OpenGL functions for SDL_OPENGLBLIT */
       
   186 #if SDL_VIDEO_OPENGL
       
   187 #if !defined(__WIN32__)
       
   188 #define WINAPI
       
   189 #endif
       
   190 #define SDL_PROC(ret,func,params) ret (WINAPI *func) params;
       
   191 #include "SDL_glfuncs.h"
       
   192 #undef SDL_PROC
       
   193 
       
   194 	/* Texture id */
       
   195 	GLuint texture;
       
   196 #endif
       
   197 	int is_32bit;
       
   198  
       
   199 	/* * * */
       
   200 	/* Window manager functions */
       
   201 
       
   202 	/* Set the title and icon text */
       
   203 	void (*SetCaption)(_THIS, const char *title, const char *icon);
       
   204 
       
   205 	/* Set the window icon image */
       
   206 	void (*SetIcon)(_THIS, SDL_Surface *icon, Uint8 *mask);
       
   207 
       
   208 	/* Iconify the window.
       
   209 	   This function returns 1 if there is a window manager and the
       
   210 	   window was actually iconified, it returns 0 otherwise.
       
   211 	*/
       
   212 	int (*IconifyWindow)(_THIS);
       
   213 
       
   214 	/* Grab or ungrab keyboard and mouse input */
       
   215 	SDL_GrabMode (*GrabInput)(_THIS, SDL_GrabMode mode);
       
   216 
       
   217 	/* Get some platform dependent window information */
       
   218 	int (*GetWMInfo)(_THIS, SDL_SysWMinfo *info);
       
   219 
       
   220 	/* * * */
       
   221 	/* Cursor manager functions */
       
   222 
       
   223 	/* Free a window manager cursor
       
   224 	   This function can be NULL if CreateWMCursor is also NULL.
       
   225 	 */
       
   226 	void (*FreeWMCursor)(_THIS, WMcursor *cursor);
       
   227 
       
   228 	/* If not NULL, create a black/white window manager cursor */
       
   229 	WMcursor *(*CreateWMCursor)(_THIS,
       
   230 		Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y);
       
   231 
       
   232 	/* Show the specified cursor, or hide if cursor is NULL */
       
   233 	int (*ShowWMCursor)(_THIS, WMcursor *cursor);
       
   234 
       
   235 	/* Warp the window manager cursor to (x,y)
       
   236 	   If NULL, a mouse motion event is posted internally.
       
   237 	 */
       
   238 	void (*WarpWMCursor)(_THIS, Uint16 x, Uint16 y);
       
   239 
       
   240 	/* If not NULL, this is called when a mouse motion event occurs */
       
   241 	void (*MoveWMCursor)(_THIS, int x, int y);
       
   242 
       
   243 	/* Determine whether the mouse should be in relative mode or not.
       
   244 	   This function is called when the input grab state or cursor
       
   245 	   visibility state changes.
       
   246 	   If the cursor is not visible, and the input is grabbed, the
       
   247 	   driver can place the mouse in relative mode, which may result
       
   248 	   in higher accuracy sampling of the pointer motion.
       
   249 	*/
       
   250 	void (*CheckMouseMode)(_THIS);
       
   251 
       
   252 	/* * * */
       
   253 	/* Event manager functions */
       
   254 
       
   255 	/* Initialize keyboard mapping for this driver */
       
   256 	void (*InitOSKeymap)(_THIS);
       
   257 
       
   258 	/* Handle any queued OS events */
       
   259 	void (*PumpEvents)(_THIS);
       
   260 
       
   261 	/* * * */
       
   262 	/* Data common to all drivers */
       
   263 	SDL_Surface *screen;
       
   264 	SDL_Surface *shadow;
       
   265 	SDL_Surface *visible;
       
   266         SDL_Palette *physpal;	/* physical palette, if != logical palette */
       
   267         SDL_Color *gammacols;	/* gamma-corrected colours, or NULL */
       
   268 	char *wm_title;
       
   269 	char *wm_icon;
       
   270 	int offset_x;
       
   271 	int offset_y;
       
   272 	SDL_GrabMode input_grab;
       
   273 
       
   274 	/* Driver information flags */
       
   275 	int handles_any_size;	/* Driver handles any size video mode */
       
   276 
       
   277 	/* * * */
       
   278 	/* Data used by the GL drivers */
       
   279 	struct {
       
   280 		int red_size;
       
   281 		int green_size;
       
   282 		int blue_size;
       
   283 		int alpha_size;
       
   284 		int depth_size;
       
   285 		int buffer_size;
       
   286 		int stencil_size;
       
   287 		int double_buffer;
       
   288 		int accum_red_size;
       
   289 		int accum_green_size;
       
   290 		int accum_blue_size;
       
   291 		int accum_alpha_size;
       
   292 		int stereo;
       
   293 		int multisamplebuffers;
       
   294 		int multisamplesamples;
       
   295 		int accelerated;
       
   296 		int swap_control;
       
   297 		int driver_loaded;
       
   298 		char driver_path[256];
       
   299 		void* dll_handle;
       
   300 	} gl_config;
       
   301 
       
   302 	/* * * */
       
   303 	/* Data private to this driver */
       
   304 	struct SDL_PrivateVideoData *hidden;
       
   305 	struct SDL_PrivateGLData *gl_data;
       
   306 
       
   307 	/* * * */
       
   308 	/* The function used to dispose of this structure */
       
   309 	void (*free)(_THIS);
       
   310 };
       
   311 #undef _THIS
       
   312 
       
   313 typedef struct VideoBootStrap {
       
   314 	const char *name;
       
   315 	const char *desc;
       
   316 	int (*available)(void);
       
   317 	SDL_VideoDevice *(*create)(int devindex);
       
   318 } VideoBootStrap;
       
   319 
       
   320 #if SDL_VIDEO_DRIVER_QUARTZ
       
   321 extern VideoBootStrap QZ_bootstrap;
       
   322 #endif
       
   323 #if SDL_VIDEO_DRIVER_X11
       
   324 extern VideoBootStrap X11_bootstrap;
       
   325 #endif
       
   326 #if SDL_VIDEO_DRIVER_DGA
       
   327 extern VideoBootStrap DGA_bootstrap;
       
   328 #endif
       
   329 #if SDL_VIDEO_DRIVER_NANOX
       
   330 extern VideoBootStrap NX_bootstrap;
       
   331 #endif
       
   332 #if SDL_VIDEO_DRIVER_IPOD
       
   333 extern VideoBootStrap iPod_bootstrap;
       
   334 #endif
       
   335 #if SDL_VIDEO_DRIVER_QTOPIA
       
   336 extern VideoBootStrap Qtopia_bootstrap;
       
   337 #endif
       
   338 #if SDL_VIDEO_DRIVER_WSCONS
       
   339 extern VideoBootStrap WSCONS_bootstrap;
       
   340 #endif
       
   341 #if SDL_VIDEO_DRIVER_FBCON
       
   342 extern VideoBootStrap FBCON_bootstrap;
       
   343 #endif
       
   344 #if SDL_VIDEO_DRIVER_DIRECTFB
       
   345 extern VideoBootStrap DirectFB_bootstrap;
       
   346 #endif
       
   347 #if SDL_VIDEO_DRIVER_PS2GS
       
   348 extern VideoBootStrap PS2GS_bootstrap;
       
   349 #endif
       
   350 #if SDL_VIDEO_DRIVER_GGI
       
   351 extern VideoBootStrap GGI_bootstrap;
       
   352 #endif
       
   353 #if SDL_VIDEO_DRIVER_VGL
       
   354 extern VideoBootStrap VGL_bootstrap;
       
   355 #endif
       
   356 #if SDL_VIDEO_DRIVER_SVGALIB
       
   357 extern VideoBootStrap SVGALIB_bootstrap;
       
   358 #endif
       
   359 #if SDL_VIDEO_DRIVER_GAPI
       
   360 extern VideoBootStrap GAPI_bootstrap;
       
   361 #endif
       
   362 #if SDL_VIDEO_DRIVER_WINDIB
       
   363 extern VideoBootStrap WINDIB_bootstrap;
       
   364 #endif
       
   365 #if SDL_VIDEO_DRIVER_DDRAW
       
   366 extern VideoBootStrap DIRECTX_bootstrap;
       
   367 #endif
       
   368 #if SDL_VIDEO_DRIVER_BWINDOW
       
   369 extern VideoBootStrap BWINDOW_bootstrap;
       
   370 #endif
       
   371 #if SDL_VIDEO_DRIVER_TOOLBOX
       
   372 extern VideoBootStrap TOOLBOX_bootstrap;
       
   373 #endif
       
   374 #if SDL_VIDEO_DRIVER_DRAWSPROCKET
       
   375 extern VideoBootStrap DSp_bootstrap;
       
   376 #endif
       
   377 #if SDL_VIDEO_DRIVER_PHOTON
       
   378 extern VideoBootStrap ph_bootstrap;
       
   379 #endif
       
   380 #if SDL_VIDEO_DRIVER_EPOC
       
   381 extern VideoBootStrap EPOC_bootstrap;
       
   382 #endif
       
   383 #if SDL_VIDEO_DRIVER_XBIOS
       
   384 extern VideoBootStrap XBIOS_bootstrap;
       
   385 #endif
       
   386 #if SDL_VIDEO_DRIVER_GEM
       
   387 extern VideoBootStrap GEM_bootstrap;
       
   388 #endif
       
   389 #if SDL_VIDEO_DRIVER_PICOGUI
       
   390 extern VideoBootStrap PG_bootstrap;
       
   391 #endif
       
   392 #if SDL_VIDEO_DRIVER_DC
       
   393 extern VideoBootStrap DC_bootstrap;
       
   394 #endif
       
   395 #if SDL_VIDEO_DRIVER_NDS
       
   396 extern VideoBootStrap NDS_bootstrap;
       
   397 #endif
       
   398 #if SDL_VIDEO_DRIVER_RISCOS
       
   399 extern VideoBootStrap RISCOS_bootstrap;
       
   400 #endif
       
   401 #if SDL_VIDEO_DRIVER_OS2FS
       
   402 extern VideoBootStrap OS2FSLib_bootstrap;
       
   403 #endif
       
   404 #if SDL_VIDEO_DRIVER_AALIB
       
   405 extern VideoBootStrap AALIB_bootstrap;
       
   406 #endif
       
   407 #if SDL_VIDEO_DRIVER_DUMMY
       
   408 extern VideoBootStrap DUMMY_bootstrap;
       
   409 #endif
       
   410 
       
   411 /* This is the current video device */
       
   412 extern SDL_VideoDevice *current_video;
       
   413 
       
   414 #define SDL_VideoSurface	(current_video->screen)
       
   415 #define SDL_ShadowSurface	(current_video->shadow)
       
   416 #define SDL_PublicSurface	(current_video->visible)
       
   417 
       
   418 #endif /* _SDL_sysvideo_h */