From: hgn Date: Sun, 9 Nov 2025 04:41:22 +0000 (+0000) Subject: auto scale ui X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=95185729e2ef9fa799589d339e80688b1aeb3e42;p=vg.git auto scale ui --- diff --git a/source/engine/vg_audio.c b/source/engine/vg_audio.c index 9919e01..f9f478c 100644 --- a/source/engine/vg_audio.c +++ b/source/engine/vg_audio.c @@ -10,6 +10,7 @@ #include "vg_graphics.h" #include "console_system.h" #include "vg_engine.h" +#include "vg_ui.h" #include @@ -1373,7 +1374,7 @@ void _audio_gui(void) return; _audio_lock(); - i16 panel[4] = {0,0,_engine.w,_engine.h}; + i16 panel[4] = {0,0,_engine_ui.w,_engine_ui.h}; /* Draw audio stack */ for( i32 id=1; id<=AUDIO_CHANNELS; id ++ ) diff --git a/source/engine/vg_engine.c b/source/engine/vg_engine.c index f46a860..5928c0c 100644 --- a/source/engine/vg_engine.c +++ b/source/engine/vg_engine.c @@ -161,8 +161,8 @@ i32 main( i32 argc, const c8 *argv[] ) } SDL_RaiseWindow( _engine.window_handle ); - SDL_SetWindowMinimumSize( _engine.window_handle, 1280, 720 ); - SDL_SetWindowMaximumSize( _engine.window_handle, 1920, 1080 ); + SDL_SetWindowMinimumSize( _engine.window_handle, 800, 600 ); + SDL_SetWindowMaximumSize( _engine.window_handle, 1920*2, 1080*2 ); /* * OpenGL loading @@ -314,7 +314,7 @@ L_new_frame:; else if( e.type == SDL_EVENT_MOUSE_MOTION ) { SDL_MouseMotionEvent *ev = (SDL_MouseMotionEvent *)&e; - _ui_set_mouse( ev->x, ev->y ); + _ui_set_mouse( ev->x / _engine_ui.divisor, ev->y / _engine_ui.divisor ); } else if( e.type == SDL_EVENT_TEXT_INPUT ) { diff --git a/source/engine/vg_ui.c b/source/engine/vg_ui.c index c4bcd2b..d4bbbae 100644 --- a/source/engine/vg_ui.c +++ b/source/engine/vg_ui.c @@ -4,12 +4,14 @@ #include "vg_render.h" #include "vg_opengl.h" #include "vg_shader.h" +#include "vg_ui.h" struct graphics_target _ui_surface = { .mode = k_graphics_mode_software, .size = { 1920, 1080 }, }; +struct _engine_ui _engine_ui; static GLuint _ui_surface_texture; @@ -30,12 +32,22 @@ void _engine_ui_init(void) void _engine_ui_pre_render(void) { - ASSERT_CRITICAL( _engine.w <= 1920 ); - ASSERT_CRITICAL( _engine.h <= 1080 ); + _engine_ui.w = _engine.w; + _engine_ui.h = _engine.h; + _engine_ui.divisor = 1; + + if( (_engine_ui.w > 1920) || (_engine_ui.h > 1080) ) + { + _engine_ui.divisor = 2; + _engine_ui.w /= 2; + _engine_ui.h /= 2; + ASSERT_CRITICAL( _engine_ui.w <= 1920 ); + ASSERT_CRITICAL( _engine_ui.h <= 1080 ); + } _ui_update(); _graphics_set_target( &_ui_surface ); - _graphics_viewport( 0, 0, _engine.w, _engine.h ); + _graphics_viewport( 0, 0, _engine_ui.w, _engine_ui.h ); //_graphics_fill_rect( (i16[]){ 0, 0, _engine.w, _engine.h }, (union colour){{0,0,0,255}} ); } @@ -52,7 +64,7 @@ void _engine_ui_post_render(void) _shader_bind( k_shader_blit ); _shader_blit_uTexMain( 0 ); _shader_blit_uFlip( 1 ); - _shader_blit_uInverseRatio( (f32[2]){ (f64)_engine.w/1920.0, (f64)_engine.h/1080.0 } ); + _shader_blit_uInverseRatio( (f32[2]){ (f64)_engine_ui.w/1920.0, (f64)_engine_ui.h/1080.0 } ); _render_fullscreen_quad(); glDisable( GL_BLEND ); diff --git a/source/engine/vg_ui.h b/source/engine/vg_ui.h index e135aad..22d8b25 100644 --- a/source/engine/vg_ui.h +++ b/source/engine/vg_ui.h @@ -1,5 +1,12 @@ #pragma once +struct _engine_ui +{ + i16 w, h; + i32 divisor; +} +extern _engine_ui; + void _engine_ui_pre_render(void); void _engine_ui_post_render(void); b8 _engine_ui_want_text_input(void);