… | … | ||
---|---|---|---|
190 | 190 | ||
191 | struct timer timer; | 191 | struct timer timer; |
192 | static double base; | 192 | static double base; |
193 | double timer::now = 0.; | 193 | double timer::now = 0.; |
194 | double timer::diff; | 194 | double timer::diff; |
195 | double min_frame = 1. / 60.; | ||
195 | 196 | ||
196 | void timer::frame () | 197 | void timer::frame () |
197 | { | 198 | { |
198 | struct timeval tv; | 199 | struct timeval tv; |
200 | double next; | ||
201 | |||
202 | for (;;) | ||
203 | { | ||
199 | gettimeofday (&tv, 0); | 204 | gettimeofday (&tv, 0); |
200 | 205 | ||
201 | double next = tv.tv_sec - base + tv.tv_usec / 1.e6; | 206 | next = tv.tv_sec - base + tv.tv_usec / 1.e6; |
202 | |||
203 | diff = next - now; | 207 | diff = next - now; |
208 | |||
209 | if (diff >= min_frame) | ||
210 | break; | ||
211 | |||
212 | SDL_Delay ((unsigned int)((min_frame - diff) * 1000.)); | ||
213 | } | ||
214 | |||
204 | now = next; | 215 | now = next; |
205 | } | 216 | } |
206 | 217 | ||
207 | timer::timer () | 218 | timer::timer () |
208 | { | 219 | { |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |