• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_gapivideo_h
25 #define _SDL_gapivideo_h
26 
27 #include "SDL_mouse.h"
28 #include "SDL_mutex.h"
29 #include "../SDL_sysvideo.h"
30 
31 /* From gx.h, since it's not really C compliant */
32 
33 struct GXDisplayProperties {
34     DWORD cxWidth;
35     DWORD cyHeight;         // notice lack of 'th' in the word height.
36     long cbxPitch;          // number of bytes to move right one x pixel - can be negative.
37     long cbyPitch;          // number of bytes to move down one y pixel - can be negative.
38     long cBPP;              // # of bits in each pixel
39     DWORD ffFormat;         // format flags.
40 };
41 
42 struct GXKeyList {
43     short vkUp;             // key for up
44     POINT ptUp;             // x,y position of key/button.  Not on screen but in screen coordinates.
45     short vkDown;
46     POINT ptDown;
47     short vkLeft;
48     POINT ptLeft;
49     short vkRight;
50     POINT ptRight;
51     short vkA;
52     POINT ptA;
53     short vkB;
54     POINT ptB;
55     short vkC;
56     POINT ptC;
57     short vkStart;
58     POINT ptStart;
59 };
60 
61 typedef int   (*PFNGXOpenDisplay)(HWND hWnd, DWORD dwFlags);
62 typedef int   (*PFNGXCloseDisplay)();
63 typedef void* (*PFNGXBeginDraw)();
64 typedef int   (*PFNGXEndDraw)();
65 typedef int   (*PFNGXOpenInput)();
66 typedef int   (*PFNGXCloseInput)();
67 typedef struct GXDisplayProperties (*PFNGXGetDisplayProperties)();
68 typedef struct GXKeyList (*PFNGXGetDefaultKeys)(int iOptions);
69 typedef int   (*PFNGXSuspend)();
70 typedef int   (*PFNGXResume)();
71 typedef int   (*PFNGXSetViewport)( DWORD dwTop, DWORD dwHeight, DWORD dwReserved1, DWORD dwReserved2 );
72 typedef BOOL  (*PFNGXIsDisplayDRAMBuffer)();
73 
74 struct GapiFunc
75 {
76     PFNGXOpenDisplay          GXOpenDisplay;
77     PFNGXCloseDisplay         GXCloseDisplay;
78     PFNGXBeginDraw            GXBeginDraw;
79     PFNGXEndDraw              GXEndDraw;
80     PFNGXOpenInput            GXOpenInput;
81     PFNGXCloseInput           GXCloseInput;
82     PFNGXGetDisplayProperties GXGetDisplayProperties;
83     PFNGXGetDefaultKeys       GXGetDefaultKeys;
84     PFNGXSuspend              GXSuspend;
85     PFNGXResume               GXResume;
86     PFNGXSetViewport          GXSetViewport;
87     PFNGXIsDisplayDRAMBuffer  GXIsDisplayDRAMBuffer;
88 };
89 
90 #define kfLandscape	0x8			// Screen is rotated 270 degrees
91 #define kfPalette	0x10		// Pixel values are indexes into a palette
92 #define kfDirect	0x20		// Pixel values contain actual level information
93 #define kfDirect555	0x40		// 5 bits each for red, green and blue values in a pixel.
94 #define kfDirect565	0x80		// 5 red bits, 6 green bits and 5 blue bits per pixel
95 #define kfDirect888	0x100		// 8 bits each for red, green and blue values in a pixel.
96 #define kfDirect444	0x200		// 4 red, 4 green, 4 blue
97 #define kfDirectInverted 0x400
98 
99 #define GX_FULLSCREEN	0x01		// for OpenDisplay()
100 #define GX_NORMALKEYS   0x02
101 #define GX_LANDSCAPEKEYS        0x03
102 
103 typedef enum
104 {
105 	SDL_ORIENTATION_UP,
106 	SDL_ORIENTATION_DOWN,
107 	SDL_ORIENTATION_LEFT,
108 	SDL_ORIENTATION_RIGHT
109 } SDL_ScreenOrientation;
110 
111 /* GAPI video mode */
112 typedef enum {
113 	GAPI_NONE = 0,
114 	GAPI_DIRECT_565,
115 	GAPI_DIRECT_555,
116 	GAPI_MONO,
117 	GAPI_PALETTE
118 } GAPIVideoMode;
119 
120 /* Hidden "this" pointer for the video functions */
121 #define _THIS	SDL_VideoDevice *this
122 
123 typedef unsigned short PIXEL;
124 
125 /* Private display data
126    begin with DIB private structure to allow DIB events code sharing
127 */
128 struct SDL_PrivateVideoData {
129     HBITMAP screen_bmp;
130     HPALETTE screen_pal;
131 
132 #define NUM_MODELISTS	4		/* 8, 16, 24, and 32 bits-per-pixel */
133     int SDL_nummodes[NUM_MODELISTS];
134     SDL_Rect **SDL_modelist[NUM_MODELISTS];
135 	enum SDL_ScreenOrientation userOrientation;
136 	int invert;
137 	char hiresFix; // using hires mode without defining hires resource
138 // --------------
139 	int useGXOpenDisplay; /* use GXOpenDispplay */
140     int w, h;
141 	enum 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 	enum 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 #define gapiBuffer this->hidden->buffer
160 #define gapi this->hidden
161 
162 #endif /* _SDL_gapivideo_h */
163