annotate src/video/win32/SDL_gapirender_c.h @ 3168:6338b7f2d024

Hi, I have prepared a set of patches to readd WindowsCE support to SDL 1.3. I've created a new GAPI/Rawframebuffer and a DirectDraw renderer. Both renderers are work in progress and there are several unimplemented cases. (Notably RenderLine/RenderPoint/RenderFill/QueryTexturePixels/UpdateTexture and texture blending ) Nevertheless I am successfully using these renderers together with the SDL software renderer. (On most devices the SDL software renderer will be much faster as there are only badly optimized vendor drivers available) I send these patches now in this unpolished state because there seems to be some interest in win ce and someone has to start supporting SDL 1.3 Now on to the patches: wince_events_window_fixes.patch fixes some wince incompatibilities and adds fullscreen support via SHFullScreen. NOTE: This patch shouldn't have any side effects on Windows, but I have NOT tested it on Windows, so please double-check. This patch doesn't dependent on the following ones. wince_renderers_system.patch This patch does all necessary modifications to the SDL system. - it adds the renderers to the configure system - it adds the renderers to win32video SDL_ceddrawrender.c SDL_ceddrawrender.h SDL_gapirender_c.h SDL_gapirender.c SDL_gapirender.h these files add the new render drivers and should be placed in src/video/win32 Some notes to people who want to test this: - I have only compiled sdl with ming32ce, so the VisualC files are not up to date - As mingw32ce has no ddraw.h this file must be taken from the MS SDK and modified to work with gcc - I had to modify line 2611 in configure.in to EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lcoredll -lcommctrl -lmmtimer -Wl,--image-base -Wl,0x10000" otherwise GetCPinfo wouldn't link. If someone knows whats causing this I'd be happy to hear about it. It would be great if these patches could make their way into SVN as this would make collaboration much much easier. I'm out of office for the next week and therefore will be unavailable via email. Regards Stefan
author Sam Lantinga <slouken@libsdl.org>
date Sun, 07 Jun 2009 02:44:46 +0000
parents
children f7b03b6838cb
rev   line source
3168
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
3 Copyright (C) 1997-2009 Sam Lantinga
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Lesser General Public License for more details.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 Stefan Klug
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23 klug.stefan@gmx.de
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 */
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26 #define WIN32_LEAN_AND_MEAN
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27 #include <windows.h>
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 /* hi res definitions */
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 typedef struct _RawFrameBufferInfo
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 {
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 WORD wFormat;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33 WORD wBPP;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34 VOID *pFramePointer;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35 int cxStride;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36 int cyStride;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 int cxPixels;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
38 int cyPixels;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39 } RawFrameBufferInfo;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
40
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
41 #define GETRAWFRAMEBUFFER 0x00020001
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
42
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
43 #define FORMAT_565 1
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
44 #define FORMAT_555 2
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
45 #define FORMAT_OTHER 3
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
46
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
47
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48 /* From gx.h, since it's not really C compliant */
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50 struct GXDisplayProperties
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51 {
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52 DWORD cxWidth;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 DWORD cyHeight; // notice lack of 'th' in the word height.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54 long cbxPitch; // number of bytes to move right one x pixel - can be negative.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 long cbyPitch; // number of bytes to move down one y pixel - can be negative.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
56 long cBPP; // # of bits in each pixel
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57 DWORD ffFormat; // format flags.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 };
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60 struct GXKeyList
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61 {
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
62 short vkUp; // key for up
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 POINT ptUp; // x,y position of key/button. Not on screen but in screen coordinates.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64 short vkDown;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 POINT ptDown;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66 short vkLeft;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
67 POINT ptLeft;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68 short vkRight;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
69 POINT ptRight;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70 short vkA;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
71 POINT ptA;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
72 short vkB;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
73 POINT ptB;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
74 short vkC;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
75 POINT ptC;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
76 short vkStart;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
77 POINT ptStart;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
78 };
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
79
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
80 typedef int (*PFNGXOpenDisplay) (HWND hWnd, DWORD dwFlags);
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
81 typedef int (*PFNGXCloseDisplay) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
82 typedef void *(*PFNGXBeginDraw) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
83 typedef int (*PFNGXEndDraw) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84 typedef int (*PFNGXOpenInput) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
85 typedef int (*PFNGXCloseInput) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86 typedef struct GXDisplayProperties (*PFNGXGetDisplayProperties) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
87 typedef struct GXKeyList (*PFNGXGetDefaultKeys) (int iOptions);
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
88 typedef int (*PFNGXSuspend) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89 typedef int (*PFNGXResume) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
90 typedef int (*PFNGXSetViewport) (DWORD dwTop, DWORD dwHeight,
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91 DWORD dwReserved1, DWORD dwReserved2);
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
92 typedef BOOL(*PFNGXIsDisplayDRAMBuffer) ();
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
94 struct GapiFunc
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95 {
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
96 PFNGXOpenDisplay GXOpenDisplay;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
97 PFNGXCloseDisplay GXCloseDisplay;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
98 PFNGXBeginDraw GXBeginDraw;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
99 PFNGXEndDraw GXEndDraw;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
100 PFNGXOpenInput GXOpenInput;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
101 PFNGXCloseInput GXCloseInput;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102 PFNGXGetDisplayProperties GXGetDisplayProperties;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
103 PFNGXGetDefaultKeys GXGetDefaultKeys;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
104 PFNGXSuspend GXSuspend;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
105 PFNGXResume GXResume;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
106 PFNGXSetViewport GXSetViewport;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
107 PFNGXIsDisplayDRAMBuffer GXIsDisplayDRAMBuffer;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
108 } gx;
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
109
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110 #define kfLandscape 0x8 // Screen is rotated 270 degrees
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
111 #define kfPalette 0x10 // Pixel values are indexes into a palette
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
112 #define kfDirect 0x20 // Pixel values contain actual level information
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
113 #define kfDirect555 0x40 // 5 bits each for red, green and blue values in a pixel.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114 #define kfDirect565 0x80 // 5 red bits, 6 green bits and 5 blue bits per pixel
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
115 #define kfDirect888 0x100 // 8 bits each for red, green and blue values in a pixel.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116 #define kfDirect444 0x200 // 4 red, 4 green, 4 blue
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
117 #define kfDirectInverted 0x400
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
119 #define GX_FULLSCREEN 0x01 // for OpenDisplay()
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120 #define GX_NORMALKEYS 0x02
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
121 #define GX_LANDSCAPEKEYS 0x03