From 3096a57fe93cca01835d90008a0e03e0feff9655 Mon Sep 17 00:00:00 2001 From: hgn Date: Mon, 17 Mar 2025 16:55:54 +0000 Subject: [PATCH] moving some render stuff over to vg --- build.c | 34 ++++++++++++++- shaders/blit.fs | 5 +-- src/depth_compare.h | 5 ++- src/menu.c | 7 ++- src/render.c | 101 ++++---------------------------------------- src/render.h | 9 +--- src/skaterift.c | 10 ++--- src/utest.c | 38 +++++++++++++++++ src/world_render.c | 2 +- src/world_water.c | 8 ++-- 10 files changed, 99 insertions(+), 120 deletions(-) create mode 100644 src/utest.c diff --git a/build.c b/build.c index ec772ba..3ea8b8d 100644 --- 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(); diff --git a/shaders/blit.fs b/shaders/blit.fs index 634e84f..0e6e9fe 100644 --- a/shaders/blit.fs +++ b/shaders/blit.fs @@ -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 ); } diff --git a/src/depth_compare.h b/src/depth_compare.h index 1db5665..41f0fac 100644 --- a/src/depth_compare.h +++ b/src/depth_compare.h @@ -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 ); diff --git a/src/menu.c b/src/menu.c index 2bb1016..d98ddae 100644 --- a/src/menu.c +++ b/src/menu.c @@ -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" ); diff --git a/src/render.c b/src/render.c index fada4a5..258e642 100644 --- a/src/render.c +++ b/src/render.c @@ -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 diff --git a/src/render.h b/src/render.h index 765f41b..a401714 100644 --- a/src/render.h +++ b/src/render.h @@ -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; diff --git a/src/skaterift.c b/src/skaterift.c index 6d419a2..7ae5ccb 100644 --- a/src/skaterift.c +++ b/src/skaterift.c @@ -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 index 0000000..c286ce1 --- /dev/null +++ b/src/utest.c @@ -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 ){} diff --git a/src/world_render.c b/src/world_render.c index 4262d3a..02008d5 100644 --- a/src/world_render.c +++ b/src/world_render.c @@ -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 ) diff --git a/src/world_water.c b/src/world_water.c index c936740..741843c 100644 --- a/src/world_water.c +++ b/src/world_water.c @@ -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] ); -- 2.25.1