moving some render stuff over to vg
authorhgn <hgodden00@gmail.com>
Mon, 17 Mar 2025 16:55:54 +0000 (16:55 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 17 Mar 2025 16:55:54 +0000 (16:55 +0000)
build.c
shaders/blit.fs
src/depth_compare.h
src/menu.c
src/render.c
src/render.h
src/skaterift.c
src/utest.c [new file with mode: 0644]
src/world_render.c
src/world_water.c

diff --git a/build.c b/build.c
index ec772baaded0c32340be746c0d9504d486501448..3ea8b8def702936a027edd04c5a92be57782515e 100644 (file)
--- a/build.c
+++ b/build.c
@@ -188,7 +188,7 @@ void build_shaders(void){
    _S( "trail", "trail.vs", "trail.fs" );
 
    /* 2D */
-   _S( "blit",      "blit.vs",      "blit.fs" );
+   //_S( "blit",      "blit.vs",      "blit.fs" );
    _S( "blitblur",  "blit.vs",      "blitblur.fs" );
    _S( "blitcolour","blit.vs",      "colour.fs" );
    _S( "blit_transition", "blit.vs", "blit_transition.fs" );
@@ -366,6 +366,35 @@ void s_testing_build(void)
    vg_add_blob( &test_proj, "steam_appid.txt", "" );
 }
 
+void s_utest_build(void)
+{
+   vg_info( "running script: s_utest_build(void)\n" );
+
+   struct vg_compiler_env *env = &vg_test_env;
+   struct vg_project test_proj;
+   vg_project_init( &test_proj, "bin", "utest", NULL, 0 );
+
+   struct vg_compiler_conf conf = {0};
+
+   if( env->platform == k_platform_windows )
+   {
+      vg_strcat( &conf.link, "-lws2_32 " );
+   }
+
+   vg_make_app( &test_proj, &(struct vg_engine_config ) 
+         {
+            .fixed_update_hz = 60,
+            .log_source_info = 1,
+            .use_3d = 0,
+            .custom_game_settings = 0,
+            .custom_shaders = 0
+         }, 
+         env, &conf, "src/utest.c", "utest" );
+
+   vg_add_controller_database( &test_proj );
+   vg_syscall( "mkdir -p bin/%s/cfg", test_proj.uid.buffer );
+}
+
 void s_testing_server(void)
 {
    vg_info( "running script: s_testing_server(void)\n" );
@@ -387,6 +416,9 @@ int main( int argc, char *argv[] )
       if( vg_long_opt( "testing-build", NULL ) )
          s_testing_build();
 
+      if( vg_long_opt( "utest", NULL ) )
+         s_utest_build();
+
       if( vg_long_opt( "testing-server", NULL ) )
          s_testing_server();
 
index 634e84fa2908e992bb701d7dbb90135a66bae201..0e6e9feff06ccb93b1c1125072d72ccdf0a2eb36 100644 (file)
@@ -31,11 +31,10 @@ vec2 fisheye_distort(vec2 xy)
    return uv;
 }
 
-
 void main()
 {
-   vec2 vwarp = 2.0*aUv - 1.0;
-   vwarp = fisheye_distort( vwarp );
+   //vec2 vwarp = 2.0*aUv - 1.0;
+   //vwarp = fisheye_distort( vwarp );
 
    FragColor = texture( uTexMain, aUv );
 }
index 1db5665a7bd15992a9562c97fff8d86d97b2e5b2..41f0fac7cd71db2b81f18795a59db24ea3a086a5 100644 (file)
@@ -1,6 +1,7 @@
 #pragma once
 #include "vg/vg_m.h"
 #include "vg/vg_framebuffer.h"
+#include "vg/vg_render.h"
 #include "skaterift.h"
 #include "render.h"
 
@@ -11,9 +12,9 @@ static inline void depth_compare_bind(
       vg_camera *cam )
 {
    uTexSceneDepth( 5 );
-   vg_framebuffer_bind_texture( g_render.fb_main, 2, 5 );
+   vg_framebuffer_bind_texture( _vg_render.fb_main, 2, 5 );
    v3f inverse;
-   vg_framebuffer_inverse_ratio( g_render.fb_main, inverse );
+   vg_framebuffer_inverse_ratio( _vg_render.fb_main, inverse );
    inverse[2] = g_render.cam.farz-g_render.cam.nearz;
 
    uInverseRatioDepth( inverse );
index 2bb1016cfb9871f86dcdc69a754dd348047e2bdf..d98ddaed159cd855946336c8d3199ac6a569884e 100644 (file)
@@ -168,8 +168,7 @@ static bool menu_slider( ui_context *ctx,
    ui_fill( ctx, (ui_rect){ box[0]+line[2], box[1], box[2]-line[2], box[3] }, GUI_COL_DARK );
 
    ui_outline( ctx, box, 1, state? GUI_COL_HI: GUI_COL_ACTIVE, 0 );
-   ui_slider_text( ctx, box, 
-                   format, disp_min + (*value)*( disp_max-disp_min ) );
+   ui_slider_text( ctx, box, format, disp_min + (*value)*( disp_max-disp_min ) );
 
    return (state & mask_using) && 1;
 }
@@ -957,8 +956,8 @@ void menu_gui( ui_context *ctx )
 
          menu_heading( ctx, list, "Audio/Video", 0 );
          menu_slider( ctx, list, R == 2, "Volume", 0, 100, &_vg_audio.master_volume_ui, "%.f%%" );
-         menu_slider( ctx, list, R == 3, "Resolution", 0, 100, &k_render_scale, "%.f%%" );
-         menu_checkbox( ctx, list, R == 4, "Motion Blur", &k_blur_effect );
+         menu_slider( ctx, list, R == 3, "Resolution", 0, 100, &_vg_render.scale, "%.f%%" );
+         menu_checkbox( ctx, list, R == 4, "Motion Blur", &_vg_postprocess.blur_effect );
 
          menu_heading( ctx, list, "Camera", 0 );
          menu_slider( ctx, list, R == 5, "Fov", 97, 135, &k_fov, "%.1f\xb0" );
index fada4a58080731821e11bd1b0cbdd25f3e9e0492..258e6427c485cdc64463d86e481eb0f6cd496710 100644 (file)
@@ -59,96 +59,10 @@ static void async_render_init( void *payload, u32 size )
 
 void render_init(void)
 {
-   vg_console_reg_var( "blur_strength", &k_blur_strength, k_var_dtype_f32, 0 );
-   vg_console_reg_var( "render_scale", &k_render_scale,
-                       k_var_dtype_f32, VG_VAR_PERSISTENT );
    vg_console_reg_var( "fov", &k_fov, k_var_dtype_f32, VG_VAR_PERSISTENT );
-   vg_console_reg_var( "cam_height", &k_cam_height, 
-                        k_var_dtype_f32, VG_VAR_PERSISTENT );
-   vg_console_reg_var( "blur_effect", &k_blur_effect, 
-                        k_var_dtype_i32, VG_VAR_PERSISTENT );
+   vg_console_reg_var( "cam_height", &k_cam_height, k_var_dtype_f32, VG_VAR_PERSISTENT );
 
    void *alloc = vg_mem.rtmemory;
-   
-   /* 
-    * Main framebuffer
-    */
-   g_render.fb_main = vg_framebuffer_allocate( alloc, 3, 1 );
-   g_render.fb_main->display_name = "main";
-   g_render.fb_main->resolution_div = 1;
-   g_render.fb_main->attachments[0] = (vg_framebuffer_attachment)
-   {
-      "colour", k_framebuffer_attachment_type_texture,
-
-      .internalformat = GL_RGB,
-      .format         = GL_RGB,
-      .type           = GL_UNSIGNED_BYTE,
-      .attachment     = GL_COLOR_ATTACHMENT0
-   };
-   g_render.fb_main->attachments[1] = (vg_framebuffer_attachment)
-   {
-      "motion", k_framebuffer_attachment_type_texture,
-
-      .quality        = k_framebuffer_quality_high_only,
-      .internalformat = GL_RG16F,
-      .format         = GL_RG,
-      .type           = GL_FLOAT,
-      .attachment     = GL_COLOR_ATTACHMENT1
-   };
-   g_render.fb_main->attachments[2] = (vg_framebuffer_attachment)
-   {
-      "depth_stencil", k_framebuffer_attachment_type_texture_depth,
-      .internalformat = GL_DEPTH24_STENCIL8,
-      .format         = GL_DEPTH_STENCIL,
-      .type           = GL_UNSIGNED_INT_24_8,
-      .attachment     = GL_DEPTH_STENCIL_ATTACHMENT
-   };
-   vg_framebuffer_create( g_render.fb_main );
-   
-   /* 
-    * Water reflection
-    */
-   g_render.fb_water_reflection = vg_framebuffer_allocate( alloc, 2, 1 );
-   g_render.fb_water_reflection->display_name = "water_reflection";
-   g_render.fb_water_reflection->resolution_div = 2;
-   g_render.fb_water_reflection->attachments[0] = (vg_framebuffer_attachment) 
-   {
-      "colour", k_framebuffer_attachment_type_texture,
-      .internalformat = GL_RGB,
-      .format         = GL_RGB,
-      .type           = GL_UNSIGNED_BYTE,
-      .attachment     = GL_COLOR_ATTACHMENT0
-   };
-   g_render.fb_water_reflection->attachments[1] = (vg_framebuffer_attachment) 
-   {
-      "depth_stencil", k_framebuffer_attachment_type_renderbuffer,
-      .internalformat = GL_DEPTH24_STENCIL8,
-      .attachment     = GL_DEPTH_STENCIL_ATTACHMENT
-   };
-   vg_framebuffer_create( g_render.fb_water_reflection );
-
-   /*
-    * Thid rendered view from the perspective of the camera, but just 
-    * captures stuff thats under the water
-    */
-   g_render.fb_water_beneath = vg_framebuffer_allocate( alloc, 2, 1 );
-   g_render.fb_water_beneath->display_name = "water_beneath";
-   g_render.fb_water_beneath->resolution_div = 2;
-   g_render.fb_water_beneath->attachments[0] = (vg_framebuffer_attachment) 
-   {
-      "colour", k_framebuffer_attachment_type_texture,
-      .internalformat = GL_RED,
-      .format         = GL_RED,
-      .type           = GL_UNSIGNED_BYTE,
-      .attachment     = GL_COLOR_ATTACHMENT0
-   };
-   g_render.fb_water_beneath->attachments[1] = (vg_framebuffer_attachment) 
-   {
-      "depth_stencil", k_framebuffer_attachment_type_renderbuffer,
-      .internalformat = GL_DEPTH24_STENCIL8,
-      .attachment     = GL_DEPTH_STENCIL_ATTACHMENT
-   };
-   vg_framebuffer_create( g_render.fb_water_beneath );
 
    /* 
     * Workshop preview
@@ -216,6 +130,7 @@ void render_fsquad2(void)
    glDrawArrays( GL_TRIANGLES, 66+6,6 );
 }
 
+#if 0
 void postprocess_to_screen( vg_framebuffer *fb )
 {
    glBindFramebuffer( GL_FRAMEBUFFER, 0 );
@@ -234,8 +149,9 @@ void postprocess_to_screen( vg_framebuffer *fb )
       shader_blitblur_use();
       shader_blitblur_uTexMain( 0 );
       shader_blitblur_uTexMotion( 1 );
-      shader_blitblur_uBlurStrength( k_blur_strength / 
-                                     (vg.time_frame_delta*60.0) );
+
+      f32 s = vg.time_frame_delta*60.0;
+      shader_blitblur_uBlurStrength( k_blur_strength / s );
       shader_blitblur_uInverseRatio( inverse );
 
       inverse[0] -= 0.0001f;
@@ -248,11 +164,12 @@ void postprocess_to_screen( vg_framebuffer *fb )
    }
    else
    {
-      shader_blit_use();
-      shader_blit_uTexMain( 0 );
-      shader_blit_uInverseRatio( inverse );
+      glUseProgram( _shader_blit.id );
+      glUniform1i( glGetUniformLocation( _shader_blit.id, "uTexMain" ), 0 );
+      glUniform2fv( glGetUniformLocation( _shader_blit.id, "uInverseRatio" ),1, vg_ui.bg_inverse_ratio );
       vg_framebuffer_bind_texture( fb, 0, 0 );
    }
 
    render_fsquad();
 }
+#endif
index 765f41b51319e18ddf2bbf425c3efe6d1f52593c..a401714393ea83ed1fb0eccecd2b66878047e262 100644 (file)
@@ -8,7 +8,6 @@
 #include "vg/vg_framebuffer.h"
 #include "vg/vg_camera.h"
 
-#include "shaders/blit.h"
 #include "shaders/blitblur.h"
 #include "shaders/blitcolour.h"
 #include "shaders/blit_transition.h"
@@ -16,9 +15,6 @@
 #define WORKSHOP_PREVIEW_WIDTH  504
 #define WORKSHOP_PREVIEW_HEIGHT 336
 
-static f32 k_render_scale  = 1.0f;
-static i32 k_blur_effect   = 1;
-static f32 k_blur_strength = 0.3f;
 static f32 k_fov           = 0.86f;
 static f32 k_cam_height    = 0.8f;
 
@@ -29,10 +25,7 @@ struct pipeline
 {
    glmesh fsquad;
 
-   vg_framebuffer *fb_main,
-                  *fb_water_reflection,
-                  *fb_water_beneath,
-                  *fb_workshop_preview,
+   vg_framebuffer *fb_workshop_preview,
                   *fb_network_status;
    int ready;
 
index 6d419a26696f52a0addb16b8b298e7fe0a67d8c4..7ae5ccb4cf1d77eca88c486cdcaaf73d7cf11f27 100644 (file)
@@ -396,7 +396,7 @@ static void render_main_game(void)
    }
 
    /* variable res target */
-   vg_framebuffer_bind( g_render.fb_main, k_render_scale );
+   vg_framebuffer_bind( _vg_render.fb_main, _vg_render.scale );
    glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
    glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
 
@@ -468,7 +468,7 @@ static void render_main_game(void)
                                       portals */
 
       /* continue with variable rate */
-      vg_framebuffer_bind( g_render.fb_main, k_render_scale );
+      vg_framebuffer_bind( _vg_render.fb_main, _vg_render.scale );
       render_world_gates( &_world.main, &g_render.cam );
    }
 
@@ -478,7 +478,7 @@ static void render_main_game(void)
    else 
       v2_zero( g_render.blur_override );
 
-   postprocess_to_screen( g_render.fb_main );
+   vg_postprocess_to_screen( _vg_render.fb_main );
    cutscene_render_fadeout();
 
    if( gui.helper_count == 0 )
@@ -524,8 +524,8 @@ void vg_gui( ui_context *ctx )
    if( k_light_editor )
       imgui_world_light_edit( ctx, &_world.main );
    
-   vg_ui.tex_bg = g_render.fb_main->attachments[0].id;
-   vg_framebuffer_inverse_ratio( g_render.fb_main, vg_ui.bg_inverse_ratio );
+   vg_ui.tex_bg = _vg_render.fb_main->attachments[0].id;
+   vg_framebuffer_inverse_ratio( _vg_render.fb_main, vg_ui.bg_inverse_ratio );
 
    _cutscene_gui( ctx );
    menu_gui( ctx );
diff --git a/src/utest.c b/src/utest.c
new file mode 100644 (file)
index 0000000..c286ce1
--- /dev/null
@@ -0,0 +1,38 @@
+#include "vg/vg_opt.h"
+#include "vg/vg_loader.h"
+#include "vg/vg_io.h"
+#include "vg/vg_audio.h"
+#include "vg/vg_async.h"
+
+const char* __asan_default_options() { return "detect_leaks=0"; }
+
+void vg_load(void)
+{
+   vg_bake_shaders();
+   vg_console_load_autos();
+}
+
+void vg_preload(void)
+{
+}
+
+void vg_launch_opt(void)
+{
+   const char *arg;
+}
+
+int main( int argc, char *argv[] )
+{
+   vg_log_init();
+   vg_mem.use_libc_malloc = 0;
+   vg_set_mem_quota( 200*1024*1024 );
+   vg_enter( argc, argv, "Voyager Game Engine" ); 
+   return 0;
+}
+
+void vg_pre_update(void){}
+void vg_fixed_update(void){}
+void vg_post_update(void){}
+void vg_render(void){}
+void vg_gui( ui_context *ctx ){}
+void vg_framebuffer_resize( int w, int h ){}
index 4262d3af04cea67e32f9b78a576b9086fb53f3eb..02008d5fbfd0b37158f0d7d8528f2749ade0ec95 100644 (file)
@@ -1163,7 +1163,7 @@ void render_world( world_instance *world, vg_camera *cam,
    if( with_water )
    {
       render_water_texture( world, cam );
-      vg_framebuffer_bind( g_render.fb_main, k_render_scale );
+      vg_framebuffer_bind( _vg_render.fb_main, _vg_render.scale );
    }
 
    if( stenciled )
index c936740f2d24e87cf6d12936966d0ab93d4e0faf..741843cc263db542cee1f4c48525a03d6c68a7c6 100644 (file)
@@ -51,7 +51,7 @@ void render_water_texture( world_instance *world, vg_camera *cam )
       return;
 
    /* Draw reflection buffa */
-   vg_framebuffer_bind( g_render.fb_water_reflection, k_render_scale );
+   vg_framebuffer_bind( _vg_render.fb_water_reflection, _vg_render.scale );
    glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
 
    /* 
@@ -97,7 +97,7 @@ void render_water_texture( world_instance *world, vg_camera *cam )
     * Create beneath view matrix
     */
    vg_camera beneath_cam;
-   vg_framebuffer_bind( g_render.fb_water_beneath, k_render_scale );
+   vg_framebuffer_bind( _vg_render.fb_water_beneath, _vg_render.scale );
    glClearColor( 1.0f, 0.0f, 0.0f, 0.0f );
    glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
 
@@ -130,7 +130,7 @@ void render_water_surface( world_instance *world, vg_camera *cam )
       /* Draw surface */
       shader_scene_water_use();
       
-      vg_framebuffer_bind_texture( g_render.fb_water_reflection, 0, 0 );
+      vg_framebuffer_bind_texture( _vg_render.fb_water_reflection, 0, 0 );
       shader_scene_water_uTexMain( 0 );
    
       glActiveTexture( GL_TEXTURE1 );
@@ -143,7 +143,7 @@ void render_water_surface( world_instance *world, vg_camera *cam )
 
       WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( world, scene_water );
 
-      vg_framebuffer_bind_texture( g_render.fb_water_beneath, 0, 5 );
+      vg_framebuffer_bind_texture( _vg_render.fb_water_beneath, 0, 5 );
       shader_scene_water_uTexBack( 5 );
       shader_scene_water_uTime( _world.time );
       shader_scene_water_uCamera( cam->transform[3] );