Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 1 | //======================================================================== |
Camilla Berglund | 6e553c7 | 2011-03-06 01:46:39 +0100 | [diff] [blame] | 2 | // GLFW - An OpenGL library |
Camilla Berglund | e10d935 | 2012-08-28 15:03:57 +0200 | [diff] [blame] | 3 | // Platform: Win32 |
Camilla Berglund | 38b0ccb | 2010-09-07 17:41:26 +0200 | [diff] [blame] | 4 | // API version: 3.0 |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 5 | // WWW: http://www.glfw.org/ |
| 6 | //------------------------------------------------------------------------ |
| 7 | // Copyright (c) 2002-2006 Marcus Geelnard |
| 8 | // Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org> |
| 9 | // |
| 10 | // This software is provided 'as-is', without any express or implied |
| 11 | // warranty. In no event will the authors be held liable for any damages |
| 12 | // arising from the use of this software. |
| 13 | // |
| 14 | // Permission is granted to anyone to use this software for any purpose, |
| 15 | // including commercial applications, and to alter it and redistribute it |
| 16 | // freely, subject to the following restrictions: |
| 17 | // |
| 18 | // 1. The origin of this software must not be misrepresented; you must not |
| 19 | // claim that you wrote the original software. If you use this software |
| 20 | // in a product, an acknowledgment in the product documentation would |
| 21 | // be appreciated but is not required. |
| 22 | // |
| 23 | // 2. Altered source versions must be plainly marked as such, and must not |
| 24 | // be misrepresented as being the original software. |
| 25 | // |
| 26 | // 3. This notice may not be removed or altered from any source |
| 27 | // distribution. |
| 28 | // |
| 29 | //======================================================================== |
| 30 | |
| 31 | #include "internal.h" |
| 32 | |
| 33 | |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 34 | ////////////////////////////////////////////////////////////////////////// |
| 35 | ////// GLFW internal API ////// |
| 36 | ////////////////////////////////////////////////////////////////////////// |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 37 | |
| 38 | //======================================================================== |
Camilla Berglund | 1baf233 | 2010-09-07 17:50:43 +0200 | [diff] [blame] | 39 | // Initialise timer |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 40 | //======================================================================== |
| 41 | |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 42 | void _glfwInitTimer(void) |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 43 | { |
| 44 | __int64 freq; |
| 45 | |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 46 | if (QueryPerformanceFrequency((LARGE_INTEGER*) &freq)) |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 47 | { |
Camilla Berglund | 52c2711 | 2012-09-02 15:21:40 +0200 | [diff] [blame] | 48 | _glfwLibrary.Win32.timer.hasPC = GL_TRUE; |
Camilla Berglund | 3f40c46 | 2010-09-14 04:35:36 +0200 | [diff] [blame] | 49 | _glfwLibrary.Win32.timer.resolution = 1.0 / (double) freq; |
Camilla Berglund | 90df26a | 2010-09-12 16:26:00 +0200 | [diff] [blame] | 50 | QueryPerformanceCounter((LARGE_INTEGER*) &_glfwLibrary.Win32.timer.t0_64); |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 51 | } |
| 52 | else |
| 53 | { |
Camilla Berglund | 52c2711 | 2012-09-02 15:21:40 +0200 | [diff] [blame] | 54 | _glfwLibrary.Win32.timer.hasPC = GL_FALSE; |
Camilla Berglund | 671b0f7 | 2011-03-30 15:07:44 +0200 | [diff] [blame] | 55 | _glfwLibrary.Win32.timer.resolution = 0.001; // winmm resolution is 1 ms |
Camilla Berglund | 90df26a | 2010-09-12 16:26:00 +0200 | [diff] [blame] | 56 | _glfwLibrary.Win32.timer.t0_32 = _glfw_timeGetTime(); |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 57 | } |
| 58 | } |
| 59 | |
| 60 | |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 61 | ////////////////////////////////////////////////////////////////////////// |
| 62 | ////// GLFW platform API ////// |
| 63 | ////////////////////////////////////////////////////////////////////////// |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 64 | |
| 65 | //======================================================================== |
| 66 | // Return timer value in seconds |
| 67 | //======================================================================== |
| 68 | |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 69 | double _glfwPlatformGetTime(void) |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 70 | { |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 71 | double t; |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 72 | __int64 t_64; |
| 73 | |
Camilla Berglund | 52c2711 | 2012-09-02 15:21:40 +0200 | [diff] [blame] | 74 | if (_glfwLibrary.Win32.timer.hasPC) |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 75 | { |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 76 | QueryPerformanceCounter((LARGE_INTEGER*) &t_64); |
Camilla Berglund | 90df26a | 2010-09-12 16:26:00 +0200 | [diff] [blame] | 77 | t = (double)(t_64 - _glfwLibrary.Win32.timer.t0_64); |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 78 | } |
| 79 | else |
Camilla Berglund | 90df26a | 2010-09-12 16:26:00 +0200 | [diff] [blame] | 80 | t = (double)(_glfw_timeGetTime() - _glfwLibrary.Win32.timer.t0_32); |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 81 | |
Camilla Berglund | 3f40c46 | 2010-09-14 04:35:36 +0200 | [diff] [blame] | 82 | return t * _glfwLibrary.Win32.timer.resolution; |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 83 | } |
| 84 | |
| 85 | |
| 86 | //======================================================================== |
| 87 | // Set timer value in seconds |
| 88 | //======================================================================== |
| 89 | |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 90 | void _glfwPlatformSetTime(double t) |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 91 | { |
| 92 | __int64 t_64; |
| 93 | |
Camilla Berglund | 52c2711 | 2012-09-02 15:21:40 +0200 | [diff] [blame] | 94 | if (_glfwLibrary.Win32.timer.hasPC) |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 95 | { |
Camilla Berglund | 479c925 | 2010-09-10 22:03:36 +0200 | [diff] [blame] | 96 | QueryPerformanceCounter((LARGE_INTEGER*) &t_64); |
Camilla Berglund | 3f40c46 | 2010-09-14 04:35:36 +0200 | [diff] [blame] | 97 | _glfwLibrary.Win32.timer.t0_64 = t_64 - (__int64) (t / _glfwLibrary.Win32.timer.resolution); |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 98 | } |
| 99 | else |
Camilla Berglund | 90df26a | 2010-09-12 16:26:00 +0200 | [diff] [blame] | 100 | _glfwLibrary.Win32.timer.t0_32 = _glfw_timeGetTime() - (int)(t * 1000.0); |
Camilla Berglund | 3249f81 | 2010-09-07 17:34:51 +0200 | [diff] [blame] | 101 | } |
| 102 | |