Mercurial > sdl-ios-xcode
annotate src/video/photon/SDL_ph_modes.c @ 315:3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
From: "Mike Gorchak" <mike@malva.ua>
Subject: Big QNX patch again.
Added 8bit palette emulation code for window mode with bpp>=15.
Added store/restore original palette for 8bit modes.
Added more information about photon API call fails.
Rewroten change palette code, slow but works.
Fixed bug with set caption before window was inited.
Fixed bugs with some initial state of variables.
Fixed bug with storing old video mode settings.
Fixed bug with switching to fullscreen mode and back.
Fixed few double SEGFAULTS during parachute mode.
Removed compilation warning with no PgWaitHWIdle prototype.
Removed pack of dead unusable code.
Cleanups SDL_PrivateVideoData structure, some headers.
Some code formatting.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 23 Mar 2002 20:19:44 +0000 |
parents | 2de77f7b7a28 |
children | 8e3ce997621c |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
297
f6ffac90895c
Updated copyright information for 2002
Sam Lantinga <slouken@libsdl.org>
parents:
266
diff
changeset
|
3 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
6 modify it under the terms of the GNU Library General Public | |
7 License as published by the Free Software Foundation; either | |
8 version 2 of the License, or (at your option) any later version. | |
9 | |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 Library General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU Library General Public | |
16 License along with this library; if not, write to the Free | |
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
18 | |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
204
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 #ifdef SAVE_RCSID | |
24 static char rcsid = | |
25 "@(#) $Id$"; | |
26 #endif | |
27 | |
28 #include "SDL_ph_modes_c.h" | |
29 | |
30 static unsigned long key1, key2; | |
31 static PgVideoModeInfo_t mode_info; | |
32 static PgVideoModes_t mode_list; | |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
33 |
0 | 34 /* The current list of available video modes */ |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
35 SDL_Rect SDL_modelist[PH_MAX_VIDEOMODES]; |
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
36 SDL_Rect* SDL_modearray[PH_MAX_VIDEOMODES]; |
0 | 37 |
38 static int compare_modes_by_res(const void* mode1, const void* mode2) | |
39 { | |
40 | |
41 if (PgGetVideoModeInfo(*(unsigned short*)mode1, &mode_info) < 0) | |
42 { | |
43 fprintf(stderr,"error: In compare_modes_by_res PgGetVideoModeInfo failed on mode: 0x%x\n", | |
44 *(unsigned short*)mode1); | |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
45 return 0; |
0 | 46 } |
47 key1 = mode_info.width * mode_info.height; | |
48 | |
49 if (PgGetVideoModeInfo(*(unsigned short*)mode2, &mode_info) < 0) | |
50 { | |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
51 fprintf(stderr,"error: In compare_modes_by_res PgGetVideoModeInfo failed on mode: 0x%x\n", |
0 | 52 *(unsigned short*)mode2); |
53 return 0; | |
54 } | |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
55 key2 = mode_info.width * mode_info.height; |
0 | 56 |
57 if (key1 > key2) | |
58 return 1; | |
59 else if (key1 == key2) | |
60 return 0; | |
61 else | |
62 return -1; | |
63 } | |
64 | |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
65 SDL_Rect **ph_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags) |
0 | 66 { |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
67 int i = 0; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
68 int j = 0; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
69 SDL_Rect Amodelist[PH_MAX_VIDEOMODES]; |
0 | 70 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
71 for (i=0; i<PH_MAX_VIDEOMODES; i++) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
72 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
73 SDL_modearray[i]=&SDL_modelist[i]; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
74 } |
0 | 75 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
76 if (PgGetVideoModeList( &mode_list ) < 0) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
77 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
78 fprintf(stderr,"error: PgGetVideoModeList failed\n"); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
79 return NULL; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
80 } |
0 | 81 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
82 mode_info.bits_per_pixel = 0; |
0 | 83 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
84 for (i=0; i < mode_list.num_modes; i++) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
85 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
86 if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
87 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
88 fprintf(stderr,"error: PgGetVideoModeInfo failed on mode: 0x%x\n", mode_list.modes[i]); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
89 return NULL; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
90 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
91 if(mode_info.bits_per_pixel == format->BitsPerPixel) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
92 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
93 Amodelist[j].w = mode_info.width; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
94 Amodelist[j].h = mode_info.height; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
95 Amodelist[j].x = 0; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
96 Amodelist[j].y = 0; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
97 j++; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
98 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
99 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
100 |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
101 /* reorder biggest for smallest, assume width dominates */ |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
102 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
103 for(i=0; i<j; i++) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
104 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
105 SDL_modelist[i].w = Amodelist[j - i -1].w; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
106 SDL_modelist[i].h = Amodelist[j - i -1].h; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
107 SDL_modelist[i].x = Amodelist[j - i -1].x; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
108 SDL_modelist[i].y = Amodelist[j - i -1].y; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
109 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
110 SDL_modearray[j]=NULL; |
0 | 111 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
112 return SDL_modearray; |
0 | 113 } |
114 | |
115 void ph_FreeVideoModes(_THIS) | |
116 { | |
266
c6abdda2f666
Added QNX cleanups by Mike Gorchak (thanks!)
Sam Lantinga <slouken@libsdl.org>
parents:
252
diff
changeset
|
117 return; |
0 | 118 } |
119 | |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
120 #if 0 |
0 | 121 static void set_best_resolution(_THIS, int width, int height) |
122 { | |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
123 /* warning ! dead variable use_vidmode ! */ |
0 | 124 if ( use_vidmode ) { |
125 PgDisplaySettings_t settings; | |
126 PgVideoModeInfo_t current_mode_info; | |
204
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
127 PgHWCaps_t my_hwcaps; |
0 | 128 unsigned short current_bpp; |
129 int i; | |
204
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
130 /* |
0 | 131 if (PgGetVideoMode( &settings ) < 0) |
132 { | |
133 fprintf(stderr,"error: PgGetVideoMode failed\n"); | |
134 return; | |
135 } | |
136 if (PgGetVideoModeInfo( settings.mode, ¤t_mode_info ) < 0) | |
137 { | |
138 fprintf(stderr,"error: PgGetVideoModeInfo failed\n"); | |
139 return; | |
140 } | |
204
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
141 */ |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
142 //lu_zero |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
143 if (PgGetGraphicsHWCaps(&my_hwcaps) < 0) |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
144 { |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
145 fprintf(stderr,"set_best_resolution: GetGraphicsHWCaps failed!! \n"); |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
146 //that HAVE to work |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
147 } |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
148 if (PgGetVideoModeInfo(my_hwcaps.current_video_mode, ¤t_mode_info) < 0) |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
149 { |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
150 fprintf(stderr,"set_best_resolution: PgGetVideoModeInfo failed\n"); |
62bad9a82022
Added photon fixes submitted by Luca Barbato
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
151 } |
0 | 152 current_bpp = current_mode_info.bits_per_pixel; |
153 | |
154 if (PgGetVideoModeList(&mode_list) >= 0) | |
155 { | |
156 qsort(mode_list.modes, mode_list.num_modes, sizeof(unsigned short), compare_modes_by_res); | |
157 #ifdef PH_DEBUG | |
158 printf("Available modes:\n"); | |
159 for ( i = 0; i < mode_list.num_modes; ++i ) | |
160 { | |
161 PgGetVideoModeInfo(mode_list.modes[i], &mode_info); | |
162 printf("Mode %d: %dx%d\n", i, mode_info.width, mode_info.height); | |
163 } | |
164 #endif | |
165 for ( i = mode_list.num_modes-1; i >= 0 ; --i ) | |
166 { | |
167 if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0) | |
168 { | |
169 fprintf(stderr,"error: PgGetVideoModeInfo failed\n"); | |
170 } | |
171 if ( (mode_info.width >= width) && | |
172 (mode_info.height >= height) && | |
173 (mode_info.bits_per_pixel == current_bpp) ) | |
174 break; | |
175 } | |
176 if (i >= 0) | |
177 { | |
178 if ( (mode_info.width != current_mode_info.width) || | |
179 (mode_info.height != current_mode_info.height) ) | |
180 { | |
181 settings.mode = mode_list.modes[i]; | |
182 if(PgSetVideoMode( &settings ) < 0) | |
183 { | |
184 fprintf(stderr,"error: PgSetVideoMode failed\n"); | |
185 } | |
186 } | |
187 } | |
188 } | |
189 } | |
190 } | |
191 | |
192 int ph_ResizeFullScreen(_THIS) | |
193 { | |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
194 if (currently_fullscreen) |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
195 { |
0 | 196 set_best_resolution(this, current_w, current_h); |
197 } | |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
198 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
199 return (1); |
0 | 200 } |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
201 #endif /* 0 */ |
0 | 202 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
203 /* return the mode associated with width, height and bpp */ |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
204 /* if there is no mode then zero is returned */ |
0 | 205 int get_mode(int width, int height, int bpp) |
206 { | |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
207 int i; |
0 | 208 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
209 if(width<640) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
210 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
211 width=640; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
212 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
213 if(height<480) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
214 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
215 height=480; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
216 } |
0 | 217 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
218 if (PgGetVideoModeList(&mode_list) < 0) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
219 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
220 fprintf(stderr,"error: PgGetVideoModeList failed\n"); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
221 return -1; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
222 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
223 |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
224 /* search list for exact match */ |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
225 for (i=0;i<mode_list.num_modes;i++) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
226 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
227 if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
228 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
229 fprintf(stderr,"error: PgGetVideoModeInfo failed\n"); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
230 return 0; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
231 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
232 |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
233 if ((mode_info.width == width) && |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
234 (mode_info.height == height) && |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
235 (mode_info.bits_per_pixel == bpp)) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
236 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
237 return mode_list.modes[i]; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
238 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
239 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
240 |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
241 return (i == mode_list.num_modes) ? 0 : mode_list.modes[i]; |
0 | 242 } |
243 | |
244 int get_mode_any_format(int width, int height, int bpp) | |
245 /* return the mode associated with width, height and bpp */ | |
246 /* if requested bpp is not found the mode with closest bpp is returned */ | |
247 { | |
248 int i, closest, delta, min_delta; | |
249 | |
250 if (PgGetVideoModeList( &mode_list ) < 0) | |
251 { | |
252 fprintf(stderr,"error: PgGetVideoModeList failed\n"); | |
253 return -1; | |
254 } | |
255 | |
256 qsort(mode_list.modes, mode_list.num_modes, sizeof(unsigned short), compare_modes_by_res); | |
257 for(i=0;i<mode_list.num_modes;i++) | |
258 { | |
259 if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0) | |
260 { | |
261 fprintf(stderr,"error: PgGetVideoModeInfo failed\n"); | |
262 return 0; | |
263 } | |
264 if ((mode_info.width == width) && | |
265 (mode_info.height == height)) | |
266 break; | |
267 } | |
268 if (i<mode_list.num_modes) | |
269 { | |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
270 /* get closest bpp */ |
0 | 271 closest = i++; |
272 if (mode_info.bits_per_pixel == bpp) | |
273 return mode_list.modes[ closest ]; | |
274 | |
275 min_delta = abs(mode_info.bits_per_pixel - bpp); | |
276 while(1) | |
277 { | |
278 if (PgGetVideoModeInfo(mode_list.modes[i], &mode_info) < 0) | |
279 { | |
280 fprintf(stderr,"error: PgGetVideoModeInfo failed\n"); | |
281 return 0; | |
282 } | |
283 | |
284 if ((mode_info.width != width) || | |
285 (mode_info.height != height)) | |
286 break; | |
287 else if (mode_info.bits_per_pixel == bpp) | |
288 { | |
289 closest = i; | |
290 break; | |
291 } | |
292 else | |
293 { | |
294 delta = abs(mode_info.bits_per_pixel - bpp); | |
295 if (delta < min_delta) | |
296 { | |
297 closest = i; | |
298 min_delta = delta; | |
299 } | |
300 i++; | |
301 } | |
302 } | |
303 return mode_list.modes[ closest ]; | |
304 } | |
305 else | |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
306 return 0; |
0 | 307 } |
308 | |
309 void ph_WaitMapped(_THIS); | |
310 void ph_WaitUnmapped(_THIS); | |
311 void ph_QueueEnterFullScreen(_THIS); | |
312 | |
313 int ph_ToggleFullScreen(_THIS, int on) | |
314 { | |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
315 if (currently_fullscreen) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
316 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
317 return ph_LeaveFullScreen(this); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
318 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
319 else |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
320 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
321 return ph_EnterFullScreen(this); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
322 } |
0 | 323 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
324 return 0; |
0 | 325 } |
326 | |
327 int ph_EnterFullScreen(_THIS) | |
328 { | |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
329 if (!currently_fullscreen) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
330 { |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
331 if (this->screen) |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
332 { |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
333 if ((this->screen->flags & SDL_OPENGL)==SDL_OPENGL) |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
334 { |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
335 #ifdef HAVE_OPENGL |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
336 #endif /* HAVE_OPENGL */ |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
337 return 0; |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
338 } |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
339 } |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
340 |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
341 if (OCImage.direct_context == NULL) |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
342 { |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
343 OCImage.direct_context=(PdDirectContext_t*)PdCreateDirectContext(); |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
344 } |
0 | 345 |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
346 if (!OCImage.direct_context) |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
347 { |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
348 fprintf(stderr, "ph_EnterFullScreen: Can't create direct context\n" ); |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
349 } |
0 | 350 |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
351 PdDirectStart(OCImage.direct_context); |
0 | 352 |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
353 currently_fullscreen = 1; |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
354 } |
0 | 355 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
356 return 1; |
0 | 357 } |
358 | |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
359 int ph_LeaveFullScreen(_THIS) |
0 | 360 { |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
361 PgDisplaySettings_t mymode_settings; |
0 | 362 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
363 if (currently_fullscreen) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
364 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
365 if ((this->screen->flags & SDL_OPENGL)==SDL_OPENGL) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
366 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
367 #ifdef HAVE_OPENGL |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
368 #endif /* HAVE_OPENGL */ |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
369 return 0; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
370 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
371 else |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
372 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
373 PdDirectStop(OCImage.direct_context); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
374 PdReleaseDirectContext(OCImage.direct_context); |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
375 |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
376 currently_fullscreen=0; |
0 | 377 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
378 /* Restore old video mode */ |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
379 if (old_video_mode != -1) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
380 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
381 mymode_settings.mode= (unsigned short) old_video_mode; |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
382 mymode_settings.refresh= (unsigned short) old_refresh_rate; |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
383 mymode_settings.flags= 0; |
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
384 |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
385 if (PgSetVideoMode(&mymode_settings) < 0) |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
386 { |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
387 fprintf(stderr,"error: PgSetVideoMode failed\n"); |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
388 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
389 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
390 |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
391 old_video_mode=-1; |
315
3333b6e68289
Date: Sat, 23 Mar 2002 13:53:37 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
309
diff
changeset
|
392 old_refresh_rate=-1; |
309
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
393 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
394 |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
395 } |
2de77f7b7a28
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
396 return 1; |
0 | 397 } |