Mercurial > sdl-ios-xcode
comparison test/testgamma.c @ 1151:be9c9c8f6d53
Removed atexit() from most of the test programs; atexit(SDL_Quit) isn't safe
if SDL is built with a non-cdecl calling convention, and it's just generally
bad practice anyhow.
Now programs explicitly call SDL_Quit() where appropriate, wrap SDL_Quit() in
a cdecl function where it can't be avoided, and rely on the parachute where
a crash might have hit the atexit() before (these ARE test programs, after
all!).
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Wed, 28 Sep 2005 11:36:20 +0000 |
parents | 74212992fb08 |
children | 782fd950bd46 c121d94672cb |
comparison
equal
deleted
inserted
replaced
1150:7d8e1925f35b | 1151:be9c9c8f6d53 |
---|---|
5 #include <stdio.h> | 5 #include <stdio.h> |
6 #include <string.h> | 6 #include <string.h> |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include "SDL.h" | 9 #include "SDL.h" |
10 | |
11 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ | |
12 static void quit(int rc) | |
13 { | |
14 SDL_Quit(); | |
15 exit(rc); | |
16 } | |
10 | 17 |
11 /* Turn a normal gamma value into an appropriate gamma ramp */ | 18 /* Turn a normal gamma value into an appropriate gamma ramp */ |
12 void CalculateGamma(double gamma, Uint16 *ramp) | 19 void CalculateGamma(double gamma, Uint16 *ramp) |
13 { | 20 { |
14 int i, value; | 21 int i, value; |
80 | 87 |
81 /* Initialize SDL */ | 88 /* Initialize SDL */ |
82 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { | 89 if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { |
83 fprintf(stderr, | 90 fprintf(stderr, |
84 "Couldn't initialize SDL: %s\n", SDL_GetError()); | 91 "Couldn't initialize SDL: %s\n", SDL_GetError()); |
85 exit(1); | 92 return(1); |
86 } | 93 } |
87 atexit(SDL_Quit); | |
88 | 94 |
89 /* Initialize the display, always use hardware palette */ | 95 /* Initialize the display, always use hardware palette */ |
90 screen = SDL_SetVideoMode(w, h, bpp, flags | SDL_HWPALETTE); | 96 screen = SDL_SetVideoMode(w, h, bpp, flags | SDL_HWPALETTE); |
91 if ( screen == NULL ) { | 97 if ( screen == NULL ) { |
92 fprintf(stderr, "Couldn't set %dx%d video mode: %s\n", | 98 fprintf(stderr, "Couldn't set %dx%d video mode: %s\n", |
93 w, h, SDL_GetError()); | 99 w, h, SDL_GetError()); |
94 exit(1); | 100 quit(1); |
95 } | 101 } |
96 | 102 |
97 /* Set the window manager title bar */ | 103 /* Set the window manager title bar */ |
98 SDL_WM_SetCaption("SDL gamma test", "testgamma"); | 104 SDL_WM_SetCaption("SDL gamma test", "testgamma"); |
99 | 105 |
102 if ( *argv ) { | 108 if ( *argv ) { |
103 gamma = (float)atof(*argv); | 109 gamma = (float)atof(*argv); |
104 } | 110 } |
105 if ( SDL_SetGamma(gamma, gamma, gamma) < 0 ) { | 111 if ( SDL_SetGamma(gamma, gamma, gamma) < 0 ) { |
106 fprintf(stderr, "Unable to set gamma: %s\n", SDL_GetError()); | 112 fprintf(stderr, "Unable to set gamma: %s\n", SDL_GetError()); |
107 exit(1); | 113 quit(1); |
108 } | 114 } |
109 | 115 |
110 #if 0 /* This isn't supported. Integrating the gamma ramps isn't exact */ | 116 #if 0 /* This isn't supported. Integrating the gamma ramps isn't exact */ |
111 /* See what gamma was actually set */ | 117 /* See what gamma was actually set */ |
112 float real[3]; | 118 float real[3]; |
184 memset(red_ramp, i, sizeof(red_ramp)); | 190 memset(red_ramp, i, sizeof(red_ramp)); |
185 SDL_SetGammaRamp(red_ramp, NULL, NULL); | 191 SDL_SetGammaRamp(red_ramp, NULL, NULL); |
186 } | 192 } |
187 SDL_Delay(1*1000); | 193 SDL_Delay(1*1000); |
188 | 194 |
195 SDL_Quit(); | |
189 return(0); | 196 return(0); |
190 } | 197 } |