move Ticks initialization tracking to separate function and ensure it's called with SDL_VideoInit is called to init SDL instead of SDL_Init

-- why do we even allow initialization w/o calling at least SDL_Init(0) ?
This commit is contained in:
Edward Rudd 2013-05-02 21:40:59 -04:00
parent 907ac2687c
commit 33660e58c1
4 changed files with 20 additions and 6 deletions

View file

@ -32,9 +32,9 @@
/* Initialization/Cleanup routines */ /* Initialization/Cleanup routines */
#if !SDL_TIMERS_DISABLED #if !SDL_TIMERS_DISABLED
extern void SDL_StartTicks(void);
extern int SDL_TimerInit(void); extern int SDL_TimerInit(void);
extern void SDL_TimerQuit(void); extern void SDL_TimerQuit(void);
extern void SDL_InitTicks(void);
#endif #endif
#if SDL_VIDEO_DRIVER_WINDOWS #if SDL_VIDEO_DRIVER_WINDOWS
extern int SDL_HelperWindowCreate(void); extern int SDL_HelperWindowCreate(void);
@ -43,7 +43,6 @@ extern int SDL_HelperWindowDestroy(void);
/* The initialized subsystems */ /* The initialized subsystems */
static Uint32 ticks_started = 0;
static SDL_bool SDL_bInMainQuit = SDL_FALSE; static SDL_bool SDL_bInMainQuit = SDL_FALSE;
static Uint8 SDL_SubsystemRefCount[ 32 ]; static Uint8 SDL_SubsystemRefCount[ 32 ];
@ -93,10 +92,7 @@ int
SDL_InitSubSystem(Uint32 flags) SDL_InitSubSystem(Uint32 flags)
{ {
#if !SDL_TIMERS_DISABLED #if !SDL_TIMERS_DISABLED
if (!ticks_started) { SDL_InitTicks();
SDL_StartTicks();
ticks_started = 1;
}
#endif #endif
/* Initialize the timer subsystem */ /* Initialize the timer subsystem */

View file

@ -26,6 +26,8 @@
#include "SDL_cpuinfo.h" #include "SDL_cpuinfo.h"
#include "SDL_thread.h" #include "SDL_thread.h"
extern void SDL_StartTicks(void);
/* #define DEBUG_TIMERS */ /* #define DEBUG_TIMERS */
typedef struct _SDL_Timer typedef struct _SDL_Timer
@ -70,6 +72,16 @@ typedef struct {
static SDL_TimerData SDL_timer_data; static SDL_TimerData SDL_timer_data;
static Uint32 ticks_started = 0;
void
SDL_InitTicks(void)
{
if (!ticks_started) {
SDL_StartTicks();
ticks_started = 1;
}
}
/* The idea here is that any thread might add a timer, but a single /* The idea here is that any thread might add a timer, but a single
* thread manages the active timer queue, sorted by scheduling time. * thread manages the active timer queue, sorted by scheduling time.

View file

@ -26,6 +26,7 @@
#define ROUND_RESOLUTION(X) \ #define ROUND_RESOLUTION(X) \
(((X+TIMER_RESOLUTION-1)/TIMER_RESOLUTION)*TIMER_RESOLUTION) (((X+TIMER_RESOLUTION-1)/TIMER_RESOLUTION)*TIMER_RESOLUTION)
extern void SDL_InitTicks(void);
extern int SDL_TimerInit(void); extern int SDL_TimerInit(void);
extern void SDL_TimerQuit(void); extern void SDL_TimerQuit(void);

View file

@ -29,6 +29,7 @@
#include "SDL_pixels_c.h" #include "SDL_pixels_c.h"
#include "SDL_rect_c.h" #include "SDL_rect_c.h"
#include "../events/SDL_events_c.h" #include "../events/SDL_events_c.h"
#include "../timer/SDL_timer_c.h"
#if SDL_VIDEO_OPENGL #if SDL_VIDEO_OPENGL
#include "SDL_opengl.h" #include "SDL_opengl.h"
@ -415,6 +416,10 @@ SDL_VideoInit(const char *driver_name)
if (_this != NULL) { if (_this != NULL) {
SDL_VideoQuit(); SDL_VideoQuit();
} }
#if !SDL_TIMERS_DISABLED
SDL_InitTicks();
#endif
/* Start the event loop */ /* Start the event loop */
if (SDL_StartEventLoop() < 0 || if (SDL_StartEventLoop() < 0 ||