store sys timer start in qpc
This commit is contained in:
parent
79cc9e15e5
commit
489fc8eca3
@ -98,9 +98,9 @@ struct win32_window {
|
|||||||
|
|
||||||
GLOBAL struct {
|
GLOBAL struct {
|
||||||
SYSTEM_INFO info;
|
SYSTEM_INFO info;
|
||||||
i64 timer_frequency_s;
|
i64 timer_start_qpc;
|
||||||
i64 timer_frequency_ns;
|
i64 timer_qpc_frequency;
|
||||||
i64 timer_start_ns;
|
i64 ns_per_qpc;
|
||||||
i32 scheduler_period_ms;
|
i32 scheduler_period_ms;
|
||||||
DWORD thread_tls_index;
|
DWORD thread_tls_index;
|
||||||
u32 main_thread_id;
|
u32 main_thread_id;
|
||||||
@ -136,20 +136,20 @@ GLOBAL struct {
|
|||||||
* Events
|
* Events
|
||||||
* ========================== */
|
* ========================== */
|
||||||
|
|
||||||
/* https://git.rfleury.com/community/root_basic/src/commit/9b49fcd24e0c3f875b7c213e81a219bf8544bddb/code/os/gfx/win32/os_gfx_win32.c#L193 */
|
|
||||||
INTERNAL void win32_init_vk_btn_table(void)
|
INTERNAL void win32_init_vk_btn_table(void)
|
||||||
{
|
{
|
||||||
MEMZERO_ARRAY(G.vk_btn_table);
|
MEMZERO_ARRAY(G.vk_btn_table);
|
||||||
|
|
||||||
for (u32 i = 'A', j = SYS_BTN_A; i <= 'Z'; i += 1, j += 1) {
|
for (u32 i = 'A', j = SYS_BTN_A; i <= 'Z'; ++i, ++j) {
|
||||||
G.vk_btn_table[i] = (enum sys_btn)j;
|
G.vk_btn_table[i] = (enum sys_btn)j;
|
||||||
}
|
}
|
||||||
for (u32 i = '0', j = SYS_BTN_0; i <= '9'; i += 1, j += 1) {
|
for (u32 i = '0', j = SYS_BTN_0; i <= '9'; ++i, ++j) {
|
||||||
G.vk_btn_table[i] = (enum sys_btn)j;
|
G.vk_btn_table[i] = (enum sys_btn)j;
|
||||||
}
|
}
|
||||||
for (u32 i = VK_F1, j = SYS_BTN_F1; i <= VK_F24; i += 1, j += 1) {
|
for (u32 i = VK_F1, j = SYS_BTN_F1; i <= VK_F24; ++i, ++j) {
|
||||||
G.vk_btn_table[i] = (enum sys_btn)j;
|
G.vk_btn_table[i] = (enum sys_btn)j;
|
||||||
}
|
}
|
||||||
|
|
||||||
G.vk_btn_table[VK_ESCAPE] = SYS_BTN_ESC;
|
G.vk_btn_table[VK_ESCAPE] = SYS_BTN_ESC;
|
||||||
G.vk_btn_table[VK_OEM_3] = SYS_BTN_GRAVE_ACCENT;
|
G.vk_btn_table[VK_OEM_3] = SYS_BTN_GRAVE_ACCENT;
|
||||||
G.vk_btn_table[VK_OEM_MINUS] = SYS_BTN_MINUS;
|
G.vk_btn_table[VK_OEM_MINUS] = SYS_BTN_MINUS;
|
||||||
@ -248,7 +248,7 @@ i64 sys_time_ns(void)
|
|||||||
{
|
{
|
||||||
LARGE_INTEGER qpc;
|
LARGE_INTEGER qpc;
|
||||||
QueryPerformanceCounter(&qpc);
|
QueryPerformanceCounter(&qpc);
|
||||||
i64 res = (qpc.QuadPart * G.timer_frequency_ns) - G.timer_start_ns;
|
i64 res = (qpc.QuadPart - G.timer_start_qpc) * G.ns_per_qpc;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1931,7 +1931,7 @@ INTERNAL void win32_precise_sleep_timer(f64 seconds, HANDLE timer)
|
|||||||
/* TODO: Does the high frequency timer even require setting / scaling of
|
/* TODO: Does the high frequency timer even require setting / scaling of
|
||||||
* timeBeginPeriod/scheduler_period_ms? There isn't much documentation. */
|
* timeBeginPeriod/scheduler_period_ms? There isn't much documentation. */
|
||||||
|
|
||||||
i64 qpc_per_second = G.timer_frequency_s;
|
i64 qpc_per_second = G.timer_qpc_frequency;
|
||||||
i32 scheduler_period_ms = G.scheduler_period_ms;
|
i32 scheduler_period_ms = G.scheduler_period_ms;
|
||||||
|
|
||||||
LARGE_INTEGER qpc;
|
LARGE_INTEGER qpc;
|
||||||
@ -1972,7 +1972,7 @@ INTERNAL void win32_precise_sleep_timer(f64 seconds, HANDLE timer)
|
|||||||
INTERNAL void win32_precise_sleep_legacy(f64 seconds)
|
INTERNAL void win32_precise_sleep_legacy(f64 seconds)
|
||||||
{
|
{
|
||||||
__prof;
|
__prof;
|
||||||
i64 qpc_per_second = G.timer_frequency_s;
|
i64 qpc_per_second = G.timer_qpc_frequency;
|
||||||
i32 scheduler_period_ms = G.scheduler_period_ms;
|
i32 scheduler_period_ms = G.scheduler_period_ms;
|
||||||
|
|
||||||
LARGE_INTEGER qpc;
|
LARGE_INTEGER qpc;
|
||||||
@ -2063,12 +2063,12 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
|
|||||||
|
|
||||||
LARGE_INTEGER qpf;
|
LARGE_INTEGER qpf;
|
||||||
QueryPerformanceFrequency(&qpf);
|
QueryPerformanceFrequency(&qpf);
|
||||||
G.timer_frequency_s = qpf.QuadPart;
|
G.timer_qpc_frequency = qpf.QuadPart;
|
||||||
G.timer_frequency_ns = 1000000000 / qpf.QuadPart;
|
G.ns_per_qpc = 1000000000 / qpf.QuadPart;
|
||||||
|
|
||||||
LARGE_INTEGER qpc;
|
LARGE_INTEGER qpc;
|
||||||
QueryPerformanceCounter(&qpc);
|
QueryPerformanceCounter(&qpc);
|
||||||
G.timer_start_ns = qpc.QuadPart * G.timer_frequency_ns;
|
G.timer_start_qpc = qpc.QuadPart;
|
||||||
|
|
||||||
TIMECAPS caps;
|
TIMECAPS caps;
|
||||||
timeGetDevCaps(&caps, sizeof(caps));
|
timeGetDevCaps(&caps, sizeof(caps));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user