From caefb64b8bd5f3ad03711db92fecaf2d00a6df7c Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Sat, 24 Nov 2012 12:07:35 -0500 Subject: [PATCH] WinRT: got timers working --- VisualC/SDL/SDL_VS2012_WinRT.vcxproj | 2 +- include/SDL_config_windowsrt.h | 5 +---- src/timer/windows/SDL_systimer.c | 23 ++++++++++++++++++++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/VisualC/SDL/SDL_VS2012_WinRT.vcxproj b/VisualC/SDL/SDL_VS2012_WinRT.vcxproj index bdf0478d6..7d6deb876 100644 --- a/VisualC/SDL/SDL_VS2012_WinRT.vcxproj +++ b/VisualC/SDL/SDL_VS2012_WinRT.vcxproj @@ -94,8 +94,8 @@ - + diff --git a/include/SDL_config_windowsrt.h b/include/SDL_config_windowsrt.h index 7634d48a6..8330c10be 100644 --- a/include/SDL_config_windowsrt.h +++ b/include/SDL_config_windowsrt.h @@ -154,10 +154,7 @@ typedef unsigned int uintptr_t; #define SDL_THREAD_STDCPP 1 /* Enable various timer systems */ -// TODO, WinRT: look into getting SDL's pre-WinRT timers working. -// Some functions there are supported in WinRT, others are not. -//#define SDL_TIMER_WINDOWS 1 -#define SDL_TIMERS_DISABLED 1 +#define SDL_TIMER_WINDOWS 1 /* Enable various video drivers */ #define SDL_VIDEO_DRIVER_WINRT 1 diff --git a/src/timer/windows/SDL_systimer.c b/src/timer/windows/SDL_systimer.c index a08c9ff31..60524d93c 100644 --- a/src/timer/windows/SDL_systimer.c +++ b/src/timer/windows/SDL_systimer.c @@ -48,7 +48,7 @@ SDL_StartTicks(void) #ifdef USE_GETTICKCOUNT start = GetTickCount(); #else -#if 0 /* Apparently there are problems with QPC on Win2K */ +#ifdef __WINRT__ /* Apparently there are problems with QPC on Win2K */ if (QueryPerformanceFrequency(&hires_ticks_per_second) == TRUE) { hires_timer_available = TRUE; QueryPerformanceCounter(&hires_start_ticks); @@ -56,8 +56,12 @@ SDL_StartTicks(void) #endif { hires_timer_available = FALSE; +#ifdef __WINRT__ + start = 0; /* the timer failed to start! */ +#else timeBeginPeriod(1); /* use 1 ms timer precision */ start = timeGetTime(); +#endif } #endif } @@ -82,7 +86,11 @@ SDL_GetTicks(void) return (DWORD) hires_now.QuadPart; } else { +#ifdef __WINRT__ + now = 0; +#else now = timeGetTime(); +#endif } #endif @@ -116,6 +124,19 @@ SDL_GetPerformanceFrequency(void) return frequency.QuadPart; } +#ifdef __WINRT__ +static void +Sleep(DWORD timeout) +{ + static HANDLE mutex = 0; + if ( ! mutex ) + { + mutex = CreateEventEx(0, 0, 0, EVENT_ALL_ACCESS); + } + WaitForSingleObjectEx(mutex, timeout, FALSE); +} +#endif + void SDL_Delay(Uint32 ms) {