X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=marblecomp.c;h=07dbd7c5514d80f2535e92f3de939d5964ca2ac3;hb=ceb730c43643caee3fb389b09b4ba65862100336;hp=d9f8cd8f0504306b5c9f3f4b8c01db830c5a7933;hpb=4caef139af0996dfb541b7c0b1b1ab31864840ee;p=fishladder.git diff --git a/marblecomp.c b/marblecomp.c index d9f8cd8..07dbd7c 100644 --- a/marblecomp.c +++ b/marblecomp.c @@ -10,8 +10,11 @@ #define SDL_MAIN_HANDLED +#define STB_DS_IMPLEMENTATION +#include "vg/submodules/stb/stb_ds.h" + #include "vg/vg.h" -#include "fishladder_vg1.c" + struct { enum mc_op { @@ -19,9 +22,14 @@ struct { k_mc_op_clientloading } op; + + v3f mouse_ws; } static marblecomp = { .op = k_mc_op_clientloading }; +#include "input.h" +#include "fishladder_vg1.c" + int main( int argc, char *argv[] ){ vg_mem.use_libc_malloc = 0; vg_set_mem_quota( 80*1024*1024 ); @@ -44,17 +52,40 @@ vg_info(" ' ' '--' [] '----- '----- ' ' '---' " } static void async_call_ready( void *payload, u32 size ){ + _mc_vg1_start(); marblecomp.op = k_mc_op_none; } static void vg_load(void){ /* --------------------- */ + _mc_vg1_register(); + _mc_resource_load_main(); vg_bake_shaders(); vg_async_call( async_call_ready, NULL, 0 ); } +void _mc_vg1_projection_update(void){ + /* + * Reproject screenspace mouse into world + */ + + marblecomp.mouse_ws[0] = ((vg.mouse_pos[0]/(f32)vg.window_x)-0.5f)*2.0f; + marblecomp.mouse_ws[1] = -((vg.mouse_pos[1]/(f32)vg.window_y)-0.5f)*2.0f; + marblecomp.mouse_ws[2] = 1.0f; + + m3x3f inverse; + m3x3_inv( vg.pv, inverse ); + m3x3_mulv( inverse, marblecomp.mouse_ws, marblecomp.mouse_ws ); + + vg_info( "VG %f %f\n", vg.mouse_pos[0], vg.mouse_pos[1] ); + vg_info( "WS %f %f\n", marblecomp.mouse_ws[0], marblecomp.mouse_ws[1] ); +} + + static void vg_pre_update(void){ if( marblecomp.op == k_mc_op_clientloading ) return; + skaterift_preupdate_inputs(); + _mc_vg1_update(); } static void vg_fixed_update(void){ @@ -63,9 +94,11 @@ static void vg_fixed_update(void){ static void vg_post_update(void){ if( marblecomp.op == k_mc_op_clientloading ) return; + _mc_vg1_projection_update(); } static void vg_framebuffer_resize( int w, int h ){ + _mc_vg1_framebuffer_resize(w,h); } static void vg_render(void){ @@ -81,8 +114,7 @@ static void vg_render(void){ glClearColor( 0.0f, 0.3f, 0.5f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); - - m4x4_identity( vg.pv ); + _mc_vg1_render(); glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); @@ -91,4 +123,6 @@ static void vg_render(void){ static void vg_gui(void){ if( marblecomp.op == k_mc_op_clientloading ) return; + vg_ui.wants_mouse = 1; + _mc_vg1_ui(); }