WinRT: got timers working

This commit is contained in:
David Ludwig 2012-11-24 12:07:35 -05:00
parent afa31553cd
commit a83b10fba8
3 changed files with 24 additions and 6 deletions

View file

@ -94,8 +94,8 @@
<ClCompile Include="..\..\src\thread\stdcpp\SDL_syscond.cpp" /> <ClCompile Include="..\..\src\thread\stdcpp\SDL_syscond.cpp" />
<ClCompile Include="..\..\src\thread\stdcpp\SDL_sysmutex.cpp" /> <ClCompile Include="..\..\src\thread\stdcpp\SDL_sysmutex.cpp" />
<ClCompile Include="..\..\src\thread\stdcpp\SDL_systhread.cpp" /> <ClCompile Include="..\..\src\thread\stdcpp\SDL_systhread.cpp" />
<ClCompile Include="..\..\src\timer\dummy\SDL_systimer.c" />
<ClCompile Include="..\..\src\timer\SDL_timer.c" /> <ClCompile Include="..\..\src\timer\SDL_timer.c" />
<ClCompile Include="..\..\src\timer\windows\SDL_systimer.c" />
<ClCompile Include="..\..\src\video\dummy\SDL_nullevents.c" /> <ClCompile Include="..\..\src\video\dummy\SDL_nullevents.c" />
<ClCompile Include="..\..\src\video\dummy\SDL_nullframebuffer.c" /> <ClCompile Include="..\..\src\video\dummy\SDL_nullframebuffer.c" />
<ClCompile Include="..\..\src\video\dummy\SDL_nullvideo.c" /> <ClCompile Include="..\..\src\video\dummy\SDL_nullvideo.c" />

View file

@ -154,10 +154,7 @@ typedef unsigned int uintptr_t;
#define SDL_THREAD_STDCPP 1 #define SDL_THREAD_STDCPP 1
/* Enable various timer systems */ /* Enable various timer systems */
// TODO, WinRT: look into getting SDL's pre-WinRT timers working. #define SDL_TIMER_WINDOWS 1
// Some functions there are supported in WinRT, others are not.
//#define SDL_TIMER_WINDOWS 1
#define SDL_TIMERS_DISABLED 1
/* Enable various video drivers */ /* Enable various video drivers */
#define SDL_VIDEO_DRIVER_WINRT 1 #define SDL_VIDEO_DRIVER_WINRT 1

View file

@ -48,7 +48,7 @@ SDL_StartTicks(void)
#ifdef USE_GETTICKCOUNT #ifdef USE_GETTICKCOUNT
start = GetTickCount(); start = GetTickCount();
#else #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) { if (QueryPerformanceFrequency(&hires_ticks_per_second) == TRUE) {
hires_timer_available = TRUE; hires_timer_available = TRUE;
QueryPerformanceCounter(&hires_start_ticks); QueryPerformanceCounter(&hires_start_ticks);
@ -56,8 +56,12 @@ SDL_StartTicks(void)
#endif #endif
{ {
hires_timer_available = FALSE; hires_timer_available = FALSE;
#ifdef __WINRT__
start = 0; /* the timer failed to start! */
#else
timeBeginPeriod(1); /* use 1 ms timer precision */ timeBeginPeriod(1); /* use 1 ms timer precision */
start = timeGetTime(); start = timeGetTime();
#endif
} }
#endif #endif
} }
@ -82,7 +86,11 @@ SDL_GetTicks(void)
return (DWORD) hires_now.QuadPart; return (DWORD) hires_now.QuadPart;
} else { } else {
#ifdef __WINRT__
now = 0;
#else
now = timeGetTime(); now = timeGetTime();
#endif
} }
#endif #endif
@ -116,6 +124,19 @@ SDL_GetPerformanceFrequency(void)
return frequency.QuadPart; 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 void
SDL_Delay(Uint32 ms) SDL_Delay(Uint32 ms)
{ {