Home | History | Annotate | Download | only in gapi
      1 /*
      2     SDL - Simple DirectMedia Layer
      3     Copyright (C) 1997-2012 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 (at) libsdl.org
     21 */
     22 #include "SDL_config.h"
     23 
     24 #ifndef _SDL_gapivideo_h
     25 #define _SDL_gapivideo_h
     26 
     27 #include "SDL_mouse.h"
     28 #include "SDL_mutex.h"
     29 #include "../SDL_sysvideo.h"
     30 #include "../windib/SDL_gapidibvideo.h"
     31 
     32 /* From gx.h, since it's not really C compliant */
     33 
     34 struct GXDisplayProperties {
     35     DWORD cxWidth;
     36     DWORD cyHeight;         // notice lack of 'th' in the word height.
     37     long cbxPitch;          // number of bytes to move right one x pixel - can be negative.
     38     long cbyPitch;          // number of bytes to move down one y pixel - can be negative.
     39     long cBPP;              // # of bits in each pixel
     40     DWORD ffFormat;         // format flags.
     41 };
     42 
     43 struct GXKeyList {
     44     short vkUp;             // key for up
     45     POINT ptUp;             // x,y position of key/button.  Not on screen but in screen coordinates.
     46     short vkDown;
     47     POINT ptDown;
     48     short vkLeft;
     49     POINT ptLeft;
     50     short vkRight;
     51     POINT ptRight;
     52     short vkA;
     53     POINT ptA;
     54     short vkB;
     55     POINT ptB;
     56     short vkC;
     57     POINT ptC;
     58     short vkStart;
     59     POINT ptStart;
     60 };
     61 
     62 typedef int   (*PFNGXOpenDisplay)(HWND hWnd, DWORD dwFlags);
     63 typedef int   (*PFNGXCloseDisplay)();
     64 typedef void* (*PFNGXBeginDraw)();
     65 typedef int   (*PFNGXEndDraw)();
     66 typedef int   (*PFNGXOpenInput)();
     67 typedef int   (*PFNGXCloseInput)();
     68 typedef struct GXDisplayProperties (*PFNGXGetDisplayProperties)();
     69 typedef struct GXKeyList (*PFNGXGetDefaultKeys)(int iOptions);
     70 typedef int   (*PFNGXSuspend)();
     71 typedef int   (*PFNGXResume)();
     72 typedef int   (*PFNGXSetViewport)( DWORD dwTop, DWORD dwHeight, DWORD dwReserved1, DWORD dwReserved2 );
     73 typedef BOOL  (*PFNGXIsDisplayDRAMBuffer)();
     74 
     75 struct GapiFunc
     76 {
     77     PFNGXOpenDisplay          GXOpenDisplay;
     78     PFNGXCloseDisplay         GXCloseDisplay;
     79     PFNGXBeginDraw            GXBeginDraw;
     80     PFNGXEndDraw              GXEndDraw;
     81     PFNGXOpenInput            GXOpenInput;
     82     PFNGXCloseInput           GXCloseInput;
     83     PFNGXGetDisplayProperties GXGetDisplayProperties;
     84     PFNGXGetDefaultKeys       GXGetDefaultKeys;
     85     PFNGXSuspend              GXSuspend;
     86     PFNGXResume               GXResume;
     87     PFNGXSetViewport          GXSetViewport;
     88     PFNGXIsDisplayDRAMBuffer  GXIsDisplayDRAMBuffer;
     89 };
     90 
     91 #define kfLandscape	0x8			// Screen is rotated 270 degrees
     92 #define kfPalette	0x10		// Pixel values are indexes into a palette
     93 #define kfDirect	0x20		// Pixel values contain actual level information
     94 #define kfDirect555	0x40		// 5 bits each for red, green and blue values in a pixel.
     95 #define kfDirect565	0x80		// 5 red bits, 6 green bits and 5 blue bits per pixel
     96 #define kfDirect888	0x100		// 8 bits each for red, green and blue values in a pixel.
     97 #define kfDirect444	0x200		// 4 red, 4 green, 4 blue
     98 #define kfDirectInverted 0x400
     99 
    100 #define GX_FULLSCREEN	0x01		// for OpenDisplay()
    101 #define GX_NORMALKEYS   0x02
    102 #define GX_LANDSCAPEKEYS        0x03
    103 
    104 
    105 /* GAPI video mode */
    106 typedef enum {
    107 	GAPI_NONE = 0,
    108 	GAPI_DIRECT_565,
    109 	GAPI_DIRECT_555,
    110 	GAPI_MONO,
    111 	GAPI_PALETTE
    112 } GAPIVideoMode;
    113 
    114 typedef unsigned short PIXEL;
    115 
    116 /* Private display data
    117    begin with DIB private structure to allow DIB events code sharing
    118 */
    119 struct GapiInfo {
    120 	/* Rotation which has to be applied to the key (arrow keys) and mouse events measured in quarters of a circle
    121 	 * counter clockwise */
    122 	int coordinateTransform;
    123 	char hiresFix; /* using hires mode without defining hires resource */
    124 	int invert; //TODO this is only written but never read, so it should be removed
    125 
    126 #define NUM_MODELISTS	4		/* 8, 16, 24, and 32 bits-per-pixel */
    127 	int SDL_nummodes[NUM_MODELISTS];
    128 	SDL_Rect **SDL_modelist[NUM_MODELISTS];
    129 
    130 
    131 	// The orientation of the video mode user wants to get
    132 	// Probably restricted to UP and RIGHT
    133 	SDL_ScreenOrientation userOrientation;
    134 	SDL_ScreenOrientation systemOrientation;
    135 // --------------
    136 	int useGXOpenDisplay; /* use GXOpenDispplay */
    137 	int alreadyGXOpened;
    138 	int w, h;
    139 	// The orientation of GAPI framebuffer.
    140 	// Never changes on the same device.
    141 	SDL_ScreenOrientation gapiOrientation;
    142 
    143 	void *buffer; // may be 8, 16, 24, 32 bpp
    144 	PIXEL *videoMem;
    145 	BOOL needUpdate;
    146 	struct GXKeyList keyList;
    147 	struct GapiFunc gxFunc;
    148 	struct GXDisplayProperties gxProperties;
    149 	GAPIVideoMode videoMode;
    150 	int colorscale;
    151 	int dstLineStep;  // in bytes
    152 	int dstPixelStep; // in bytes
    153 	int startOffset; // in bytes
    154 	int useVga;
    155 	int suspended; // do not pu anything into video memory
    156 };
    157 
    158 
    159 
    160 #endif /* _SDL_gapivideo_h */
    161