Mercurial > sdl-ios-xcode
comparison src/video/windx5/SDL_dx5video.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 281d3f4870e5 |
children | 4da1ee79c9af |
comparison
equal
deleted
inserted
replaced
1661:281d3f4870e5 | 1662:782fd950bd46 |
---|---|
54 #define PC_NOCOLLAPSE 0 | 54 #define PC_NOCOLLAPSE 0 |
55 #endif | 55 #endif |
56 | 56 |
57 | 57 |
58 /* DirectX function pointers for video and events */ | 58 /* DirectX function pointers for video and events */ |
59 HRESULT (WINAPI *DDrawCreate)( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter ); | 59 HRESULT (WINAPI * DDrawCreate) (GUID FAR * lpGUID, LPDIRECTDRAW FAR * lplpDD, |
60 HRESULT (WINAPI *DInputCreate)(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUT *ppDI, LPUNKNOWN punkOuter); | 60 IUnknown FAR * pUnkOuter); |
61 HRESULT (WINAPI * DInputCreate) (HINSTANCE hinst, DWORD dwVersion, | |
62 LPDIRECTINPUT * ppDI, LPUNKNOWN punkOuter); | |
61 | 63 |
62 /* This is the rect EnumModes2 uses */ | 64 /* This is the rect EnumModes2 uses */ |
63 struct DX5EnumRect { | 65 struct DX5EnumRect |
64 SDL_Rect r; | 66 { |
65 int refreshRate; | 67 SDL_Rect r; |
66 struct DX5EnumRect* next; | 68 int refreshRate; |
69 struct DX5EnumRect *next; | |
67 }; | 70 }; |
68 static struct DX5EnumRect *enumlists[NUM_MODELISTS]; | 71 static struct DX5EnumRect *enumlists[NUM_MODELISTS]; |
69 | 72 |
70 /* | 73 /* |
71 * Experimentally determined values for c_cfDI* constants used in DirectX 5.0 | 74 * Experimentally determined values for c_cfDI* constants used in DirectX 5.0 |
72 */ | 75 */ |
73 | 76 |
74 /* Keyboard */ | 77 /* Keyboard */ |
75 | 78 |
76 static DIOBJECTDATAFORMAT KBD_fmt[] = { | 79 static DIOBJECTDATAFORMAT KBD_fmt[] = { |
77 { &GUID_Key, 0, 0x8000000C, 0x00000000 }, | 80 {&GUID_Key, 0, 0x8000000C, 0x00000000}, |
78 { &GUID_Key, 1, 0x8000010C, 0x00000000 }, | 81 {&GUID_Key, 1, 0x8000010C, 0x00000000}, |
79 { &GUID_Key, 2, 0x8000020C, 0x00000000 }, | 82 {&GUID_Key, 2, 0x8000020C, 0x00000000}, |
80 { &GUID_Key, 3, 0x8000030C, 0x00000000 }, | 83 {&GUID_Key, 3, 0x8000030C, 0x00000000}, |
81 { &GUID_Key, 4, 0x8000040C, 0x00000000 }, | 84 {&GUID_Key, 4, 0x8000040C, 0x00000000}, |
82 { &GUID_Key, 5, 0x8000050C, 0x00000000 }, | 85 {&GUID_Key, 5, 0x8000050C, 0x00000000}, |
83 { &GUID_Key, 6, 0x8000060C, 0x00000000 }, | 86 {&GUID_Key, 6, 0x8000060C, 0x00000000}, |
84 { &GUID_Key, 7, 0x8000070C, 0x00000000 }, | 87 {&GUID_Key, 7, 0x8000070C, 0x00000000}, |
85 { &GUID_Key, 8, 0x8000080C, 0x00000000 }, | 88 {&GUID_Key, 8, 0x8000080C, 0x00000000}, |
86 { &GUID_Key, 9, 0x8000090C, 0x00000000 }, | 89 {&GUID_Key, 9, 0x8000090C, 0x00000000}, |
87 { &GUID_Key, 10, 0x80000A0C, 0x00000000 }, | 90 {&GUID_Key, 10, 0x80000A0C, 0x00000000}, |
88 { &GUID_Key, 11, 0x80000B0C, 0x00000000 }, | 91 {&GUID_Key, 11, 0x80000B0C, 0x00000000}, |
89 { &GUID_Key, 12, 0x80000C0C, 0x00000000 }, | 92 {&GUID_Key, 12, 0x80000C0C, 0x00000000}, |
90 { &GUID_Key, 13, 0x80000D0C, 0x00000000 }, | 93 {&GUID_Key, 13, 0x80000D0C, 0x00000000}, |
91 { &GUID_Key, 14, 0x80000E0C, 0x00000000 }, | 94 {&GUID_Key, 14, 0x80000E0C, 0x00000000}, |
92 { &GUID_Key, 15, 0x80000F0C, 0x00000000 }, | 95 {&GUID_Key, 15, 0x80000F0C, 0x00000000}, |
93 { &GUID_Key, 16, 0x8000100C, 0x00000000 }, | 96 {&GUID_Key, 16, 0x8000100C, 0x00000000}, |
94 { &GUID_Key, 17, 0x8000110C, 0x00000000 }, | 97 {&GUID_Key, 17, 0x8000110C, 0x00000000}, |
95 { &GUID_Key, 18, 0x8000120C, 0x00000000 }, | 98 {&GUID_Key, 18, 0x8000120C, 0x00000000}, |
96 { &GUID_Key, 19, 0x8000130C, 0x00000000 }, | 99 {&GUID_Key, 19, 0x8000130C, 0x00000000}, |
97 { &GUID_Key, 20, 0x8000140C, 0x00000000 }, | 100 {&GUID_Key, 20, 0x8000140C, 0x00000000}, |
98 { &GUID_Key, 21, 0x8000150C, 0x00000000 }, | 101 {&GUID_Key, 21, 0x8000150C, 0x00000000}, |
99 { &GUID_Key, 22, 0x8000160C, 0x00000000 }, | 102 {&GUID_Key, 22, 0x8000160C, 0x00000000}, |
100 { &GUID_Key, 23, 0x8000170C, 0x00000000 }, | 103 {&GUID_Key, 23, 0x8000170C, 0x00000000}, |
101 { &GUID_Key, 24, 0x8000180C, 0x00000000 }, | 104 {&GUID_Key, 24, 0x8000180C, 0x00000000}, |
102 { &GUID_Key, 25, 0x8000190C, 0x00000000 }, | 105 {&GUID_Key, 25, 0x8000190C, 0x00000000}, |
103 { &GUID_Key, 26, 0x80001A0C, 0x00000000 }, | 106 {&GUID_Key, 26, 0x80001A0C, 0x00000000}, |
104 { &GUID_Key, 27, 0x80001B0C, 0x00000000 }, | 107 {&GUID_Key, 27, 0x80001B0C, 0x00000000}, |
105 { &GUID_Key, 28, 0x80001C0C, 0x00000000 }, | 108 {&GUID_Key, 28, 0x80001C0C, 0x00000000}, |
106 { &GUID_Key, 29, 0x80001D0C, 0x00000000 }, | 109 {&GUID_Key, 29, 0x80001D0C, 0x00000000}, |
107 { &GUID_Key, 30, 0x80001E0C, 0x00000000 }, | 110 {&GUID_Key, 30, 0x80001E0C, 0x00000000}, |
108 { &GUID_Key, 31, 0x80001F0C, 0x00000000 }, | 111 {&GUID_Key, 31, 0x80001F0C, 0x00000000}, |
109 { &GUID_Key, 32, 0x8000200C, 0x00000000 }, | 112 {&GUID_Key, 32, 0x8000200C, 0x00000000}, |
110 { &GUID_Key, 33, 0x8000210C, 0x00000000 }, | 113 {&GUID_Key, 33, 0x8000210C, 0x00000000}, |
111 { &GUID_Key, 34, 0x8000220C, 0x00000000 }, | 114 {&GUID_Key, 34, 0x8000220C, 0x00000000}, |
112 { &GUID_Key, 35, 0x8000230C, 0x00000000 }, | 115 {&GUID_Key, 35, 0x8000230C, 0x00000000}, |
113 { &GUID_Key, 36, 0x8000240C, 0x00000000 }, | 116 {&GUID_Key, 36, 0x8000240C, 0x00000000}, |
114 { &GUID_Key, 37, 0x8000250C, 0x00000000 }, | 117 {&GUID_Key, 37, 0x8000250C, 0x00000000}, |
115 { &GUID_Key, 38, 0x8000260C, 0x00000000 }, | 118 {&GUID_Key, 38, 0x8000260C, 0x00000000}, |
116 { &GUID_Key, 39, 0x8000270C, 0x00000000 }, | 119 {&GUID_Key, 39, 0x8000270C, 0x00000000}, |
117 { &GUID_Key, 40, 0x8000280C, 0x00000000 }, | 120 {&GUID_Key, 40, 0x8000280C, 0x00000000}, |
118 { &GUID_Key, 41, 0x8000290C, 0x00000000 }, | 121 {&GUID_Key, 41, 0x8000290C, 0x00000000}, |
119 { &GUID_Key, 42, 0x80002A0C, 0x00000000 }, | 122 {&GUID_Key, 42, 0x80002A0C, 0x00000000}, |
120 { &GUID_Key, 43, 0x80002B0C, 0x00000000 }, | 123 {&GUID_Key, 43, 0x80002B0C, 0x00000000}, |
121 { &GUID_Key, 44, 0x80002C0C, 0x00000000 }, | 124 {&GUID_Key, 44, 0x80002C0C, 0x00000000}, |
122 { &GUID_Key, 45, 0x80002D0C, 0x00000000 }, | 125 {&GUID_Key, 45, 0x80002D0C, 0x00000000}, |
123 { &GUID_Key, 46, 0x80002E0C, 0x00000000 }, | 126 {&GUID_Key, 46, 0x80002E0C, 0x00000000}, |
124 { &GUID_Key, 47, 0x80002F0C, 0x00000000 }, | 127 {&GUID_Key, 47, 0x80002F0C, 0x00000000}, |
125 { &GUID_Key, 48, 0x8000300C, 0x00000000 }, | 128 {&GUID_Key, 48, 0x8000300C, 0x00000000}, |
126 { &GUID_Key, 49, 0x8000310C, 0x00000000 }, | 129 {&GUID_Key, 49, 0x8000310C, 0x00000000}, |
127 { &GUID_Key, 50, 0x8000320C, 0x00000000 }, | 130 {&GUID_Key, 50, 0x8000320C, 0x00000000}, |
128 { &GUID_Key, 51, 0x8000330C, 0x00000000 }, | 131 {&GUID_Key, 51, 0x8000330C, 0x00000000}, |
129 { &GUID_Key, 52, 0x8000340C, 0x00000000 }, | 132 {&GUID_Key, 52, 0x8000340C, 0x00000000}, |
130 { &GUID_Key, 53, 0x8000350C, 0x00000000 }, | 133 {&GUID_Key, 53, 0x8000350C, 0x00000000}, |
131 { &GUID_Key, 54, 0x8000360C, 0x00000000 }, | 134 {&GUID_Key, 54, 0x8000360C, 0x00000000}, |
132 { &GUID_Key, 55, 0x8000370C, 0x00000000 }, | 135 {&GUID_Key, 55, 0x8000370C, 0x00000000}, |
133 { &GUID_Key, 56, 0x8000380C, 0x00000000 }, | 136 {&GUID_Key, 56, 0x8000380C, 0x00000000}, |
134 { &GUID_Key, 57, 0x8000390C, 0x00000000 }, | 137 {&GUID_Key, 57, 0x8000390C, 0x00000000}, |
135 { &GUID_Key, 58, 0x80003A0C, 0x00000000 }, | 138 {&GUID_Key, 58, 0x80003A0C, 0x00000000}, |
136 { &GUID_Key, 59, 0x80003B0C, 0x00000000 }, | 139 {&GUID_Key, 59, 0x80003B0C, 0x00000000}, |
137 { &GUID_Key, 60, 0x80003C0C, 0x00000000 }, | 140 {&GUID_Key, 60, 0x80003C0C, 0x00000000}, |
138 { &GUID_Key, 61, 0x80003D0C, 0x00000000 }, | 141 {&GUID_Key, 61, 0x80003D0C, 0x00000000}, |
139 { &GUID_Key, 62, 0x80003E0C, 0x00000000 }, | 142 {&GUID_Key, 62, 0x80003E0C, 0x00000000}, |
140 { &GUID_Key, 63, 0x80003F0C, 0x00000000 }, | 143 {&GUID_Key, 63, 0x80003F0C, 0x00000000}, |
141 { &GUID_Key, 64, 0x8000400C, 0x00000000 }, | 144 {&GUID_Key, 64, 0x8000400C, 0x00000000}, |
142 { &GUID_Key, 65, 0x8000410C, 0x00000000 }, | 145 {&GUID_Key, 65, 0x8000410C, 0x00000000}, |
143 { &GUID_Key, 66, 0x8000420C, 0x00000000 }, | 146 {&GUID_Key, 66, 0x8000420C, 0x00000000}, |
144 { &GUID_Key, 67, 0x8000430C, 0x00000000 }, | 147 {&GUID_Key, 67, 0x8000430C, 0x00000000}, |
145 { &GUID_Key, 68, 0x8000440C, 0x00000000 }, | 148 {&GUID_Key, 68, 0x8000440C, 0x00000000}, |
146 { &GUID_Key, 69, 0x8000450C, 0x00000000 }, | 149 {&GUID_Key, 69, 0x8000450C, 0x00000000}, |
147 { &GUID_Key, 70, 0x8000460C, 0x00000000 }, | 150 {&GUID_Key, 70, 0x8000460C, 0x00000000}, |
148 { &GUID_Key, 71, 0x8000470C, 0x00000000 }, | 151 {&GUID_Key, 71, 0x8000470C, 0x00000000}, |
149 { &GUID_Key, 72, 0x8000480C, 0x00000000 }, | 152 {&GUID_Key, 72, 0x8000480C, 0x00000000}, |
150 { &GUID_Key, 73, 0x8000490C, 0x00000000 }, | 153 {&GUID_Key, 73, 0x8000490C, 0x00000000}, |
151 { &GUID_Key, 74, 0x80004A0C, 0x00000000 }, | 154 {&GUID_Key, 74, 0x80004A0C, 0x00000000}, |
152 { &GUID_Key, 75, 0x80004B0C, 0x00000000 }, | 155 {&GUID_Key, 75, 0x80004B0C, 0x00000000}, |
153 { &GUID_Key, 76, 0x80004C0C, 0x00000000 }, | 156 {&GUID_Key, 76, 0x80004C0C, 0x00000000}, |
154 { &GUID_Key, 77, 0x80004D0C, 0x00000000 }, | 157 {&GUID_Key, 77, 0x80004D0C, 0x00000000}, |
155 { &GUID_Key, 78, 0x80004E0C, 0x00000000 }, | 158 {&GUID_Key, 78, 0x80004E0C, 0x00000000}, |
156 { &GUID_Key, 79, 0x80004F0C, 0x00000000 }, | 159 {&GUID_Key, 79, 0x80004F0C, 0x00000000}, |
157 { &GUID_Key, 80, 0x8000500C, 0x00000000 }, | 160 {&GUID_Key, 80, 0x8000500C, 0x00000000}, |
158 { &GUID_Key, 81, 0x8000510C, 0x00000000 }, | 161 {&GUID_Key, 81, 0x8000510C, 0x00000000}, |
159 { &GUID_Key, 82, 0x8000520C, 0x00000000 }, | 162 {&GUID_Key, 82, 0x8000520C, 0x00000000}, |
160 { &GUID_Key, 83, 0x8000530C, 0x00000000 }, | 163 {&GUID_Key, 83, 0x8000530C, 0x00000000}, |
161 { &GUID_Key, 84, 0x8000540C, 0x00000000 }, | 164 {&GUID_Key, 84, 0x8000540C, 0x00000000}, |
162 { &GUID_Key, 85, 0x8000550C, 0x00000000 }, | 165 {&GUID_Key, 85, 0x8000550C, 0x00000000}, |
163 { &GUID_Key, 86, 0x8000560C, 0x00000000 }, | 166 {&GUID_Key, 86, 0x8000560C, 0x00000000}, |
164 { &GUID_Key, 87, 0x8000570C, 0x00000000 }, | 167 {&GUID_Key, 87, 0x8000570C, 0x00000000}, |
165 { &GUID_Key, 88, 0x8000580C, 0x00000000 }, | 168 {&GUID_Key, 88, 0x8000580C, 0x00000000}, |
166 { &GUID_Key, 89, 0x8000590C, 0x00000000 }, | 169 {&GUID_Key, 89, 0x8000590C, 0x00000000}, |
167 { &GUID_Key, 90, 0x80005A0C, 0x00000000 }, | 170 {&GUID_Key, 90, 0x80005A0C, 0x00000000}, |
168 { &GUID_Key, 91, 0x80005B0C, 0x00000000 }, | 171 {&GUID_Key, 91, 0x80005B0C, 0x00000000}, |
169 { &GUID_Key, 92, 0x80005C0C, 0x00000000 }, | 172 {&GUID_Key, 92, 0x80005C0C, 0x00000000}, |
170 { &GUID_Key, 93, 0x80005D0C, 0x00000000 }, | 173 {&GUID_Key, 93, 0x80005D0C, 0x00000000}, |
171 { &GUID_Key, 94, 0x80005E0C, 0x00000000 }, | 174 {&GUID_Key, 94, 0x80005E0C, 0x00000000}, |
172 { &GUID_Key, 95, 0x80005F0C, 0x00000000 }, | 175 {&GUID_Key, 95, 0x80005F0C, 0x00000000}, |
173 { &GUID_Key, 96, 0x8000600C, 0x00000000 }, | 176 {&GUID_Key, 96, 0x8000600C, 0x00000000}, |
174 { &GUID_Key, 97, 0x8000610C, 0x00000000 }, | 177 {&GUID_Key, 97, 0x8000610C, 0x00000000}, |
175 { &GUID_Key, 98, 0x8000620C, 0x00000000 }, | 178 {&GUID_Key, 98, 0x8000620C, 0x00000000}, |
176 { &GUID_Key, 99, 0x8000630C, 0x00000000 }, | 179 {&GUID_Key, 99, 0x8000630C, 0x00000000}, |
177 { &GUID_Key, 100, 0x8000640C, 0x00000000 }, | 180 {&GUID_Key, 100, 0x8000640C, 0x00000000}, |
178 { &GUID_Key, 101, 0x8000650C, 0x00000000 }, | 181 {&GUID_Key, 101, 0x8000650C, 0x00000000}, |
179 { &GUID_Key, 102, 0x8000660C, 0x00000000 }, | 182 {&GUID_Key, 102, 0x8000660C, 0x00000000}, |
180 { &GUID_Key, 103, 0x8000670C, 0x00000000 }, | 183 {&GUID_Key, 103, 0x8000670C, 0x00000000}, |
181 { &GUID_Key, 104, 0x8000680C, 0x00000000 }, | 184 {&GUID_Key, 104, 0x8000680C, 0x00000000}, |
182 { &GUID_Key, 105, 0x8000690C, 0x00000000 }, | 185 {&GUID_Key, 105, 0x8000690C, 0x00000000}, |
183 { &GUID_Key, 106, 0x80006A0C, 0x00000000 }, | 186 {&GUID_Key, 106, 0x80006A0C, 0x00000000}, |
184 { &GUID_Key, 107, 0x80006B0C, 0x00000000 }, | 187 {&GUID_Key, 107, 0x80006B0C, 0x00000000}, |
185 { &GUID_Key, 108, 0x80006C0C, 0x00000000 }, | 188 {&GUID_Key, 108, 0x80006C0C, 0x00000000}, |
186 { &GUID_Key, 109, 0x80006D0C, 0x00000000 }, | 189 {&GUID_Key, 109, 0x80006D0C, 0x00000000}, |
187 { &GUID_Key, 110, 0x80006E0C, 0x00000000 }, | 190 {&GUID_Key, 110, 0x80006E0C, 0x00000000}, |
188 { &GUID_Key, 111, 0x80006F0C, 0x00000000 }, | 191 {&GUID_Key, 111, 0x80006F0C, 0x00000000}, |
189 { &GUID_Key, 112, 0x8000700C, 0x00000000 }, | 192 {&GUID_Key, 112, 0x8000700C, 0x00000000}, |
190 { &GUID_Key, 113, 0x8000710C, 0x00000000 }, | 193 {&GUID_Key, 113, 0x8000710C, 0x00000000}, |
191 { &GUID_Key, 114, 0x8000720C, 0x00000000 }, | 194 {&GUID_Key, 114, 0x8000720C, 0x00000000}, |
192 { &GUID_Key, 115, 0x8000730C, 0x00000000 }, | 195 {&GUID_Key, 115, 0x8000730C, 0x00000000}, |
193 { &GUID_Key, 116, 0x8000740C, 0x00000000 }, | 196 {&GUID_Key, 116, 0x8000740C, 0x00000000}, |
194 { &GUID_Key, 117, 0x8000750C, 0x00000000 }, | 197 {&GUID_Key, 117, 0x8000750C, 0x00000000}, |
195 { &GUID_Key, 118, 0x8000760C, 0x00000000 }, | 198 {&GUID_Key, 118, 0x8000760C, 0x00000000}, |
196 { &GUID_Key, 119, 0x8000770C, 0x00000000 }, | 199 {&GUID_Key, 119, 0x8000770C, 0x00000000}, |
197 { &GUID_Key, 120, 0x8000780C, 0x00000000 }, | 200 {&GUID_Key, 120, 0x8000780C, 0x00000000}, |
198 { &GUID_Key, 121, 0x8000790C, 0x00000000 }, | 201 {&GUID_Key, 121, 0x8000790C, 0x00000000}, |
199 { &GUID_Key, 122, 0x80007A0C, 0x00000000 }, | 202 {&GUID_Key, 122, 0x80007A0C, 0x00000000}, |
200 { &GUID_Key, 123, 0x80007B0C, 0x00000000 }, | 203 {&GUID_Key, 123, 0x80007B0C, 0x00000000}, |
201 { &GUID_Key, 124, 0x80007C0C, 0x00000000 }, | 204 {&GUID_Key, 124, 0x80007C0C, 0x00000000}, |
202 { &GUID_Key, 125, 0x80007D0C, 0x00000000 }, | 205 {&GUID_Key, 125, 0x80007D0C, 0x00000000}, |
203 { &GUID_Key, 126, 0x80007E0C, 0x00000000 }, | 206 {&GUID_Key, 126, 0x80007E0C, 0x00000000}, |
204 { &GUID_Key, 127, 0x80007F0C, 0x00000000 }, | 207 {&GUID_Key, 127, 0x80007F0C, 0x00000000}, |
205 { &GUID_Key, 128, 0x8000800C, 0x00000000 }, | 208 {&GUID_Key, 128, 0x8000800C, 0x00000000}, |
206 { &GUID_Key, 129, 0x8000810C, 0x00000000 }, | 209 {&GUID_Key, 129, 0x8000810C, 0x00000000}, |
207 { &GUID_Key, 130, 0x8000820C, 0x00000000 }, | 210 {&GUID_Key, 130, 0x8000820C, 0x00000000}, |
208 { &GUID_Key, 131, 0x8000830C, 0x00000000 }, | 211 {&GUID_Key, 131, 0x8000830C, 0x00000000}, |
209 { &GUID_Key, 132, 0x8000840C, 0x00000000 }, | 212 {&GUID_Key, 132, 0x8000840C, 0x00000000}, |
210 { &GUID_Key, 133, 0x8000850C, 0x00000000 }, | 213 {&GUID_Key, 133, 0x8000850C, 0x00000000}, |
211 { &GUID_Key, 134, 0x8000860C, 0x00000000 }, | 214 {&GUID_Key, 134, 0x8000860C, 0x00000000}, |
212 { &GUID_Key, 135, 0x8000870C, 0x00000000 }, | 215 {&GUID_Key, 135, 0x8000870C, 0x00000000}, |
213 { &GUID_Key, 136, 0x8000880C, 0x00000000 }, | 216 {&GUID_Key, 136, 0x8000880C, 0x00000000}, |
214 { &GUID_Key, 137, 0x8000890C, 0x00000000 }, | 217 {&GUID_Key, 137, 0x8000890C, 0x00000000}, |
215 { &GUID_Key, 138, 0x80008A0C, 0x00000000 }, | 218 {&GUID_Key, 138, 0x80008A0C, 0x00000000}, |
216 { &GUID_Key, 139, 0x80008B0C, 0x00000000 }, | 219 {&GUID_Key, 139, 0x80008B0C, 0x00000000}, |
217 { &GUID_Key, 140, 0x80008C0C, 0x00000000 }, | 220 {&GUID_Key, 140, 0x80008C0C, 0x00000000}, |
218 { &GUID_Key, 141, 0x80008D0C, 0x00000000 }, | 221 {&GUID_Key, 141, 0x80008D0C, 0x00000000}, |
219 { &GUID_Key, 142, 0x80008E0C, 0x00000000 }, | 222 {&GUID_Key, 142, 0x80008E0C, 0x00000000}, |
220 { &GUID_Key, 143, 0x80008F0C, 0x00000000 }, | 223 {&GUID_Key, 143, 0x80008F0C, 0x00000000}, |
221 { &GUID_Key, 144, 0x8000900C, 0x00000000 }, | 224 {&GUID_Key, 144, 0x8000900C, 0x00000000}, |
222 { &GUID_Key, 145, 0x8000910C, 0x00000000 }, | 225 {&GUID_Key, 145, 0x8000910C, 0x00000000}, |
223 { &GUID_Key, 146, 0x8000920C, 0x00000000 }, | 226 {&GUID_Key, 146, 0x8000920C, 0x00000000}, |
224 { &GUID_Key, 147, 0x8000930C, 0x00000000 }, | 227 {&GUID_Key, 147, 0x8000930C, 0x00000000}, |
225 { &GUID_Key, 148, 0x8000940C, 0x00000000 }, | 228 {&GUID_Key, 148, 0x8000940C, 0x00000000}, |
226 { &GUID_Key, 149, 0x8000950C, 0x00000000 }, | 229 {&GUID_Key, 149, 0x8000950C, 0x00000000}, |
227 { &GUID_Key, 150, 0x8000960C, 0x00000000 }, | 230 {&GUID_Key, 150, 0x8000960C, 0x00000000}, |
228 { &GUID_Key, 151, 0x8000970C, 0x00000000 }, | 231 {&GUID_Key, 151, 0x8000970C, 0x00000000}, |
229 { &GUID_Key, 152, 0x8000980C, 0x00000000 }, | 232 {&GUID_Key, 152, 0x8000980C, 0x00000000}, |
230 { &GUID_Key, 153, 0x8000990C, 0x00000000 }, | 233 {&GUID_Key, 153, 0x8000990C, 0x00000000}, |
231 { &GUID_Key, 154, 0x80009A0C, 0x00000000 }, | 234 {&GUID_Key, 154, 0x80009A0C, 0x00000000}, |
232 { &GUID_Key, 155, 0x80009B0C, 0x00000000 }, | 235 {&GUID_Key, 155, 0x80009B0C, 0x00000000}, |
233 { &GUID_Key, 156, 0x80009C0C, 0x00000000 }, | 236 {&GUID_Key, 156, 0x80009C0C, 0x00000000}, |
234 { &GUID_Key, 157, 0x80009D0C, 0x00000000 }, | 237 {&GUID_Key, 157, 0x80009D0C, 0x00000000}, |
235 { &GUID_Key, 158, 0x80009E0C, 0x00000000 }, | 238 {&GUID_Key, 158, 0x80009E0C, 0x00000000}, |
236 { &GUID_Key, 159, 0x80009F0C, 0x00000000 }, | 239 {&GUID_Key, 159, 0x80009F0C, 0x00000000}, |
237 { &GUID_Key, 160, 0x8000A00C, 0x00000000 }, | 240 {&GUID_Key, 160, 0x8000A00C, 0x00000000}, |
238 { &GUID_Key, 161, 0x8000A10C, 0x00000000 }, | 241 {&GUID_Key, 161, 0x8000A10C, 0x00000000}, |
239 { &GUID_Key, 162, 0x8000A20C, 0x00000000 }, | 242 {&GUID_Key, 162, 0x8000A20C, 0x00000000}, |
240 { &GUID_Key, 163, 0x8000A30C, 0x00000000 }, | 243 {&GUID_Key, 163, 0x8000A30C, 0x00000000}, |
241 { &GUID_Key, 164, 0x8000A40C, 0x00000000 }, | 244 {&GUID_Key, 164, 0x8000A40C, 0x00000000}, |
242 { &GUID_Key, 165, 0x8000A50C, 0x00000000 }, | 245 {&GUID_Key, 165, 0x8000A50C, 0x00000000}, |
243 { &GUID_Key, 166, 0x8000A60C, 0x00000000 }, | 246 {&GUID_Key, 166, 0x8000A60C, 0x00000000}, |
244 { &GUID_Key, 167, 0x8000A70C, 0x00000000 }, | 247 {&GUID_Key, 167, 0x8000A70C, 0x00000000}, |
245 { &GUID_Key, 168, 0x8000A80C, 0x00000000 }, | 248 {&GUID_Key, 168, 0x8000A80C, 0x00000000}, |
246 { &GUID_Key, 169, 0x8000A90C, 0x00000000 }, | 249 {&GUID_Key, 169, 0x8000A90C, 0x00000000}, |
247 { &GUID_Key, 170, 0x8000AA0C, 0x00000000 }, | 250 {&GUID_Key, 170, 0x8000AA0C, 0x00000000}, |
248 { &GUID_Key, 171, 0x8000AB0C, 0x00000000 }, | 251 {&GUID_Key, 171, 0x8000AB0C, 0x00000000}, |
249 { &GUID_Key, 172, 0x8000AC0C, 0x00000000 }, | 252 {&GUID_Key, 172, 0x8000AC0C, 0x00000000}, |
250 { &GUID_Key, 173, 0x8000AD0C, 0x00000000 }, | 253 {&GUID_Key, 173, 0x8000AD0C, 0x00000000}, |
251 { &GUID_Key, 174, 0x8000AE0C, 0x00000000 }, | 254 {&GUID_Key, 174, 0x8000AE0C, 0x00000000}, |
252 { &GUID_Key, 175, 0x8000AF0C, 0x00000000 }, | 255 {&GUID_Key, 175, 0x8000AF0C, 0x00000000}, |
253 { &GUID_Key, 176, 0x8000B00C, 0x00000000 }, | 256 {&GUID_Key, 176, 0x8000B00C, 0x00000000}, |
254 { &GUID_Key, 177, 0x8000B10C, 0x00000000 }, | 257 {&GUID_Key, 177, 0x8000B10C, 0x00000000}, |
255 { &GUID_Key, 178, 0x8000B20C, 0x00000000 }, | 258 {&GUID_Key, 178, 0x8000B20C, 0x00000000}, |
256 { &GUID_Key, 179, 0x8000B30C, 0x00000000 }, | 259 {&GUID_Key, 179, 0x8000B30C, 0x00000000}, |
257 { &GUID_Key, 180, 0x8000B40C, 0x00000000 }, | 260 {&GUID_Key, 180, 0x8000B40C, 0x00000000}, |
258 { &GUID_Key, 181, 0x8000B50C, 0x00000000 }, | 261 {&GUID_Key, 181, 0x8000B50C, 0x00000000}, |
259 { &GUID_Key, 182, 0x8000B60C, 0x00000000 }, | 262 {&GUID_Key, 182, 0x8000B60C, 0x00000000}, |
260 { &GUID_Key, 183, 0x8000B70C, 0x00000000 }, | 263 {&GUID_Key, 183, 0x8000B70C, 0x00000000}, |
261 { &GUID_Key, 184, 0x8000B80C, 0x00000000 }, | 264 {&GUID_Key, 184, 0x8000B80C, 0x00000000}, |
262 { &GUID_Key, 185, 0x8000B90C, 0x00000000 }, | 265 {&GUID_Key, 185, 0x8000B90C, 0x00000000}, |
263 { &GUID_Key, 186, 0x8000BA0C, 0x00000000 }, | 266 {&GUID_Key, 186, 0x8000BA0C, 0x00000000}, |
264 { &GUID_Key, 187, 0x8000BB0C, 0x00000000 }, | 267 {&GUID_Key, 187, 0x8000BB0C, 0x00000000}, |
265 { &GUID_Key, 188, 0x8000BC0C, 0x00000000 }, | 268 {&GUID_Key, 188, 0x8000BC0C, 0x00000000}, |
266 { &GUID_Key, 189, 0x8000BD0C, 0x00000000 }, | 269 {&GUID_Key, 189, 0x8000BD0C, 0x00000000}, |
267 { &GUID_Key, 190, 0x8000BE0C, 0x00000000 }, | 270 {&GUID_Key, 190, 0x8000BE0C, 0x00000000}, |
268 { &GUID_Key, 191, 0x8000BF0C, 0x00000000 }, | 271 {&GUID_Key, 191, 0x8000BF0C, 0x00000000}, |
269 { &GUID_Key, 192, 0x8000C00C, 0x00000000 }, | 272 {&GUID_Key, 192, 0x8000C00C, 0x00000000}, |
270 { &GUID_Key, 193, 0x8000C10C, 0x00000000 }, | 273 {&GUID_Key, 193, 0x8000C10C, 0x00000000}, |
271 { &GUID_Key, 194, 0x8000C20C, 0x00000000 }, | 274 {&GUID_Key, 194, 0x8000C20C, 0x00000000}, |
272 { &GUID_Key, 195, 0x8000C30C, 0x00000000 }, | 275 {&GUID_Key, 195, 0x8000C30C, 0x00000000}, |
273 { &GUID_Key, 196, 0x8000C40C, 0x00000000 }, | 276 {&GUID_Key, 196, 0x8000C40C, 0x00000000}, |
274 { &GUID_Key, 197, 0x8000C50C, 0x00000000 }, | 277 {&GUID_Key, 197, 0x8000C50C, 0x00000000}, |
275 { &GUID_Key, 198, 0x8000C60C, 0x00000000 }, | 278 {&GUID_Key, 198, 0x8000C60C, 0x00000000}, |
276 { &GUID_Key, 199, 0x8000C70C, 0x00000000 }, | 279 {&GUID_Key, 199, 0x8000C70C, 0x00000000}, |
277 { &GUID_Key, 200, 0x8000C80C, 0x00000000 }, | 280 {&GUID_Key, 200, 0x8000C80C, 0x00000000}, |
278 { &GUID_Key, 201, 0x8000C90C, 0x00000000 }, | 281 {&GUID_Key, 201, 0x8000C90C, 0x00000000}, |
279 { &GUID_Key, 202, 0x8000CA0C, 0x00000000 }, | 282 {&GUID_Key, 202, 0x8000CA0C, 0x00000000}, |
280 { &GUID_Key, 203, 0x8000CB0C, 0x00000000 }, | 283 {&GUID_Key, 203, 0x8000CB0C, 0x00000000}, |
281 { &GUID_Key, 204, 0x8000CC0C, 0x00000000 }, | 284 {&GUID_Key, 204, 0x8000CC0C, 0x00000000}, |
282 { &GUID_Key, 205, 0x8000CD0C, 0x00000000 }, | 285 {&GUID_Key, 205, 0x8000CD0C, 0x00000000}, |
283 { &GUID_Key, 206, 0x8000CE0C, 0x00000000 }, | 286 {&GUID_Key, 206, 0x8000CE0C, 0x00000000}, |
284 { &GUID_Key, 207, 0x8000CF0C, 0x00000000 }, | 287 {&GUID_Key, 207, 0x8000CF0C, 0x00000000}, |
285 { &GUID_Key, 208, 0x8000D00C, 0x00000000 }, | 288 {&GUID_Key, 208, 0x8000D00C, 0x00000000}, |
286 { &GUID_Key, 209, 0x8000D10C, 0x00000000 }, | 289 {&GUID_Key, 209, 0x8000D10C, 0x00000000}, |
287 { &GUID_Key, 210, 0x8000D20C, 0x00000000 }, | 290 {&GUID_Key, 210, 0x8000D20C, 0x00000000}, |
288 { &GUID_Key, 211, 0x8000D30C, 0x00000000 }, | 291 {&GUID_Key, 211, 0x8000D30C, 0x00000000}, |
289 { &GUID_Key, 212, 0x8000D40C, 0x00000000 }, | 292 {&GUID_Key, 212, 0x8000D40C, 0x00000000}, |
290 { &GUID_Key, 213, 0x8000D50C, 0x00000000 }, | 293 {&GUID_Key, 213, 0x8000D50C, 0x00000000}, |
291 { &GUID_Key, 214, 0x8000D60C, 0x00000000 }, | 294 {&GUID_Key, 214, 0x8000D60C, 0x00000000}, |
292 { &GUID_Key, 215, 0x8000D70C, 0x00000000 }, | 295 {&GUID_Key, 215, 0x8000D70C, 0x00000000}, |
293 { &GUID_Key, 216, 0x8000D80C, 0x00000000 }, | 296 {&GUID_Key, 216, 0x8000D80C, 0x00000000}, |
294 { &GUID_Key, 217, 0x8000D90C, 0x00000000 }, | 297 {&GUID_Key, 217, 0x8000D90C, 0x00000000}, |
295 { &GUID_Key, 218, 0x8000DA0C, 0x00000000 }, | 298 {&GUID_Key, 218, 0x8000DA0C, 0x00000000}, |
296 { &GUID_Key, 219, 0x8000DB0C, 0x00000000 }, | 299 {&GUID_Key, 219, 0x8000DB0C, 0x00000000}, |
297 { &GUID_Key, 220, 0x8000DC0C, 0x00000000 }, | 300 {&GUID_Key, 220, 0x8000DC0C, 0x00000000}, |
298 { &GUID_Key, 221, 0x8000DD0C, 0x00000000 }, | 301 {&GUID_Key, 221, 0x8000DD0C, 0x00000000}, |
299 { &GUID_Key, 222, 0x8000DE0C, 0x00000000 }, | 302 {&GUID_Key, 222, 0x8000DE0C, 0x00000000}, |
300 { &GUID_Key, 223, 0x8000DF0C, 0x00000000 }, | 303 {&GUID_Key, 223, 0x8000DF0C, 0x00000000}, |
301 { &GUID_Key, 224, 0x8000E00C, 0x00000000 }, | 304 {&GUID_Key, 224, 0x8000E00C, 0x00000000}, |
302 { &GUID_Key, 225, 0x8000E10C, 0x00000000 }, | 305 {&GUID_Key, 225, 0x8000E10C, 0x00000000}, |
303 { &GUID_Key, 226, 0x8000E20C, 0x00000000 }, | 306 {&GUID_Key, 226, 0x8000E20C, 0x00000000}, |
304 { &GUID_Key, 227, 0x8000E30C, 0x00000000 }, | 307 {&GUID_Key, 227, 0x8000E30C, 0x00000000}, |
305 { &GUID_Key, 228, 0x8000E40C, 0x00000000 }, | 308 {&GUID_Key, 228, 0x8000E40C, 0x00000000}, |
306 { &GUID_Key, 229, 0x8000E50C, 0x00000000 }, | 309 {&GUID_Key, 229, 0x8000E50C, 0x00000000}, |
307 { &GUID_Key, 230, 0x8000E60C, 0x00000000 }, | 310 {&GUID_Key, 230, 0x8000E60C, 0x00000000}, |
308 { &GUID_Key, 231, 0x8000E70C, 0x00000000 }, | 311 {&GUID_Key, 231, 0x8000E70C, 0x00000000}, |
309 { &GUID_Key, 232, 0x8000E80C, 0x00000000 }, | 312 {&GUID_Key, 232, 0x8000E80C, 0x00000000}, |
310 { &GUID_Key, 233, 0x8000E90C, 0x00000000 }, | 313 {&GUID_Key, 233, 0x8000E90C, 0x00000000}, |
311 { &GUID_Key, 234, 0x8000EA0C, 0x00000000 }, | 314 {&GUID_Key, 234, 0x8000EA0C, 0x00000000}, |
312 { &GUID_Key, 235, 0x8000EB0C, 0x00000000 }, | 315 {&GUID_Key, 235, 0x8000EB0C, 0x00000000}, |
313 { &GUID_Key, 236, 0x8000EC0C, 0x00000000 }, | 316 {&GUID_Key, 236, 0x8000EC0C, 0x00000000}, |
314 { &GUID_Key, 237, 0x8000ED0C, 0x00000000 }, | 317 {&GUID_Key, 237, 0x8000ED0C, 0x00000000}, |
315 { &GUID_Key, 238, 0x8000EE0C, 0x00000000 }, | 318 {&GUID_Key, 238, 0x8000EE0C, 0x00000000}, |
316 { &GUID_Key, 239, 0x8000EF0C, 0x00000000 }, | 319 {&GUID_Key, 239, 0x8000EF0C, 0x00000000}, |
317 { &GUID_Key, 240, 0x8000F00C, 0x00000000 }, | 320 {&GUID_Key, 240, 0x8000F00C, 0x00000000}, |
318 { &GUID_Key, 241, 0x8000F10C, 0x00000000 }, | 321 {&GUID_Key, 241, 0x8000F10C, 0x00000000}, |
319 { &GUID_Key, 242, 0x8000F20C, 0x00000000 }, | 322 {&GUID_Key, 242, 0x8000F20C, 0x00000000}, |
320 { &GUID_Key, 243, 0x8000F30C, 0x00000000 }, | 323 {&GUID_Key, 243, 0x8000F30C, 0x00000000}, |
321 { &GUID_Key, 244, 0x8000F40C, 0x00000000 }, | 324 {&GUID_Key, 244, 0x8000F40C, 0x00000000}, |
322 { &GUID_Key, 245, 0x8000F50C, 0x00000000 }, | 325 {&GUID_Key, 245, 0x8000F50C, 0x00000000}, |
323 { &GUID_Key, 246, 0x8000F60C, 0x00000000 }, | 326 {&GUID_Key, 246, 0x8000F60C, 0x00000000}, |
324 { &GUID_Key, 247, 0x8000F70C, 0x00000000 }, | 327 {&GUID_Key, 247, 0x8000F70C, 0x00000000}, |
325 { &GUID_Key, 248, 0x8000F80C, 0x00000000 }, | 328 {&GUID_Key, 248, 0x8000F80C, 0x00000000}, |
326 { &GUID_Key, 249, 0x8000F90C, 0x00000000 }, | 329 {&GUID_Key, 249, 0x8000F90C, 0x00000000}, |
327 { &GUID_Key, 250, 0x8000FA0C, 0x00000000 }, | 330 {&GUID_Key, 250, 0x8000FA0C, 0x00000000}, |
328 { &GUID_Key, 251, 0x8000FB0C, 0x00000000 }, | 331 {&GUID_Key, 251, 0x8000FB0C, 0x00000000}, |
329 { &GUID_Key, 252, 0x8000FC0C, 0x00000000 }, | 332 {&GUID_Key, 252, 0x8000FC0C, 0x00000000}, |
330 { &GUID_Key, 253, 0x8000FD0C, 0x00000000 }, | 333 {&GUID_Key, 253, 0x8000FD0C, 0x00000000}, |
331 { &GUID_Key, 254, 0x8000FE0C, 0x00000000 }, | 334 {&GUID_Key, 254, 0x8000FE0C, 0x00000000}, |
332 { &GUID_Key, 255, 0x8000FF0C, 0x00000000 }, | 335 {&GUID_Key, 255, 0x8000FF0C, 0x00000000}, |
333 }; | 336 }; |
334 | 337 |
335 const DIDATAFORMAT c_dfDIKeyboard = { 24, 16, 0x00000002, 256, 256, KBD_fmt }; | 338 const DIDATAFORMAT c_dfDIKeyboard = { 24, 16, 0x00000002, 256, 256, KBD_fmt }; |
336 | 339 |
337 | 340 |
338 /* Mouse */ | 341 /* Mouse */ |
339 | 342 |
340 static DIOBJECTDATAFORMAT PTR_fmt[] = { | 343 static DIOBJECTDATAFORMAT PTR_fmt[] = { |
341 { &GUID_XAxis, 0, 0x00FFFF03, 0x00000000 }, | 344 {&GUID_XAxis, 0, 0x00FFFF03, 0x00000000}, |
342 { &GUID_YAxis, 4, 0x00FFFF03, 0x00000000 }, | 345 {&GUID_YAxis, 4, 0x00FFFF03, 0x00000000}, |
343 { &GUID_ZAxis, 8, 0x80FFFF03, 0x00000000 }, | 346 {&GUID_ZAxis, 8, 0x80FFFF03, 0x00000000}, |
344 { NULL, 12, 0x00FFFF0C, 0x00000000 }, | 347 {NULL, 12, 0x00FFFF0C, 0x00000000}, |
345 { NULL, 13, 0x00FFFF0C, 0x00000000 }, | 348 {NULL, 13, 0x00FFFF0C, 0x00000000}, |
346 { NULL, 14, 0x80FFFF0C, 0x00000000 }, | 349 {NULL, 14, 0x80FFFF0C, 0x00000000}, |
347 { NULL, 15, 0x80FFFF0C, 0x00000000 }, | 350 {NULL, 15, 0x80FFFF0C, 0x00000000}, |
348 }; | 351 }; |
349 | 352 |
350 const DIDATAFORMAT c_dfDIMouse = { 24, 16, 0x00000002, 16, 7, PTR_fmt }; | 353 const DIDATAFORMAT c_dfDIMouse = { 24, 16, 0x00000002, 16, 7, PTR_fmt }; |
351 | 354 |
352 | 355 |
353 /* Joystick */ | 356 /* Joystick */ |
354 | 357 |
355 static DIOBJECTDATAFORMAT JOY_fmt[] = { | 358 static DIOBJECTDATAFORMAT JOY_fmt[] = { |
356 { &GUID_XAxis, 0, 0x80FFFF03, 0x00000100 }, | 359 {&GUID_XAxis, 0, 0x80FFFF03, 0x00000100}, |
357 { &GUID_YAxis, 4, 0x80FFFF03, 0x00000100 }, | 360 {&GUID_YAxis, 4, 0x80FFFF03, 0x00000100}, |
358 { &GUID_ZAxis, 8, 0x80FFFF03, 0x00000100 }, | 361 {&GUID_ZAxis, 8, 0x80FFFF03, 0x00000100}, |
359 { &GUID_RxAxis, 12, 0x80FFFF03, 0x00000100 }, | 362 {&GUID_RxAxis, 12, 0x80FFFF03, 0x00000100}, |
360 { &GUID_RyAxis, 16, 0x80FFFF03, 0x00000100 }, | 363 {&GUID_RyAxis, 16, 0x80FFFF03, 0x00000100}, |
361 { &GUID_RzAxis, 20, 0x80FFFF03, 0x00000100 }, | 364 {&GUID_RzAxis, 20, 0x80FFFF03, 0x00000100}, |
362 { &GUID_Slider, 24, 0x80FFFF03, 0x00000100 }, | 365 {&GUID_Slider, 24, 0x80FFFF03, 0x00000100}, |
363 { &GUID_Slider, 28, 0x80FFFF03, 0x00000100 }, | 366 {&GUID_Slider, 28, 0x80FFFF03, 0x00000100}, |
364 { &GUID_POV, 32, 0x80FFFF10, 0x00000000 }, | 367 {&GUID_POV, 32, 0x80FFFF10, 0x00000000}, |
365 { &GUID_POV, 36, 0x80FFFF10, 0x00000000 }, | 368 {&GUID_POV, 36, 0x80FFFF10, 0x00000000}, |
366 { &GUID_POV, 40, 0x80FFFF10, 0x00000000 }, | 369 {&GUID_POV, 40, 0x80FFFF10, 0x00000000}, |
367 { &GUID_POV, 44, 0x80FFFF10, 0x00000000 }, | 370 {&GUID_POV, 44, 0x80FFFF10, 0x00000000}, |
368 { NULL, 48, 0x80FFFF0C, 0x00000000 }, | 371 {NULL, 48, 0x80FFFF0C, 0x00000000}, |
369 { NULL, 49, 0x80FFFF0C, 0x00000000 }, | 372 {NULL, 49, 0x80FFFF0C, 0x00000000}, |
370 { NULL, 50, 0x80FFFF0C, 0x00000000 }, | 373 {NULL, 50, 0x80FFFF0C, 0x00000000}, |
371 { NULL, 51, 0x80FFFF0C, 0x00000000 }, | 374 {NULL, 51, 0x80FFFF0C, 0x00000000}, |
372 { NULL, 52, 0x80FFFF0C, 0x00000000 }, | 375 {NULL, 52, 0x80FFFF0C, 0x00000000}, |
373 { NULL, 53, 0x80FFFF0C, 0x00000000 }, | 376 {NULL, 53, 0x80FFFF0C, 0x00000000}, |
374 { NULL, 54, 0x80FFFF0C, 0x00000000 }, | 377 {NULL, 54, 0x80FFFF0C, 0x00000000}, |
375 { NULL, 55, 0x80FFFF0C, 0x00000000 }, | 378 {NULL, 55, 0x80FFFF0C, 0x00000000}, |
376 { NULL, 56, 0x80FFFF0C, 0x00000000 }, | 379 {NULL, 56, 0x80FFFF0C, 0x00000000}, |
377 { NULL, 57, 0x80FFFF0C, 0x00000000 }, | 380 {NULL, 57, 0x80FFFF0C, 0x00000000}, |
378 { NULL, 58, 0x80FFFF0C, 0x00000000 }, | 381 {NULL, 58, 0x80FFFF0C, 0x00000000}, |
379 { NULL, 59, 0x80FFFF0C, 0x00000000 }, | 382 {NULL, 59, 0x80FFFF0C, 0x00000000}, |
380 { NULL, 60, 0x80FFFF0C, 0x00000000 }, | 383 {NULL, 60, 0x80FFFF0C, 0x00000000}, |
381 { NULL, 61, 0x80FFFF0C, 0x00000000 }, | 384 {NULL, 61, 0x80FFFF0C, 0x00000000}, |
382 { NULL, 62, 0x80FFFF0C, 0x00000000 }, | 385 {NULL, 62, 0x80FFFF0C, 0x00000000}, |
383 { NULL, 63, 0x80FFFF0C, 0x00000000 }, | 386 {NULL, 63, 0x80FFFF0C, 0x00000000}, |
384 { NULL, 64, 0x80FFFF0C, 0x00000000 }, | 387 {NULL, 64, 0x80FFFF0C, 0x00000000}, |
385 { NULL, 65, 0x80FFFF0C, 0x00000000 }, | 388 {NULL, 65, 0x80FFFF0C, 0x00000000}, |
386 { NULL, 66, 0x80FFFF0C, 0x00000000 }, | 389 {NULL, 66, 0x80FFFF0C, 0x00000000}, |
387 { NULL, 67, 0x80FFFF0C, 0x00000000 }, | 390 {NULL, 67, 0x80FFFF0C, 0x00000000}, |
388 { NULL, 68, 0x80FFFF0C, 0x00000000 }, | 391 {NULL, 68, 0x80FFFF0C, 0x00000000}, |
389 { NULL, 69, 0x80FFFF0C, 0x00000000 }, | 392 {NULL, 69, 0x80FFFF0C, 0x00000000}, |
390 { NULL, 70, 0x80FFFF0C, 0x00000000 }, | 393 {NULL, 70, 0x80FFFF0C, 0x00000000}, |
391 { NULL, 71, 0x80FFFF0C, 0x00000000 }, | 394 {NULL, 71, 0x80FFFF0C, 0x00000000}, |
392 { NULL, 72, 0x80FFFF0C, 0x00000000 }, | 395 {NULL, 72, 0x80FFFF0C, 0x00000000}, |
393 { NULL, 73, 0x80FFFF0C, 0x00000000 }, | 396 {NULL, 73, 0x80FFFF0C, 0x00000000}, |
394 { NULL, 74, 0x80FFFF0C, 0x00000000 }, | 397 {NULL, 74, 0x80FFFF0C, 0x00000000}, |
395 { NULL, 75, 0x80FFFF0C, 0x00000000 }, | 398 {NULL, 75, 0x80FFFF0C, 0x00000000}, |
396 { NULL, 76, 0x80FFFF0C, 0x00000000 }, | 399 {NULL, 76, 0x80FFFF0C, 0x00000000}, |
397 { NULL, 77, 0x80FFFF0C, 0x00000000 }, | 400 {NULL, 77, 0x80FFFF0C, 0x00000000}, |
398 { NULL, 78, 0x80FFFF0C, 0x00000000 }, | 401 {NULL, 78, 0x80FFFF0C, 0x00000000}, |
399 { NULL, 79, 0x80FFFF0C, 0x00000000 }, | 402 {NULL, 79, 0x80FFFF0C, 0x00000000}, |
400 }; | 403 }; |
401 | 404 |
402 const DIDATAFORMAT c_dfDIJoystick = { 24, 16, 0x00000001, 80, 44, JOY_fmt }; | 405 const DIDATAFORMAT c_dfDIJoystick = { 24, 16, 0x00000001, 80, 44, JOY_fmt }; |
403 | 406 |
404 | 407 |
405 /* Initialization/Query functions */ | 408 /* Initialization/Query functions */ |
406 static int DX5_VideoInit(_THIS, SDL_PixelFormat *vformat); | 409 static int DX5_VideoInit (_THIS, SDL_PixelFormat * vformat); |
407 static SDL_Rect **DX5_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); | 410 static SDL_Rect **DX5_ListModes (_THIS, SDL_PixelFormat * format, |
408 static SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags); | 411 Uint32 flags); |
409 static int DX5_SetColors(_THIS, int firstcolor, int ncolors, | 412 static SDL_Surface *DX5_SetVideoMode (_THIS, SDL_Surface * current, int width, |
410 SDL_Color *colors); | 413 int height, int bpp, Uint32 flags); |
411 static int DX5_SetGammaRamp(_THIS, Uint16 *ramp); | 414 static int DX5_SetColors (_THIS, int firstcolor, int ncolors, |
412 static int DX5_GetGammaRamp(_THIS, Uint16 *ramp); | 415 SDL_Color * colors); |
413 static void DX5_VideoQuit(_THIS); | 416 static int DX5_SetGammaRamp (_THIS, Uint16 * ramp); |
417 static int DX5_GetGammaRamp (_THIS, Uint16 * ramp); | |
418 static void DX5_VideoQuit (_THIS); | |
414 | 419 |
415 /* Hardware surface functions */ | 420 /* Hardware surface functions */ |
416 static int DX5_AllocHWSurface(_THIS, SDL_Surface *surface); | 421 static int DX5_AllocHWSurface (_THIS, SDL_Surface * surface); |
417 static int DX5_CheckHWBlit(_THIS, SDL_Surface *src, SDL_Surface *dst); | 422 static int DX5_CheckHWBlit (_THIS, SDL_Surface * src, SDL_Surface * dst); |
418 static int DX5_FillHWRect(_THIS, SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color); | 423 static int DX5_FillHWRect (_THIS, SDL_Surface * dst, SDL_Rect * dstrect, |
419 static int DX5_SetHWColorKey(_THIS, SDL_Surface *surface, Uint32 key); | 424 Uint32 color); |
420 static int DX5_SetHWAlpha(_THIS, SDL_Surface *surface, Uint8 alpha); | 425 static int DX5_SetHWColorKey (_THIS, SDL_Surface * surface, Uint32 key); |
421 static int DX5_LockHWSurface(_THIS, SDL_Surface *surface); | 426 static int DX5_SetHWAlpha (_THIS, SDL_Surface * surface, Uint8 alpha); |
422 static void DX5_UnlockHWSurface(_THIS, SDL_Surface *surface); | 427 static int DX5_LockHWSurface (_THIS, SDL_Surface * surface); |
423 static int DX5_FlipHWSurface(_THIS, SDL_Surface *surface); | 428 static void DX5_UnlockHWSurface (_THIS, SDL_Surface * surface); |
424 static void DX5_FreeHWSurface(_THIS, SDL_Surface *surface); | 429 static int DX5_FlipHWSurface (_THIS, SDL_Surface * surface); |
425 | 430 static void DX5_FreeHWSurface (_THIS, SDL_Surface * surface); |
426 static int DX5_AllocDDSurface(_THIS, SDL_Surface *surface, | 431 |
427 LPDIRECTDRAWSURFACE3 requested, Uint32 flag); | 432 static int DX5_AllocDDSurface (_THIS, SDL_Surface * surface, |
433 LPDIRECTDRAWSURFACE3 requested, Uint32 flag); | |
428 | 434 |
429 /* Windows message handling functions */ | 435 /* Windows message handling functions */ |
430 static void DX5_RealizePalette(_THIS); | 436 static void DX5_RealizePalette (_THIS); |
431 static void DX5_PaletteChanged(_THIS, HWND window); | 437 static void DX5_PaletteChanged (_THIS, HWND window); |
432 static void DX5_WinPAINT(_THIS, HDC hdc); | 438 static void DX5_WinPAINT (_THIS, HDC hdc); |
433 | 439 |
434 /* WinDIB driver functions for manipulating gamma ramps */ | 440 /* WinDIB driver functions for manipulating gamma ramps */ |
435 extern int DIB_SetGammaRamp(_THIS, Uint16 *ramp); | 441 extern int DIB_SetGammaRamp (_THIS, Uint16 * ramp); |
436 extern int DIB_GetGammaRamp(_THIS, Uint16 *ramp); | 442 extern int DIB_GetGammaRamp (_THIS, Uint16 * ramp); |
437 extern void DIB_QuitGamma(_THIS); | 443 extern void DIB_QuitGamma (_THIS); |
438 | 444 |
439 /* Functions for loading the DirectX functions dynamically */ | 445 /* Functions for loading the DirectX functions dynamically */ |
440 static int DX5_loaded = 0; | 446 static int DX5_loaded = 0; |
441 static HINSTANCE DDrawDLL = NULL; | 447 static HINSTANCE DDrawDLL = NULL; |
442 static HINSTANCE DInputDLL = NULL; | 448 static HINSTANCE DInputDLL = NULL; |
443 | 449 |
444 void DX5_Unload(void) | 450 void |
445 { | 451 DX5_Unload (void) |
446 if ( --DX5_loaded == 0 ) { | 452 { |
447 if ( DDrawDLL != NULL ) { | 453 if (--DX5_loaded == 0) { |
448 FreeLibrary(DDrawDLL); | 454 if (DDrawDLL != NULL) { |
449 DDrawCreate = NULL; | 455 FreeLibrary (DDrawDLL); |
450 DDrawDLL = NULL; | 456 DDrawCreate = NULL; |
451 } | 457 DDrawDLL = NULL; |
452 if ( DInputDLL != NULL ) { | 458 } |
453 FreeLibrary(DInputDLL); | 459 if (DInputDLL != NULL) { |
454 DInputCreate = NULL; | 460 FreeLibrary (DInputDLL); |
455 DInputDLL = NULL; | 461 DInputCreate = NULL; |
456 } | 462 DInputDLL = NULL; |
457 } | 463 } |
458 } | 464 } |
459 int DX5_Load(void) | 465 } |
460 { | 466 int |
461 int status = 0; | 467 DX5_Load (void) |
462 | 468 { |
463 if ( ++DX5_loaded == 1 ) { | 469 int status = 0; |
464 DDrawDLL = LoadLibrary(TEXT("DDRAW.DLL")); | 470 |
465 if ( DDrawDLL != NULL ) { | 471 if (++DX5_loaded == 1) { |
466 DDrawCreate = (void *)GetProcAddress(DDrawDLL, | 472 DDrawDLL = LoadLibrary (TEXT ("DDRAW.DLL")); |
467 TEXT("DirectDrawCreate")); | 473 if (DDrawDLL != NULL) { |
468 } | 474 DDrawCreate = (void *) GetProcAddress (DDrawDLL, |
469 DInputDLL = LoadLibrary(TEXT("DINPUT.DLL")); | 475 TEXT ("DirectDrawCreate")); |
470 if ( DInputDLL != NULL ) { | 476 } |
471 DInputCreate = (void *)GetProcAddress(DInputDLL, | 477 DInputDLL = LoadLibrary (TEXT ("DINPUT.DLL")); |
472 TEXT("DirectInputCreateA")); | 478 if (DInputDLL != NULL) { |
473 } | 479 DInputCreate = (void *) GetProcAddress (DInputDLL, |
474 if ( DDrawDLL && DDrawCreate && DInputDLL && DInputCreate ) { | 480 TEXT |
475 status = 0; | 481 ("DirectInputCreateA")); |
476 } else { | 482 } |
477 DX5_Unload(); | 483 if (DDrawDLL && DDrawCreate && DInputDLL && DInputCreate) { |
478 status = -1; | 484 status = 0; |
479 } | 485 } else { |
480 } | 486 DX5_Unload (); |
481 return status; | 487 status = -1; |
488 } | |
489 } | |
490 return status; | |
482 } | 491 } |
483 | 492 |
484 /* DX5 driver bootstrap functions */ | 493 /* DX5 driver bootstrap functions */ |
485 | 494 |
486 static int DX5_Available(void) | 495 static int |
487 { | 496 DX5_Available (void) |
488 int ddraw_ok = 0; | 497 { |
489 HRESULT (WINAPI *DDrawCreate)(GUID *,LPDIRECTDRAW *,IUnknown *); | 498 int ddraw_ok = 0; |
490 LPDIRECTDRAW DDraw; | 499 HRESULT (WINAPI * DDrawCreate) (GUID *, LPDIRECTDRAW *, IUnknown *); |
491 | 500 LPDIRECTDRAW DDraw; |
492 /* Version check DINPUT.DLL and DDRAW.DLL (Is DirectX okay?) */ | 501 |
493 if ( DX5_Load() < 0 ) { | 502 /* Version check DINPUT.DLL and DDRAW.DLL (Is DirectX okay?) */ |
494 return -1; | 503 if (DX5_Load () < 0) { |
495 } | 504 return -1; |
496 | 505 } |
497 /* Try to create a valid DirectDraw object */ | 506 |
498 DDrawCreate = (void *)GetProcAddress(DDrawDLL, TEXT("DirectDrawCreate")); | 507 /* Try to create a valid DirectDraw object */ |
499 if ( (DDrawCreate != NULL) | 508 DDrawCreate = |
500 && !FAILED(DDrawCreate(NULL, &DDraw, NULL)) ) { | 509 (void *) GetProcAddress (DDrawDLL, TEXT ("DirectDrawCreate")); |
501 if ( !FAILED(IDirectDraw_SetCooperativeLevel(DDraw, | 510 if ((DDrawCreate != NULL) && !FAILED (DDrawCreate (NULL, &DDraw, NULL))) { |
502 NULL, DDSCL_NORMAL)) ) { | 511 if (!FAILED (IDirectDraw_SetCooperativeLevel (DDraw, |
503 DDSURFACEDESC desc; | 512 NULL, DDSCL_NORMAL))) { |
504 LPDIRECTDRAWSURFACE DDrawSurf; | 513 DDSURFACEDESC desc; |
505 LPDIRECTDRAWSURFACE3 DDrawSurf3; | 514 LPDIRECTDRAWSURFACE DDrawSurf; |
506 | 515 LPDIRECTDRAWSURFACE3 DDrawSurf3; |
507 /* Try to create a DirectDrawSurface3 object */ | 516 |
508 SDL_memset(&desc, 0, sizeof(desc)); | 517 /* Try to create a DirectDrawSurface3 object */ |
509 desc.dwSize = sizeof(desc); | 518 SDL_memset (&desc, 0, sizeof (desc)); |
510 desc.dwFlags = DDSD_CAPS; | 519 desc.dwSize = sizeof (desc); |
511 desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY; | 520 desc.dwFlags = DDSD_CAPS; |
512 if ( !FAILED(IDirectDraw_CreateSurface(DDraw, &desc, | 521 desc.ddsCaps.dwCaps = |
513 &DDrawSurf, NULL)) ) { | 522 DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY; |
514 if ( !FAILED(IDirectDrawSurface_QueryInterface(DDrawSurf, | 523 if (!FAILED |
515 &IID_IDirectDrawSurface3, (LPVOID *)&DDrawSurf3)) ) { | 524 (IDirectDraw_CreateSurface |
516 /* Yay! */ | 525 (DDraw, &desc, &DDrawSurf, NULL))) { |
517 ddraw_ok = 1; | 526 if (!FAILED |
518 | 527 (IDirectDrawSurface_QueryInterface |
519 /* Clean up.. */ | 528 (DDrawSurf, &IID_IDirectDrawSurface3, |
520 IDirectDrawSurface3_Release(DDrawSurf3); | 529 (LPVOID *) & DDrawSurf3))) { |
521 } | 530 /* Yay! */ |
522 IDirectDrawSurface_Release(DDrawSurf); | 531 ddraw_ok = 1; |
523 } | 532 |
524 } | 533 /* Clean up.. */ |
525 IDirectDraw_Release(DDraw); | 534 IDirectDrawSurface3_Release (DDrawSurf3); |
526 } | 535 } |
527 | 536 IDirectDrawSurface_Release (DDrawSurf); |
528 DX5_Unload(); | 537 } |
529 | 538 } |
530 return ddraw_ok; | 539 IDirectDraw_Release (DDraw); |
531 } | 540 } |
532 | 541 |
533 static void DX5_DeleteDevice(SDL_VideoDevice *this) | 542 DX5_Unload (); |
534 { | 543 |
535 /* Free DirectDraw object */ | 544 return ddraw_ok; |
536 if ( ddraw2 != NULL ) { | 545 } |
537 IDirectDraw2_Release(ddraw2); | 546 |
538 } | 547 static void |
539 DX5_Unload(); | 548 DX5_DeleteDevice (SDL_VideoDevice * this) |
540 | 549 { |
541 if ( this ) { | 550 /* Free DirectDraw object */ |
542 if ( this->hidden ) { | 551 if (ddraw2 != NULL) { |
543 SDL_free(this->hidden); | 552 IDirectDraw2_Release (ddraw2); |
544 } | 553 } |
545 if ( this->gl_data ) { | 554 DX5_Unload (); |
546 SDL_free(this->gl_data); | 555 |
547 } | 556 if (this) { |
548 SDL_free(this); | 557 if (this->hidden) { |
549 } | 558 SDL_free (this->hidden); |
550 } | 559 } |
551 | 560 if (this->gl_data) { |
552 static SDL_VideoDevice *DX5_CreateDevice(int devindex) | 561 SDL_free (this->gl_data); |
553 { | 562 } |
554 SDL_VideoDevice *device; | 563 SDL_free (this); |
555 | 564 } |
556 /* Load DirectX */ | 565 } |
557 if ( DX5_Load() < 0 ) { | 566 |
558 return(NULL); | 567 static SDL_VideoDevice * |
559 } | 568 DX5_CreateDevice (int devindex) |
560 | 569 { |
561 /* Initialize all variables that we clean on shutdown */ | 570 SDL_VideoDevice *device; |
562 device = (SDL_VideoDevice *)SDL_malloc(sizeof(SDL_VideoDevice)); | 571 |
563 if ( device ) { | 572 /* Load DirectX */ |
564 SDL_memset(device, 0, (sizeof *device)); | 573 if (DX5_Load () < 0) { |
565 device->hidden = (struct SDL_PrivateVideoData *) | 574 return (NULL); |
566 SDL_malloc((sizeof *device->hidden)); | 575 } |
567 device->gl_data = (struct SDL_PrivateGLData *) | 576 |
568 SDL_malloc((sizeof *device->gl_data)); | 577 /* Initialize all variables that we clean on shutdown */ |
569 } | 578 device = (SDL_VideoDevice *) SDL_malloc (sizeof (SDL_VideoDevice)); |
570 if ( (device == NULL) || (device->hidden == NULL) || | 579 if (device) { |
571 (device->gl_data == NULL) ) { | 580 SDL_memset (device, 0, (sizeof *device)); |
572 SDL_OutOfMemory(); | 581 device->hidden = (struct SDL_PrivateVideoData *) |
573 DX5_DeleteDevice(device); | 582 SDL_malloc ((sizeof *device->hidden)); |
574 return(NULL); | 583 device->gl_data = (struct SDL_PrivateGLData *) |
575 } | 584 SDL_malloc ((sizeof *device->gl_data)); |
576 SDL_memset(device->hidden, 0, (sizeof *device->hidden)); | 585 } |
577 SDL_memset(device->gl_data, 0, (sizeof *device->gl_data)); | 586 if ((device == NULL) || (device->hidden == NULL) || |
578 | 587 (device->gl_data == NULL)) { |
579 /* Set the function pointers */ | 588 SDL_OutOfMemory (); |
580 device->VideoInit = DX5_VideoInit; | 589 DX5_DeleteDevice (device); |
581 device->ListModes = DX5_ListModes; | 590 return (NULL); |
582 device->SetVideoMode = DX5_SetVideoMode; | 591 } |
583 device->UpdateMouse = WIN_UpdateMouse; | 592 SDL_memset (device->hidden, 0, (sizeof *device->hidden)); |
584 device->CreateYUVOverlay = DX5_CreateYUVOverlay; | 593 SDL_memset (device->gl_data, 0, (sizeof *device->gl_data)); |
585 device->SetColors = DX5_SetColors; | 594 |
586 device->UpdateRects = NULL; | 595 /* Set the function pointers */ |
587 device->VideoQuit = DX5_VideoQuit; | 596 device->VideoInit = DX5_VideoInit; |
588 device->AllocHWSurface = DX5_AllocHWSurface; | 597 device->ListModes = DX5_ListModes; |
589 device->CheckHWBlit = DX5_CheckHWBlit; | 598 device->SetVideoMode = DX5_SetVideoMode; |
590 device->FillHWRect = DX5_FillHWRect; | 599 device->UpdateMouse = WIN_UpdateMouse; |
591 device->SetHWColorKey = DX5_SetHWColorKey; | 600 device->CreateYUVOverlay = DX5_CreateYUVOverlay; |
592 device->SetHWAlpha = DX5_SetHWAlpha; | 601 device->SetColors = DX5_SetColors; |
593 device->LockHWSurface = DX5_LockHWSurface; | 602 device->UpdateRects = NULL; |
594 device->UnlockHWSurface = DX5_UnlockHWSurface; | 603 device->VideoQuit = DX5_VideoQuit; |
595 device->FlipHWSurface = DX5_FlipHWSurface; | 604 device->AllocHWSurface = DX5_AllocHWSurface; |
596 device->FreeHWSurface = DX5_FreeHWSurface; | 605 device->CheckHWBlit = DX5_CheckHWBlit; |
597 device->SetGammaRamp = DX5_SetGammaRamp; | 606 device->FillHWRect = DX5_FillHWRect; |
598 device->GetGammaRamp = DX5_GetGammaRamp; | 607 device->SetHWColorKey = DX5_SetHWColorKey; |
608 device->SetHWAlpha = DX5_SetHWAlpha; | |
609 device->LockHWSurface = DX5_LockHWSurface; | |
610 device->UnlockHWSurface = DX5_UnlockHWSurface; | |
611 device->FlipHWSurface = DX5_FlipHWSurface; | |
612 device->FreeHWSurface = DX5_FreeHWSurface; | |
613 device->SetGammaRamp = DX5_SetGammaRamp; | |
614 device->GetGammaRamp = DX5_GetGammaRamp; | |
599 #if SDL_VIDEO_OPENGL | 615 #if SDL_VIDEO_OPENGL |
600 device->GL_LoadLibrary = WIN_GL_LoadLibrary; | 616 device->GL_LoadLibrary = WIN_GL_LoadLibrary; |
601 device->GL_GetProcAddress = WIN_GL_GetProcAddress; | 617 device->GL_GetProcAddress = WIN_GL_GetProcAddress; |
602 device->GL_GetAttribute = WIN_GL_GetAttribute; | 618 device->GL_GetAttribute = WIN_GL_GetAttribute; |
603 device->GL_MakeCurrent = WIN_GL_MakeCurrent; | 619 device->GL_MakeCurrent = WIN_GL_MakeCurrent; |
604 device->GL_SwapBuffers = WIN_GL_SwapBuffers; | 620 device->GL_SwapBuffers = WIN_GL_SwapBuffers; |
605 #endif | 621 #endif |
606 device->SetCaption = WIN_SetWMCaption; | 622 device->SetCaption = WIN_SetWMCaption; |
607 device->SetIcon = WIN_SetWMIcon; | 623 device->SetIcon = WIN_SetWMIcon; |
608 device->IconifyWindow = WIN_IconifyWindow; | 624 device->IconifyWindow = WIN_IconifyWindow; |
609 device->GrabInput = WIN_GrabInput; | 625 device->GrabInput = WIN_GrabInput; |
610 device->GetWMInfo = WIN_GetWMInfo; | 626 device->GetWMInfo = WIN_GetWMInfo; |
611 device->FreeWMCursor = WIN_FreeWMCursor; | 627 device->FreeWMCursor = WIN_FreeWMCursor; |
612 device->CreateWMCursor = WIN_CreateWMCursor; | 628 device->CreateWMCursor = WIN_CreateWMCursor; |
613 device->ShowWMCursor = WIN_ShowWMCursor; | 629 device->ShowWMCursor = WIN_ShowWMCursor; |
614 device->WarpWMCursor = WIN_WarpWMCursor; | 630 device->WarpWMCursor = WIN_WarpWMCursor; |
615 device->CheckMouseMode = WIN_CheckMouseMode; | 631 device->CheckMouseMode = WIN_CheckMouseMode; |
616 device->InitOSKeymap = DX5_InitOSKeymap; | 632 device->InitOSKeymap = DX5_InitOSKeymap; |
617 device->PumpEvents = DX5_PumpEvents; | 633 device->PumpEvents = DX5_PumpEvents; |
618 | 634 |
619 /* Set up the windows message handling functions */ | 635 /* Set up the windows message handling functions */ |
620 WIN_RealizePalette = DX5_RealizePalette; | 636 WIN_RealizePalette = DX5_RealizePalette; |
621 WIN_PaletteChanged = DX5_PaletteChanged; | 637 WIN_PaletteChanged = DX5_PaletteChanged; |
622 WIN_WinPAINT = DX5_WinPAINT; | 638 WIN_WinPAINT = DX5_WinPAINT; |
623 HandleMessage = DX5_HandleMessage; | 639 HandleMessage = DX5_HandleMessage; |
624 | 640 |
625 device->free = DX5_DeleteDevice; | 641 device->free = DX5_DeleteDevice; |
626 | 642 |
627 /* We're finally ready */ | 643 /* We're finally ready */ |
628 return device; | 644 return device; |
629 } | 645 } |
630 | 646 |
631 VideoBootStrap DIRECTX_bootstrap = { | 647 VideoBootStrap DIRECTX_bootstrap = { |
632 "directx", "Win95/98/2000 DirectX", | 648 "directx", "Win95/98/2000 DirectX", |
633 DX5_Available, DX5_CreateDevice | 649 DX5_Available, DX5_CreateDevice |
634 }; | 650 }; |
635 | 651 |
636 static int cmpmodes(const void *va, const void *vb) | 652 static int |
637 { | 653 cmpmodes (const void *va, const void *vb) |
638 SDL_Rect *a = *(SDL_Rect **)va; | 654 { |
639 SDL_Rect *b = *(SDL_Rect **)vb; | 655 SDL_Rect *a = *(SDL_Rect **) va; |
640 if ( a->w == b->w ) | 656 SDL_Rect *b = *(SDL_Rect **) vb; |
657 if (a->w == b->w) | |
641 return b->h - a->h; | 658 return b->h - a->h; |
642 else | 659 else |
643 return b->w - a->w; | 660 return b->w - a->w; |
644 } | 661 } |
645 | 662 |
646 static HRESULT WINAPI EnumModes2(DDSURFACEDESC *desc, VOID *udata) | 663 static HRESULT WINAPI |
647 { | 664 EnumModes2 (DDSURFACEDESC * desc, VOID * udata) |
648 SDL_VideoDevice *this = (SDL_VideoDevice *)udata; | 665 { |
649 struct DX5EnumRect *enumrect; | 666 SDL_VideoDevice *this = (SDL_VideoDevice *) udata; |
667 struct DX5EnumRect *enumrect; | |
650 #if defined(NONAMELESSUNION) | 668 #if defined(NONAMELESSUNION) |
651 int bpp = desc->ddpfPixelFormat.u1.dwRGBBitCount; | 669 int bpp = desc->ddpfPixelFormat.u1.dwRGBBitCount; |
652 int refreshRate = desc->u2.dwRefreshRate; | 670 int refreshRate = desc->u2.dwRefreshRate; |
653 #else | 671 #else |
654 int bpp = desc->ddpfPixelFormat.dwRGBBitCount; | 672 int bpp = desc->ddpfPixelFormat.dwRGBBitCount; |
655 int refreshRate = desc->dwRefreshRate; | 673 int refreshRate = desc->dwRefreshRate; |
656 #endif | 674 #endif |
657 int maxRefreshRate; | 675 int maxRefreshRate; |
658 | 676 |
659 if ( desc->dwWidth <= SDL_desktop_mode.dmPelsWidth && | 677 if (desc->dwWidth <= SDL_desktop_mode.dmPelsWidth && |
660 desc->dwHeight <= SDL_desktop_mode.dmPelsHeight ) { | 678 desc->dwHeight <= SDL_desktop_mode.dmPelsHeight) { |
661 maxRefreshRate = SDL_desktop_mode.dmDisplayFrequency; | 679 maxRefreshRate = SDL_desktop_mode.dmDisplayFrequency; |
662 } else { | 680 } else { |
663 maxRefreshRate = 85; /* safe value? */ | 681 maxRefreshRate = 85; /* safe value? */ |
664 } | 682 } |
665 | 683 |
666 switch (bpp) { | 684 switch (bpp) { |
667 case 8: | 685 case 8: |
668 case 16: | 686 case 16: |
669 case 24: | 687 case 24: |
670 case 32: | 688 case 32: |
671 bpp /= 8; --bpp; | 689 bpp /= 8; |
672 if ( enumlists[bpp] && | 690 --bpp; |
673 enumlists[bpp]->r.w == (Uint16)desc->dwWidth && | 691 if (enumlists[bpp] && |
674 enumlists[bpp]->r.h == (Uint16)desc->dwHeight ) { | 692 enumlists[bpp]->r.w == (Uint16) desc->dwWidth && |
675 if ( refreshRate > enumlists[bpp]->refreshRate && | 693 enumlists[bpp]->r.h == (Uint16) desc->dwHeight) { |
676 refreshRate <= maxRefreshRate ) { | 694 if (refreshRate > enumlists[bpp]->refreshRate && |
677 enumlists[bpp]->refreshRate = refreshRate; | 695 refreshRate <= maxRefreshRate) { |
696 enumlists[bpp]->refreshRate = refreshRate; | |
678 #ifdef DDRAW_DEBUG | 697 #ifdef DDRAW_DEBUG |
679 fprintf(stderr, "New refresh rate for %d bpp: %dx%d at %d Hz\n", (bpp+1)*8, (int)desc->dwWidth, (int)desc->dwHeight, refreshRate); | 698 fprintf (stderr, |
680 #endif | 699 "New refresh rate for %d bpp: %dx%d at %d Hz\n", |
681 } | 700 (bpp + 1) * 8, (int) desc->dwWidth, |
682 break; | 701 (int) desc->dwHeight, refreshRate); |
683 } | 702 #endif |
684 ++SDL_nummodes[bpp]; | 703 } |
685 enumrect = (struct DX5EnumRect*)SDL_malloc(sizeof(struct DX5EnumRect)); | 704 break; |
686 if ( !enumrect ) { | 705 } |
687 SDL_OutOfMemory(); | 706 ++SDL_nummodes[bpp]; |
688 return(DDENUMRET_CANCEL); | 707 enumrect = |
689 } | 708 (struct DX5EnumRect *) SDL_malloc (sizeof (struct DX5EnumRect)); |
690 enumrect->refreshRate = refreshRate; | 709 if (!enumrect) { |
691 enumrect->r.x = 0; | 710 SDL_OutOfMemory (); |
692 enumrect->r.y = 0; | 711 return (DDENUMRET_CANCEL); |
693 enumrect->r.w = (Uint16)desc->dwWidth; | 712 } |
694 enumrect->r.h = (Uint16)desc->dwHeight; | 713 enumrect->refreshRate = refreshRate; |
695 enumrect->next = enumlists[bpp]; | 714 enumrect->r.x = 0; |
696 enumlists[bpp] = enumrect; | 715 enumrect->r.y = 0; |
716 enumrect->r.w = (Uint16) desc->dwWidth; | |
717 enumrect->r.h = (Uint16) desc->dwHeight; | |
718 enumrect->next = enumlists[bpp]; | |
719 enumlists[bpp] = enumrect; | |
697 #ifdef DDRAW_DEBUG | 720 #ifdef DDRAW_DEBUG |
698 fprintf(stderr, "New mode for %d bpp: %dx%d at %d Hz\n", (bpp+1)*8, (int)desc->dwWidth, (int)desc->dwHeight, refreshRate); | 721 fprintf (stderr, "New mode for %d bpp: %dx%d at %d Hz\n", |
699 #endif | 722 (bpp + 1) * 8, (int) desc->dwWidth, (int) desc->dwHeight, |
700 break; | 723 refreshRate); |
701 } | 724 #endif |
702 | 725 break; |
703 return(DDENUMRET_OK); | 726 } |
704 } | 727 |
705 | 728 return (DDENUMRET_OK); |
706 void SetDDerror(const char *function, int code) | 729 } |
707 { | 730 |
708 static char *error; | 731 void |
709 static char errbuf[1024]; | 732 SetDDerror (const char *function, int code) |
710 | 733 { |
711 errbuf[0] = 0; | 734 static char *error; |
712 switch (code) { | 735 static char errbuf[1024]; |
713 case DDERR_GENERIC: | 736 |
714 error = "Undefined error!"; | 737 errbuf[0] = 0; |
715 break; | 738 switch (code) { |
716 case DDERR_EXCEPTION: | 739 case DDERR_GENERIC: |
717 error = "Exception encountered"; | 740 error = "Undefined error!"; |
718 break; | 741 break; |
719 case DDERR_INVALIDOBJECT: | 742 case DDERR_EXCEPTION: |
720 error = "Invalid object"; | 743 error = "Exception encountered"; |
721 break; | 744 break; |
722 case DDERR_INVALIDPARAMS: | 745 case DDERR_INVALIDOBJECT: |
723 error = "Invalid parameters"; | 746 error = "Invalid object"; |
724 break; | 747 break; |
725 case DDERR_NOTFOUND: | 748 case DDERR_INVALIDPARAMS: |
726 error = "Object not found"; | 749 error = "Invalid parameters"; |
727 break; | 750 break; |
728 case DDERR_INVALIDRECT: | 751 case DDERR_NOTFOUND: |
729 error = "Invalid rectangle"; | 752 error = "Object not found"; |
730 break; | 753 break; |
731 case DDERR_INVALIDCAPS: | 754 case DDERR_INVALIDRECT: |
732 error = "Invalid caps member"; | 755 error = "Invalid rectangle"; |
733 break; | 756 break; |
734 case DDERR_INVALIDPIXELFORMAT: | 757 case DDERR_INVALIDCAPS: |
735 error = "Invalid pixel format"; | 758 error = "Invalid caps member"; |
736 break; | 759 break; |
737 case DDERR_OUTOFMEMORY: | 760 case DDERR_INVALIDPIXELFORMAT: |
738 error = "Out of memory"; | 761 error = "Invalid pixel format"; |
739 break; | 762 break; |
740 case DDERR_OUTOFVIDEOMEMORY: | 763 case DDERR_OUTOFMEMORY: |
741 error = "Out of video memory"; | 764 error = "Out of memory"; |
742 break; | 765 break; |
743 case DDERR_SURFACEBUSY: | 766 case DDERR_OUTOFVIDEOMEMORY: |
744 error = "Surface busy"; | 767 error = "Out of video memory"; |
745 break; | 768 break; |
746 case DDERR_SURFACELOST: | 769 case DDERR_SURFACEBUSY: |
747 error = "Surface was lost"; | 770 error = "Surface busy"; |
748 break; | 771 break; |
749 case DDERR_WASSTILLDRAWING: | 772 case DDERR_SURFACELOST: |
750 error = "DirectDraw is still drawing"; | 773 error = "Surface was lost"; |
751 break; | 774 break; |
752 case DDERR_INVALIDSURFACETYPE: | 775 case DDERR_WASSTILLDRAWING: |
753 error = "Invalid surface type"; | 776 error = "DirectDraw is still drawing"; |
754 break; | 777 break; |
755 case DDERR_NOEXCLUSIVEMODE: | 778 case DDERR_INVALIDSURFACETYPE: |
756 error = "Not in exclusive access mode"; | 779 error = "Invalid surface type"; |
757 break; | 780 break; |
758 case DDERR_NOPALETTEATTACHED: | 781 case DDERR_NOEXCLUSIVEMODE: |
759 error = "No palette attached"; | 782 error = "Not in exclusive access mode"; |
760 break; | 783 break; |
761 case DDERR_NOPALETTEHW: | 784 case DDERR_NOPALETTEATTACHED: |
762 error = "No palette hardware"; | 785 error = "No palette attached"; |
763 break; | 786 break; |
764 case DDERR_NOT8BITCOLOR: | 787 case DDERR_NOPALETTEHW: |
765 error = "Not 8-bit color"; | 788 error = "No palette hardware"; |
766 break; | 789 break; |
767 case DDERR_EXCLUSIVEMODEALREADYSET: | 790 case DDERR_NOT8BITCOLOR: |
768 error = "Exclusive mode was already set"; | 791 error = "Not 8-bit color"; |
769 break; | 792 break; |
770 case DDERR_HWNDALREADYSET: | 793 case DDERR_EXCLUSIVEMODEALREADYSET: |
771 error = "Window handle already set"; | 794 error = "Exclusive mode was already set"; |
772 break; | 795 break; |
773 case DDERR_HWNDSUBCLASSED: | 796 case DDERR_HWNDALREADYSET: |
774 error = "Window handle is subclassed"; | 797 error = "Window handle already set"; |
775 break; | 798 break; |
776 case DDERR_NOBLTHW: | 799 case DDERR_HWNDSUBCLASSED: |
777 error = "No blit hardware"; | 800 error = "Window handle is subclassed"; |
778 break; | 801 break; |
779 case DDERR_IMPLICITLYCREATED: | 802 case DDERR_NOBLTHW: |
780 error = "Surface was implicitly created"; | 803 error = "No blit hardware"; |
781 break; | 804 break; |
782 case DDERR_INCOMPATIBLEPRIMARY: | 805 case DDERR_IMPLICITLYCREATED: |
783 error = "Incompatible primary surface"; | 806 error = "Surface was implicitly created"; |
784 break; | 807 break; |
785 case DDERR_NOCOOPERATIVELEVELSET: | 808 case DDERR_INCOMPATIBLEPRIMARY: |
786 error = "No cooperative level set"; | 809 error = "Incompatible primary surface"; |
787 break; | 810 break; |
788 case DDERR_NODIRECTDRAWHW: | 811 case DDERR_NOCOOPERATIVELEVELSET: |
789 error = "No DirectDraw hardware"; | 812 error = "No cooperative level set"; |
790 break; | 813 break; |
791 case DDERR_NOEMULATION: | 814 case DDERR_NODIRECTDRAWHW: |
792 error = "No emulation available"; | 815 error = "No DirectDraw hardware"; |
793 break; | 816 break; |
794 case DDERR_NOFLIPHW: | 817 case DDERR_NOEMULATION: |
795 error = "No flip hardware"; | 818 error = "No emulation available"; |
796 break; | 819 break; |
797 case DDERR_NOTFLIPPABLE: | 820 case DDERR_NOFLIPHW: |
798 error = "Surface not flippable"; | 821 error = "No flip hardware"; |
799 break; | 822 break; |
800 case DDERR_PRIMARYSURFACEALREADYEXISTS: | 823 case DDERR_NOTFLIPPABLE: |
801 error = "Primary surface already exists"; | 824 error = "Surface not flippable"; |
802 break; | 825 break; |
803 case DDERR_UNSUPPORTEDMODE: | 826 case DDERR_PRIMARYSURFACEALREADYEXISTS: |
804 error = "Unsupported mode"; | 827 error = "Primary surface already exists"; |
805 break; | 828 break; |
806 case DDERR_WRONGMODE: | 829 case DDERR_UNSUPPORTEDMODE: |
807 error = "Surface created in different mode"; | 830 error = "Unsupported mode"; |
808 break; | 831 break; |
809 case DDERR_UNSUPPORTED: | 832 case DDERR_WRONGMODE: |
810 error = "Operation not supported"; | 833 error = "Surface created in different mode"; |
811 break; | 834 break; |
812 case E_NOINTERFACE: | 835 case DDERR_UNSUPPORTED: |
813 error = "Interface not present"; | 836 error = "Operation not supported"; |
814 break; | 837 break; |
815 default: | 838 case E_NOINTERFACE: |
816 SDL_snprintf(errbuf, SDL_arraysize(errbuf), | 839 error = "Interface not present"; |
817 "%s: Unknown DirectDraw error: 0x%x", | 840 break; |
818 function, code); | 841 default: |
819 break; | 842 SDL_snprintf (errbuf, SDL_arraysize (errbuf), |
820 } | 843 "%s: Unknown DirectDraw error: 0x%x", function, code); |
821 if ( ! errbuf[0] ) { | 844 break; |
822 SDL_snprintf(errbuf, SDL_arraysize(errbuf), "%s: %s", function, error); | 845 } |
823 } | 846 if (!errbuf[0]) { |
824 SDL_SetError("%s", errbuf); | 847 SDL_snprintf (errbuf, SDL_arraysize (errbuf), "%s: %s", function, |
825 return; | 848 error); |
826 } | 849 } |
827 | 850 SDL_SetError ("%s", errbuf); |
828 | 851 return; |
829 static int DX5_UpdateVideoInfo(_THIS) | 852 } |
830 { | 853 |
831 /* This needs to be DDCAPS_DX5 for the DirectDraw2 interface */ | 854 |
855 static int | |
856 DX5_UpdateVideoInfo (_THIS) | |
857 { | |
858 /* This needs to be DDCAPS_DX5 for the DirectDraw2 interface */ | |
832 #if DIRECTDRAW_VERSION <= 0x300 | 859 #if DIRECTDRAW_VERSION <= 0x300 |
833 #error Your version of DirectX must be greater than or equal to 5.0 | 860 #error Your version of DirectX must be greater than or equal to 5.0 |
834 #endif | 861 #endif |
835 #ifndef IDirectDrawGammaControl_SetGammaRamp | 862 #ifndef IDirectDrawGammaControl_SetGammaRamp |
836 /*if gamma is undefined then we really have directx <= 0x500*/ | 863 /*if gamma is undefined then we really have directx <= 0x500 */ |
837 DDCAPS DDCaps; | 864 DDCAPS DDCaps; |
838 #else | 865 #else |
839 DDCAPS_DX5 DDCaps; | 866 DDCAPS_DX5 DDCaps; |
840 #endif | 867 #endif |
841 HRESULT result; | 868 HRESULT result; |
842 | 869 |
843 /* Fill in our hardware acceleration capabilities */ | 870 /* Fill in our hardware acceleration capabilities */ |
844 SDL_memset(&DDCaps, 0, sizeof(DDCaps)); | 871 SDL_memset (&DDCaps, 0, sizeof (DDCaps)); |
845 DDCaps.dwSize = sizeof(DDCaps); | 872 DDCaps.dwSize = sizeof (DDCaps); |
846 result = IDirectDraw2_GetCaps(ddraw2, (DDCAPS *)&DDCaps, NULL); | 873 result = IDirectDraw2_GetCaps (ddraw2, (DDCAPS *) & DDCaps, NULL); |
847 if ( result != DD_OK ) { | 874 if (result != DD_OK) { |
848 SetDDerror("DirectDraw2::GetCaps", result); | 875 SetDDerror ("DirectDraw2::GetCaps", result); |
849 return(-1); | 876 return (-1); |
850 } | 877 } |
851 this->info.hw_available = 1; | 878 this->info.hw_available = 1; |
852 if ( (DDCaps.dwCaps & DDCAPS_BLT) == DDCAPS_BLT ) { | 879 if ((DDCaps.dwCaps & DDCAPS_BLT) == DDCAPS_BLT) { |
853 this->info.blit_hw = 1; | 880 this->info.blit_hw = 1; |
854 } | 881 } |
855 if ( ((DDCaps.dwCaps & DDCAPS_COLORKEY) == DDCAPS_COLORKEY) && | 882 if (((DDCaps.dwCaps & DDCAPS_COLORKEY) == DDCAPS_COLORKEY) && |
856 ((DDCaps.dwCKeyCaps & DDCKEYCAPS_SRCBLT) == DDCKEYCAPS_SRCBLT) ) { | 883 ((DDCaps.dwCKeyCaps & DDCKEYCAPS_SRCBLT) == DDCKEYCAPS_SRCBLT)) { |
857 this->info.blit_hw_CC = 1; | 884 this->info.blit_hw_CC = 1; |
858 } | 885 } |
859 if ( (DDCaps.dwCaps & DDCAPS_ALPHA) == DDCAPS_ALPHA ) { | 886 if ((DDCaps.dwCaps & DDCAPS_ALPHA) == DDCAPS_ALPHA) { |
860 /* This is only for alpha channel, and DirectX 6 | 887 /* This is only for alpha channel, and DirectX 6 |
861 doesn't support 2D alpha blits yet, so set it 0 | 888 doesn't support 2D alpha blits yet, so set it 0 |
862 */ | 889 */ |
863 this->info.blit_hw_A = 0; | 890 this->info.blit_hw_A = 0; |
864 } | 891 } |
865 if ( (DDCaps.dwCaps & DDCAPS_CANBLTSYSMEM) == DDCAPS_CANBLTSYSMEM ) { | 892 if ((DDCaps.dwCaps & DDCAPS_CANBLTSYSMEM) == DDCAPS_CANBLTSYSMEM) { |
866 this->info.blit_sw = 1; | 893 this->info.blit_sw = 1; |
867 /* This isn't necessarily true, but the HEL will cover us */ | 894 /* This isn't necessarily true, but the HEL will cover us */ |
868 this->info.blit_sw_CC = this->info.blit_hw_CC; | 895 this->info.blit_sw_CC = this->info.blit_hw_CC; |
869 this->info.blit_sw_A = this->info.blit_hw_A; | 896 this->info.blit_sw_A = this->info.blit_hw_A; |
870 } | 897 } |
871 if ( (DDCaps.dwCaps & DDCAPS_BLTCOLORFILL) == DDCAPS_BLTCOLORFILL ) { | 898 if ((DDCaps.dwCaps & DDCAPS_BLTCOLORFILL) == DDCAPS_BLTCOLORFILL) { |
872 this->info.blit_fill = 1; | 899 this->info.blit_fill = 1; |
873 } | 900 } |
874 | 901 |
875 /* Find out how much video memory is available */ | 902 /* Find out how much video memory is available */ |
876 { DDSCAPS ddsCaps; | 903 { |
877 DWORD total_mem; | 904 DDSCAPS ddsCaps; |
878 ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; | 905 DWORD total_mem; |
879 result = IDirectDraw2_GetAvailableVidMem(ddraw2, | 906 ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; |
880 &ddsCaps, &total_mem, NULL); | 907 result = IDirectDraw2_GetAvailableVidMem (ddraw2, |
881 if ( result != DD_OK ) { | 908 &ddsCaps, &total_mem, NULL); |
882 total_mem = DDCaps.dwVidMemTotal; | 909 if (result != DD_OK) { |
883 } | 910 total_mem = DDCaps.dwVidMemTotal; |
884 this->info.video_mem = total_mem/1024; | 911 } |
885 } | 912 this->info.video_mem = total_mem / 1024; |
886 return(0); | 913 } |
887 } | 914 return (0); |
888 | 915 } |
889 int DX5_VideoInit(_THIS, SDL_PixelFormat *vformat) | 916 |
890 { | 917 int |
891 HRESULT result; | 918 DX5_VideoInit (_THIS, SDL_PixelFormat * vformat) |
892 LPDIRECTDRAW ddraw; | 919 { |
893 int i, j; | 920 HRESULT result; |
894 HDC hdc; | 921 LPDIRECTDRAW ddraw; |
895 | 922 int i, j; |
896 /* Intialize everything */ | 923 HDC hdc; |
897 ddraw2 = NULL; | 924 |
898 SDL_primary = NULL; | 925 /* Intialize everything */ |
899 SDL_clipper = NULL; | 926 ddraw2 = NULL; |
900 SDL_palette = NULL; | 927 SDL_primary = NULL; |
901 for ( i=0; i<NUM_MODELISTS; ++i ) { | 928 SDL_clipper = NULL; |
902 SDL_nummodes[i] = 0; | 929 SDL_palette = NULL; |
903 SDL_modelist[i] = NULL; | 930 for (i = 0; i < NUM_MODELISTS; ++i) { |
904 SDL_modeindex[i] = 0; | 931 SDL_nummodes[i] = 0; |
905 } | 932 SDL_modelist[i] = NULL; |
906 colorchange_expected = 0; | 933 SDL_modeindex[i] = 0; |
907 | 934 } |
908 /* Create the window */ | 935 colorchange_expected = 0; |
909 if ( DX5_CreateWindow(this) < 0 ) { | 936 |
910 return(-1); | 937 /* Create the window */ |
911 } | 938 if (DX5_CreateWindow (this) < 0) { |
912 | 939 return (-1); |
940 } | |
913 #if !SDL_AUDIO_DISABLED | 941 #if !SDL_AUDIO_DISABLED |
914 DX5_SoundFocus(SDL_Window); | 942 DX5_SoundFocus (SDL_Window); |
915 #endif | 943 #endif |
916 | 944 |
917 /* Create the DirectDraw object */ | 945 /* Create the DirectDraw object */ |
918 result = DDrawCreate(NULL, &ddraw, NULL); | 946 result = DDrawCreate (NULL, &ddraw, NULL); |
919 if ( result != DD_OK ) { | 947 if (result != DD_OK) { |
920 SetDDerror("DirectDrawCreate", result); | 948 SetDDerror ("DirectDrawCreate", result); |
921 return(-1); | 949 return (-1); |
922 } | 950 } |
923 result = IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw2, | 951 result = IDirectDraw_QueryInterface (ddraw, &IID_IDirectDraw2, |
924 (LPVOID *)&ddraw2); | 952 (LPVOID *) & ddraw2); |
925 IDirectDraw_Release(ddraw); | 953 IDirectDraw_Release (ddraw); |
926 if ( result != DD_OK ) { | 954 if (result != DD_OK) { |
927 SetDDerror("DirectDraw::QueryInterface", result); | 955 SetDDerror ("DirectDraw::QueryInterface", result); |
928 return(-1); | 956 return (-1); |
929 } | 957 } |
930 | 958 |
931 /* Determine the screen depth */ | 959 /* Determine the screen depth */ |
932 hdc = GetDC(SDL_Window); | 960 hdc = GetDC (SDL_Window); |
933 vformat->BitsPerPixel = GetDeviceCaps(hdc,PLANES) * | 961 vformat->BitsPerPixel = GetDeviceCaps (hdc, PLANES) * |
934 GetDeviceCaps(hdc,BITSPIXEL); | 962 GetDeviceCaps (hdc, BITSPIXEL); |
935 ReleaseDC(SDL_Window, hdc); | 963 ReleaseDC (SDL_Window, hdc); |
936 | 964 |
937 #ifndef NO_CHANGEDISPLAYSETTINGS | 965 #ifndef NO_CHANGEDISPLAYSETTINGS |
938 /* Query for the desktop resolution */ | 966 /* Query for the desktop resolution */ |
939 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &SDL_desktop_mode); | 967 EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &SDL_desktop_mode); |
940 this->info.current_w = SDL_desktop_mode.dmPelsWidth; | 968 this->info.current_w = SDL_desktop_mode.dmPelsWidth; |
941 this->info.current_h = SDL_desktop_mode.dmPelsHeight; | 969 this->info.current_h = SDL_desktop_mode.dmPelsHeight; |
942 #endif | 970 #endif |
943 | 971 |
944 /* Enumerate the available fullscreen modes */ | 972 /* Enumerate the available fullscreen modes */ |
945 for ( i=0; i<NUM_MODELISTS; ++i ) | 973 for (i = 0; i < NUM_MODELISTS; ++i) |
946 enumlists[i] = NULL; | 974 enumlists[i] = NULL; |
947 | 975 |
948 result = IDirectDraw2_EnumDisplayModes(ddraw2,DDEDM_REFRESHRATES,NULL,this,EnumModes2); | 976 result = |
949 if ( result != DD_OK ) { | 977 IDirectDraw2_EnumDisplayModes (ddraw2, DDEDM_REFRESHRATES, NULL, this, |
950 SetDDerror("DirectDraw2::EnumDisplayModes", result); | 978 EnumModes2); |
951 return(-1); | 979 if (result != DD_OK) { |
952 } | 980 SetDDerror ("DirectDraw2::EnumDisplayModes", result); |
953 for ( i=0; i<NUM_MODELISTS; ++i ) { | 981 return (-1); |
954 struct DX5EnumRect *rect; | 982 } |
955 SDL_modelist[i] = (SDL_Rect **) | 983 for (i = 0; i < NUM_MODELISTS; ++i) { |
956 SDL_malloc((SDL_nummodes[i]+1)*sizeof(SDL_Rect *)); | 984 struct DX5EnumRect *rect; |
957 if ( SDL_modelist[i] == NULL ) { | 985 SDL_modelist[i] = (SDL_Rect **) |
958 SDL_OutOfMemory(); | 986 SDL_malloc ((SDL_nummodes[i] + 1) * sizeof (SDL_Rect *)); |
959 return(-1); | 987 if (SDL_modelist[i] == NULL) { |
960 } | 988 SDL_OutOfMemory (); |
961 for ( j = 0, rect = enumlists[i]; rect; ++j, rect = rect->next ) { | 989 return (-1); |
962 SDL_modelist[i][j] = &rect->r; | 990 } |
963 } | 991 for (j = 0, rect = enumlists[i]; rect; ++j, rect = rect->next) { |
964 SDL_modelist[i][j] = NULL; | 992 SDL_modelist[i][j] = &rect->r; |
965 | 993 } |
966 if ( SDL_nummodes[i] > 0 ) { | 994 SDL_modelist[i][j] = NULL; |
967 SDL_qsort(SDL_modelist[i], SDL_nummodes[i], sizeof *SDL_modelist[i], cmpmodes); | 995 |
968 } | 996 if (SDL_nummodes[i] > 0) { |
969 } | 997 SDL_qsort (SDL_modelist[i], SDL_nummodes[i], |
970 | 998 sizeof *SDL_modelist[i], cmpmodes); |
971 /* Fill in some window manager capabilities */ | 999 } |
972 this->info.wm_available = 1; | 1000 } |
973 | 1001 |
974 /* Fill in the video hardware capabilities */ | 1002 /* Fill in some window manager capabilities */ |
975 DX5_UpdateVideoInfo(this); | 1003 this->info.wm_available = 1; |
976 | 1004 |
977 return(0); | 1005 /* Fill in the video hardware capabilities */ |
978 } | 1006 DX5_UpdateVideoInfo (this); |
979 | 1007 |
980 SDL_Rect **DX5_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) | 1008 return (0); |
981 { | 1009 } |
982 int bpp; | 1010 |
983 | 1011 SDL_Rect ** |
984 bpp = format->BitsPerPixel; | 1012 DX5_ListModes (_THIS, SDL_PixelFormat * format, Uint32 flags) |
985 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1013 { |
986 /* FIXME: No support for 1 bpp or 4 bpp formats */ | 1014 int bpp; |
987 switch (bpp) { /* Does windows support other BPP? */ | 1015 |
988 case 8: | 1016 bpp = format->BitsPerPixel; |
989 case 16: | 1017 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
990 case 24: | 1018 /* FIXME: No support for 1 bpp or 4 bpp formats */ |
991 case 32: | 1019 switch (bpp) { /* Does windows support other BPP? */ |
992 bpp = (bpp/8)-1; | 1020 case 8: |
993 if ( SDL_nummodes[bpp] > 0 ) | 1021 case 16: |
994 return(SDL_modelist[bpp]); | 1022 case 24: |
995 /* Fall through */ | 1023 case 32: |
996 default: | 1024 bpp = (bpp / 8) - 1; |
997 return((SDL_Rect **)0); | 1025 if (SDL_nummodes[bpp] > 0) |
998 } | 1026 return (SDL_modelist[bpp]); |
999 } else { | 1027 /* Fall through */ |
1000 if ( this->screen->format->BitsPerPixel == bpp ) { | 1028 default: |
1001 return((SDL_Rect **)-1); | 1029 return ((SDL_Rect **) 0); |
1002 } else { | 1030 } |
1003 return((SDL_Rect **)0); | 1031 } else { |
1004 } | 1032 if (this->screen->format->BitsPerPixel == bpp) { |
1005 } | 1033 return ((SDL_Rect **) - 1); |
1034 } else { | |
1035 return ((SDL_Rect **) 0); | |
1036 } | |
1037 } | |
1006 } | 1038 } |
1007 | 1039 |
1008 /* Various screen update functions available */ | 1040 /* Various screen update functions available */ |
1009 static void DX5_WindowUpdate(_THIS, int numrects, SDL_Rect *rects); | 1041 static void DX5_WindowUpdate (_THIS, int numrects, SDL_Rect * rects); |
1010 static void DX5_DirectUpdate(_THIS, int numrects, SDL_Rect *rects); | 1042 static void DX5_DirectUpdate (_THIS, int numrects, SDL_Rect * rects); |
1011 | 1043 |
1012 SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current, | 1044 SDL_Surface * |
1013 int width, int height, int bpp, Uint32 flags) | 1045 DX5_SetVideoMode (_THIS, SDL_Surface * current, |
1014 { | 1046 int width, int height, int bpp, Uint32 flags) |
1015 SDL_Surface *video; | 1047 { |
1016 HRESULT result; | 1048 SDL_Surface *video; |
1017 DWORD sharemode; | 1049 HRESULT result; |
1018 DWORD style; | 1050 DWORD sharemode; |
1019 const DWORD directstyle = | 1051 DWORD style; |
1020 (WS_POPUP); | 1052 const DWORD directstyle = (WS_POPUP); |
1021 const DWORD windowstyle = | 1053 const DWORD windowstyle = |
1022 (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX); | 1054 (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX); |
1023 const DWORD resizestyle = | 1055 const DWORD resizestyle = (WS_THICKFRAME | WS_MAXIMIZEBOX); |
1024 (WS_THICKFRAME|WS_MAXIMIZEBOX); | 1056 DDSURFACEDESC ddsd; |
1025 DDSURFACEDESC ddsd; | 1057 LPDIRECTDRAWSURFACE dd_surface1; |
1026 LPDIRECTDRAWSURFACE dd_surface1; | 1058 LPDIRECTDRAWSURFACE3 dd_surface3; |
1027 LPDIRECTDRAWSURFACE3 dd_surface3; | 1059 |
1028 | 1060 SDL_resizing = 1; |
1029 SDL_resizing = 1; | |
1030 #ifdef DDRAW_DEBUG | 1061 #ifdef DDRAW_DEBUG |
1031 fprintf(stderr, "Setting %dx%dx%d video mode\n", width, height, bpp); | 1062 fprintf (stderr, "Setting %dx%dx%d video mode\n", width, height, bpp); |
1032 #endif | 1063 #endif |
1033 /* Clean up any previous DirectDraw surfaces */ | 1064 /* Clean up any previous DirectDraw surfaces */ |
1034 if ( current->hwdata ) { | 1065 if (current->hwdata) { |
1035 this->FreeHWSurface(this, current); | 1066 this->FreeHWSurface (this, current); |
1036 current->hwdata = NULL; | 1067 current->hwdata = NULL; |
1037 } | 1068 } |
1038 if ( SDL_primary != NULL ) { | 1069 if (SDL_primary != NULL) { |
1039 IDirectDrawSurface3_Release(SDL_primary); | 1070 IDirectDrawSurface3_Release (SDL_primary); |
1040 SDL_primary = NULL; | 1071 SDL_primary = NULL; |
1041 } | 1072 } |
1042 | |
1043 #ifndef NO_CHANGEDISPLAYSETTINGS | 1073 #ifndef NO_CHANGEDISPLAYSETTINGS |
1044 /* Unset any previous OpenGL fullscreen mode */ | 1074 /* Unset any previous OpenGL fullscreen mode */ |
1045 if ( (current->flags & (SDL_INTERNALOPENGL|SDL_FULLSCREEN)) == | 1075 if ((current->flags & (SDL_INTERNALOPENGL | SDL_FULLSCREEN)) == |
1046 (SDL_INTERNALOPENGL|SDL_FULLSCREEN) ) { | 1076 (SDL_INTERNALOPENGL | SDL_FULLSCREEN)) { |
1047 ChangeDisplaySettings(NULL, 0); | 1077 ChangeDisplaySettings (NULL, 0); |
1048 } | 1078 } |
1049 #endif | 1079 #endif |
1050 | 1080 |
1051 /* Clean up any GL context that may be hanging around */ | 1081 /* Clean up any GL context that may be hanging around */ |
1052 if ( current->flags & SDL_INTERNALOPENGL ) { | 1082 if (current->flags & SDL_INTERNALOPENGL) { |
1053 WIN_GL_ShutDown(this); | 1083 WIN_GL_ShutDown (this); |
1054 } | 1084 } |
1055 | 1085 |
1056 /* If we are setting a GL mode, use GDI, not DirectX (yuck) */ | 1086 /* If we are setting a GL mode, use GDI, not DirectX (yuck) */ |
1057 if ( flags & SDL_INTERNALOPENGL ) { | 1087 if (flags & SDL_INTERNALOPENGL) { |
1058 Uint32 Rmask, Gmask, Bmask; | 1088 Uint32 Rmask, Gmask, Bmask; |
1059 | 1089 |
1060 /* Recalculate the bitmasks if necessary */ | 1090 /* Recalculate the bitmasks if necessary */ |
1061 if ( bpp == current->format->BitsPerPixel ) { | 1091 if (bpp == current->format->BitsPerPixel) { |
1062 video = current; | 1092 video = current; |
1063 } else { | 1093 } else { |
1064 switch (bpp) { | 1094 switch (bpp) { |
1065 case 15: | 1095 case 15: |
1066 case 16: | 1096 case 16: |
1067 if ( 0 /*DIB_SussScreenDepth() == 15*/ ) { | 1097 if (0 /*DIB_SussScreenDepth() == 15 */ ) { |
1068 /* 5-5-5 */ | 1098 /* 5-5-5 */ |
1069 Rmask = 0x00007c00; | 1099 Rmask = 0x00007c00; |
1070 Gmask = 0x000003e0; | 1100 Gmask = 0x000003e0; |
1071 Bmask = 0x0000001f; | 1101 Bmask = 0x0000001f; |
1072 } else { | 1102 } else { |
1073 /* 5-6-5 */ | 1103 /* 5-6-5 */ |
1074 Rmask = 0x0000f800; | 1104 Rmask = 0x0000f800; |
1075 Gmask = 0x000007e0; | 1105 Gmask = 0x000007e0; |
1076 Bmask = 0x0000001f; | 1106 Bmask = 0x0000001f; |
1077 } | 1107 } |
1078 break; | 1108 break; |
1079 case 24: | 1109 case 24: |
1080 case 32: | 1110 case 32: |
1081 /* GDI defined as 8-8-8 */ | 1111 /* GDI defined as 8-8-8 */ |
1082 Rmask = 0x00ff0000; | 1112 Rmask = 0x00ff0000; |
1083 Gmask = 0x0000ff00; | 1113 Gmask = 0x0000ff00; |
1084 Bmask = 0x000000ff; | 1114 Bmask = 0x000000ff; |
1085 break; | 1115 break; |
1086 default: | 1116 default: |
1087 Rmask = 0x00000000; | 1117 Rmask = 0x00000000; |
1088 Gmask = 0x00000000; | 1118 Gmask = 0x00000000; |
1089 Bmask = 0x00000000; | 1119 Bmask = 0x00000000; |
1090 break; | 1120 break; |
1091 } | 1121 } |
1092 video = SDL_CreateRGBSurface(SDL_SWSURFACE, 0, 0, bpp, | 1122 video = SDL_CreateRGBSurface (SDL_SWSURFACE, 0, 0, bpp, |
1093 Rmask, Gmask, Bmask, 0); | 1123 Rmask, Gmask, Bmask, 0); |
1094 if ( video == NULL ) { | 1124 if (video == NULL) { |
1095 SDL_OutOfMemory(); | 1125 SDL_OutOfMemory (); |
1096 return(NULL); | 1126 return (NULL); |
1097 } | 1127 } |
1098 } | 1128 } |
1099 | 1129 |
1100 /* Fill in part of the video surface */ | 1130 /* Fill in part of the video surface */ |
1101 video->flags = 0; /* Clear flags */ | 1131 video->flags = 0; /* Clear flags */ |
1102 video->w = width; | 1132 video->w = width; |
1103 video->h = height; | 1133 video->h = height; |
1104 video->pitch = SDL_CalculatePitch(video); | 1134 video->pitch = SDL_CalculatePitch (video); |
1105 | 1135 |
1106 #ifndef NO_CHANGEDISPLAYSETTINGS | 1136 #ifndef NO_CHANGEDISPLAYSETTINGS |
1107 /* Set fullscreen mode if appropriate. | 1137 /* Set fullscreen mode if appropriate. |
1108 Ugh, since our list of valid video modes comes from | 1138 Ugh, since our list of valid video modes comes from |
1109 the DirectX driver, we may not actually be able to | 1139 the DirectX driver, we may not actually be able to |
1110 change to the desired resolution here. | 1140 change to the desired resolution here. |
1111 FIXME: Should we do a closest match? | 1141 FIXME: Should we do a closest match? |
1112 */ | 1142 */ |
1113 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1143 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
1114 DEVMODE settings; | 1144 DEVMODE settings; |
1115 BOOL changed; | 1145 BOOL changed; |
1116 | 1146 |
1117 SDL_memset(&settings, 0, sizeof(DEVMODE)); | 1147 SDL_memset (&settings, 0, sizeof (DEVMODE)); |
1118 settings.dmSize = sizeof(DEVMODE); | 1148 settings.dmSize = sizeof (DEVMODE); |
1119 settings.dmBitsPerPel = video->format->BitsPerPixel; | 1149 settings.dmBitsPerPel = video->format->BitsPerPixel; |
1120 settings.dmPelsWidth = width; | 1150 settings.dmPelsWidth = width; |
1121 settings.dmPelsHeight = height; | 1151 settings.dmPelsHeight = height; |
1122 settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; | 1152 settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; |
1123 if ( width <= (int)SDL_desktop_mode.dmPelsWidth && | 1153 if (width <= (int) SDL_desktop_mode.dmPelsWidth |
1124 height <= (int)SDL_desktop_mode.dmPelsHeight ) { | 1154 && height <= (int) SDL_desktop_mode.dmPelsHeight) { |
1125 settings.dmDisplayFrequency = SDL_desktop_mode.dmDisplayFrequency; | 1155 settings.dmDisplayFrequency = |
1126 settings.dmFields |= DM_DISPLAYFREQUENCY; | 1156 SDL_desktop_mode.dmDisplayFrequency; |
1127 } | 1157 settings.dmFields |= DM_DISPLAYFREQUENCY; |
1128 changed = (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL); | 1158 } |
1129 if ( ! changed && (settings.dmFields & DM_DISPLAYFREQUENCY) ) { | 1159 changed = |
1130 settings.dmFields &= ~DM_DISPLAYFREQUENCY; | 1160 (ChangeDisplaySettings (&settings, CDS_FULLSCREEN) == |
1131 changed = (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL); | 1161 DISP_CHANGE_SUCCESSFUL); |
1132 } | 1162 if (!changed && (settings.dmFields & DM_DISPLAYFREQUENCY)) { |
1133 if ( changed ) { | 1163 settings.dmFields &= ~DM_DISPLAYFREQUENCY; |
1134 video->flags |= SDL_FULLSCREEN; | 1164 changed = (ChangeDisplaySettings (&settings, CDS_FULLSCREEN) |
1135 SDL_fullscreen_mode = settings; | 1165 == DISP_CHANGE_SUCCESSFUL); |
1136 } | 1166 } |
1137 } | 1167 if (changed) { |
1168 video->flags |= SDL_FULLSCREEN; | |
1169 SDL_fullscreen_mode = settings; | |
1170 } | |
1171 } | |
1138 #endif /* !NO_CHANGEDISPLAYSETTINGS */ | 1172 #endif /* !NO_CHANGEDISPLAYSETTINGS */ |
1139 | 1173 |
1140 style = GetWindowLong(SDL_Window, GWL_STYLE); | 1174 style = GetWindowLong (SDL_Window, GWL_STYLE); |
1141 style &= ~(resizestyle|WS_MAXIMIZE); | 1175 style &= ~(resizestyle | WS_MAXIMIZE); |
1142 if ( video->flags & SDL_FULLSCREEN ) { | 1176 if (video->flags & SDL_FULLSCREEN) { |
1143 style &= ~windowstyle; | 1177 style &= ~windowstyle; |
1144 style |= directstyle; | 1178 style |= directstyle; |
1145 } else { | 1179 } else { |
1146 if ( flags & SDL_NOFRAME ) { | 1180 if (flags & SDL_NOFRAME) { |
1147 style &= ~windowstyle; | 1181 style &= ~windowstyle; |
1148 style |= directstyle; | 1182 style |= directstyle; |
1149 video->flags |= SDL_NOFRAME; | 1183 video->flags |= SDL_NOFRAME; |
1150 } else { | 1184 } else { |
1151 style &= ~directstyle; | 1185 style &= ~directstyle; |
1152 style |= windowstyle; | 1186 style |= windowstyle; |
1153 if ( flags & SDL_RESIZABLE ) { | 1187 if (flags & SDL_RESIZABLE) { |
1154 style |= resizestyle; | 1188 style |= resizestyle; |
1155 video->flags |= SDL_RESIZABLE; | 1189 video->flags |= SDL_RESIZABLE; |
1156 } | 1190 } |
1157 } | 1191 } |
1158 #if WS_MAXIMIZE | 1192 #if WS_MAXIMIZE |
1159 if (IsZoomed(SDL_Window)) style |= WS_MAXIMIZE; | 1193 if (IsZoomed (SDL_Window)) |
1160 #endif | 1194 style |= WS_MAXIMIZE; |
1161 } | 1195 #endif |
1162 | 1196 } |
1163 /* DJM: Don't piss of anyone who has setup his own window */ | 1197 |
1164 if ( !SDL_windowid ) | 1198 /* DJM: Don't piss of anyone who has setup his own window */ |
1165 SetWindowLong(SDL_Window, GWL_STYLE, style); | 1199 if (!SDL_windowid) |
1166 | 1200 SetWindowLong (SDL_Window, GWL_STYLE, style); |
1167 /* Resize the window (copied from SDL WinDIB driver) */ | 1201 |
1168 if ( !SDL_windowid && !IsZoomed(SDL_Window) ) { | 1202 /* Resize the window (copied from SDL WinDIB driver) */ |
1169 RECT bounds; | 1203 if (!SDL_windowid && !IsZoomed (SDL_Window)) { |
1170 int x, y; | 1204 RECT bounds; |
1171 HWND top; | 1205 int x, y; |
1172 UINT swp_flags; | 1206 HWND top; |
1173 const char *window = NULL; | 1207 UINT swp_flags; |
1174 const char *center = NULL; | 1208 const char *window = NULL; |
1175 | 1209 const char *center = NULL; |
1176 if ( !SDL_windowX && !SDL_windowY ) { | 1210 |
1177 window = SDL_getenv("SDL_VIDEO_WINDOW_POS"); | 1211 if (!SDL_windowX && !SDL_windowY) { |
1178 center = SDL_getenv("SDL_VIDEO_CENTERED"); | 1212 window = SDL_getenv ("SDL_VIDEO_WINDOW_POS"); |
1179 if ( window ) { | 1213 center = SDL_getenv ("SDL_VIDEO_CENTERED"); |
1180 if ( SDL_sscanf(window, "%d,%d", &x, &y) == 2 ) { | 1214 if (window) { |
1181 SDL_windowX = x; | 1215 if (SDL_sscanf (window, "%d,%d", &x, &y) == 2) { |
1182 SDL_windowY = y; | 1216 SDL_windowX = x; |
1183 } | 1217 SDL_windowY = y; |
1184 if ( SDL_strcmp(window, "center") == 0 ) { | 1218 } |
1185 center = window; | 1219 if (SDL_strcmp (window, "center") == 0) { |
1186 } | 1220 center = window; |
1187 } | 1221 } |
1188 } | 1222 } |
1189 swp_flags = (SWP_NOCOPYBITS | SWP_SHOWWINDOW); | 1223 } |
1190 | 1224 swp_flags = (SWP_NOCOPYBITS | SWP_SHOWWINDOW); |
1191 bounds.left = SDL_windowX; | 1225 |
1192 bounds.top = SDL_windowY; | 1226 bounds.left = SDL_windowX; |
1193 bounds.right = SDL_windowX+video->w; | 1227 bounds.top = SDL_windowY; |
1194 bounds.bottom = SDL_windowY+video->h; | 1228 bounds.right = SDL_windowX + video->w; |
1195 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), FALSE, 0); | 1229 bounds.bottom = SDL_windowY + video->h; |
1196 width = bounds.right-bounds.left; | 1230 AdjustWindowRectEx (&bounds, |
1197 height = bounds.bottom-bounds.top; | 1231 GetWindowLong (SDL_Window, GWL_STYLE), |
1198 if ( (flags & SDL_FULLSCREEN) ) { | 1232 FALSE, 0); |
1199 x = (GetSystemMetrics(SM_CXSCREEN)-width)/2; | 1233 width = bounds.right - bounds.left; |
1200 y = (GetSystemMetrics(SM_CYSCREEN)-height)/2; | 1234 height = bounds.bottom - bounds.top; |
1201 } else if ( center ) { | 1235 if ((flags & SDL_FULLSCREEN)) { |
1202 x = (GetSystemMetrics(SM_CXSCREEN)-width)/2; | 1236 x = (GetSystemMetrics (SM_CXSCREEN) - width) / 2; |
1203 y = (GetSystemMetrics(SM_CYSCREEN)-height)/2; | 1237 y = (GetSystemMetrics (SM_CYSCREEN) - height) / 2; |
1204 } else if ( SDL_windowX || SDL_windowY || window ) { | 1238 } else if (center) { |
1205 x = bounds.left; | 1239 x = (GetSystemMetrics (SM_CXSCREEN) - width) / 2; |
1206 y = bounds.top; | 1240 y = (GetSystemMetrics (SM_CYSCREEN) - height) / 2; |
1207 } else { | 1241 } else if (SDL_windowX || SDL_windowY || window) { |
1208 x = y = -1; | 1242 x = bounds.left; |
1209 swp_flags |= SWP_NOMOVE; | 1243 y = bounds.top; |
1210 } | 1244 } else { |
1211 if ( flags & SDL_FULLSCREEN ) { | 1245 x = y = -1; |
1212 top = HWND_TOPMOST; | 1246 swp_flags |= SWP_NOMOVE; |
1213 } else { | 1247 } |
1214 top = HWND_NOTOPMOST; | 1248 if (flags & SDL_FULLSCREEN) { |
1215 } | 1249 top = HWND_TOPMOST; |
1216 SetWindowPos(SDL_Window, top, x, y, width, height, swp_flags); | 1250 } else { |
1217 if ( !(flags & SDL_FULLSCREEN) ) { | 1251 top = HWND_NOTOPMOST; |
1218 SDL_windowX = SDL_bounds.left; | 1252 } |
1219 SDL_windowY = SDL_bounds.top; | 1253 SetWindowPos (SDL_Window, top, x, y, width, height, swp_flags); |
1220 } | 1254 if (!(flags & SDL_FULLSCREEN)) { |
1221 SetForegroundWindow(SDL_Window); | 1255 SDL_windowX = SDL_bounds.left; |
1222 } | 1256 SDL_windowY = SDL_bounds.top; |
1223 SDL_resizing = 0; | 1257 } |
1224 | 1258 SetForegroundWindow (SDL_Window); |
1225 /* Set up for OpenGL */ | 1259 } |
1226 if ( WIN_GL_SetupWindow(this) < 0 ) { | 1260 SDL_resizing = 0; |
1227 return(NULL); | 1261 |
1228 } | 1262 /* Set up for OpenGL */ |
1229 video->flags |= SDL_INTERNALOPENGL; | 1263 if (WIN_GL_SetupWindow (this) < 0) { |
1230 return(video); | 1264 return (NULL); |
1231 } | 1265 } |
1232 | 1266 video->flags |= SDL_INTERNALOPENGL; |
1233 /* Set the appropriate window style */ | 1267 return (video); |
1234 style = GetWindowLong(SDL_Window, GWL_STYLE); | 1268 } |
1235 style &= ~(resizestyle|WS_MAXIMIZE); | 1269 |
1236 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1270 /* Set the appropriate window style */ |
1237 style &= ~windowstyle; | 1271 style = GetWindowLong (SDL_Window, GWL_STYLE); |
1238 style |= directstyle; | 1272 style &= ~(resizestyle | WS_MAXIMIZE); |
1239 } else { | 1273 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
1240 if ( flags & SDL_NOFRAME ) { | 1274 style &= ~windowstyle; |
1241 style &= ~windowstyle; | 1275 style |= directstyle; |
1242 style |= directstyle; | 1276 } else { |
1243 } else { | 1277 if (flags & SDL_NOFRAME) { |
1244 style &= ~directstyle; | 1278 style &= ~windowstyle; |
1245 style |= windowstyle; | 1279 style |= directstyle; |
1246 if ( flags & SDL_RESIZABLE ) { | 1280 } else { |
1247 style |= resizestyle; | 1281 style &= ~directstyle; |
1248 } | 1282 style |= windowstyle; |
1249 } | 1283 if (flags & SDL_RESIZABLE) { |
1284 style |= resizestyle; | |
1285 } | |
1286 } | |
1250 #if WS_MAXIMIZE | 1287 #if WS_MAXIMIZE |
1251 if (IsZoomed(SDL_Window)) style |= WS_MAXIMIZE; | 1288 if (IsZoomed (SDL_Window)) |
1252 #endif | 1289 style |= WS_MAXIMIZE; |
1253 } | 1290 #endif |
1254 /* DJM: Don't piss of anyone who has setup his own window */ | 1291 } |
1255 if ( !SDL_windowid ) | 1292 /* DJM: Don't piss of anyone who has setup his own window */ |
1256 SetWindowLong(SDL_Window, GWL_STYLE, style); | 1293 if (!SDL_windowid) |
1257 | 1294 SetWindowLong (SDL_Window, GWL_STYLE, style); |
1258 /* Set DirectDraw sharing mode.. exclusive when fullscreen */ | 1295 |
1259 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1296 /* Set DirectDraw sharing mode.. exclusive when fullscreen */ |
1260 sharemode = DDSCL_FULLSCREEN|DDSCL_EXCLUSIVE|DDSCL_ALLOWREBOOT; | 1297 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
1261 } else { | 1298 sharemode = DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT; |
1262 sharemode = DDSCL_NORMAL; | 1299 } else { |
1263 } | 1300 sharemode = DDSCL_NORMAL; |
1264 result = IDirectDraw2_SetCooperativeLevel(ddraw2,SDL_Window,sharemode); | 1301 } |
1265 if ( result != DD_OK ) { | 1302 result = IDirectDraw2_SetCooperativeLevel (ddraw2, SDL_Window, sharemode); |
1266 SetDDerror("DirectDraw2::SetCooperativeLevel", result); | 1303 if (result != DD_OK) { |
1267 return(NULL); | 1304 SetDDerror ("DirectDraw2::SetCooperativeLevel", result); |
1268 } | 1305 return (NULL); |
1269 | 1306 } |
1270 /* Set the display mode, if we are in fullscreen mode */ | 1307 |
1271 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1308 /* Set the display mode, if we are in fullscreen mode */ |
1272 RECT bounds; | 1309 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
1273 struct DX5EnumRect *rect; | 1310 RECT bounds; |
1274 int maxRefreshRate; | 1311 struct DX5EnumRect *rect; |
1275 | 1312 int maxRefreshRate; |
1276 /* Cover up desktop during mode change */ | 1313 |
1277 bounds.left = 0; | 1314 /* Cover up desktop during mode change */ |
1278 bounds.top = 0; | 1315 bounds.left = 0; |
1279 bounds.right = GetSystemMetrics(SM_CXSCREEN); | 1316 bounds.top = 0; |
1280 bounds.bottom = GetSystemMetrics(SM_CYSCREEN); | 1317 bounds.right = GetSystemMetrics (SM_CXSCREEN); |
1281 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), FALSE, 0); | 1318 bounds.bottom = GetSystemMetrics (SM_CYSCREEN); |
1282 SetWindowPos(SDL_Window, HWND_TOPMOST, | 1319 AdjustWindowRectEx (&bounds, GetWindowLong (SDL_Window, GWL_STYLE), |
1283 bounds.left, bounds.top, | 1320 FALSE, 0); |
1284 bounds.right - bounds.left, | 1321 SetWindowPos (SDL_Window, HWND_TOPMOST, bounds.left, bounds.top, |
1285 bounds.bottom - bounds.top, SWP_NOCOPYBITS); | 1322 bounds.right - bounds.left, |
1286 ShowWindow(SDL_Window, SW_SHOW); | 1323 bounds.bottom - bounds.top, SWP_NOCOPYBITS); |
1287 while ( GetForegroundWindow() != SDL_Window ) { | 1324 ShowWindow (SDL_Window, SW_SHOW); |
1288 SetForegroundWindow(SDL_Window); | 1325 while (GetForegroundWindow () != SDL_Window) { |
1289 SDL_Delay(100); | 1326 SetForegroundWindow (SDL_Window); |
1290 } | 1327 SDL_Delay (100); |
1291 | 1328 } |
1292 /* find maximum monitor refresh rate for this resolution */ | 1329 |
1293 /* Dmitry Yakimov ftech@tula.net */ | 1330 /* find maximum monitor refresh rate for this resolution */ |
1294 maxRefreshRate = 0; /* system default */ | 1331 /* Dmitry Yakimov ftech@tula.net */ |
1295 for ( rect = enumlists[bpp / 8 - 1]; rect; rect = rect->next ) { | 1332 maxRefreshRate = 0; /* system default */ |
1296 if ( (width == rect->r.w) && (height == rect->r.h) ) { | 1333 for (rect = enumlists[bpp / 8 - 1]; rect; rect = rect->next) { |
1297 maxRefreshRate = rect->refreshRate; | 1334 if ((width == rect->r.w) && (height == rect->r.h)) { |
1298 break; | 1335 maxRefreshRate = rect->refreshRate; |
1299 } | 1336 break; |
1300 } | 1337 } |
1338 } | |
1301 #ifdef DDRAW_DEBUG | 1339 #ifdef DDRAW_DEBUG |
1302 fprintf(stderr, "refresh rate = %d Hz\n", maxRefreshRate); | 1340 fprintf (stderr, "refresh rate = %d Hz\n", maxRefreshRate); |
1303 #endif | 1341 #endif |
1304 | 1342 |
1305 result = IDirectDraw2_SetDisplayMode(ddraw2, width, height, bpp, maxRefreshRate, 0); | 1343 result = |
1306 if ( result != DD_OK ) { | 1344 IDirectDraw2_SetDisplayMode (ddraw2, width, height, bpp, |
1307 result = IDirectDraw2_SetDisplayMode(ddraw2, width, height, bpp, 0, 0); | 1345 maxRefreshRate, 0); |
1308 if ( result != DD_OK ) { | 1346 if (result != DD_OK) { |
1309 /* We couldn't set fullscreen mode, try window */ | 1347 result = |
1310 return(DX5_SetVideoMode(this, current, width, height, bpp, flags & ~SDL_FULLSCREEN)); | 1348 IDirectDraw2_SetDisplayMode (ddraw2, width, height, bpp, |
1311 } | 1349 0, 0); |
1312 } | 1350 if (result != DD_OK) { |
1313 DX5_DInputReset(this, 1); | 1351 /* We couldn't set fullscreen mode, try window */ |
1314 } else { | 1352 return (DX5_SetVideoMode |
1315 DX5_DInputReset(this, 0); | 1353 (this, current, width, height, bpp, |
1316 } | 1354 flags & ~SDL_FULLSCREEN)); |
1317 DX5_UpdateVideoInfo(this); | 1355 } |
1318 | 1356 } |
1319 /* Create a primary DirectDraw surface */ | 1357 DX5_DInputReset (this, 1); |
1320 SDL_memset(&ddsd, 0, sizeof(ddsd)); | 1358 } else { |
1321 ddsd.dwSize = sizeof(ddsd); | 1359 DX5_DInputReset (this, 0); |
1322 ddsd.dwFlags = DDSD_CAPS; | 1360 } |
1323 ddsd.ddsCaps.dwCaps = (DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY); | 1361 DX5_UpdateVideoInfo (this); |
1324 if ( (flags & SDL_FULLSCREEN) != SDL_FULLSCREEN ) { | 1362 |
1325 /* There's no windowed double-buffering */ | 1363 /* Create a primary DirectDraw surface */ |
1326 flags &= ~SDL_DOUBLEBUF; | 1364 SDL_memset (&ddsd, 0, sizeof (ddsd)); |
1327 } | 1365 ddsd.dwSize = sizeof (ddsd); |
1328 if ( (flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF ) { | 1366 ddsd.dwFlags = DDSD_CAPS; |
1329 ddsd.dwFlags |= DDSD_BACKBUFFERCOUNT; | 1367 ddsd.ddsCaps.dwCaps = (DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY); |
1330 ddsd.ddsCaps.dwCaps |= (DDSCAPS_COMPLEX|DDSCAPS_FLIP); | 1368 if ((flags & SDL_FULLSCREEN) != SDL_FULLSCREEN) { |
1331 ddsd.dwBackBufferCount = 1; | 1369 /* There's no windowed double-buffering */ |
1332 } | 1370 flags &= ~SDL_DOUBLEBUF; |
1333 result = IDirectDraw2_CreateSurface(ddraw2, &ddsd, &dd_surface1, NULL); | 1371 } |
1334 if ( (result != DD_OK) && ((flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF) ) { | 1372 if ((flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF) { |
1335 ddsd.dwFlags &= ~DDSD_BACKBUFFERCOUNT; | 1373 ddsd.dwFlags |= DDSD_BACKBUFFERCOUNT; |
1336 ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_COMPLEX|DDSCAPS_FLIP); | 1374 ddsd.ddsCaps.dwCaps |= (DDSCAPS_COMPLEX | DDSCAPS_FLIP); |
1337 ddsd.dwBackBufferCount = 0; | 1375 ddsd.dwBackBufferCount = 1; |
1338 result = IDirectDraw2_CreateSurface(ddraw2, | 1376 } |
1339 &ddsd, &dd_surface1, NULL); | 1377 result = IDirectDraw2_CreateSurface (ddraw2, &ddsd, &dd_surface1, NULL); |
1340 } | 1378 if ((result != DD_OK) && ((flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF)) { |
1341 if ( result != DD_OK ) { | 1379 ddsd.dwFlags &= ~DDSD_BACKBUFFERCOUNT; |
1342 SetDDerror("DirectDraw2::CreateSurface(PRIMARY)", result); | 1380 ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_COMPLEX | DDSCAPS_FLIP); |
1343 return(NULL); | 1381 ddsd.dwBackBufferCount = 0; |
1344 } | 1382 result = IDirectDraw2_CreateSurface (ddraw2, |
1345 result = IDirectDrawSurface_QueryInterface(dd_surface1, | 1383 &ddsd, &dd_surface1, NULL); |
1346 &IID_IDirectDrawSurface3, (LPVOID *)&SDL_primary); | 1384 } |
1347 if ( result != DD_OK ) { | 1385 if (result != DD_OK) { |
1348 SetDDerror("DirectDrawSurface::QueryInterface", result); | 1386 SetDDerror ("DirectDraw2::CreateSurface(PRIMARY)", result); |
1349 return(NULL); | 1387 return (NULL); |
1350 } | 1388 } |
1351 IDirectDrawSurface_Release(dd_surface1); | 1389 result = IDirectDrawSurface_QueryInterface (dd_surface1, |
1352 | 1390 &IID_IDirectDrawSurface3, |
1353 /* Get the format of the primary DirectDraw surface */ | 1391 (LPVOID *) & SDL_primary); |
1354 SDL_memset(&ddsd, 0, sizeof(ddsd)); | 1392 if (result != DD_OK) { |
1355 ddsd.dwSize = sizeof(ddsd); | 1393 SetDDerror ("DirectDrawSurface::QueryInterface", result); |
1356 ddsd.dwFlags = DDSD_PIXELFORMAT|DDSD_CAPS; | 1394 return (NULL); |
1357 result = IDirectDrawSurface3_GetSurfaceDesc(SDL_primary, &ddsd); | 1395 } |
1358 if ( result != DD_OK ) { | 1396 IDirectDrawSurface_Release (dd_surface1); |
1359 SetDDerror("DirectDrawSurface::GetSurfaceDesc", result); | 1397 |
1360 return(NULL); | 1398 /* Get the format of the primary DirectDraw surface */ |
1361 } | 1399 SDL_memset (&ddsd, 0, sizeof (ddsd)); |
1362 if ( ! (ddsd.ddpfPixelFormat.dwFlags&DDPF_RGB) ) { | 1400 ddsd.dwSize = sizeof (ddsd); |
1363 SDL_SetError("Primary DDRAW surface is not RGB format"); | 1401 ddsd.dwFlags = DDSD_PIXELFORMAT | DDSD_CAPS; |
1364 return(NULL); | 1402 result = IDirectDrawSurface3_GetSurfaceDesc (SDL_primary, &ddsd); |
1365 } | 1403 if (result != DD_OK) { |
1366 | 1404 SetDDerror ("DirectDrawSurface::GetSurfaceDesc", result); |
1367 /* Free old palette and create a new one if we're in 8-bit mode */ | 1405 return (NULL); |
1368 if ( SDL_palette != NULL ) { | 1406 } |
1369 IDirectDrawPalette_Release(SDL_palette); | 1407 if (!(ddsd.ddpfPixelFormat.dwFlags & DDPF_RGB)) { |
1370 SDL_palette = NULL; | 1408 SDL_SetError ("Primary DDRAW surface is not RGB format"); |
1371 } | 1409 return (NULL); |
1410 } | |
1411 | |
1412 /* Free old palette and create a new one if we're in 8-bit mode */ | |
1413 if (SDL_palette != NULL) { | |
1414 IDirectDrawPalette_Release (SDL_palette); | |
1415 SDL_palette = NULL; | |
1416 } | |
1372 #if defined(NONAMELESSUNION) | 1417 #if defined(NONAMELESSUNION) |
1373 if ( ddsd.ddpfPixelFormat.u1.dwRGBBitCount == 8 ) { | 1418 if (ddsd.ddpfPixelFormat.u1.dwRGBBitCount == 8) { |
1374 #else | 1419 #else |
1375 if ( ddsd.ddpfPixelFormat.dwRGBBitCount == 8 ) { | 1420 if (ddsd.ddpfPixelFormat.dwRGBBitCount == 8) { |
1376 #endif | 1421 #endif |
1377 int i; | 1422 int i; |
1378 | 1423 |
1379 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1424 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
1380 /* We have access to the entire palette */ | 1425 /* We have access to the entire palette */ |
1381 for ( i=0; i<256; ++i ) { | 1426 for (i = 0; i < 256; ++i) { |
1382 SDL_colors[i].peFlags = | 1427 SDL_colors[i].peFlags = (PC_NOCOLLAPSE | PC_RESERVED); |
1383 (PC_NOCOLLAPSE|PC_RESERVED); | 1428 SDL_colors[i].peRed = 0; |
1384 SDL_colors[i].peRed = 0; | 1429 SDL_colors[i].peGreen = 0; |
1385 SDL_colors[i].peGreen = 0; | 1430 SDL_colors[i].peBlue = 0; |
1386 SDL_colors[i].peBlue = 0; | 1431 } |
1387 } | 1432 } else { |
1388 } else { | 1433 /* First 10 colors are reserved by Windows */ |
1389 /* First 10 colors are reserved by Windows */ | 1434 for (i = 0; i < 10; ++i) { |
1390 for ( i=0; i<10; ++i ) { | 1435 SDL_colors[i].peFlags = PC_EXPLICIT; |
1391 SDL_colors[i].peFlags = PC_EXPLICIT; | 1436 SDL_colors[i].peRed = i; |
1392 SDL_colors[i].peRed = i; | 1437 SDL_colors[i].peGreen = 0; |
1393 SDL_colors[i].peGreen = 0; | 1438 SDL_colors[i].peBlue = 0; |
1394 SDL_colors[i].peBlue = 0; | 1439 } |
1395 } | 1440 for (i = 10; i < (10 + 236); ++i) { |
1396 for ( i=10; i<(10+236); ++i ) { | 1441 SDL_colors[i].peFlags = PC_NOCOLLAPSE; |
1397 SDL_colors[i].peFlags = PC_NOCOLLAPSE; | 1442 SDL_colors[i].peRed = 0; |
1398 SDL_colors[i].peRed = 0; | 1443 SDL_colors[i].peGreen = 0; |
1399 SDL_colors[i].peGreen = 0; | 1444 SDL_colors[i].peBlue = 0; |
1400 SDL_colors[i].peBlue = 0; | 1445 } |
1401 } | 1446 /* Last 10 colors are reserved by Windows */ |
1402 /* Last 10 colors are reserved by Windows */ | 1447 for (i = 246; i < 256; ++i) { |
1403 for ( i=246; i<256; ++i ) { | 1448 SDL_colors[i].peFlags = PC_EXPLICIT; |
1404 SDL_colors[i].peFlags = PC_EXPLICIT; | 1449 SDL_colors[i].peRed = i; |
1405 SDL_colors[i].peRed = i; | 1450 SDL_colors[i].peGreen = 0; |
1406 SDL_colors[i].peGreen = 0; | 1451 SDL_colors[i].peBlue = 0; |
1407 SDL_colors[i].peBlue = 0; | 1452 } |
1408 } | 1453 } |
1409 } | 1454 result = IDirectDraw2_CreatePalette (ddraw2, |
1410 result = IDirectDraw2_CreatePalette(ddraw2, | 1455 (DDPCAPS_8BIT | |
1411 (DDPCAPS_8BIT|DDPCAPS_ALLOW256), | 1456 DDPCAPS_ALLOW256), SDL_colors, |
1412 SDL_colors, &SDL_palette, NULL); | 1457 &SDL_palette, NULL); |
1413 if ( result != DD_OK ) { | 1458 if (result != DD_OK) { |
1414 SetDDerror("DirectDraw2::CreatePalette", result); | 1459 SetDDerror ("DirectDraw2::CreatePalette", result); |
1415 return(NULL); | 1460 return (NULL); |
1416 } | 1461 } |
1417 result = IDirectDrawSurface3_SetPalette(SDL_primary, | 1462 result = IDirectDrawSurface3_SetPalette (SDL_primary, SDL_palette); |
1418 SDL_palette); | 1463 if (result != DD_OK) { |
1419 if ( result != DD_OK ) { | 1464 SetDDerror ("DirectDrawSurface3::SetPalette", result); |
1420 SetDDerror("DirectDrawSurface3::SetPalette", result); | 1465 return (NULL); |
1421 return(NULL); | 1466 } |
1422 } | 1467 } |
1423 } | 1468 |
1424 | 1469 /* Create our video surface using the same pixel format */ |
1425 /* Create our video surface using the same pixel format */ | 1470 video = current; |
1426 video = current; | 1471 if ((width != video->w) || (height != video->h) |
1427 if ( (width != video->w) || (height != video->h) | 1472 || (video->format->BitsPerPixel != |
1428 || (video->format->BitsPerPixel != | |
1429 #if defined(NONAMELESSUNION) | 1473 #if defined(NONAMELESSUNION) |
1430 ddsd.ddpfPixelFormat.u1.dwRGBBitCount) ) { | 1474 ddsd.ddpfPixelFormat.u1.dwRGBBitCount)) { |
1431 #else | 1475 #else |
1432 ddsd.ddpfPixelFormat.dwRGBBitCount) ) { | 1476 ddsd.ddpfPixelFormat.dwRGBBitCount)) { |
1433 #endif | 1477 #endif |
1434 SDL_FreeSurface(video); | 1478 SDL_FreeSurface (video); |
1435 video = SDL_CreateRGBSurface(SDL_SWSURFACE, 0, 0, | 1479 video = SDL_CreateRGBSurface (SDL_SWSURFACE, 0, 0, |
1436 #if defined(NONAMELESSUNION) | 1480 #if defined(NONAMELESSUNION) |
1437 ddsd.ddpfPixelFormat.u1.dwRGBBitCount, | 1481 ddsd.ddpfPixelFormat.u1.dwRGBBitCount, |
1438 ddsd.ddpfPixelFormat.u2.dwRBitMask, | 1482 ddsd.ddpfPixelFormat.u2.dwRBitMask, |
1439 ddsd.ddpfPixelFormat.u3.dwGBitMask, | 1483 ddsd.ddpfPixelFormat.u3.dwGBitMask, |
1440 ddsd.ddpfPixelFormat.u4.dwBBitMask, | 1484 ddsd.ddpfPixelFormat.u4.dwBBitMask, |
1441 #else | 1485 #else |
1442 ddsd.ddpfPixelFormat.dwRGBBitCount, | 1486 ddsd.ddpfPixelFormat.dwRGBBitCount, |
1443 ddsd.ddpfPixelFormat.dwRBitMask, | 1487 ddsd.ddpfPixelFormat.dwRBitMask, |
1444 ddsd.ddpfPixelFormat.dwGBitMask, | 1488 ddsd.ddpfPixelFormat.dwGBitMask, |
1445 ddsd.ddpfPixelFormat.dwBBitMask, | 1489 ddsd.ddpfPixelFormat.dwBBitMask, |
1446 #endif | 1490 #endif |
1447 0); | 1491 0); |
1448 if ( video == NULL ) { | 1492 if (video == NULL) { |
1449 SDL_OutOfMemory(); | 1493 SDL_OutOfMemory (); |
1450 return(NULL); | 1494 return (NULL); |
1451 } | 1495 } |
1452 video->w = width; | 1496 video->w = width; |
1453 video->h = height; | 1497 video->h = height; |
1454 video->pitch = 0; | 1498 video->pitch = 0; |
1455 } | 1499 } |
1456 video->flags = 0; /* Clear flags */ | 1500 video->flags = 0; /* Clear flags */ |
1457 | 1501 |
1458 /* If not fullscreen, locking is possible, but it doesn't do what | 1502 /* If not fullscreen, locking is possible, but it doesn't do what |
1459 the caller really expects -- if the locked surface is written to, | 1503 the caller really expects -- if the locked surface is written to, |
1460 the appropriate portion of the entire screen is modified, not | 1504 the appropriate portion of the entire screen is modified, not |
1461 the application window, as we would like. | 1505 the application window, as we would like. |
1462 Note that it is still possible to write directly to display | 1506 Note that it is still possible to write directly to display |
1463 memory, but the application must respect the clip list of | 1507 memory, but the application must respect the clip list of |
1464 the surface. There might be some odd timing interactions | 1508 the surface. There might be some odd timing interactions |
1465 involving clip list updates and background refreshing as | 1509 involving clip list updates and background refreshing as |
1466 Windows moves other windows across our window. | 1510 Windows moves other windows across our window. |
1467 We currently don't support this, even though it might be a | 1511 We currently don't support this, even though it might be a |
1468 good idea since BeOS has an implementation of BDirectWindow | 1512 good idea since BeOS has an implementation of BDirectWindow |
1469 that does the same thing. This would be most useful for | 1513 that does the same thing. This would be most useful for |
1470 applications that do complete screen updates every frame. | 1514 applications that do complete screen updates every frame. |
1471 -- Fixme? | 1515 -- Fixme? |
1472 */ | 1516 */ |
1473 if ( (flags & SDL_FULLSCREEN) != SDL_FULLSCREEN ) { | 1517 if ((flags & SDL_FULLSCREEN) != SDL_FULLSCREEN) { |
1474 /* Necessary if we're going from fullscreen to window */ | 1518 /* Necessary if we're going from fullscreen to window */ |
1475 if ( video->pixels == NULL ) { | 1519 if (video->pixels == NULL) { |
1476 video->pitch = (width*video->format->BytesPerPixel); | 1520 video->pitch = (width * video->format->BytesPerPixel); |
1477 /* Pitch needs to be QWORD (8-byte) aligned */ | 1521 /* Pitch needs to be QWORD (8-byte) aligned */ |
1478 video->pitch = (video->pitch + 7) & ~7; | 1522 video->pitch = (video->pitch + 7) & ~7; |
1479 video->pixels = (void *)SDL_malloc(video->h*video->pitch); | 1523 video->pixels = (void *) SDL_malloc (video->h * video->pitch); |
1480 if ( video->pixels == NULL ) { | 1524 if (video->pixels == NULL) { |
1481 if ( video != current ) { | 1525 if (video != current) { |
1482 SDL_FreeSurface(video); | 1526 SDL_FreeSurface (video); |
1483 } | 1527 } |
1484 SDL_OutOfMemory(); | 1528 SDL_OutOfMemory (); |
1485 return(NULL); | 1529 return (NULL); |
1486 } | 1530 } |
1487 } | 1531 } |
1488 dd_surface3 = NULL; | 1532 dd_surface3 = NULL; |
1489 #if 0 /* FIXME: enable this when SDL consistently reports lost surfaces */ | 1533 #if 0 /* FIXME: enable this when SDL consistently reports lost surfaces */ |
1490 if ( (flags & SDL_HWSURFACE) == SDL_HWSURFACE ) { | 1534 if ((flags & SDL_HWSURFACE) == SDL_HWSURFACE) { |
1491 video->flags |= SDL_HWSURFACE; | 1535 video->flags |= SDL_HWSURFACE; |
1492 } else { | 1536 } else { |
1493 video->flags |= SDL_SWSURFACE; | 1537 video->flags |= SDL_SWSURFACE; |
1494 } | 1538 } |
1495 #else | 1539 #else |
1496 video->flags |= SDL_SWSURFACE; | 1540 video->flags |= SDL_SWSURFACE; |
1497 #endif | 1541 #endif |
1498 if ( (flags & SDL_RESIZABLE) && !(flags & SDL_NOFRAME) ) { | 1542 if ((flags & SDL_RESIZABLE) && !(flags & SDL_NOFRAME)) { |
1499 video->flags |= SDL_RESIZABLE; | 1543 video->flags |= SDL_RESIZABLE; |
1500 } | 1544 } |
1501 if ( flags & SDL_NOFRAME ) { | 1545 if (flags & SDL_NOFRAME) { |
1502 video->flags |= SDL_NOFRAME; | 1546 video->flags |= SDL_NOFRAME; |
1503 } | 1547 } |
1504 } else { | 1548 } else { |
1505 /* Necessary if we're going from window to fullscreen */ | 1549 /* Necessary if we're going from window to fullscreen */ |
1506 if ( video->pixels != NULL ) { | 1550 if (video->pixels != NULL) { |
1507 SDL_free(video->pixels); | 1551 SDL_free (video->pixels); |
1508 video->pixels = NULL; | 1552 video->pixels = NULL; |
1509 } | 1553 } |
1510 dd_surface3 = SDL_primary; | 1554 dd_surface3 = SDL_primary; |
1511 video->flags |= SDL_HWSURFACE; | 1555 video->flags |= SDL_HWSURFACE; |
1512 } | 1556 } |
1513 | 1557 |
1514 /* See if the primary surface has double-buffering enabled */ | 1558 /* See if the primary surface has double-buffering enabled */ |
1515 if ( (ddsd.ddsCaps.dwCaps & DDSCAPS_FLIP) == DDSCAPS_FLIP ) { | 1559 if ((ddsd.ddsCaps.dwCaps & DDSCAPS_FLIP) == DDSCAPS_FLIP) { |
1516 video->flags |= SDL_DOUBLEBUF; | 1560 video->flags |= SDL_DOUBLEBUF; |
1517 } | 1561 } |
1518 | 1562 |
1519 /* Allocate the SDL surface associated with the primary surface */ | 1563 /* Allocate the SDL surface associated with the primary surface */ |
1520 if ( DX5_AllocDDSurface(this, video, dd_surface3, | 1564 if (DX5_AllocDDSurface (this, video, dd_surface3, |
1521 video->flags&SDL_HWSURFACE) < 0 ) { | 1565 video->flags & SDL_HWSURFACE) < 0) { |
1522 if ( video != current ) { | 1566 if (video != current) { |
1523 SDL_FreeSurface(video); | 1567 SDL_FreeSurface (video); |
1524 } | 1568 } |
1525 return(NULL); | 1569 return (NULL); |
1526 } | 1570 } |
1527 | 1571 |
1528 /* Use the appropriate blitting function */ | 1572 /* Use the appropriate blitting function */ |
1529 if ( (flags & SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 1573 if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
1530 video->flags |= SDL_FULLSCREEN; | 1574 video->flags |= SDL_FULLSCREEN; |
1531 if ( video->format->palette != NULL ) { | 1575 if (video->format->palette != NULL) { |
1532 video->flags |= SDL_HWPALETTE; | 1576 video->flags |= SDL_HWPALETTE; |
1533 } | 1577 } |
1534 this->UpdateRects = DX5_DirectUpdate; | 1578 this->UpdateRects = DX5_DirectUpdate; |
1535 } else { | 1579 } else { |
1536 this->UpdateRects = DX5_WindowUpdate; | 1580 this->UpdateRects = DX5_WindowUpdate; |
1537 } | 1581 } |
1538 | 1582 |
1539 /* Make our window the proper size, set the clipper, then show it */ | 1583 /* Make our window the proper size, set the clipper, then show it */ |
1540 if ( (flags & SDL_FULLSCREEN) != SDL_FULLSCREEN ) { | 1584 if ((flags & SDL_FULLSCREEN) != SDL_FULLSCREEN) { |
1541 /* Create and set a clipper on our primary surface */ | 1585 /* Create and set a clipper on our primary surface */ |
1542 if ( SDL_clipper == NULL ) { | 1586 if (SDL_clipper == NULL) { |
1543 result = IDirectDraw2_CreateClipper(ddraw2, | 1587 result = IDirectDraw2_CreateClipper (ddraw2, |
1544 0, &SDL_clipper, NULL); | 1588 0, &SDL_clipper, NULL); |
1545 if ( result != DD_OK ) { | 1589 if (result != DD_OK) { |
1546 if ( video != current ) { | 1590 if (video != current) { |
1547 SDL_FreeSurface(video); | 1591 SDL_FreeSurface (video); |
1548 } | 1592 } |
1549 SetDDerror("DirectDraw2::CreateClipper",result); | 1593 SetDDerror ("DirectDraw2::CreateClipper", result); |
1550 return(NULL); | 1594 return (NULL); |
1551 } | 1595 } |
1552 } | 1596 } |
1553 result = IDirectDrawClipper_SetHWnd(SDL_clipper, 0, SDL_Window); | 1597 result = IDirectDrawClipper_SetHWnd (SDL_clipper, 0, SDL_Window); |
1554 if ( result != DD_OK ) { | 1598 if (result != DD_OK) { |
1555 if ( video != current ) { | 1599 if (video != current) { |
1556 SDL_FreeSurface(video); | 1600 SDL_FreeSurface (video); |
1557 } | 1601 } |
1558 SetDDerror("DirectDrawClipper::SetHWnd", result); | 1602 SetDDerror ("DirectDrawClipper::SetHWnd", result); |
1559 return(NULL); | 1603 return (NULL); |
1560 } | 1604 } |
1561 result = IDirectDrawSurface3_SetClipper(SDL_primary, | 1605 result = IDirectDrawSurface3_SetClipper (SDL_primary, SDL_clipper); |
1562 SDL_clipper); | 1606 if (result != DD_OK) { |
1563 if ( result != DD_OK ) { | 1607 if (video != current) { |
1564 if ( video != current ) { | 1608 SDL_FreeSurface (video); |
1565 SDL_FreeSurface(video); | 1609 } |
1566 } | 1610 SetDDerror ("DirectDrawSurface3::SetClipper", result); |
1567 SetDDerror("DirectDrawSurface3::SetClipper", result); | 1611 return (NULL); |
1568 return(NULL); | 1612 } |
1569 } | 1613 |
1570 | 1614 /* Resize the window (copied from SDL WinDIB driver) */ |
1571 /* Resize the window (copied from SDL WinDIB driver) */ | 1615 if (!SDL_windowid && !IsZoomed (SDL_Window)) { |
1572 if ( !SDL_windowid && !IsZoomed(SDL_Window) ) { | 1616 RECT bounds; |
1573 RECT bounds; | 1617 int x, y; |
1574 int x, y; | 1618 UINT swp_flags; |
1575 UINT swp_flags; | 1619 const char *window = NULL; |
1576 const char *window = NULL; | 1620 const char *center = NULL; |
1577 const char *center = NULL; | 1621 |
1578 | 1622 if (!SDL_windowX && !SDL_windowY) { |
1579 if ( !SDL_windowX && !SDL_windowY ) { | 1623 window = SDL_getenv ("SDL_VIDEO_WINDOW_POS"); |
1580 window = SDL_getenv("SDL_VIDEO_WINDOW_POS"); | 1624 center = SDL_getenv ("SDL_VIDEO_CENTERED"); |
1581 center = SDL_getenv("SDL_VIDEO_CENTERED"); | 1625 if (window) { |
1582 if ( window ) { | 1626 if (SDL_sscanf (window, "%d,%d", &x, &y) == 2) { |
1583 if ( SDL_sscanf(window, "%d,%d", &x, &y) == 2 ) { | 1627 SDL_windowX = x; |
1584 SDL_windowX = x; | 1628 SDL_windowY = y; |
1585 SDL_windowY = y; | 1629 } |
1586 } | 1630 if (SDL_strcmp (window, "center") == 0) { |
1587 if ( SDL_strcmp(window, "center") == 0 ) { | 1631 center = window; |
1588 center = window; | 1632 } |
1589 } | 1633 } |
1590 } | 1634 } |
1591 } | 1635 swp_flags = SWP_NOCOPYBITS; |
1592 swp_flags = SWP_NOCOPYBITS; | 1636 |
1593 | 1637 bounds.left = SDL_windowX; |
1594 bounds.left = SDL_windowX; | 1638 bounds.top = SDL_windowY; |
1595 bounds.top = SDL_windowY; | 1639 bounds.right = SDL_windowX + video->w; |
1596 bounds.right = SDL_windowX+video->w; | 1640 bounds.bottom = SDL_windowY + video->h; |
1597 bounds.bottom = SDL_windowY+video->h; | 1641 AdjustWindowRectEx (&bounds, |
1598 AdjustWindowRectEx(&bounds, GetWindowLong(SDL_Window, GWL_STYLE), FALSE, 0); | 1642 GetWindowLong (SDL_Window, GWL_STYLE), |
1599 width = bounds.right-bounds.left; | 1643 FALSE, 0); |
1600 height = bounds.bottom-bounds.top; | 1644 width = bounds.right - bounds.left; |
1601 if ( center ) { | 1645 height = bounds.bottom - bounds.top; |
1602 x = (GetSystemMetrics(SM_CXSCREEN)-width)/2; | 1646 if (center) { |
1603 y = (GetSystemMetrics(SM_CYSCREEN)-height)/2; | 1647 x = (GetSystemMetrics (SM_CXSCREEN) - width) / 2; |
1604 } else if ( SDL_windowX || SDL_windowY || window ) { | 1648 y = (GetSystemMetrics (SM_CYSCREEN) - height) / 2; |
1605 x = bounds.left; | 1649 } else if (SDL_windowX || SDL_windowY || window) { |
1606 y = bounds.top; | 1650 x = bounds.left; |
1607 } else { | 1651 y = bounds.top; |
1608 x = y = -1; | 1652 } else { |
1609 swp_flags |= SWP_NOMOVE; | 1653 x = y = -1; |
1610 } | 1654 swp_flags |= SWP_NOMOVE; |
1611 SetWindowPos(SDL_Window, HWND_NOTOPMOST, x, y, width, height, swp_flags); | 1655 } |
1612 SDL_windowX = SDL_bounds.left; | 1656 SetWindowPos (SDL_Window, HWND_NOTOPMOST, x, y, width, height, |
1613 SDL_windowY = SDL_bounds.top; | 1657 swp_flags); |
1614 } | 1658 SDL_windowX = SDL_bounds.left; |
1615 | 1659 SDL_windowY = SDL_bounds.top; |
1616 } | 1660 } |
1617 ShowWindow(SDL_Window, SW_SHOW); | 1661 |
1618 SetForegroundWindow(SDL_Window); | 1662 } |
1619 SDL_resizing = 0; | 1663 ShowWindow (SDL_Window, SW_SHOW); |
1620 | 1664 SetForegroundWindow (SDL_Window); |
1621 /* JC 14 Mar 2006 | 1665 SDL_resizing = 0; |
1622 Flush the message loop or this can cause big problems later | 1666 |
1623 Especially if the user decides to use dialog boxes or assert()! | 1667 /* JC 14 Mar 2006 |
1624 */ | 1668 Flush the message loop or this can cause big problems later |
1625 WIN_FlushMessageQueue(); | 1669 Especially if the user decides to use dialog boxes or assert()! |
1626 | 1670 */ |
1627 /* We're live! */ | 1671 WIN_FlushMessageQueue (); |
1628 return(video); | 1672 |
1629 } | 1673 /* We're live! */ |
1630 | 1674 return (video); |
1631 struct private_hwdata { | 1675 } |
1632 LPDIRECTDRAWSURFACE3 dd_surface; | 1676 |
1633 LPDIRECTDRAWSURFACE3 dd_writebuf; | 1677 struct private_hwdata |
1678 { | |
1679 LPDIRECTDRAWSURFACE3 dd_surface; | |
1680 LPDIRECTDRAWSURFACE3 dd_writebuf; | |
1634 }; | 1681 }; |
1635 | 1682 |
1636 static int DX5_AllocDDSurface(_THIS, SDL_Surface *surface, | 1683 static int |
1637 LPDIRECTDRAWSURFACE3 requested, Uint32 flag) | 1684 DX5_AllocDDSurface (_THIS, SDL_Surface * surface, |
1638 { | 1685 LPDIRECTDRAWSURFACE3 requested, Uint32 flag) |
1639 LPDIRECTDRAWSURFACE dd_surface1; | 1686 { |
1640 LPDIRECTDRAWSURFACE3 dd_surface3; | 1687 LPDIRECTDRAWSURFACE dd_surface1; |
1641 DDSURFACEDESC ddsd; | 1688 LPDIRECTDRAWSURFACE3 dd_surface3; |
1642 HRESULT result; | 1689 DDSURFACEDESC ddsd; |
1643 | 1690 HRESULT result; |
1644 /* Clear the hardware flag, in case we fail */ | 1691 |
1645 surface->flags &= ~flag; | 1692 /* Clear the hardware flag, in case we fail */ |
1646 | 1693 surface->flags &= ~flag; |
1647 /* Allocate the hardware acceleration data */ | 1694 |
1648 surface->hwdata = (struct private_hwdata *) | 1695 /* Allocate the hardware acceleration data */ |
1649 SDL_malloc(sizeof(*surface->hwdata)); | 1696 surface->hwdata = (struct private_hwdata *) |
1650 if ( surface->hwdata == NULL ) { | 1697 SDL_malloc (sizeof (*surface->hwdata)); |
1651 SDL_OutOfMemory(); | 1698 if (surface->hwdata == NULL) { |
1652 return(-1); | 1699 SDL_OutOfMemory (); |
1653 } | 1700 return (-1); |
1654 dd_surface3 = NULL; | 1701 } |
1655 | 1702 dd_surface3 = NULL; |
1656 /* Set up the surface description */ | 1703 |
1657 SDL_memset(&ddsd, 0, sizeof(ddsd)); | 1704 /* Set up the surface description */ |
1658 ddsd.dwSize = sizeof(ddsd); | 1705 SDL_memset (&ddsd, 0, sizeof (ddsd)); |
1659 ddsd.dwFlags = (DDSD_WIDTH|DDSD_HEIGHT|DDSD_CAPS| | 1706 ddsd.dwSize = sizeof (ddsd); |
1660 DDSD_PITCH|DDSD_PIXELFORMAT); | 1707 ddsd.dwFlags = (DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | |
1661 ddsd.dwWidth = surface->w; | 1708 DDSD_PITCH | DDSD_PIXELFORMAT); |
1662 ddsd.dwHeight= surface->h; | 1709 ddsd.dwWidth = surface->w; |
1710 ddsd.dwHeight = surface->h; | |
1663 #if defined(NONAMELESSUNION) | 1711 #if defined(NONAMELESSUNION) |
1664 ddsd.u1.lPitch = surface->pitch; | 1712 ddsd.u1.lPitch = surface->pitch; |
1665 #else | 1713 #else |
1666 ddsd.lPitch = surface->pitch; | 1714 ddsd.lPitch = surface->pitch; |
1667 #endif | 1715 #endif |
1668 if ( (flag & SDL_HWSURFACE) == SDL_HWSURFACE ) { | 1716 if ((flag & SDL_HWSURFACE) == SDL_HWSURFACE) { |
1669 ddsd.ddsCaps.dwCaps = | 1717 ddsd.ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY); |
1670 (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY); | 1718 } else { |
1671 } else { | 1719 ddsd.ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY); |
1672 ddsd.ddsCaps.dwCaps = | 1720 } |
1673 (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); | 1721 ddsd.ddpfPixelFormat.dwSize = sizeof (ddsd.ddpfPixelFormat); |
1674 } | 1722 ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; |
1675 ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat); | 1723 if (surface->format->palette) { |
1676 ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; | 1724 ddsd.ddpfPixelFormat.dwFlags |= DDPF_PALETTEINDEXED8; |
1677 if ( surface->format->palette ) { | 1725 } |
1678 ddsd.ddpfPixelFormat.dwFlags |= DDPF_PALETTEINDEXED8; | |
1679 } | |
1680 #if defined(NONAMELESSUNION) | 1726 #if defined(NONAMELESSUNION) |
1681 ddsd.ddpfPixelFormat.u1.dwRGBBitCount = surface->format->BitsPerPixel; | 1727 ddsd.ddpfPixelFormat.u1.dwRGBBitCount = surface->format->BitsPerPixel; |
1682 ddsd.ddpfPixelFormat.u2.dwRBitMask = surface->format->Rmask; | 1728 ddsd.ddpfPixelFormat.u2.dwRBitMask = surface->format->Rmask; |
1683 ddsd.ddpfPixelFormat.u3.dwGBitMask = surface->format->Gmask; | 1729 ddsd.ddpfPixelFormat.u3.dwGBitMask = surface->format->Gmask; |
1684 ddsd.ddpfPixelFormat.u4.dwBBitMask = surface->format->Bmask; | 1730 ddsd.ddpfPixelFormat.u4.dwBBitMask = surface->format->Bmask; |
1685 #else | 1731 #else |
1686 ddsd.ddpfPixelFormat.dwRGBBitCount = surface->format->BitsPerPixel; | 1732 ddsd.ddpfPixelFormat.dwRGBBitCount = surface->format->BitsPerPixel; |
1687 ddsd.ddpfPixelFormat.dwRBitMask = surface->format->Rmask; | 1733 ddsd.ddpfPixelFormat.dwRBitMask = surface->format->Rmask; |
1688 ddsd.ddpfPixelFormat.dwGBitMask = surface->format->Gmask; | 1734 ddsd.ddpfPixelFormat.dwGBitMask = surface->format->Gmask; |
1689 ddsd.ddpfPixelFormat.dwBBitMask = surface->format->Bmask; | 1735 ddsd.ddpfPixelFormat.dwBBitMask = surface->format->Bmask; |
1690 #endif | 1736 #endif |
1691 | 1737 |
1692 /* Create the DirectDraw video surface */ | 1738 /* Create the DirectDraw video surface */ |
1693 if ( requested != NULL ) { | 1739 if (requested != NULL) { |
1694 dd_surface3 = requested; | 1740 dd_surface3 = requested; |
1695 } else { | 1741 } else { |
1696 result = IDirectDraw2_CreateSurface(ddraw2, | 1742 result = IDirectDraw2_CreateSurface (ddraw2, |
1697 &ddsd, &dd_surface1, NULL); | 1743 &ddsd, &dd_surface1, NULL); |
1698 if ( result != DD_OK ) { | 1744 if (result != DD_OK) { |
1699 SetDDerror("DirectDraw2::CreateSurface", result); | 1745 SetDDerror ("DirectDraw2::CreateSurface", result); |
1700 goto error_end; | 1746 goto error_end; |
1701 } | 1747 } |
1702 result = IDirectDrawSurface_QueryInterface(dd_surface1, | 1748 result = IDirectDrawSurface_QueryInterface (dd_surface1, |
1703 &IID_IDirectDrawSurface3, (LPVOID *)&dd_surface3); | 1749 &IID_IDirectDrawSurface3, |
1704 IDirectDrawSurface_Release(dd_surface1); | 1750 (LPVOID *) & dd_surface3); |
1705 if ( result != DD_OK ) { | 1751 IDirectDrawSurface_Release (dd_surface1); |
1706 SetDDerror("DirectDrawSurface::QueryInterface", result); | 1752 if (result != DD_OK) { |
1707 goto error_end; | 1753 SetDDerror ("DirectDrawSurface::QueryInterface", result); |
1708 } | 1754 goto error_end; |
1709 } | 1755 } |
1710 | 1756 } |
1711 if ( (flag & SDL_HWSURFACE) == SDL_HWSURFACE ) { | 1757 |
1712 /* Check to see whether the surface actually ended up | 1758 if ((flag & SDL_HWSURFACE) == SDL_HWSURFACE) { |
1713 in video memory, and fail if not. We expect the | 1759 /* Check to see whether the surface actually ended up |
1714 surfaces we create here to actually be in hardware! | 1760 in video memory, and fail if not. We expect the |
1715 */ | 1761 surfaces we create here to actually be in hardware! |
1716 result = IDirectDrawSurface3_GetCaps(dd_surface3,&ddsd.ddsCaps); | 1762 */ |
1717 if ( result != DD_OK ) { | 1763 result = IDirectDrawSurface3_GetCaps (dd_surface3, &ddsd.ddsCaps); |
1718 SetDDerror("DirectDrawSurface3::GetCaps", result); | 1764 if (result != DD_OK) { |
1719 goto error_end; | 1765 SetDDerror ("DirectDrawSurface3::GetCaps", result); |
1720 } | 1766 goto error_end; |
1721 if ( (ddsd.ddsCaps.dwCaps&DDSCAPS_VIDEOMEMORY) != | 1767 } |
1722 DDSCAPS_VIDEOMEMORY ) { | 1768 if ((ddsd.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) != |
1723 SDL_SetError("No room in video memory"); | 1769 DDSCAPS_VIDEOMEMORY) { |
1724 goto error_end; | 1770 SDL_SetError ("No room in video memory"); |
1725 } | 1771 goto error_end; |
1726 } else { | 1772 } |
1727 /* Try to hook our surface memory */ | 1773 } else { |
1728 ddsd.dwFlags = DDSD_LPSURFACE; | 1774 /* Try to hook our surface memory */ |
1729 ddsd.lpSurface = surface->pixels; | 1775 ddsd.dwFlags = DDSD_LPSURFACE; |
1730 result = IDirectDrawSurface3_SetSurfaceDesc(dd_surface3, | 1776 ddsd.lpSurface = surface->pixels; |
1731 &ddsd, 0); | 1777 result = IDirectDrawSurface3_SetSurfaceDesc (dd_surface3, &ddsd, 0); |
1732 if ( result != DD_OK ) { | 1778 if (result != DD_OK) { |
1733 SetDDerror("DirectDraw2::SetSurfaceDesc", result); | 1779 SetDDerror ("DirectDraw2::SetSurfaceDesc", result); |
1734 goto error_end; | 1780 goto error_end; |
1735 } | 1781 } |
1736 | 1782 |
1737 } | 1783 } |
1738 | 1784 |
1739 /* Make sure the surface format was set properly */ | 1785 /* Make sure the surface format was set properly */ |
1740 SDL_memset(&ddsd, 0, sizeof(ddsd)); | 1786 SDL_memset (&ddsd, 0, sizeof (ddsd)); |
1741 ddsd.dwSize = sizeof(ddsd); | 1787 ddsd.dwSize = sizeof (ddsd); |
1742 result = IDirectDrawSurface3_Lock(dd_surface3, NULL, | 1788 result = IDirectDrawSurface3_Lock (dd_surface3, NULL, |
1743 &ddsd, (DDLOCK_NOSYSLOCK|DDLOCK_WAIT), NULL); | 1789 &ddsd, |
1744 if ( result != DD_OK ) { | 1790 (DDLOCK_NOSYSLOCK | DDLOCK_WAIT), |
1745 SetDDerror("DirectDrawSurface3::Lock", result); | 1791 NULL); |
1746 goto error_end; | 1792 if (result != DD_OK) { |
1747 } | 1793 SetDDerror ("DirectDrawSurface3::Lock", result); |
1748 IDirectDrawSurface3_Unlock(dd_surface3, NULL); | 1794 goto error_end; |
1749 | 1795 } |
1750 if ( (flag & SDL_HWSURFACE) == SDL_SWSURFACE ) { | 1796 IDirectDrawSurface3_Unlock (dd_surface3, NULL); |
1751 if ( ddsd.lpSurface != surface->pixels ) { | 1797 |
1752 SDL_SetError("DDraw didn't use SDL surface memory"); | 1798 if ((flag & SDL_HWSURFACE) == SDL_SWSURFACE) { |
1753 goto error_end; | 1799 if (ddsd.lpSurface != surface->pixels) { |
1754 } | 1800 SDL_SetError ("DDraw didn't use SDL surface memory"); |
1755 if ( | 1801 goto error_end; |
1802 } | |
1803 if ( | |
1756 #if defined(NONAMELESSUNION) | 1804 #if defined(NONAMELESSUNION) |
1757 ddsd.u1.lPitch | 1805 ddsd.u1.lPitch |
1758 #else | 1806 #else |
1759 ddsd.lPitch | 1807 ddsd.lPitch |
1760 #endif | 1808 #endif |
1761 != (LONG)surface->pitch ) { | 1809 != (LONG) surface->pitch) { |
1762 SDL_SetError("DDraw created surface with wrong pitch"); | 1810 SDL_SetError ("DDraw created surface with wrong pitch"); |
1763 goto error_end; | 1811 goto error_end; |
1764 } | 1812 } |
1765 } else { | 1813 } else { |
1766 #if defined(NONAMELESSUNION) | 1814 #if defined(NONAMELESSUNION) |
1767 surface->pitch = (Uint16)ddsd.u1.lPitch; | 1815 surface->pitch = (Uint16) ddsd.u1.lPitch; |
1768 #else | 1816 #else |
1769 surface->pitch = (Uint16)ddsd.lPitch; | 1817 surface->pitch = (Uint16) ddsd.lPitch; |
1770 #endif | 1818 #endif |
1771 } | 1819 } |
1772 #if defined(NONAMELESSUNION) | 1820 #if defined(NONAMELESSUNION) |
1773 if ( (ddsd.ddpfPixelFormat.u1.dwRGBBitCount != | 1821 if ((ddsd.ddpfPixelFormat.u1.dwRGBBitCount != |
1774 surface->format->BitsPerPixel) || | 1822 surface->format->BitsPerPixel) || |
1775 (ddsd.ddpfPixelFormat.u2.dwRBitMask != surface->format->Rmask) || | 1823 (ddsd.ddpfPixelFormat.u2.dwRBitMask != surface->format->Rmask) || |
1776 (ddsd.ddpfPixelFormat.u3.dwGBitMask != surface->format->Gmask) || | 1824 (ddsd.ddpfPixelFormat.u3.dwGBitMask != surface->format->Gmask) || |
1777 (ddsd.ddpfPixelFormat.u4.dwBBitMask != surface->format->Bmask) ){ | 1825 (ddsd.ddpfPixelFormat.u4.dwBBitMask != surface->format->Bmask)) { |
1778 #else | 1826 #else |
1779 if ( (ddsd.ddpfPixelFormat.dwRGBBitCount != | 1827 if ((ddsd.ddpfPixelFormat.dwRGBBitCount != |
1780 surface->format->BitsPerPixel) || | 1828 surface->format->BitsPerPixel) || |
1781 (ddsd.ddpfPixelFormat.dwRBitMask != surface->format->Rmask) || | 1829 (ddsd.ddpfPixelFormat.dwRBitMask != surface->format->Rmask) || |
1782 (ddsd.ddpfPixelFormat.dwGBitMask != surface->format->Gmask) || | 1830 (ddsd.ddpfPixelFormat.dwGBitMask != surface->format->Gmask) || |
1783 (ddsd.ddpfPixelFormat.dwBBitMask != surface->format->Bmask) ){ | 1831 (ddsd.ddpfPixelFormat.dwBBitMask != surface->format->Bmask)) { |
1784 #endif | 1832 #endif |
1785 SDL_SetError("DDraw didn't use SDL surface description"); | 1833 SDL_SetError ("DDraw didn't use SDL surface description"); |
1786 goto error_end; | 1834 goto error_end; |
1787 } | 1835 } |
1788 if ( (ddsd.dwWidth != (DWORD)surface->w) || | 1836 if ((ddsd.dwWidth != (DWORD) surface->w) || |
1789 (ddsd.dwHeight != (DWORD)surface->h) ) { | 1837 (ddsd.dwHeight != (DWORD) surface->h)) { |
1790 SDL_SetError("DDraw created surface with wrong size"); | 1838 SDL_SetError ("DDraw created surface with wrong size"); |
1791 goto error_end; | 1839 goto error_end; |
1792 } | 1840 } |
1793 | 1841 |
1794 /* Set the surface private data */ | 1842 /* Set the surface private data */ |
1795 surface->flags |= flag; | 1843 surface->flags |= flag; |
1796 surface->hwdata->dd_surface = dd_surface3; | 1844 surface->hwdata->dd_surface = dd_surface3; |
1797 if ( (surface->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF ) { | 1845 if ((surface->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF) { |
1798 LPDIRECTDRAWSURFACE3 dd_writebuf; | 1846 LPDIRECTDRAWSURFACE3 dd_writebuf; |
1799 | 1847 |
1800 ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; | 1848 ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; |
1801 result = IDirectDrawSurface3_GetAttachedSurface(dd_surface3, | 1849 result = IDirectDrawSurface3_GetAttachedSurface (dd_surface3, |
1802 &ddsd.ddsCaps, &dd_writebuf); | 1850 &ddsd.ddsCaps, |
1803 if ( result != DD_OK ) { | 1851 &dd_writebuf); |
1804 SetDDerror("DirectDrawSurface3::GetAttachedSurface", | 1852 if (result != DD_OK) { |
1805 result); | 1853 SetDDerror ("DirectDrawSurface3::GetAttachedSurface", result); |
1806 } else { | 1854 } else { |
1807 dd_surface3 = dd_writebuf; | 1855 dd_surface3 = dd_writebuf; |
1808 } | 1856 } |
1809 } | 1857 } |
1810 surface->hwdata->dd_writebuf = dd_surface3; | 1858 surface->hwdata->dd_writebuf = dd_surface3; |
1811 | 1859 |
1812 /* We're ready to go! */ | 1860 /* We're ready to go! */ |
1813 return(0); | 1861 return (0); |
1814 | 1862 |
1815 /* Okay, so goto's are cheesy, but there are so many possible | 1863 /* Okay, so goto's are cheesy, but there are so many possible |
1816 errors in this function, and the cleanup is the same in | 1864 errors in this function, and the cleanup is the same in |
1817 every single case. Is there a better way, other than deeply | 1865 every single case. Is there a better way, other than deeply |
1818 nesting the code? | 1866 nesting the code? |
1819 */ | 1867 */ |
1820 error_end: | 1868 error_end: |
1821 if ( (dd_surface3 != NULL) && (dd_surface3 != requested) ) { | 1869 if ((dd_surface3 != NULL) && (dd_surface3 != requested)) { |
1822 IDirectDrawSurface_Release(dd_surface3); | 1870 IDirectDrawSurface_Release (dd_surface3); |
1823 } | 1871 } |
1824 SDL_free(surface->hwdata); | 1872 SDL_free (surface->hwdata); |
1825 surface->hwdata = NULL; | 1873 surface->hwdata = NULL; |
1826 return(-1); | 1874 return (-1); |
1827 } | 1875 } |
1828 | 1876 |
1829 static int DX5_AllocHWSurface(_THIS, SDL_Surface *surface) | 1877 static int |
1830 { | 1878 DX5_AllocHWSurface (_THIS, SDL_Surface * surface) |
1831 /* DDraw limitation -- you need to set cooperative level first */ | 1879 { |
1832 if ( SDL_primary == NULL ) { | 1880 /* DDraw limitation -- you need to set cooperative level first */ |
1833 SDL_SetError("You must set a non-GL video mode first"); | 1881 if (SDL_primary == NULL) { |
1834 return(-1); | 1882 SDL_SetError ("You must set a non-GL video mode first"); |
1835 } | 1883 return (-1); |
1836 return(DX5_AllocDDSurface(this, surface, NULL, SDL_HWSURFACE)); | 1884 } |
1885 return (DX5_AllocDDSurface (this, surface, NULL, SDL_HWSURFACE)); | |
1837 } | 1886 } |
1838 | 1887 |
1839 #ifdef DDRAW_DEBUG | 1888 #ifdef DDRAW_DEBUG |
1840 void PrintSurface(char *title, LPDIRECTDRAWSURFACE3 surface, Uint32 flags) | 1889 void |
1841 { | 1890 PrintSurface (char *title, LPDIRECTDRAWSURFACE3 surface, Uint32 flags) |
1842 DDSURFACEDESC ddsd; | 1891 { |
1843 | 1892 DDSURFACEDESC ddsd; |
1844 /* Lock and load! */ | 1893 |
1845 SDL_memset(&ddsd, 0, sizeof(ddsd)); | 1894 /* Lock and load! */ |
1846 ddsd.dwSize = sizeof(ddsd); | 1895 SDL_memset (&ddsd, 0, sizeof (ddsd)); |
1847 if ( IDirectDrawSurface3_Lock(surface, NULL, &ddsd, | 1896 ddsd.dwSize = sizeof (ddsd); |
1848 (DDLOCK_NOSYSLOCK|DDLOCK_WAIT), NULL) != DD_OK ) { | 1897 if (IDirectDrawSurface3_Lock (surface, NULL, &ddsd, |
1849 return; | 1898 (DDLOCK_NOSYSLOCK | DDLOCK_WAIT), |
1850 } | 1899 NULL) != DD_OK) { |
1851 IDirectDrawSurface3_Unlock(surface, NULL); | 1900 return; |
1852 | 1901 } |
1853 fprintf(stderr, "%s:\n", title); | 1902 IDirectDrawSurface3_Unlock (surface, NULL); |
1854 fprintf(stderr, "\tSize: %dx%d in %s at %ld bpp (pitch = %ld)\n", | 1903 |
1855 ddsd.dwWidth, ddsd.dwHeight, | 1904 fprintf (stderr, "%s:\n", title); |
1856 (flags & SDL_HWSURFACE) ? "hardware" : "software", | 1905 fprintf (stderr, "\tSize: %dx%d in %s at %ld bpp (pitch = %ld)\n", |
1906 ddsd.dwWidth, ddsd.dwHeight, | |
1907 (flags & SDL_HWSURFACE) ? "hardware" : "software", | |
1857 #if defined(NONAMELESSUNION) | 1908 #if defined(NONAMELESSUNION) |
1858 ddsd.ddpfPixelFormat.u1.dwRGBBitCount, ddsd.u1.lPitch); | 1909 ddsd.ddpfPixelFormat.u1.dwRGBBitCount, ddsd.u1.lPitch); |
1859 #else | 1910 #else |
1860 ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.lPitch); | 1911 ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.lPitch); |
1861 #endif | 1912 #endif |
1862 fprintf(stderr, "\tR = 0x%X, G = 0x%X, B = 0x%X\n", | 1913 fprintf (stderr, "\tR = 0x%X, G = 0x%X, B = 0x%X\n", |
1863 #if defined(NONAMELESSUNION) | 1914 #if defined(NONAMELESSUNION) |
1864 ddsd.ddpfPixelFormat.u2.dwRBitMask, | 1915 ddsd.ddpfPixelFormat.u2.dwRBitMask, |
1865 ddsd.ddpfPixelFormat.u3.dwGBitMask, | 1916 ddsd.ddpfPixelFormat.u3.dwGBitMask, |
1866 ddsd.ddpfPixelFormat.u4.dwBBitMask); | 1917 ddsd.ddpfPixelFormat.u4.dwBBitMask); |
1867 #else | 1918 #else |
1868 ddsd.ddpfPixelFormat.dwRBitMask, | 1919 ddsd.ddpfPixelFormat.dwRBitMask, |
1869 ddsd.ddpfPixelFormat.dwGBitMask, | 1920 ddsd.ddpfPixelFormat.dwGBitMask, |
1870 ddsd.ddpfPixelFormat.dwBBitMask); | 1921 ddsd.ddpfPixelFormat.dwBBitMask); |
1871 #endif | 1922 #endif |
1872 } | 1923 } |
1873 #endif /* DDRAW_DEBUG */ | 1924 #endif /* DDRAW_DEBUG */ |
1874 | 1925 |
1875 static int DX5_HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, | 1926 static int |
1876 SDL_Surface *dst, SDL_Rect *dstrect) | 1927 DX5_HWAccelBlit (SDL_Surface * src, SDL_Rect * srcrect, |
1877 { | 1928 SDL_Surface * dst, SDL_Rect * dstrect) |
1878 LPDIRECTDRAWSURFACE3 src_surface; | 1929 { |
1879 LPDIRECTDRAWSURFACE3 dst_surface; | 1930 LPDIRECTDRAWSURFACE3 src_surface; |
1880 DWORD flags; | 1931 LPDIRECTDRAWSURFACE3 dst_surface; |
1881 RECT rect; | 1932 DWORD flags; |
1882 HRESULT result; | 1933 RECT rect; |
1883 | 1934 HRESULT result; |
1884 /* Set it up.. the desination must have a DDRAW surface */ | 1935 |
1885 src_surface = src->hwdata->dd_writebuf; | 1936 /* Set it up.. the desination must have a DDRAW surface */ |
1886 dst_surface = dst->hwdata->dd_writebuf; | 1937 src_surface = src->hwdata->dd_writebuf; |
1887 rect.top = (LONG)srcrect->y; | 1938 dst_surface = dst->hwdata->dd_writebuf; |
1888 rect.bottom = (LONG)srcrect->y+srcrect->h; | 1939 rect.top = (LONG) srcrect->y; |
1889 rect.left = (LONG)srcrect->x; | 1940 rect.bottom = (LONG) srcrect->y + srcrect->h; |
1890 rect.right = (LONG)srcrect->x+srcrect->w; | 1941 rect.left = (LONG) srcrect->x; |
1891 if ( (src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY ) | 1942 rect.right = (LONG) srcrect->x + srcrect->w; |
1892 flags = DDBLTFAST_SRCCOLORKEY; | 1943 if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) |
1893 else | 1944 flags = DDBLTFAST_SRCCOLORKEY; |
1894 flags = DDBLTFAST_NOCOLORKEY; | 1945 else |
1895 /* FIXME: We can remove this flag for _really_ fast blit queuing, | 1946 flags = DDBLTFAST_NOCOLORKEY; |
1896 but it will affect the return values of locks and flips. | 1947 /* FIXME: We can remove this flag for _really_ fast blit queuing, |
1897 */ | 1948 but it will affect the return values of locks and flips. |
1898 flags |= DDBLTFAST_WAIT; | 1949 */ |
1899 | 1950 flags |= DDBLTFAST_WAIT; |
1900 /* Do the blit! */ | 1951 |
1901 result = IDirectDrawSurface3_BltFast(dst_surface, | 1952 /* Do the blit! */ |
1902 dstrect->x, dstrect->y, src_surface, &rect, flags); | 1953 result = IDirectDrawSurface3_BltFast (dst_surface, |
1903 if ( result != DD_OK ) { | 1954 dstrect->x, dstrect->y, src_surface, |
1904 if ( result == DDERR_SURFACELOST ) { | 1955 &rect, flags); |
1905 result = IDirectDrawSurface3_Restore(src_surface); | 1956 if (result != DD_OK) { |
1906 result = IDirectDrawSurface3_Restore(dst_surface); | 1957 if (result == DDERR_SURFACELOST) { |
1907 /* The surfaces need to be reloaded with artwork */ | 1958 result = IDirectDrawSurface3_Restore (src_surface); |
1908 SDL_SetError("Blit surfaces were lost, reload them"); | 1959 result = IDirectDrawSurface3_Restore (dst_surface); |
1909 return(-2); | 1960 /* The surfaces need to be reloaded with artwork */ |
1910 } | 1961 SDL_SetError ("Blit surfaces were lost, reload them"); |
1911 SetDDerror("IDirectDrawSurface3::BltFast", result); | 1962 return (-2); |
1963 } | |
1964 SetDDerror ("IDirectDrawSurface3::BltFast", result); | |
1912 #ifdef DDRAW_DEBUG | 1965 #ifdef DDRAW_DEBUG |
1913 fprintf(stderr, "Original dest rect: %dx%d at %d,%d\n", dstrect->w, dstrect->h, dstrect->x, dstrect->y); | 1966 fprintf (stderr, "Original dest rect: %dx%d at %d,%d\n", dstrect->w, |
1914 fprintf(stderr, "HW accelerated %sblit to from 0x%p to 0x%p at (%d,%d)\n", | 1967 dstrect->h, dstrect->x, dstrect->y); |
1915 (src->flags & SDL_SRCCOLORKEY) ? "colorkey " : "", src, dst, | 1968 fprintf (stderr, |
1916 dstrect->x, dstrect->y); | 1969 "HW accelerated %sblit to from 0x%p to 0x%p at (%d,%d)\n", |
1917 PrintSurface("SRC", src_surface, src->flags); | 1970 (src->flags & SDL_SRCCOLORKEY) ? "colorkey " : "", src, |
1918 PrintSurface("DST", dst_surface, dst->flags); | 1971 dst, dstrect->x, dstrect->y); |
1919 fprintf(stderr, "Source rectangle: (%d,%d) - (%d,%d)\n", | 1972 PrintSurface ("SRC", src_surface, src->flags); |
1920 rect.left, rect.top, rect.right, rect.bottom); | 1973 PrintSurface ("DST", dst_surface, dst->flags); |
1921 #endif | 1974 fprintf (stderr, "Source rectangle: (%d,%d) - (%d,%d)\n", |
1922 /* Unexpected error, fall back to software blit */ | 1975 rect.left, rect.top, rect.right, rect.bottom); |
1923 return(src->map->sw_blit(src, srcrect, dst, dstrect)); | 1976 #endif |
1924 } | 1977 /* Unexpected error, fall back to software blit */ |
1925 return(0); | 1978 return (src->map->sw_blit (src, srcrect, dst, dstrect)); |
1926 } | 1979 } |
1927 | 1980 return (0); |
1928 static int DX5_CheckHWBlit(_THIS, SDL_Surface *src, SDL_Surface *dst) | 1981 } |
1929 { | 1982 |
1930 int accelerated; | 1983 static int |
1931 | 1984 DX5_CheckHWBlit (_THIS, SDL_Surface * src, SDL_Surface * dst) |
1932 /* We need to have a DDraw surface for HW blits */ | 1985 { |
1933 if ( (src->flags & SDL_HWSURFACE) == SDL_SWSURFACE ) { | 1986 int accelerated; |
1934 /* Allocate a DDraw surface for the blit */ | 1987 |
1935 if ( src->hwdata == NULL ) { | 1988 /* We need to have a DDraw surface for HW blits */ |
1936 DX5_AllocDDSurface(this, src, NULL, SDL_SWSURFACE); | 1989 if ((src->flags & SDL_HWSURFACE) == SDL_SWSURFACE) { |
1937 } | 1990 /* Allocate a DDraw surface for the blit */ |
1938 } | 1991 if (src->hwdata == NULL) { |
1939 if ( src->hwdata == NULL ) { | 1992 DX5_AllocDDSurface (this, src, NULL, SDL_SWSURFACE); |
1940 return(0); | 1993 } |
1941 } | 1994 } |
1942 | 1995 if (src->hwdata == NULL) { |
1943 /* Set initial acceleration on */ | 1996 return (0); |
1944 src->flags |= SDL_HWACCEL; | 1997 } |
1945 | 1998 |
1946 /* Set the surface attributes */ | 1999 /* Set initial acceleration on */ |
1947 if ( (src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY ) { | 2000 src->flags |= SDL_HWACCEL; |
1948 if ( DX5_SetHWColorKey(this, src, src->format->colorkey) < 0 ) { | 2001 |
1949 src->flags &= ~SDL_HWACCEL; | 2002 /* Set the surface attributes */ |
1950 } | 2003 if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) { |
1951 } | 2004 if (DX5_SetHWColorKey (this, src, src->format->colorkey) < 0) { |
1952 if ( (src->flags & SDL_SRCALPHA) == SDL_SRCALPHA ) { | 2005 src->flags &= ~SDL_HWACCEL; |
1953 if ( DX5_SetHWAlpha(this, src, src->format->alpha) < 0 ) { | 2006 } |
1954 src->flags &= ~SDL_HWACCEL; | 2007 } |
1955 } | 2008 if ((src->flags & SDL_SRCALPHA) == SDL_SRCALPHA) { |
1956 } | 2009 if (DX5_SetHWAlpha (this, src, src->format->alpha) < 0) { |
1957 | 2010 src->flags &= ~SDL_HWACCEL; |
1958 /* Check to see if final surface blit is accelerated */ | 2011 } |
1959 accelerated = !!(src->flags & SDL_HWACCEL); | 2012 } |
1960 if ( accelerated ) { | 2013 |
2014 /* Check to see if final surface blit is accelerated */ | |
2015 accelerated = !!(src->flags & SDL_HWACCEL); | |
2016 if (accelerated) { | |
1961 #ifdef DDRAW_DEBUG | 2017 #ifdef DDRAW_DEBUG |
1962 fprintf(stderr, "Setting accelerated blit on 0x%p\n", src); | 2018 fprintf (stderr, "Setting accelerated blit on 0x%p\n", src); |
1963 #endif | 2019 #endif |
1964 src->map->hw_blit = DX5_HWAccelBlit; | 2020 src->map->hw_blit = DX5_HWAccelBlit; |
1965 } | 2021 } |
1966 return(accelerated); | 2022 return (accelerated); |
1967 } | 2023 } |
1968 | 2024 |
1969 static int DX5_FillHWRect(_THIS, SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color) | 2025 static int |
1970 { | 2026 DX5_FillHWRect (_THIS, SDL_Surface * dst, SDL_Rect * dstrect, Uint32 color) |
1971 LPDIRECTDRAWSURFACE3 dst_surface; | 2027 { |
1972 RECT area; | 2028 LPDIRECTDRAWSURFACE3 dst_surface; |
1973 DDBLTFX bltfx; | 2029 RECT area; |
1974 HRESULT result; | 2030 DDBLTFX bltfx; |
2031 HRESULT result; | |
1975 | 2032 |
1976 #ifdef DDRAW_DEBUG | 2033 #ifdef DDRAW_DEBUG |
1977 fprintf(stderr, "HW accelerated fill at (%d,%d)\n", dstrect->x, dstrect->y); | 2034 fprintf (stderr, "HW accelerated fill at (%d,%d)\n", dstrect->x, |
1978 #endif | 2035 dstrect->y); |
1979 dst_surface = dst->hwdata->dd_writebuf; | 2036 #endif |
1980 area.top = (LONG)dstrect->y; | 2037 dst_surface = dst->hwdata->dd_writebuf; |
1981 area.bottom = (LONG)dstrect->y+dstrect->h; | 2038 area.top = (LONG) dstrect->y; |
1982 area.left = (LONG)dstrect->x; | 2039 area.bottom = (LONG) dstrect->y + dstrect->h; |
1983 area.right = (LONG)dstrect->x+dstrect->w; | 2040 area.left = (LONG) dstrect->x; |
1984 bltfx.dwSize = sizeof(bltfx); | 2041 area.right = (LONG) dstrect->x + dstrect->w; |
2042 bltfx.dwSize = sizeof (bltfx); | |
1985 #if defined(NONAMELESSUNION) | 2043 #if defined(NONAMELESSUNION) |
1986 bltfx.u5.dwFillColor = color; | 2044 bltfx.u5.dwFillColor = color; |
1987 #else | 2045 #else |
1988 bltfx.dwFillColor = color; | 2046 bltfx.dwFillColor = color; |
1989 #endif | 2047 #endif |
1990 result = IDirectDrawSurface3_Blt(dst_surface, | 2048 result = IDirectDrawSurface3_Blt (dst_surface, |
1991 &area, NULL, NULL, DDBLT_COLORFILL|DDBLT_WAIT, &bltfx); | 2049 &area, NULL, NULL, |
1992 if ( result == DDERR_SURFACELOST ) { | 2050 DDBLT_COLORFILL | DDBLT_WAIT, &bltfx); |
1993 IDirectDrawSurface3_Restore(dst_surface); | 2051 if (result == DDERR_SURFACELOST) { |
1994 result = IDirectDrawSurface3_Blt(dst_surface, | 2052 IDirectDrawSurface3_Restore (dst_surface); |
1995 &area, NULL, NULL, DDBLT_COLORFILL|DDBLT_WAIT, &bltfx); | 2053 result = IDirectDrawSurface3_Blt (dst_surface, |
1996 } | 2054 &area, NULL, NULL, |
1997 if ( result != DD_OK ) { | 2055 DDBLT_COLORFILL | DDBLT_WAIT, |
1998 SetDDerror("IDirectDrawSurface3::Blt", result); | 2056 &bltfx); |
1999 return(-1); | 2057 } |
2000 } | 2058 if (result != DD_OK) { |
2001 return(0); | 2059 SetDDerror ("IDirectDrawSurface3::Blt", result); |
2002 } | 2060 return (-1); |
2003 | 2061 } |
2004 static int DX5_SetHWColorKey(_THIS, SDL_Surface *surface, Uint32 key) | 2062 return (0); |
2005 { | 2063 } |
2006 DDCOLORKEY colorkey; | 2064 |
2007 HRESULT result; | 2065 static int |
2008 | 2066 DX5_SetHWColorKey (_THIS, SDL_Surface * surface, Uint32 key) |
2009 /* Set the surface colorkey */ | 2067 { |
2010 colorkey.dwColorSpaceLowValue = key; | 2068 DDCOLORKEY colorkey; |
2011 colorkey.dwColorSpaceHighValue = key; | 2069 HRESULT result; |
2012 result = IDirectDrawSurface3_SetColorKey( | 2070 |
2013 surface->hwdata->dd_surface, DDCKEY_SRCBLT, &colorkey); | 2071 /* Set the surface colorkey */ |
2014 if ( result != DD_OK ) { | 2072 colorkey.dwColorSpaceLowValue = key; |
2015 SetDDerror("IDirectDrawSurface3::SetColorKey", result); | 2073 colorkey.dwColorSpaceHighValue = key; |
2016 return(-1); | 2074 result = |
2017 } | 2075 IDirectDrawSurface3_SetColorKey (surface->hwdata->dd_surface, |
2018 return(0); | 2076 DDCKEY_SRCBLT, &colorkey); |
2019 } | 2077 if (result != DD_OK) { |
2020 static int DX5_SetHWAlpha(_THIS, SDL_Surface *surface, Uint8 alpha) | 2078 SetDDerror ("IDirectDrawSurface3::SetColorKey", result); |
2021 { | 2079 return (-1); |
2022 return(-1); | 2080 } |
2023 } | 2081 return (0); |
2024 | 2082 } |
2025 static int DX5_LockHWSurface(_THIS, SDL_Surface *surface) | 2083 static int |
2026 { | 2084 DX5_SetHWAlpha (_THIS, SDL_Surface * surface, Uint8 alpha) |
2027 HRESULT result; | 2085 { |
2028 LPDIRECTDRAWSURFACE3 dd_surface; | 2086 return (-1); |
2029 DDSURFACEDESC ddsd; | 2087 } |
2030 | 2088 |
2031 /* Lock and load! */ | 2089 static int |
2032 dd_surface = surface->hwdata->dd_writebuf; | 2090 DX5_LockHWSurface (_THIS, SDL_Surface * surface) |
2033 SDL_memset(&ddsd, 0, sizeof(ddsd)); | 2091 { |
2034 ddsd.dwSize = sizeof(ddsd); | 2092 HRESULT result; |
2035 result = IDirectDrawSurface3_Lock(dd_surface, NULL, &ddsd, | 2093 LPDIRECTDRAWSURFACE3 dd_surface; |
2036 (DDLOCK_NOSYSLOCK|DDLOCK_WAIT), NULL); | 2094 DDSURFACEDESC ddsd; |
2037 if ( result == DDERR_SURFACELOST ) { | 2095 |
2038 result = IDirectDrawSurface3_Restore( | 2096 /* Lock and load! */ |
2039 surface->hwdata->dd_surface); | 2097 dd_surface = surface->hwdata->dd_writebuf; |
2040 result = IDirectDrawSurface3_Lock(dd_surface, NULL, &ddsd, | 2098 SDL_memset (&ddsd, 0, sizeof (ddsd)); |
2041 (DDLOCK_NOSYSLOCK|DDLOCK_WAIT), NULL); | 2099 ddsd.dwSize = sizeof (ddsd); |
2042 } | 2100 result = IDirectDrawSurface3_Lock (dd_surface, NULL, &ddsd, |
2043 if ( result != DD_OK ) { | 2101 (DDLOCK_NOSYSLOCK | DDLOCK_WAIT), |
2044 SetDDerror("DirectDrawSurface3::Lock", result); | 2102 NULL); |
2045 return(-1); | 2103 if (result == DDERR_SURFACELOST) { |
2046 } | 2104 result = IDirectDrawSurface3_Restore (surface->hwdata->dd_surface); |
2047 /* Pitch might have changed -- recalculate pitch and offset */ | 2105 result = IDirectDrawSurface3_Lock (dd_surface, NULL, &ddsd, |
2106 (DDLOCK_NOSYSLOCK | DDLOCK_WAIT), | |
2107 NULL); | |
2108 } | |
2109 if (result != DD_OK) { | |
2110 SetDDerror ("DirectDrawSurface3::Lock", result); | |
2111 return (-1); | |
2112 } | |
2113 /* Pitch might have changed -- recalculate pitch and offset */ | |
2048 #if defined(NONAMELESSUNION) | 2114 #if defined(NONAMELESSUNION) |
2049 if ( surface->pitch != ddsd.u1.lPitch ) { | 2115 if (surface->pitch != ddsd.u1.lPitch) { |
2050 surface->pitch = ddsd.u1.lPitch; | 2116 surface->pitch = ddsd.u1.lPitch; |
2051 #else | 2117 #else |
2052 if ( surface->pitch != ddsd.lPitch ) { | 2118 if (surface->pitch != ddsd.lPitch) { |
2053 surface->pitch = (Uint16)ddsd.lPitch; | 2119 surface->pitch = (Uint16) ddsd.lPitch; |
2054 #endif | 2120 #endif |
2055 surface->offset = | 2121 surface->offset = |
2056 ((ddsd.dwHeight-surface->h)/2)*surface->pitch + | 2122 ((ddsd.dwHeight - surface->h) / 2) * surface->pitch + |
2057 ((ddsd.dwWidth-surface->w)/2)* | 2123 ((ddsd.dwWidth - surface->w) / 2) * |
2058 surface->format->BytesPerPixel; | 2124 surface->format->BytesPerPixel; |
2059 } | 2125 } |
2060 surface->pixels = ddsd.lpSurface; | 2126 surface->pixels = ddsd.lpSurface; |
2061 return(0); | 2127 return (0); |
2062 } | 2128 } |
2063 | 2129 |
2064 static void DX5_UnlockHWSurface(_THIS, SDL_Surface *surface) | 2130 static void |
2065 { | 2131 DX5_UnlockHWSurface (_THIS, SDL_Surface * surface) |
2066 IDirectDrawSurface3_Unlock(surface->hwdata->dd_writebuf, NULL); | 2132 { |
2067 surface->pixels = NULL; | 2133 IDirectDrawSurface3_Unlock (surface->hwdata->dd_writebuf, NULL); |
2068 } | 2134 surface->pixels = NULL; |
2069 | 2135 } |
2070 static int DX5_FlipHWSurface(_THIS, SDL_Surface *surface) | 2136 |
2071 { | 2137 static int |
2072 HRESULT result; | 2138 DX5_FlipHWSurface (_THIS, SDL_Surface * surface) |
2073 LPDIRECTDRAWSURFACE3 dd_surface; | 2139 { |
2074 | 2140 HRESULT result; |
2075 dd_surface = surface->hwdata->dd_surface; | 2141 LPDIRECTDRAWSURFACE3 dd_surface; |
2076 | 2142 |
2077 /* to prevent big slowdown on fast computers, wait here instead of driver ring 0 code */ | 2143 dd_surface = surface->hwdata->dd_surface; |
2078 /* Dmitry Yakimov (ftech@tula.net) */ | 2144 |
2079 while(IDirectDrawSurface3_GetFlipStatus(dd_surface, DDGBS_ISBLTDONE) == DDERR_WASSTILLDRAWING); | 2145 /* to prevent big slowdown on fast computers, wait here instead of driver ring 0 code */ |
2080 | 2146 /* Dmitry Yakimov (ftech@tula.net) */ |
2081 result = IDirectDrawSurface3_Flip(dd_surface, NULL, DDFLIP_WAIT); | 2147 while (IDirectDrawSurface3_GetFlipStatus (dd_surface, DDGBS_ISBLTDONE) == |
2082 if ( result == DDERR_SURFACELOST ) { | 2148 DDERR_WASSTILLDRAWING); |
2083 result = IDirectDrawSurface3_Restore( | 2149 |
2084 surface->hwdata->dd_surface); | 2150 result = IDirectDrawSurface3_Flip (dd_surface, NULL, DDFLIP_WAIT); |
2085 while(IDirectDrawSurface3_GetFlipStatus(dd_surface, DDGBS_ISBLTDONE) == DDERR_WASSTILLDRAWING); | 2151 if (result == DDERR_SURFACELOST) { |
2086 result = IDirectDrawSurface3_Flip(dd_surface, NULL, DDFLIP_WAIT); | 2152 result = IDirectDrawSurface3_Restore (surface->hwdata->dd_surface); |
2087 } | 2153 while (IDirectDrawSurface3_GetFlipStatus |
2088 if ( result != DD_OK ) { | 2154 (dd_surface, DDGBS_ISBLTDONE) == DDERR_WASSTILLDRAWING); |
2089 SetDDerror("DirectDrawSurface3::Flip", result); | 2155 result = IDirectDrawSurface3_Flip (dd_surface, NULL, DDFLIP_WAIT); |
2090 return(-1); | 2156 } |
2091 } | 2157 if (result != DD_OK) { |
2092 return(0); | 2158 SetDDerror ("DirectDrawSurface3::Flip", result); |
2093 } | 2159 return (-1); |
2094 | 2160 } |
2095 static void DX5_FreeHWSurface(_THIS, SDL_Surface *surface) | 2161 return (0); |
2096 { | 2162 } |
2097 if ( surface->hwdata ) { | 2163 |
2098 if ( surface->hwdata->dd_surface != SDL_primary ) { | 2164 static void |
2099 IDirectDrawSurface3_Release(surface->hwdata->dd_surface); | 2165 DX5_FreeHWSurface (_THIS, SDL_Surface * surface) |
2100 } | 2166 { |
2101 SDL_free(surface->hwdata); | 2167 if (surface->hwdata) { |
2102 surface->hwdata = NULL; | 2168 if (surface->hwdata->dd_surface != SDL_primary) { |
2103 } | 2169 IDirectDrawSurface3_Release (surface->hwdata->dd_surface); |
2104 } | 2170 } |
2105 | 2171 SDL_free (surface->hwdata); |
2106 void DX5_WindowUpdate(_THIS, int numrects, SDL_Rect *rects) | 2172 surface->hwdata = NULL; |
2107 { | 2173 } |
2108 HRESULT result; | 2174 } |
2109 int i; | 2175 |
2110 RECT src, dst; | 2176 void |
2111 | 2177 DX5_WindowUpdate (_THIS, int numrects, SDL_Rect * rects) |
2112 for ( i=0; i<numrects; ++i ) { | 2178 { |
2113 src.top = (LONG)rects[i].y; | 2179 HRESULT result; |
2114 src.bottom = (LONG)rects[i].y+rects[i].h; | 2180 int i; |
2115 src.left = (LONG)rects[i].x; | 2181 RECT src, dst; |
2116 src.right = (LONG)rects[i].x+rects[i].w; | 2182 |
2117 dst.top = SDL_bounds.top+src.top; | 2183 for (i = 0; i < numrects; ++i) { |
2118 dst.left = SDL_bounds.left+src.left; | 2184 src.top = (LONG) rects[i].y; |
2119 dst.bottom = SDL_bounds.top+src.bottom; | 2185 src.bottom = (LONG) rects[i].y + rects[i].h; |
2120 dst.right = SDL_bounds.left+src.right; | 2186 src.left = (LONG) rects[i].x; |
2121 result = IDirectDrawSurface3_Blt(SDL_primary, &dst, | 2187 src.right = (LONG) rects[i].x + rects[i].w; |
2122 this->screen->hwdata->dd_surface, &src, | 2188 dst.top = SDL_bounds.top + src.top; |
2123 DDBLT_WAIT, NULL); | 2189 dst.left = SDL_bounds.left + src.left; |
2124 /* Doh! Check for lost surface and restore it */ | 2190 dst.bottom = SDL_bounds.top + src.bottom; |
2125 if ( result == DDERR_SURFACELOST ) { | 2191 dst.right = SDL_bounds.left + src.right; |
2126 IDirectDrawSurface3_Restore(SDL_primary); | 2192 result = IDirectDrawSurface3_Blt (SDL_primary, &dst, |
2127 IDirectDrawSurface3_Blt(SDL_primary, &dst, | 2193 this->screen->hwdata->dd_surface, |
2128 this->screen->hwdata->dd_surface, &src, | 2194 &src, DDBLT_WAIT, NULL); |
2129 DDBLT_WAIT, NULL); | 2195 /* Doh! Check for lost surface and restore it */ |
2130 } | 2196 if (result == DDERR_SURFACELOST) { |
2131 } | 2197 IDirectDrawSurface3_Restore (SDL_primary); |
2132 } | 2198 IDirectDrawSurface3_Blt (SDL_primary, &dst, |
2133 | 2199 this->screen->hwdata->dd_surface, |
2134 void DX5_DirectUpdate(_THIS, int numrects, SDL_Rect *rects) | 2200 &src, DDBLT_WAIT, NULL); |
2201 } | |
2202 } | |
2203 } | |
2204 | |
2205 void | |
2206 DX5_DirectUpdate (_THIS, int numrects, SDL_Rect * rects) | |
2135 { | 2207 { |
2136 } | 2208 } |
2137 | 2209 |
2138 /* Compress a full palette into the limited number of colors given to us | 2210 /* Compress a full palette into the limited number of colors given to us |
2139 by windows. | 2211 by windows. |
2159 int r = (A.r - B.r); \ | 2231 int r = (A.r - B.r); \ |
2160 int g = (A.g - B.g); \ | 2232 int g = (A.g - B.g); \ |
2161 int b = (A.b - B.b); \ | 2233 int b = (A.b - B.b); \ |
2162 (r*r + g*g + b*b); \ | 2234 (r*r + g*g + b*b); \ |
2163 }) | 2235 }) |
2164 static void DX5_CompressPalette(_THIS, SDL_Color *colors, int ncolors, int maxcolors) | 2236 static void |
2237 DX5_CompressPalette (_THIS, SDL_Color * colors, int ncolors, int maxcolors) | |
2165 { | 2238 { |
2166 #ifdef SIMPLE_COMPRESSION | 2239 #ifdef SIMPLE_COMPRESSION |
2167 int i, j; | 2240 int i, j; |
2168 #else | 2241 #else |
2169 static SDL_Color zero = { 0, 0, 0, 0 }; | 2242 static SDL_Color zero = { 0, 0, 0, 0 }; |
2170 int i, j; | 2243 int i, j; |
2171 int max, dist; | 2244 int max, dist; |
2172 int prev, next; | 2245 int prev, next; |
2173 int *pool; | 2246 int *pool; |
2174 int *seen, *order; | 2247 int *seen, *order; |
2175 #endif | 2248 #endif |
2176 | 2249 |
2177 /* Does this happen? */ | 2250 /* Does this happen? */ |
2178 if ( maxcolors > ncolors ) { | 2251 if (maxcolors > ncolors) { |
2179 maxcolors = ncolors; | 2252 maxcolors = ncolors; |
2180 } | 2253 } |
2181 | |
2182 #ifdef SIMPLE_COMPRESSION | 2254 #ifdef SIMPLE_COMPRESSION |
2183 /* Just copy the first "maxcolors" colors */ | 2255 /* Just copy the first "maxcolors" colors */ |
2184 for ( j=10, i=0; i<maxcolors; ++i, ++j ) { | 2256 for (j = 10, i = 0; i < maxcolors; ++i, ++j) { |
2185 SDL_colors[j].peRed = colors[i].r; | 2257 SDL_colors[j].peRed = colors[i].r; |
2186 SDL_colors[j].peGreen = colors[i].g; | 2258 SDL_colors[j].peGreen = colors[i].g; |
2187 SDL_colors[j].peBlue = colors[i].b; | 2259 SDL_colors[j].peBlue = colors[i].b; |
2188 } | 2260 } |
2189 #else | 2261 #else |
2190 /* Allocate memory for the arrays we use */ | 2262 /* Allocate memory for the arrays we use */ |
2191 pool = SDL_stack_alloc(int, 2*ncolors); | 2263 pool = SDL_stack_alloc (int, 2 * ncolors); |
2192 if ( pool == NULL ) { | 2264 if (pool == NULL) { |
2193 /* No worries, just return */; | 2265 /* No worries, just return */ ; |
2194 return; | 2266 return; |
2195 } | 2267 } |
2196 seen = pool; | 2268 seen = pool; |
2197 SDL_memset(seen, 0, ncolors*sizeof(int)); | 2269 SDL_memset (seen, 0, ncolors * sizeof (int)); |
2198 order = pool+ncolors; | 2270 order = pool + ncolors; |
2199 | 2271 |
2200 /* Start with the brightest color */ | 2272 /* Start with the brightest color */ |
2201 max = 0; | 2273 max = 0; |
2202 for ( i=0; i<ncolors; ++i ) { | 2274 for (i = 0; i < ncolors; ++i) { |
2203 dist = CS_CS_DIST(zero, colors[i]); | 2275 dist = CS_CS_DIST (zero, colors[i]); |
2204 if ( dist >= max ) { | 2276 if (dist >= max) { |
2205 max = dist; | 2277 max = dist; |
2206 next = i; | 2278 next = i; |
2207 } | 2279 } |
2208 } | 2280 } |
2209 j = 0; | 2281 j = 0; |
2210 order[j++] = next; | 2282 order[j++] = next; |
2211 seen[next] = 1; | 2283 seen[next] = 1; |
2212 prev = next; | 2284 prev = next; |
2213 | 2285 |
2214 /* Keep going through all the colors */ | 2286 /* Keep going through all the colors */ |
2215 while ( j < maxcolors ) { | 2287 while (j < maxcolors) { |
2216 max = 0; | 2288 max = 0; |
2217 for ( i=0; i<ncolors; ++i ) { | 2289 for (i = 0; i < ncolors; ++i) { |
2218 if ( seen[i] ) { | 2290 if (seen[i]) { |
2219 continue; | 2291 continue; |
2220 } | 2292 } |
2221 dist = CS_CS_DIST(colors[i], colors[prev]); | 2293 dist = CS_CS_DIST (colors[i], colors[prev]); |
2222 if ( dist >= max ) { | 2294 if (dist >= max) { |
2223 max = dist; | 2295 max = dist; |
2224 next = i; | 2296 next = i; |
2225 } | 2297 } |
2226 } | 2298 } |
2227 order[j++] = next; | 2299 order[j++] = next; |
2228 seen[next] = 1; | 2300 seen[next] = 1; |
2229 prev = next; | 2301 prev = next; |
2230 } | 2302 } |
2231 | 2303 |
2232 /* Compress the colors to the palette */ | 2304 /* Compress the colors to the palette */ |
2233 for ( j=10, i=0; i<maxcolors; ++i, ++j ) { | 2305 for (j = 10, i = 0; i < maxcolors; ++i, ++j) { |
2234 SDL_colors[j].peRed = colors[order[i]].r; | 2306 SDL_colors[j].peRed = colors[order[i]].r; |
2235 SDL_colors[j].peGreen = colors[order[i]].g; | 2307 SDL_colors[j].peGreen = colors[order[i]].g; |
2236 SDL_colors[j].peBlue = colors[order[i]].b; | 2308 SDL_colors[j].peBlue = colors[order[i]].b; |
2237 } | 2309 } |
2238 SDL_stack_free(pool); | 2310 SDL_stack_free (pool); |
2239 #endif /* SIMPLE_COMPRESSION */ | 2311 #endif /* SIMPLE_COMPRESSION */ |
2240 } | 2312 } |
2241 | 2313 |
2242 /* Set the system colormap in both fullscreen and windowed modes */ | 2314 /* Set the system colormap in both fullscreen and windowed modes */ |
2243 int DX5_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) | 2315 int |
2244 { | 2316 DX5_SetColors (_THIS, int firstcolor, int ncolors, SDL_Color * colors) |
2245 int i; | 2317 { |
2246 int alloct_all; | 2318 int i; |
2247 | 2319 int alloct_all; |
2248 /* Copy palette colors into display palette */ | 2320 |
2249 alloct_all = 0; | 2321 /* Copy palette colors into display palette */ |
2250 if ( SDL_palette != NULL ) { | 2322 alloct_all = 0; |
2251 if ( (this->screen->flags&SDL_FULLSCREEN) == SDL_FULLSCREEN ) { | 2323 if (SDL_palette != NULL) { |
2252 /* We can set all entries explicitly */ | 2324 if ((this->screen->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { |
2253 for ( i=0; i< ncolors; ++i ) { | 2325 /* We can set all entries explicitly */ |
2254 int j = firstcolor + i; | 2326 for (i = 0; i < ncolors; ++i) { |
2255 SDL_colors[j].peRed = colors[i].r; | 2327 int j = firstcolor + i; |
2256 SDL_colors[j].peGreen = colors[i].g; | 2328 SDL_colors[j].peRed = colors[i].r; |
2257 SDL_colors[j].peBlue = colors[i].b; | 2329 SDL_colors[j].peGreen = colors[i].g; |
2258 } | 2330 SDL_colors[j].peBlue = colors[i].b; |
2259 IDirectDrawPalette_SetEntries(SDL_palette, 0, | 2331 } |
2260 firstcolor, ncolors, &SDL_colors[firstcolor]); | 2332 IDirectDrawPalette_SetEntries (SDL_palette, 0, |
2261 alloct_all = 1; | 2333 firstcolor, ncolors, |
2262 } else { | 2334 &SDL_colors[firstcolor]); |
2263 /* Grab the 236 most diverse colors in the palette */ | 2335 alloct_all = 1; |
2264 DX5_CompressPalette(this, colors, ncolors, 236); | 2336 } else { |
2265 /* This sends an WM_PALETTECHANGED message to us */ | 2337 /* Grab the 236 most diverse colors in the palette */ |
2266 colorchange_expected = 1; | 2338 DX5_CompressPalette (this, colors, ncolors, 236); |
2267 IDirectDrawPalette_SetEntries(SDL_palette, 0, | 2339 /* This sends an WM_PALETTECHANGED message to us */ |
2268 0, 256, SDL_colors); | 2340 colorchange_expected = 1; |
2269 } | 2341 IDirectDrawPalette_SetEntries (SDL_palette, 0, |
2270 } | 2342 0, 256, SDL_colors); |
2271 return(alloct_all); | 2343 } |
2344 } | |
2345 return (alloct_all); | |
2272 } | 2346 } |
2273 | 2347 |
2274 /* Gamma code is only available on DirectX 7 and newer */ | 2348 /* Gamma code is only available on DirectX 7 and newer */ |
2275 static int DX5_SetGammaRamp(_THIS, Uint16 *ramp) | 2349 static int |
2350 DX5_SetGammaRamp (_THIS, Uint16 * ramp) | |
2276 { | 2351 { |
2277 #ifdef IDirectDrawGammaControl_SetGammaRamp | 2352 #ifdef IDirectDrawGammaControl_SetGammaRamp |
2278 LPDIRECTDRAWGAMMACONTROL gamma; | 2353 LPDIRECTDRAWGAMMACONTROL gamma; |
2279 DDGAMMARAMP gamma_ramp; | 2354 DDGAMMARAMP gamma_ramp; |
2280 HRESULT result; | 2355 HRESULT result; |
2281 #endif | 2356 #endif |
2282 | 2357 |
2283 /* In windowed or OpenGL mode, use windib gamma code */ | 2358 /* In windowed or OpenGL mode, use windib gamma code */ |
2284 if ( ! DDRAW_FULLSCREEN() ) { | 2359 if (!DDRAW_FULLSCREEN ()) { |
2285 return DIB_SetGammaRamp(this, ramp); | 2360 return DIB_SetGammaRamp (this, ramp); |
2286 } | 2361 } |
2287 | |
2288 #ifndef IDirectDrawGammaControl_SetGammaRamp | 2362 #ifndef IDirectDrawGammaControl_SetGammaRamp |
2289 SDL_SetError("SDL compiled without DirectX gamma ramp support"); | 2363 SDL_SetError ("SDL compiled without DirectX gamma ramp support"); |
2290 return -1; | 2364 return -1; |
2291 #else | 2365 #else |
2292 /* Check for a video mode! */ | 2366 /* Check for a video mode! */ |
2293 if ( ! SDL_primary ) { | 2367 if (!SDL_primary) { |
2294 SDL_SetError("A video mode must be set for gamma correction"); | 2368 SDL_SetError ("A video mode must be set for gamma correction"); |
2295 return(-1); | 2369 return (-1); |
2296 } | 2370 } |
2297 | 2371 |
2298 /* Get the gamma control object */ | 2372 /* Get the gamma control object */ |
2299 result = IDirectDrawSurface3_QueryInterface(SDL_primary, | 2373 result = IDirectDrawSurface3_QueryInterface (SDL_primary, |
2300 &IID_IDirectDrawGammaControl, (LPVOID *)&gamma); | 2374 &IID_IDirectDrawGammaControl, |
2301 if ( result != DD_OK ) { | 2375 (LPVOID *) & gamma); |
2302 SetDDerror("DirectDrawSurface3::QueryInterface(GAMMA)", result); | 2376 if (result != DD_OK) { |
2303 return(-1); | 2377 SetDDerror ("DirectDrawSurface3::QueryInterface(GAMMA)", result); |
2304 } | 2378 return (-1); |
2305 | 2379 } |
2306 /* Set up the gamma ramp */ | 2380 |
2307 SDL_memcpy(gamma_ramp.red, &ramp[0*256], 256*sizeof(*ramp)); | 2381 /* Set up the gamma ramp */ |
2308 SDL_memcpy(gamma_ramp.green, &ramp[1*256], 256*sizeof(*ramp)); | 2382 SDL_memcpy (gamma_ramp.red, &ramp[0 * 256], 256 * sizeof (*ramp)); |
2309 SDL_memcpy(gamma_ramp.blue, &ramp[2*256], 256*sizeof(*ramp)); | 2383 SDL_memcpy (gamma_ramp.green, &ramp[1 * 256], 256 * sizeof (*ramp)); |
2310 result = IDirectDrawGammaControl_SetGammaRamp(gamma, 0, &gamma_ramp); | 2384 SDL_memcpy (gamma_ramp.blue, &ramp[2 * 256], 256 * sizeof (*ramp)); |
2311 if ( result != DD_OK ) { | 2385 result = IDirectDrawGammaControl_SetGammaRamp (gamma, 0, &gamma_ramp); |
2312 SetDDerror("DirectDrawGammaControl::SetGammaRamp()", result); | 2386 if (result != DD_OK) { |
2313 } | 2387 SetDDerror ("DirectDrawGammaControl::SetGammaRamp()", result); |
2314 | 2388 } |
2315 /* Release the interface and return */ | 2389 |
2316 IDirectDrawGammaControl_Release(gamma); | 2390 /* Release the interface and return */ |
2317 return (result == DD_OK) ? 0 : -1; | 2391 IDirectDrawGammaControl_Release (gamma); |
2392 return (result == DD_OK) ? 0 : -1; | |
2318 #endif /* !IDirectDrawGammaControl_SetGammaRamp */ | 2393 #endif /* !IDirectDrawGammaControl_SetGammaRamp */ |
2319 } | 2394 } |
2320 | 2395 |
2321 static int DX5_GetGammaRamp(_THIS, Uint16 *ramp) | 2396 static int |
2397 DX5_GetGammaRamp (_THIS, Uint16 * ramp) | |
2322 { | 2398 { |
2323 #ifdef IDirectDrawGammaControl_SetGammaRamp | 2399 #ifdef IDirectDrawGammaControl_SetGammaRamp |
2324 LPDIRECTDRAWGAMMACONTROL gamma; | 2400 LPDIRECTDRAWGAMMACONTROL gamma; |
2325 DDGAMMARAMP gamma_ramp; | 2401 DDGAMMARAMP gamma_ramp; |
2326 HRESULT result; | 2402 HRESULT result; |
2327 #endif | 2403 #endif |
2328 | 2404 |
2329 /* In windowed or OpenGL mode, use windib gamma code */ | 2405 /* In windowed or OpenGL mode, use windib gamma code */ |
2330 if ( ! DDRAW_FULLSCREEN() ) { | 2406 if (!DDRAW_FULLSCREEN ()) { |
2331 return DIB_GetGammaRamp(this, ramp); | 2407 return DIB_GetGammaRamp (this, ramp); |
2332 } | 2408 } |
2333 | |
2334 #ifndef IDirectDrawGammaControl_SetGammaRamp | 2409 #ifndef IDirectDrawGammaControl_SetGammaRamp |
2335 SDL_SetError("SDL compiled without DirectX gamma ramp support"); | 2410 SDL_SetError ("SDL compiled without DirectX gamma ramp support"); |
2336 return -1; | 2411 return -1; |
2337 #else | 2412 #else |
2338 /* Check for a video mode! */ | 2413 /* Check for a video mode! */ |
2339 if ( ! SDL_primary ) { | 2414 if (!SDL_primary) { |
2340 SDL_SetError("A video mode must be set for gamma correction"); | 2415 SDL_SetError ("A video mode must be set for gamma correction"); |
2341 return(-1); | 2416 return (-1); |
2342 } | 2417 } |
2343 | 2418 |
2344 /* Get the gamma control object */ | 2419 /* Get the gamma control object */ |
2345 result = IDirectDrawSurface3_QueryInterface(SDL_primary, | 2420 result = IDirectDrawSurface3_QueryInterface (SDL_primary, |
2346 &IID_IDirectDrawGammaControl, (LPVOID *)&gamma); | 2421 &IID_IDirectDrawGammaControl, |
2347 if ( result != DD_OK ) { | 2422 (LPVOID *) & gamma); |
2348 SetDDerror("DirectDrawSurface3::QueryInterface(GAMMA)", result); | 2423 if (result != DD_OK) { |
2349 return(-1); | 2424 SetDDerror ("DirectDrawSurface3::QueryInterface(GAMMA)", result); |
2350 } | 2425 return (-1); |
2351 | 2426 } |
2352 /* Set up the gamma ramp */ | 2427 |
2353 result = IDirectDrawGammaControl_GetGammaRamp(gamma, 0, &gamma_ramp); | 2428 /* Set up the gamma ramp */ |
2354 if ( result == DD_OK ) { | 2429 result = IDirectDrawGammaControl_GetGammaRamp (gamma, 0, &gamma_ramp); |
2355 SDL_memcpy(&ramp[0*256], gamma_ramp.red, 256*sizeof(*ramp)); | 2430 if (result == DD_OK) { |
2356 SDL_memcpy(&ramp[1*256], gamma_ramp.green, 256*sizeof(*ramp)); | 2431 SDL_memcpy (&ramp[0 * 256], gamma_ramp.red, 256 * sizeof (*ramp)); |
2357 SDL_memcpy(&ramp[2*256], gamma_ramp.blue, 256*sizeof(*ramp)); | 2432 SDL_memcpy (&ramp[1 * 256], gamma_ramp.green, 256 * sizeof (*ramp)); |
2358 } else { | 2433 SDL_memcpy (&ramp[2 * 256], gamma_ramp.blue, 256 * sizeof (*ramp)); |
2359 SetDDerror("DirectDrawGammaControl::GetGammaRamp()", result); | 2434 } else { |
2360 } | 2435 SetDDerror ("DirectDrawGammaControl::GetGammaRamp()", result); |
2361 | 2436 } |
2362 /* Release the interface and return */ | 2437 |
2363 IDirectDrawGammaControl_Release(gamma); | 2438 /* Release the interface and return */ |
2364 return (result == DD_OK) ? 0 : -1; | 2439 IDirectDrawGammaControl_Release (gamma); |
2440 return (result == DD_OK) ? 0 : -1; | |
2365 #endif /* !IDirectDrawGammaControl_SetGammaRamp */ | 2441 #endif /* !IDirectDrawGammaControl_SetGammaRamp */ |
2366 } | 2442 } |
2367 | 2443 |
2368 void DX5_VideoQuit(_THIS) | 2444 void |
2369 { | 2445 DX5_VideoQuit (_THIS) |
2370 int i, j; | 2446 { |
2371 | 2447 int i, j; |
2372 /* If we're fullscreen GL, we need to reset the display */ | 2448 |
2373 if ( this->screen != NULL ) { | 2449 /* If we're fullscreen GL, we need to reset the display */ |
2450 if (this->screen != NULL) { | |
2374 #ifndef NO_CHANGEDISPLAYSETTINGS | 2451 #ifndef NO_CHANGEDISPLAYSETTINGS |
2375 if ( (this->screen->flags & (SDL_INTERNALOPENGL|SDL_FULLSCREEN)) == | 2452 if ((this->screen->flags & (SDL_INTERNALOPENGL | SDL_FULLSCREEN)) == |
2376 (SDL_INTERNALOPENGL|SDL_FULLSCREEN) ) { | 2453 (SDL_INTERNALOPENGL | SDL_FULLSCREEN)) { |
2377 ChangeDisplaySettings(NULL, 0); | 2454 ChangeDisplaySettings (NULL, 0); |
2378 ShowWindow(SDL_Window, SW_HIDE); | 2455 ShowWindow (SDL_Window, SW_HIDE); |
2379 } | 2456 } |
2380 #endif | 2457 #endif |
2381 if ( this->screen->flags & SDL_INTERNALOPENGL ) { | 2458 if (this->screen->flags & SDL_INTERNALOPENGL) { |
2382 WIN_GL_ShutDown(this); | 2459 WIN_GL_ShutDown (this); |
2383 } | 2460 } |
2384 } | 2461 } |
2385 | 2462 |
2386 /* Free any palettes we used */ | 2463 /* Free any palettes we used */ |
2387 if ( SDL_palette != NULL ) { | 2464 if (SDL_palette != NULL) { |
2388 IDirectDrawPalette_Release(SDL_palette); | 2465 IDirectDrawPalette_Release (SDL_palette); |
2389 SDL_palette = NULL; | 2466 SDL_palette = NULL; |
2390 } | 2467 } |
2391 | 2468 |
2392 /* Allow the primary surface to be freed */ | 2469 /* Allow the primary surface to be freed */ |
2393 if ( SDL_primary != NULL ) { | 2470 if (SDL_primary != NULL) { |
2394 SDL_primary = NULL; | 2471 SDL_primary = NULL; |
2395 } | 2472 } |
2396 | 2473 |
2397 /* Free video mode lists */ | 2474 /* Free video mode lists */ |
2398 for ( i=0; i<NUM_MODELISTS; ++i ) { | 2475 for (i = 0; i < NUM_MODELISTS; ++i) { |
2399 if ( SDL_modelist[i] != NULL ) { | 2476 if (SDL_modelist[i] != NULL) { |
2400 for ( j=0; SDL_modelist[i][j]; ++j ) | 2477 for (j = 0; SDL_modelist[i][j]; ++j) |
2401 SDL_free(SDL_modelist[i][j]); | 2478 SDL_free (SDL_modelist[i][j]); |
2402 SDL_free(SDL_modelist[i]); | 2479 SDL_free (SDL_modelist[i]); |
2403 SDL_modelist[i] = NULL; | 2480 SDL_modelist[i] = NULL; |
2404 } | 2481 } |
2405 } | 2482 } |
2406 | 2483 |
2407 /* Free the window */ | 2484 /* Free the window */ |
2408 DIB_QuitGamma(this); | 2485 DIB_QuitGamma (this); |
2409 if ( SDL_Window ) { | 2486 if (SDL_Window) { |
2410 DX5_DestroyWindow(this); | 2487 DX5_DestroyWindow (this); |
2411 } | 2488 } |
2412 | 2489 |
2413 /* Free our window icon */ | 2490 /* Free our window icon */ |
2414 if ( screen_icn ) { | 2491 if (screen_icn) { |
2415 DestroyIcon(screen_icn); | 2492 DestroyIcon (screen_icn); |
2416 screen_icn = NULL; | 2493 screen_icn = NULL; |
2417 } | 2494 } |
2418 } | 2495 } |
2419 | 2496 |
2420 /* Exported for the windows message loop only */ | 2497 /* Exported for the windows message loop only */ |
2421 void DX5_RealizePalette(_THIS) | 2498 void |
2422 { | 2499 DX5_RealizePalette (_THIS) |
2423 if ( SDL_palette ) { | 2500 { |
2424 IDirectDrawSurface3_SetPalette(SDL_primary, SDL_palette); | 2501 if (SDL_palette) { |
2425 } | 2502 IDirectDrawSurface3_SetPalette (SDL_primary, SDL_palette); |
2426 } | 2503 } |
2427 static void DX5_Recolor8Bit(_THIS, SDL_Surface *surface, Uint8 *mapping) | 2504 } |
2428 { | 2505 static void |
2429 int row, col; | 2506 DX5_Recolor8Bit (_THIS, SDL_Surface * surface, Uint8 * mapping) |
2430 Uint8 *pixels; | 2507 { |
2431 | 2508 int row, col; |
2432 if ( surface->w && surface->h ) { | 2509 Uint8 *pixels; |
2433 if ( (surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) { | 2510 |
2434 if ( this->LockHWSurface(this, surface) < 0 ) { | 2511 if (surface->w && surface->h) { |
2435 return; | 2512 if ((surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE) { |
2436 } | 2513 if (this->LockHWSurface (this, surface) < 0) { |
2437 } | 2514 return; |
2438 for ( row=0; row<surface->h; ++row ) { | 2515 } |
2439 pixels = (Uint8 *)surface->pixels+row*surface->pitch; | 2516 } |
2440 for ( col=0; col<surface->w; ++col, ++pixels ) { | 2517 for (row = 0; row < surface->h; ++row) { |
2441 *pixels = mapping[*pixels]; | 2518 pixels = (Uint8 *) surface->pixels + row * surface->pitch; |
2442 } | 2519 for (col = 0; col < surface->w; ++col, ++pixels) { |
2443 } | 2520 *pixels = mapping[*pixels]; |
2444 if ( (surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) { | 2521 } |
2445 this->UnlockHWSurface(this, surface); | 2522 } |
2446 } | 2523 if ((surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE) { |
2447 SDL_UpdateRect(surface, 0, 0, 0, 0); | 2524 this->UnlockHWSurface (this, surface); |
2448 } | 2525 } |
2449 } | 2526 SDL_UpdateRect (surface, 0, 0, 0, 0); |
2450 void DX5_PaletteChanged(_THIS, HWND window) | 2527 } |
2451 { | 2528 } |
2452 SDL_Palette *palette; | 2529 void |
2453 SDL_Color *saved = NULL; | 2530 DX5_PaletteChanged (_THIS, HWND window) |
2454 HDC hdc; | 2531 { |
2455 int i; | 2532 SDL_Palette *palette; |
2456 PALETTEENTRY *entries; | 2533 SDL_Color *saved = NULL; |
2457 | 2534 HDC hdc; |
2458 /* This is true when the window is closing */ | 2535 int i; |
2459 if ( (SDL_primary == NULL) || (SDL_VideoSurface == NULL) ) | 2536 PALETTEENTRY *entries; |
2460 return; | 2537 |
2461 | 2538 /* This is true when the window is closing */ |
2462 /* We need to get the colors as they were set */ | 2539 if ((SDL_primary == NULL) || (SDL_VideoSurface == NULL)) |
2463 palette = this->physpal; | 2540 return; |
2464 if(!palette) | 2541 |
2465 palette = SDL_VideoSurface->format->palette; | 2542 /* We need to get the colors as they were set */ |
2466 if ( palette == NULL ) { /* Sometimes we don't have a palette */ | 2543 palette = this->physpal; |
2467 return; | 2544 if (!palette) |
2468 } | 2545 palette = SDL_VideoSurface->format->palette; |
2469 entries = SDL_stack_alloc(PALETTEENTRY, palette->ncolors); | 2546 if (palette == NULL) { /* Sometimes we don't have a palette */ |
2470 hdc = GetDC(window); | 2547 return; |
2471 GetSystemPaletteEntries(hdc, 0, palette->ncolors, entries); | 2548 } |
2472 ReleaseDC(window, hdc); | 2549 entries = SDL_stack_alloc (PALETTEENTRY, palette->ncolors); |
2473 if ( ! colorchange_expected ) { | 2550 hdc = GetDC (window); |
2474 saved = SDL_stack_alloc(SDL_Color, palette->ncolors); | 2551 GetSystemPaletteEntries (hdc, 0, palette->ncolors, entries); |
2475 SDL_memcpy(saved, palette->colors, | 2552 ReleaseDC (window, hdc); |
2476 palette->ncolors*sizeof(SDL_Color)); | 2553 if (!colorchange_expected) { |
2477 } | 2554 saved = SDL_stack_alloc (SDL_Color, palette->ncolors); |
2478 for ( i=0; i<palette->ncolors; ++i ) { | 2555 SDL_memcpy (saved, palette->colors, |
2479 palette->colors[i].r = entries[i].peRed; | 2556 palette->ncolors * sizeof (SDL_Color)); |
2480 palette->colors[i].g = entries[i].peGreen; | 2557 } |
2481 palette->colors[i].b = entries[i].peBlue; | 2558 for (i = 0; i < palette->ncolors; ++i) { |
2482 } | 2559 palette->colors[i].r = entries[i].peRed; |
2483 SDL_stack_free(entries); | 2560 palette->colors[i].g = entries[i].peGreen; |
2484 if ( ! colorchange_expected ) { | 2561 palette->colors[i].b = entries[i].peBlue; |
2485 Uint8 mapping[256]; | 2562 } |
2486 | 2563 SDL_stack_free (entries); |
2487 SDL_memset(mapping, 0, sizeof(mapping)); | 2564 if (!colorchange_expected) { |
2488 for ( i=0; i<palette->ncolors; ++i ) { | 2565 Uint8 mapping[256]; |
2489 mapping[i] = SDL_FindColor(palette, | 2566 |
2490 saved[i].r, saved[i].g, saved[i].b); | 2567 SDL_memset (mapping, 0, sizeof (mapping)); |
2491 } | 2568 for (i = 0; i < palette->ncolors; ++i) { |
2492 DX5_Recolor8Bit(this, SDL_VideoSurface, mapping); | 2569 mapping[i] = SDL_FindColor (palette, |
2493 SDL_stack_free(saved); | 2570 saved[i].r, saved[i].g, saved[i].b); |
2494 } | 2571 } |
2495 colorchange_expected = 0; | 2572 DX5_Recolor8Bit (this, SDL_VideoSurface, mapping); |
2496 | 2573 SDL_stack_free (saved); |
2497 /* Notify all mapped surfaces of the change */ | 2574 } |
2498 SDL_FormatChanged(SDL_VideoSurface); | 2575 colorchange_expected = 0; |
2576 | |
2577 /* Notify all mapped surfaces of the change */ | |
2578 SDL_FormatChanged (SDL_VideoSurface); | |
2499 } | 2579 } |
2500 | 2580 |
2501 /* Exported for the windows message loop only */ | 2581 /* Exported for the windows message loop only */ |
2502 void DX5_WinPAINT(_THIS, HDC hdc) | 2582 void |
2503 { | 2583 DX5_WinPAINT (_THIS, HDC hdc) |
2504 SDL_UpdateRect(SDL_PublicSurface, 0, 0, 0, 0); | 2584 { |
2505 } | 2585 SDL_UpdateRect (SDL_PublicSurface, 0, 0, 0, 0); |
2586 } | |
2587 | |
2588 /* vi: set ts=4 sw=4 expandtab: */ |