Update refresh rate to be based on monitor (win only)

This commit is contained in:
Jack Punter 2022-06-02 22:13:57 +01:00
parent c38c7384b9
commit 20588ab236
1 changed files with 36 additions and 10 deletions

View File

@ -9,8 +9,8 @@
// TOP // TOP
#define FPS 60 // #define FPS 144
#define frame_useconds (1000000 / FPS) // #define frame_useconds (1000000 / FPS)
#include <stdio.h> #include <stdio.h>
@ -299,14 +299,35 @@ system_get_proc_sig(){
return((Void_Func*)(GetProcAddress(lib, proc_name))); return((Void_Func*)(GetProcAddress(lib, proc_name)));
} }
//////////////////////////////// //-
internal void internal void
system_schedule_step(u32 code){ system_schedule_step(u32 code){
PostMessage(win32vars.window_handle, WM_4coder_ANIMATE, code, 0); PostMessage(win32vars.window_handle, WM_4coder_ANIMATE, code, 0);
} }
//////////////////////////////// //-
// NOTE(jack): Query win32 API to get montior refresh rate.
internal u64
win32_get_frame_rate() {
u64 frame_rate = 60;
DEVMODE device_mode = { 0 };
// memset(&device_mode, 0, sizeof(DEVMODE));
device_mode.dmSize = sizeof(DEVMODE);
device_mode.dmDriverExtra = 0;
// If the Display settings can be retrieved use the device's refresh rate
if(EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &device_mode) != 0){
frame_rate = device_mode.dmDisplayFrequency;
}
return frame_rate;
}
//-
internal void internal void
win32_toggle_fullscreen(){ win32_toggle_fullscreen(){
@ -369,7 +390,7 @@ system_set_key_mode_sig(){
win32vars.key_mode = mode; win32vars.key_mode = mode;
} }
//////////////////////////////// //-
// NOTE(allen): Clipboard // NOTE(allen): Clipboard
internal String_Const_u8 internal String_Const_u8
@ -870,7 +891,7 @@ win32_free_object(Win32_Object *object){
dll_insert(&win32vars.free_win32_objects, &object->node); dll_insert(&win32vars.free_win32_objects, &object->node);
} }
//////////////////////////////// //-
internal internal
system_now_time_sig(){ system_now_time_sig(){
@ -977,7 +998,7 @@ system_sleep_sig(){
Sleep(milliseconds); Sleep(milliseconds);
} }
//////////////////////////////// //-
internal DWORD CALL_CONVENTION internal DWORD CALL_CONVENTION
win32_thread_wrapper(void *ptr){ win32_thread_wrapper(void *ptr){
@ -1117,7 +1138,7 @@ system_condition_variable_free_sig(){
} }
} }
//////////////////////////////// //-
internal LRESULT CALL_CONVENTION internal LRESULT CALL_CONVENTION
win32_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ win32_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
@ -1415,7 +1436,7 @@ win32_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
return(result); return(result);
} }
//////////////////////////////// //-
internal b32 internal b32
win32_wgl_good(Void_Func *f){ win32_wgl_good(Void_Func *f){
@ -1664,7 +1685,7 @@ win32_gl_create_window(HWND *wnd_out, HGLRC *context_out, DWORD style, RECT rect
return(result); return(result);
} }
//////////////////////////////// //-
int CALL_CONVENTION int CALL_CONVENTION
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
@ -2007,6 +2028,11 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdS
SetActiveWindow(win32vars.window_handle); SetActiveWindow(win32vars.window_handle);
ShowWindow(win32vars.window_handle, SW_SHOW); ShowWindow(win32vars.window_handle, SW_SHOW);
//- @Added by jack
u64 frame_rate = win32_get_frame_rate();
u64 frame_useconds = (1000000 / frame_rate);
//-
win32vars.global_frame_mutex = system_mutex_make(); win32vars.global_frame_mutex = system_mutex_make();
system_acquire_global_frame_mutex(win32vars.tctx); system_acquire_global_frame_mutex(win32vars.tctx);