auto scale ui
authorhgn <hgodden00@gmail.com>
Sun, 9 Nov 2025 04:41:22 +0000 (04:41 +0000)
committerhgn <hgodden00@gmail.com>
Sun, 9 Nov 2025 04:41:22 +0000 (04:41 +0000)
source/engine/vg_audio.c
source/engine/vg_engine.c
source/engine/vg_ui.c
source/engine/vg_ui.h

index 9919e01af566b5c216afcc3c0a3c2b6a59d1fee9..f9f478cb431e8f52c6bdaec1504b64230abe9a36 100644 (file)
@@ -10,6 +10,7 @@
 #include "vg_graphics.h"
 #include "console_system.h"
 #include "vg_engine.h"
+#include "vg_ui.h"
 
 #include <unistd.h>
 
@@ -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 ++ )
index f46a860695ce35b2d4843d9306d170667233f6a5..5928c0c17e2d57322b4056892502f5ea7bb45bbb 100644 (file)
@@ -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 )
       {
index c4bcd2b5e0b4f69e590d91c4a08ef2894d64f894..d4bbbae3b2a354d7d24ed1aeb701c286c70b48c4 100644 (file)
@@ -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 );
index e135aadcb5360e12e75aaad99b367003fe7aad91..22d8b25797697a561ebb0017eb68c75cecfc0e74 100644 (file)
@@ -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);