From 8b8be85dea5f3474dee1080b42714ae307d99864 Mon Sep 17 00:00:00 2001 From: n00b Date: Fri, 20 Dec 2024 17:04:40 -0500 Subject: [PATCH] Implemented VSync timer using SDL --- rcbasic_runtime/rc_gfx.h | 12 +++++++++++- rcbasic_runtime/rc_gfx_core.h | 3 +++ rcbasic_runtime/rc_os_defines.h | 2 +- rcbasic_runtime/rc_windowclose.h | 7 +++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h index f6b061f..0b79530 100644 --- a/rcbasic_runtime/rc_gfx.h +++ b/rcbasic_runtime/rc_gfx.h @@ -308,12 +308,22 @@ bool rc_windowOpenEx(std::string title, int x, int y, int w, int h, uint32_t win irr_creation_params.Bits = 16; irr_creation_params.Fullscreen = fullscreen; irr_creation_params.Stencilbuffer = stencil_buffer; - irr_creation_params.Vsync = vsync; + irr_creation_params.Vsync = false; irr_creation_params.EventReceiver = 0; irr_creation_params.WindowPosition = position2d(x, y); irr_creation_params.AntiAlias = AntiAlias; irr_creation_params.OGLES2ShaderPath = ".shaders/"; + rc_window_vsync = vsync; + + if(vsync) + { + SDL_DisplayMode dm; + SDL_GetDesktopDisplayMode(0, &dm); + rc_vsync_refresh_rate = dm.refresh_rate; + rc_vsync_timer = SDL_GetTicks(); + } + device = createDeviceEx(irr_creation_params); diff --git a/rcbasic_runtime/rc_gfx_core.h b/rcbasic_runtime/rc_gfx_core.h index 152f81c..841bd51 100644 --- a/rcbasic_runtime/rc_gfx_core.h +++ b/rcbasic_runtime/rc_gfx_core.h @@ -255,6 +255,9 @@ bool rc_mouse_zone_active = false; double rc_window_zone_scale_x = 1; double rc_window_zone_scale_y = 1; SDL_Rect rc_mouse_zone; +bool rc_window_vsync = false; +int rc_vsync_refresh_rate = 0; +Uint32 rc_vsync_timer = 0; struct rc_scene_properties_obj { diff --git a/rcbasic_runtime/rc_os_defines.h b/rcbasic_runtime/rc_os_defines.h index 093fff9..c28846f 100755 --- a/rcbasic_runtime/rc_os_defines.h +++ b/rcbasic_runtime/rc_os_defines.h @@ -2,7 +2,7 @@ #define RC_OS_DEFINES_H_INCLUDED //USED FOR TESTING ONLY -//#define RC_TESTING +#define RC_TESTING //I am checking Android first since I think it also defines __linux__ diff --git a/rcbasic_runtime/rc_windowclose.h b/rcbasic_runtime/rc_windowclose.h index 8dfcedd..07c8c71 100644 --- a/rcbasic_runtime/rc_windowclose.h +++ b/rcbasic_runtime/rc_windowclose.h @@ -79,6 +79,13 @@ void rc_preUpdate() bool rc_update() { + if(rc_window_vsync) + { + int frame_delay = 1000/rc_vsync_refresh_rate; + while( (SDL_GetTicks()-rc_vsync_timer) < frame_delay ){} + rc_vsync_timer = SDL_GetTicks(); + } + if(!device->run()) return false;