From 47941822dae18a018c985847b052e70214a3ccc6 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 25 Oct 2022 03:30:41 +0100 Subject: [PATCH] well yeah i guess --- audio.h | 91 ++-- blender_export.py | 85 ++-- build.sh | 7 +- bvh.h | 57 ++- camera.h | 10 +- common.h | 6 +- highscores.h | 89 ++-- main.c | 136 ++++-- menu.h | 114 +++-- model.h | 384 ++++++++-------- models_src/alter.mdl | Bin 42150 -> 42182 bytes models_src/ch_default.mdl | Bin 191254 -> 191366 bytes models_src/ch_empty.mdl | Bin 52124 -> 52160 bytes models_src/ch_jordan.mdl | Bin 612140 -> 612300 bytes models_src/ch_mike.mdl | Bin 126947 -> 127051 bytes models_src/ch_new.mdl | Bin 663635 -> 663795 bytes models_src/ch_outlaw.001.mdl | Bin 0 -> 99403 bytes models_src/ch_outlaw.mdl | Bin 606950 -> 607110 bytes models_src/epic_scene.mdl | Bin 230947 -> 230971 bytes models_src/mp_dev.mdl | Bin 14827786 -> 14830898 bytes models_src/mp_test.mdl | Bin 0 -> 511 bytes models_src/rs_cars.mdl | Bin 125145 -> 336677 bytes models_src/rs_chicken.mdl | Bin 88451 -> 88479 bytes models_src/rs_foliage.mdl | Bin 90184 -> 90212 bytes models_src/rs_gate.mdl | Bin 1346 -> 1370 bytes models_src/rs_menu.mdl | Bin 171019 -> 171099 bytes models_src/rs_scoretext.mdl | Bin 1300367 -> 1300443 bytes models_src/rs_skydome.mdl | Bin 98889 -> 98925 bytes models_src/rs_vig.mdl | Bin 77669 -> 77773 bytes network.h | 54 +-- network_msg.h | 2 +- player.h | 69 +-- player_animation.h | 15 +- player_audio.h | 2 +- player_model.h | 180 ++++---- player_physics.h | 30 +- player_ragdoll.h | 17 +- render.h | 58 +-- rigidbody.h | 142 +++--- scene.h | 240 ++++++---- server.c | 5 +- skeleton.h | 165 +++---- steam.h | 34 +- vg_config.h | 8 +- world.h | 398 ++++++++++------- world_gate.h | 102 +---- world_gen.h | 638 ++++++++++++++++---------- world_render.h | 77 ++-- world_routes.h | 843 +++++++++++++++++------------------ world_sfd.h | 94 ++-- world_water.h | 90 ++-- 51 files changed, 2229 insertions(+), 2013 deletions(-) create mode 100644 models_src/ch_outlaw.001.mdl create mode 100644 models_src/mp_test.mdl diff --git a/audio.h b/audio.h index fd21286..34ebb3a 100644 --- a/audio.h +++ b/audio.h @@ -16,69 +16,68 @@ static int k_audio_debug_soundscape = 0; audio_clip audio_board[] = { - {.path="sound/skate.ogg", .source_mode=k_audio_source_compressed }, - {.path="sound/wheel.ogg", .source_mode=k_audio_source_compressed }, - {.path="sound/slide.ogg", .source_mode=k_audio_source_compressed }, - {.path="sound/reverb.ogg",.source_mode=k_audio_source_compressed } + { .path="sound/skate.ogg" }, + { .path="sound/wheel.ogg" }, + { .path="sound/slide.ogg" }, + { .path="sound/reverb.ogg" } }; audio_clip audio_splash = -{ .path = "sound/splash.ogg", .source_mode=k_audio_source_compressed }; +{ .path = "sound/splash.ogg" }; audio_clip audio_jumps[] = { - { .path = "sound/jump0.ogg", .source_mode=k_audio_source_compressed, }, - { .path = "sound/jump1.ogg", .source_mode=k_audio_source_compressed, }, + { .path = "sound/jump0.ogg" }, + { .path = "sound/jump1.ogg" }, }; audio_clip audio_footsteps[] = { - {.path = "sound/step_concrete0.ogg", .source_mode=k_audio_source_compressed,}, - {.path = "sound/step_concrete1.ogg", .source_mode=k_audio_source_compressed,}, - {.path = "sound/step_concrete2.ogg", .source_mode=k_audio_source_compressed,}, - {.path = "sound/step_concrete3.ogg", .source_mode=k_audio_source_compressed,} + {.path = "sound/step_concrete0.ogg" }, + {.path = "sound/step_concrete1.ogg" }, + {.path = "sound/step_concrete2.ogg" }, + {.path = "sound/step_concrete3.ogg" } }; audio_clip audio_lands[] = { - { .path = "sound/land0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/land1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/land2.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/landsk0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/landsk1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/onto.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/outo.ogg", .source_mode=k_audio_source_compressed }, + { .path = "sound/land0.ogg" }, + { .path = "sound/land1.ogg" }, + { .path = "sound/land2.ogg" }, + { .path = "sound/landsk0.ogg" }, + { .path = "sound/landsk1.ogg" }, + { .path = "sound/onto.ogg" }, + { .path = "sound/outo.ogg" }, }; audio_clip audio_water[] = { - { .path = "sound/wave0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave2.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave3.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave4.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/wave5.ogg", .source_mode=k_audio_source_compressed } + { .path = "sound/wave0.ogg" }, + { .path = "sound/wave1.ogg" }, + { .path = "sound/wave2.ogg" }, + { .path = "sound/wave3.ogg" }, + { .path = "sound/wave4.ogg" }, + { .path = "sound/wave5.ogg" } }; audio_clip audio_grass[] = { - { .path = "sound/grass0.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/grass1.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/grass2.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/grass3.ogg", .source_mode=k_audio_source_compressed }, + { .path = "sound/grass0.ogg" }, + { .path = "sound/grass1.ogg" }, + { .path = "sound/grass2.ogg" }, + { .path = "sound/grass3.ogg" }, }; audio_clip audio_ambience[] = { - {.path="sound/town_generic.ogg", - .source_mode=k_audio_source_compressed } + { .path="sound/town_generic.ogg" } }; audio_clip audio_gate_pass = { - .path = "sound/gate_pass.ogg", .source_mode=k_audio_source_compressed + .path = "sound/gate_pass.ogg" }; audio_clip audio_gate_lap = { - .path = "sound/gate_lap.ogg", .source_mode=k_audio_source_compressed + .path = "sound/gate_lap.ogg" }; audio_clip audio_gate_ambient = { -.path = "sound/gate_ambient.ogg", .source_mode=k_audio_source_compressed +.path = "sound/gate_ambient.ogg" }; audio_player ambient_player = @@ -92,16 +91,16 @@ audio_player audio_rewind_player = }; audio_clip audio_rewind[] = { -{ .path = "sound/rewind_start.ogg", .source_mode=k_audio_source_compressed }, -{ .path = "sound/rewind_end_1.5.ogg", .source_mode=k_audio_source_compressed}, -{ .path = "sound/rewind_end_2.5.ogg", .source_mode=k_audio_source_compressed }, -{ .path = "sound/rewind_end_6.5.ogg", .source_mode=k_audio_source_compressed }, -{ .path = "sound/rewind_clack.ogg", .source_mode=k_audio_source_compressed }, +{ .path = "sound/rewind_start.ogg" }, +{ .path = "sound/rewind_end_1.5.ogg" }, +{ .path = "sound/rewind_end_2.5.ogg" }, +{ .path = "sound/rewind_end_6.5.ogg" }, +{ .path = "sound/rewind_clack.ogg" }, }; audio_clip audio_ui[] = { - { .path = "sound/ui_click.ogg", .source_mode=k_audio_source_compressed }, - { .path = "sound/ui_ding.ogg", .source_mode=k_audio_source_compressed }, + { .path = "sound/ui_click.ogg" }, + { .path = "sound/ui_ding.ogg" }, }; audio_player ambient_sprites[4] = @@ -322,13 +321,13 @@ static void audio_debug_soundscapes(void) char buf[64]; snprintf( buf, 31, "occlusion: %.5f", audio_occlusion_current ); - ui_global_ctx.cursor[0] = 450; - ui_global_ctx.cursor[1] = 10; - ui_global_ctx.cursor[2] = audio_occlusion_current * 200.0f; - ui_global_ctx.cursor[3] = 20; + vg_uictx.cursor[0] = 450; + vg_uictx.cursor[1] = 10; + vg_uictx.cursor[2] = audio_occlusion_current * 200.0f; + vg_uictx.cursor[3] = 20; - gui_fill_rect( ui_global_ctx.cursor, 0x55cccccc ); - gui_text( ui_global_ctx.cursor, buf, 1, 0 ); + ui_fill_rect( vg_uictx.cursor, 0x55cccccc ); + ui_text( vg_uictx.cursor, buf, 1, 0 ); } #endif /* AUDIO_H */ diff --git a/blender_export.py b/blender_export.py index c069d7f..2ed183a 100644 --- a/blender_export.py +++ b/blender_export.py @@ -47,6 +47,7 @@ class mdl_node(Structure): _fields_ = [("co",c_float*3), ( "q",c_float*4), ( "s",c_float*3), + ("sub_uid",c_uint32), # dont use ("submesh_start",c_uint32), ("submesh_count",c_uint32), ("classtype",c_uint32), @@ -59,6 +60,8 @@ class mdl_header(Structure): _fields_ = [("identifier",c_uint32), ("version",c_uint32), ("file_length",c_uint32), + ("pad0",c_uint32), + ("vertex_count",c_uint32), ("vertex_offset",c_uint32), @@ -76,11 +79,16 @@ class mdl_header(Structure): ("anim_count",c_uint32), ("anim_offset",c_uint32), - + + ("strings_length",c_uint32), ("strings_offset",c_uint32), + + ("entdata_length",c_uint32), ("entdata_offset",c_uint32), - ("animdata_offset",c_uint32) - ] + + ("keyframe_count",c_uint32), + ("keyframe_offset",c_uint32)] + class mdl_animation(Structure): _pack_ = 1 @@ -187,6 +195,10 @@ def write_model(collection_name): header.node_count = 0 header.material_count = 0 header.file_length = 0 + + header.strings_length = 0 + header.entdata_length = 0 + header.keyframe_count = 0 mesh_cache = {} string_cache = {} @@ -200,10 +212,8 @@ def write_model(collection_name): indice_buffer = [] node_buffer = [] entdata_buffer = [] - entdata_length = 0 anim_buffer = [] - animdata_length = 0 animdata_buffer = [] def emplace_string( s ): @@ -596,7 +606,7 @@ def write_model(collection_name): # Process entity data # ================================================================== - node.offset = entdata_length + node.offset = header.entdata_length if classtype != 'k_classtype_none': disptype = classtype @@ -629,7 +639,7 @@ def write_model(collection_name): node.classtype = 12 armature = armature_def['obj'] - entdata_length += sizeof( classtype_skin ) + header.entdata_length += sizeof( classtype_skin ) skin = classtype_skin() skin.skeleton = armature.cv_data.uid @@ -637,7 +647,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_skeleton': node.classtype = 11 - entdata_length += sizeof( classtype_skeleton ) + header.entdata_length += sizeof( classtype_skeleton ) skeleton = classtype_skeleton() armature_def = graph_lookup[obj] @@ -669,7 +679,7 @@ def write_model(collection_name): anim = mdl_animation() anim.pstr_name = emplace_string( NLAStrip.action.name ) anim.rate = 30.0 - anim.offset = animdata_length + anim.offset = header.keyframe_count anim.length = anim_end-anim_start # Export the fucking keyframes @@ -723,7 +733,7 @@ def write_model(collection_name): kf.s[2] = sca[1] animdata_buffer += [kf] - animdata_length += sizeof(mdl_keyframe) + header.keyframe_count += 1 break anim_buffer += [anim] @@ -739,7 +749,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_bone': node.classtype = 10 - entdata_length += sizeof( classtype_bone ) + header.entdata_length += sizeof( classtype_bone ) bone = classtype_bone() bone.deform = node_def['deform'] @@ -789,7 +799,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_gate': node.classtype = 1 - entdata_length += sizeof( classtype_gate ) + header.entdata_length += sizeof( classtype_gate ) gate = classtype_gate() gate.target = 0 @@ -809,7 +819,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_block': node.classtype = 2 - entdata_length += sizeof( classtype_block ) + header.entdata_length += sizeof( classtype_block ) source = obj.data.cv_data @@ -826,7 +836,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_achievement_box': node.classtype = 13 - entdata_length += sizeof( classtype_achievement_box ) + header.entdata_length += sizeof( classtype_achievement_box ) ach = classtype_achievement_box() ach.pstr_name = emplace_string( obj.cv_data.strp ) ach.trigger = 0 @@ -839,7 +849,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_audio': node.classtype = 14 - entdata_length += sizeof( classtype_audio ) + header.entdata_length += sizeof( classtype_audio ) aud = classtype_audio() aud.pstr_file = emplace_string( obj.cv_data.strp ) aud.flags = obj.cv_data.intp @@ -855,7 +865,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_car_path': node.classtype = 5 - entdata_length += sizeof( classtype_car_path ) + header.entdata_length += sizeof( classtype_car_path ) pn = classtype_car_path() pn.target = 0 @@ -872,7 +882,7 @@ def write_model(collection_name): target = obj.instance_collection node.classtype = 6 - entdata_length += sizeof( classtype_instance ) + header.entdata_length += sizeof( classtype_instance ) inst = classtype_instance() inst.pstr_file = emplace_string( F"models/{target.name}.mdl" ) @@ -883,7 +893,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_route_node': node.classtype = 8 - entdata_length += sizeof( classtype_route_node ) + header.entdata_length += sizeof( classtype_route_node ) rn = classtype_route_node() if obj.cv_data.target != None: @@ -895,7 +905,7 @@ def write_model(collection_name): elif classtype == 'k_classtype_route': node.classtype = 9 - entdata_length += sizeof( classtype_route ) + header.entdata_length += sizeof( classtype_route ) r = classtype_route() r.colour[0] = obj.cv_data.colour[0] r.colour[1] = obj.cv_data.colour[1] @@ -914,8 +924,7 @@ def write_model(collection_name): node_buffer += [node] # Write data arrays - # - header.anim_count = len(anim_buffer) + # TODO: 8 BYTE ALIGNMENT print( "Writing data" ) fpos = sizeof(header) @@ -932,13 +941,24 @@ def write_model(collection_name): header.material_offset = fpos fpos += sizeof(mdl_material)*header.material_count - print( F"Animation count: {header.anim_count}" ) + print( F"Animation count: {len(anim_buffer)}" ) + header.anim_count = len(anim_buffer) header.anim_offset = fpos fpos += sizeof(mdl_animation)*header.anim_count - print( F"Entdata length: {entdata_length}" ) + print( F"Entdata length: {header.entdata_length}" ) header.entdata_offset = fpos - fpos += entdata_length + fpos += header.entdata_length + + print( F"Strings length: {len(strings_buffer)}" ) + header.strings_offset = fpos + header.strings_length = len(strings_buffer) + fpos += header.strings_length + + # Optional array things + print( F"Keyframe count: {header.keyframe_count}" ) + header.keyframe_offset = fpos + fpos += sizeof(mdl_keyframe)*header.keyframe_count print( F"Vertex count: {header.vertex_count}" ) header.vertex_offset = fpos @@ -948,14 +968,6 @@ def write_model(collection_name): header.indice_offset = fpos fpos += sizeof(c_uint32)*header.indice_count - print( F"Keyframe count: {animdata_length}" ) - header.animdata_offset = fpos - fpos += animdata_length - - print( F"Strings length: {len(strings_buffer)}" ) - header.strings_offset = fpos - fpos += len(strings_buffer) - header.file_length = fpos path = F"/home/harry/Documents/carve/models_src/{collection_name}.mdl" @@ -973,14 +985,17 @@ def write_model(collection_name): fp.write( bytearray(a) ) for ed in entdata_buffer: fp.write( bytearray(ed) ) + + fp.write( strings_buffer ) + + for kf in animdata_buffer: + fp.write( bytearray(kf) ) + for v in vertex_buffer: fp.write( bytearray(v) ) for i in indice_buffer: fp.write( bytearray(i) ) - for kf in animdata_buffer: - fp.write( bytearray(kf) ) - fp.write( strings_buffer ) fp.close() print( F"Completed {collection_name}.mdl" ) diff --git a/build.sh b/build.sh index 8920806..fad6201 100755 --- a/build.sh +++ b/build.sh @@ -23,7 +23,7 @@ _windows_asan="" _windows_linksteam="vg/dep/steam/steam_api.dll" _windows_folder="bin/win32" -_options_debugmode="-O0 -ggdb3 -fno-omit-frame-pointer" +_options_debugmode="-O0 -ggdb3 -fno-omit-frame-pointer -rdynamic" _options_release="-O3 -DVG_RELEASE" # Compiler lines @@ -228,6 +228,11 @@ vg_command(){ test) run_game ;; + gdb) + cd $_linux_folder + gdb -tui ./skaterift + cd ./../ + ;; testserver) run_server ;; diff --git a/bvh.h b/bvh.h index c18bb30..9fdbe98 100644 --- a/bvh.h +++ b/bvh.h @@ -18,30 +18,30 @@ * system: the system we created above which will deal with the data * * call bh_create( bh_tree *bh, u32 item_count ) - * static int bh_ray( bh_tree *bh, u32 inode, v3f co, v3f dir, ray_hit *hit ) - * static int bh_select( bh_tree *bh, boxf box, u32 *buffer, int len ) + * VG_STATIC int bh_ray( bh_tree *bh, u32 inode, v3f co, v3f dir, ray_hit *hit ) + * VG_STATIC int bh_select( bh_tree *bh, boxf box, u32 *buffer, int len ) */ typedef struct bh_node bh_node; typedef struct bh_tree bh_tree; typedef struct bh_system bh_system; -struct bh_node -{ - boxf bbx; - - /* if il is 0, this is a leaf */ - u32 il, count; - union{ u32 ir, start; }; -}; - struct bh_tree { - bh_node *nodes; u32 node_count; bh_system *system; void *user; + + struct bh_node + { + boxf bbx; + + /* if il is 0, this is a leaf */ + u32 il, count; + union{ u32 ir, start; }; + } + nodes[]; }; struct bh_system @@ -61,7 +61,7 @@ struct bh_system int (*cast_ray)( void *user, u32 index, v3f co, v3f dir, ray_hit *hit ); }; -static void bh_update_bounds( bh_tree *bh, u32 inode ) +VG_STATIC void bh_update_bounds( bh_tree *bh, u32 inode ) { bh_node *node = &bh->nodes[ inode ]; @@ -73,7 +73,7 @@ static void bh_update_bounds( bh_tree *bh, u32 inode ) } } -static void bh_subdivide( bh_tree *bh, u32 inode ) +VG_STATIC void bh_subdivide( bh_tree *bh, u32 inode ) { bh_node *node = &bh->nodes[ inode ]; @@ -128,18 +128,19 @@ static void bh_subdivide( bh_tree *bh, u32 inode ) node->ir = ir; node->count = 0; - /* TODO: Implement max depth, or stack */ bh_update_bounds( bh, il ); bh_update_bounds( bh, ir ); bh_subdivide( bh, il ); bh_subdivide( bh, ir ); } -static void bh_create( bh_tree *bh, bh_system *sys, void *user, u32 item_count ) +VG_STATIC bh_tree *bh_create( void *lin_alloc, bh_system *system, + void *user, u32 item_count ) { - bh->system = sys; + u32 totsize = sizeof(bh_tree) + sizeof(bh_node)*(item_count*2-1); + bh_tree *bh = vg_linear_alloc( lin_alloc, totsize ); + bh->system = system; bh->user = user; - bh->nodes = vg_alloc( sizeof(bh_node) * (item_count*2-1) ); bh_node *root = &bh->nodes[0]; bh->node_count = 1; @@ -152,20 +153,14 @@ static void bh_create( bh_tree *bh, bh_system *sys, void *user, u32 item_count ) bh_update_bounds( bh, 0 ); bh_subdivide( bh, 0 ); - bh->nodes = vg_realloc( bh->nodes, sizeof(bh_node) * bh->node_count ); - vg_success( "BVH done, size: %u/%u\n", bh->node_count, (item_count*2-1) ); - -#if 0 - vg_fatal_exit_loop( "Test crash from loader" ); -#endif -} + totsize = sizeof(bh_tree) + sizeof(bh_node) * bh->node_count; + bh = vg_linear_resize( lin_alloc, bh, totsize ); -static void bh_free( bh_tree *bh ) -{ - vg_free( bh->nodes ); + vg_success( "BVH done, size: %u/%u\n", bh->node_count, (item_count*2-1) ); + return bh; } -static void bh_debug_node( bh_tree *bh, u32 inode, v3f pos, u32 colour ) +VG_STATIC void bh_debug_node( bh_tree *bh, u32 inode, v3f pos, u32 colour ) { bh_node *node = &bh->nodes[ inode ]; @@ -195,7 +190,7 @@ static void bh_debug_node( bh_tree *bh, u32 inode, v3f pos, u32 colour ) } } -static int bh_ray( bh_tree *bh, u32 inode, v3f co, v3f dir, ray_hit *hit ) +VG_STATIC int bh_ray( bh_tree *bh, v3f co, v3f dir, ray_hit *hit ) { int count = 0; u32 stack[100]; @@ -246,7 +241,7 @@ static int bh_ray( bh_tree *bh, u32 inode, v3f co, v3f dir, ray_hit *hit ) return count; } -static int bh_select( bh_tree *bh, boxf box, u32 *buffer, int len ) +VG_STATIC int bh_select( bh_tree *bh, boxf box, u32 *buffer, int len ) { int count = 0; u32 stack[100]; diff --git a/camera.h b/camera.h index 07205de..1c265a7 100644 --- a/camera.h +++ b/camera.h @@ -3,13 +3,13 @@ #include "common.h" -static v2f camera_angles; -static v3f camera_pos; +VG_STATIC v2f camera_angles; +VG_STATIC v3f camera_pos; -static m4x3f camera_mtx, - camera_mtx_inverse; +VG_STATIC m4x3f camera_mtx, + camera_mtx_inverse; -static void camera_update(void) +VG_STATIC void camera_update(void) { /* Update camera matrices */ v4f qyaw, qpitch, qcam; diff --git a/common.h b/common.h index 0890ac4..fa6df75 100644 --- a/common.h +++ b/common.h @@ -21,9 +21,9 @@ struct ray_hit v3f pos, normal; }; -static int network_scores_updated = 0; +VG_STATIC int network_scores_updated = 0; -static u32 utf8_byte0_byte_count( u8 char0 ) +VG_STATIC u32 utf8_byte0_byte_count( u8 char0 ) { for( u32 k=2; k<4; k++ ) { @@ -34,7 +34,7 @@ static u32 utf8_byte0_byte_count( u8 char0 ) return 0; } -static void str_utf8_collapse( const char *str, char *buf, u32 length ) +VG_STATIC void str_utf8_collapse( const char *str, char *buf, u32 length ) { u8 *ustr = (u8 *)str; u32 utf32_code = 0x00000000; diff --git a/highscores.h b/highscores.h index f19f93a..f2c5eab 100644 --- a/highscores.h +++ b/highscores.h @@ -80,7 +80,7 @@ struct highscore_database #pragma pack(pop) -static struct highscore_system +VG_STATIC struct highscore_system { highscore_database dbheader; aatree aainfo, @@ -91,19 +91,20 @@ static struct highscore_system aainfo_playerinfo_playerid, aainfo_playerinfo; - void *data, *playerinfo_data; + void *data, + *playerinfo_data; u32 pool_size, playerinfo_pool_size; } highscore_system; -static int highscore_cmp_points( void *a, void *b ) +VG_STATIC int highscore_cmp_points( void *a, void *b ) { highscore_record *pa = a, *pb = b; return (int)pa->points - (int)pb->points; } -static int highscore_cmp_datetime( void *a, void *b ) +VG_STATIC int highscore_cmp_datetime( void *a, void *b ) { highscore_record *pa = a, *pb = b; @@ -111,52 +112,27 @@ static int highscore_cmp_datetime( void *a, void *b ) return pa->datetime < pb->datetime? 1: -1; } -static int highscore_cmp_time( void *a, void *b ) +VG_STATIC int highscore_cmp_time( void *a, void *b ) { highscore_record *pa = a, *pb = b; return (int)pb->time - (int)pa->time; } -static int highscore_cmp_playerid( void *a, void *b ) +VG_STATIC int highscore_cmp_playerid( void *a, void *b ) { highscore_record *pa = a, *pb = b; if( pa->playerid == pb->playerid ) return 0; return pa->playerid < pb->playerid? -1: 1; } -static int highscore_cmp_playerinfo_playerid( void *a, void *b ) +VG_STATIC int highscore_cmp_playerinfo_playerid( void *a, void *b ) { highscore_playerinfo *pa = a, *pb = b; if( pa->playerid == pb->playerid ) return 0; return pa->playerid < pb->playerid? -1: 1; } -static void *highscore_malloc( u32 count, u32 size ) -{ - size_t requested_mem = size * count; - void *data = vg_alloc( requested_mem ); - - requested_mem /= 1024; - requested_mem /= 1024; - - if( !data ) - { - vg_error( "Could not allocated %dmb of memory\n", requested_mem ); - return NULL; - } - else - vg_success( "Allocated %dmb for %u records\n", requested_mem, count ); - - return data; -} - -static void highscores_free(void) -{ - vg_free( highscore_system.data ); - vg_free( highscore_system.playerinfo_data ); -} - -static void highscores_create_db(void) +VG_STATIC void highscores_create_db(void) { struct highscore_system *sys = &highscore_system; @@ -183,7 +159,7 @@ static void highscores_create_db(void) sys->dbheader.playerinfo_root = AATREE_PTR_NIL; } -static int highscores_read(void) +VG_STATIC int highscores_read(void) { struct highscore_system *sys = &highscore_system; @@ -200,7 +176,9 @@ static int highscores_read(void) return 0; } - count = fread( sys->data, sizeof(highscore_record), sys->pool_size, fp ); + count = fread( sys->data, sizeof(highscore_record), + sys->pool_size, fp ); + if( count != sys->pool_size ) { vg_error( "Unexpected EOF reading database contents;" @@ -229,13 +207,17 @@ static int highscores_read(void) } } -static void highscores_init( u32 pool_size, u32 playerinfo_pool_size ) +VG_STATIC void highscores_init( u32 pool_size, u32 playerinfo_pool_size ) { struct highscore_system *sys = &highscore_system; - sys->data = highscore_malloc( pool_size, sizeof(highscore_record) ); - sys->playerinfo_data = highscore_malloc( playerinfo_pool_size, - sizeof(highscore_playerinfo)); + sys->data = vg_linear_alloc( vg_mem.rtmemory, + pool_size*sizeof(highscore_record) ); + + sys->playerinfo_data = + vg_linear_alloc( vg_mem.rtmemory, + playerinfo_pool_size * sizeof(highscore_playerinfo) ); + /* This is ugly.. too bad! */ sys->aainfo.base = highscore_system.data; @@ -278,7 +260,7 @@ static void highscores_init( u32 pool_size, u32 playerinfo_pool_size ) sys->pool_size = pool_size; } -static int highscores_serialize_all(void) +VG_STATIC int highscores_serialize_all(void) { struct highscore_system *sys = &highscore_system; vg_info( "Serializing database\n" ); @@ -301,7 +283,7 @@ static int highscores_serialize_all(void) return 1; } -static highscore_record *highscore_find_user_record( u64 playerid, u32 trackid ) +VG_STATIC highscore_record *highscore_find_user_record( u64 playerid, u32 trackid ) { struct highscore_system *sys = &highscore_system; @@ -318,7 +300,7 @@ static highscore_record *highscore_find_user_record( u64 playerid, u32 trackid ) return aatree_get_data( &sys->aainfo_playerid, find ); } -static aatree_ptr highscores_push_record( highscore_record *record ) +VG_STATIC aatree_ptr highscores_push_record( highscore_record *record ) { struct highscore_system *sys = &highscore_system; @@ -389,7 +371,7 @@ static aatree_ptr highscores_push_record( highscore_record *record ) return index; } -static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[16] ) +VG_STATIC aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[16] ) { char name[17]; for( int i=0; i<16; i++ ) @@ -429,8 +411,7 @@ static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[16] ) info->playerid = steamid; sys->dbheader.playerinfo_root = aatree_insert( &sys->aainfo_playerinfo_playerid, - sys->dbheader.playerinfo_root, - record ); + sys->dbheader.playerinfo_root, record ); } for( int i=0; i<16; i++ ) @@ -440,7 +421,7 @@ static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[16] ) } /* Get the length of a string, bounded by '\0' or len, whichever is first */ -static int highscore_strlen( const char *str, int len ) +VG_STATIC int highscore_strlen( const char *str, int len ) { int str_length; for( str_length=0; str_lengthenabled }; @@ -352,32 +354,104 @@ static void run_light_widget( struct light_widget *lw ) } #endif -static void run_debug_info(void) +VG_STATIC void run_debug_info(void) { char buf[40]; snprintf( buf, 40, "%.2fm/s", v3_length( player.phys.rb.v ) ); - gui_text( (ui_px [2]){ 0, 0 }, buf, 1, k_text_align_left ); + ui_text( (ui_px [2]){ 0, 0 }, buf, 1, k_text_align_left ); snprintf( buf, 40, "%.2f %.2f %.2f m/s", player.phys.a[0], player.phys.a[1], player.phys.a[2] ); - gui_text( (ui_px [2]){ 0, 20 }, buf, 1, k_text_align_left ); + ui_text( (ui_px [2]){ 0, 20 }, buf, 1, k_text_align_left ); snprintf( buf, 40, "pos %.2f %.2f %.2f", player.phys.rb.co[0], player.phys.rb.co[1], player.phys.rb.co[2] ); - gui_text( (ui_px [2]){ 0, 40 }, buf, 1, k_text_align_left ); + ui_text( (ui_px [2]){ 0, 40 }, buf, 1, k_text_align_left ); if( vg.gamepad_ready ) { for( int i=0; i<6; i++ ) { snprintf( buf, 40, "%.2f", vg.gamepad.axes[i] ); - gui_text( (ui_px [2]){ 0, (i+3)*20 }, buf, 1, k_text_align_left ); + ui_text( (ui_px [2]){ 0, (i+3)*20 }, buf, 1, k_text_align_left ); } } else { - gui_text( (ui_px [2]){ 0, 60 }, + ui_text( (ui_px [2]){ 0, 60 }, "Gamepad not ready", 1, k_text_align_left ); } } + +#else + +#define VG_TIMESTEP_FIXED (1.0/60.0) +#define VG_3D +#define VG_FRAMEBUFFER_RESIZE 1 +#include "vg/vg.h" + +int main( int argc, char *argv[] ) +{ + vg_prealloc_quota( 512*1024*1024 ); + vg_enter( argc, argv, "Voyager Game Engine" ); +} + +VG_STATIC void vg_preload(void) +{ +vg_info(" Copyright . . . -----, ,----- ,---. .---. \n" ); +vg_info(" 2021-2022 |\\ /| | / | | | | /| \n" ); +vg_info(" | \\ / | +-- / +----- +---' | / | \n" ); +vg_info(" | \\ / | | / | | \\ | / | \n" ); +vg_info(" | \\/ | | / | | \\ | / | \n" ); +vg_info(" ' ' '--' [] '----- '----- ' ' '---' " + "SOFTWARE\n" ); +} + +VG_STATIC void vg_load(void) +{ + vg_bake_shaders(); + vg_console_load_autos(); +} + +VG_STATIC void vg_start(void) +{ +} + +VG_STATIC void vg_update( int loaded ) +{ +} + +VG_STATIC void vg_update_fixed( int loaded ) +{ +} + +VG_STATIC void vg_update_post( int loaded ) +{ +} + +VG_STATIC void vg_framebuffer_resize( int w, int h ) +{ +} + +VG_STATIC void vg_render(void) +{ + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glViewport( 0,0, vg.window_x, vg.window_y ); + glDisable( GL_DEPTH_TEST ); + + glClearColor( 0.11f, 0.35f, 0.37f, 1.0f ); + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); + + /* Other shite */ + glDisable(GL_BLEND); + glDisable( GL_DEPTH_TEST ); + vg_lines_drawall( (float *)vg.pv ); + glViewport( 0,0, vg.window_x, vg.window_y ); +} + +VG_STATIC void vg_ui(void) +{ +} + +#endif diff --git a/menu.h b/menu.h index 7d8bf76..02ab252 100644 --- a/menu.h +++ b/menu.h @@ -8,32 +8,31 @@ #include "shaders/menu.h" -static mdl_header *menu_model; -static glmesh menu_glmesh; -static m4x3f menu_mdl_mtx; -static float menu_opacity = 0.0f; -static float menu_input_cooldown = 0.0f; -static float menu_fov_target = 97.0f; -static v2f menu_extra_angles; - -static int menu_loc = 1, +VG_STATIC mdl_context menu_model; +VG_STATIC glmesh menu_glmesh; +VG_STATIC m4x3f menu_mdl_mtx; +VG_STATIC float menu_opacity = 0.0f; +VG_STATIC float menu_input_cooldown = 0.0f; +VG_STATIC float menu_fov_target = 97.0f; +VG_STATIC v2f menu_extra_angles; + +VG_STATIC int menu_loc = 1, menu_loc_last = 1; -static u32 menu_page = 0; +VG_STATIC u32 menu_page = 0; -static int cl_menu = 0, +VG_STATIC int cl_menu = 0, cl_menu_go_away = 0; -static int cl_playermdl_id = 0; -static const char *playermodels[] = { "ch_new", "ch_jordan", "ch_outlaw" }; +VG_STATIC const char *playermodels[] = { "ch_new", "ch_jordan", "ch_outlaw" }; -static void menu_btn_paused( int event ); -static void menu_btn_quit( int event ); -static void menu_btn_skater( int event ); -static void menu_btn_map( int event ); -static void menu_btn_map_a( int event ); -static void menu_btn_map_b( int event ); -static void menu_btn_map_c( int event ); -static void menu_btn_fuckoff( int event ); +VG_STATIC void menu_btn_paused( int event ); +VG_STATIC void menu_btn_quit( int event ); +VG_STATIC void menu_btn_skater( int event ); +VG_STATIC void menu_btn_map( int event ); +VG_STATIC void menu_btn_map_a( int event ); +VG_STATIC void menu_btn_map_b( int event ); +VG_STATIC void menu_btn_map_c( int event ); +VG_STATIC void menu_btn_fuckoff( int event ); struct menu_button { @@ -46,7 +45,7 @@ struct menu_button float falpha, fsize; } -static menu_buttons[] = +VG_STATIC menu_buttons[] = { /*0*/{"text_paused", 1, menu_btn_paused }, /*1*/{"text_quit", 9, menu_btn_quit, {3,-1,4,2}}, @@ -64,69 +63,63 @@ static menu_buttons[] = /*d*/{"text_yes", 8, menu_btn_fuckoff,{-1,-1,-1,-1} }, }; -static void menu_btn_map_a( int event ){} -static void menu_btn_map_b( int event ){} -static void menu_btn_map_c( int event ){} +VG_STATIC void menu_btn_map_a( int event ){} +VG_STATIC void menu_btn_map_b( int event ){} +VG_STATIC void menu_btn_map_c( int event ){} -static void menu_btn_paused( int event ) +VG_STATIC void menu_btn_paused( int event ) { } -static void menu_btn_fuckoff( int event ) +VG_STATIC void menu_btn_fuckoff( int event ) { glfwSetWindowShouldClose( vg.window, 1 ); } -static void menu_btn_quit( int event ) +VG_STATIC void menu_btn_quit( int event ) { menu_page = 0x8; menu_loc = 0xd; } -static void menu_btn_map( int event ) +VG_STATIC void menu_btn_map( int event ) { menu_page = 0x4; menu_loc = 7; } -static void menu_btn_skater( int event ) +VG_STATIC void menu_btn_skater( int event ) { menu_page = 0x2; } -static void menu_init(void) +VG_STATIC void menu_init(void) { - menu_model = mdl_load( "models/rs_menu.mdl" ); + vg_linear_clear( vg_mem.scratch ); - if( !menu_model ) - vg_fatal_exit_loop( "No menu model" ); + mdl_open( &menu_model, "models/rs_menu.mdl" ); + mdl_load_metadata( &menu_model, vg_mem.rtmemory ); + mdl_load_mesh_data( &menu_model, vg_mem.scratch ); + mdl_close( &menu_model ); + + vg_acquire_thread_sync(); + mdl_unpack_glmesh( &menu_model, &menu_glmesh ); + vg_release_thread_sync(); for( int i=0; ipnode = mdl_node_from_name( menu_model, btn->name ); + btn->pnode = mdl_node_from_name( &menu_model, btn->name ); if( !btn->pnode ) vg_fatal_exit_loop( "Menu programming error" ); } - vg_convar_push( (struct vg_convar){ - .name = "cl_playermdl_id", - .data = &cl_playermdl_id, - .data_type = k_convar_dtype_i32, - .opt_i32 = { .min=0, .max=2, .clamp=1 }, - .persistent = 1 - }); - - vg_acquire_thread_sync(); - mdl_unpack_glmesh( menu_model, &menu_glmesh ); - vg_release_thread_sync(); - shader_menu_register(); } -static void menu_run_directional(void) +VG_STATIC void menu_run_directional(void) { struct menu_button *btn = &menu_buttons[ menu_loc ]; @@ -174,18 +167,18 @@ static void menu_run_directional(void) } } -static int menu_page_should_backout(void) +VG_STATIC int menu_page_should_backout(void) { return vg_get_button_down( "break" ); } -static void menu_close(void) +VG_STATIC void menu_close(void) { cl_menu_go_away = 1; menu_page = 0; } -static void menu_page_main(void) +VG_STATIC void menu_page_main(void) { if( menu_page_should_backout() ) { @@ -197,7 +190,7 @@ static void menu_page_main(void) menu_run_directional(); } -static void menu_page_map(void) +VG_STATIC void menu_page_map(void) { if( menu_page_should_backout() ) { @@ -209,7 +202,7 @@ static void menu_page_map(void) menu_run_directional(); } -static void menu_page_quit(void) +VG_STATIC void menu_page_quit(void) { if( menu_page_should_backout() ) { @@ -221,7 +214,7 @@ static void menu_page_quit(void) menu_run_directional(); } -static void menu_page_skater(void) +VG_STATIC void menu_page_skater(void) { float h = vg_get_axis( "lookh" ); menu_fov_target = 97.0f; @@ -245,7 +238,6 @@ static void menu_page_skater(void) menu_buttons[5].falpha = 1.0f; menu_input_cooldown = 0.25f; - player_load_model( playermodels[ cl_playermdl_id ], 1 ); } else { @@ -257,12 +249,11 @@ static void menu_page_skater(void) menu_buttons[6].falpha = 1.0f; menu_input_cooldown = 0.25f; - player_load_model( playermodels[ cl_playermdl_id ], 1 ); } } } -static void menu_update(void) +VG_STATIC void menu_update(void) { if( vg_get_button_down( "menu" ) ) { @@ -376,7 +367,7 @@ float expSustainedImpulse( float x, float f, float k ) return fminf( x*x/(f*f), 1.0f+(2.0f/f)*s*expf(-k*s)); } -static void menu_render( m4x4f projection ) +VG_STATIC void menu_render( m4x4f projection ) { glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); @@ -431,7 +422,7 @@ static void menu_render( m4x4f projection ) for( int j=0; jpnode->submesh_count; j++ ) { mdl_submesh *sm = - mdl_submesh_from_id( menu_model, btn->pnode->submesh_start+j ); + &menu_model.submesh_buffer[ btn->pnode->submesh_start+j ]; mdl_draw_submesh( sm ); } } @@ -456,9 +447,4 @@ static void menu_render( m4x4f projection ) */ } -static void menu_free(void *_) -{ - mesh_free( &menu_glmesh ); -} - #endif /* MENU_H */ diff --git a/model.h b/model.h index faa9f5f..b3650f8 100644 --- a/model.h +++ b/model.h @@ -13,9 +13,10 @@ typedef struct mdl_vert mdl_vert; typedef struct mdl_submesh mdl_submesh; typedef struct mdl_material mdl_material; typedef struct mdl_node mdl_node; -typedef struct mdl_header mdl_header; +typedef struct mdl_file_header mdl_file_header; typedef struct mdl_animation mdl_animation; typedef struct mdl_keyframe mdl_keyframe; +typedef struct mdl_context mdl_context; #define MDL_SIZE_MAX 0x1000000 #define MDL_VERT_MAX 1000000 @@ -41,7 +42,8 @@ enum classtype k_classtype_skeleton = 11, k_classtype_skin = 12, k_classtype_achievement_box = 13, - k_classtype_audio = 14 + k_classtype_audio = 14, + k_classtype_trigger = 15 }; @@ -79,9 +81,8 @@ struct mdl_node v4f q; v3f s; - union{ u32 submesh_start, sub_uid; }; - - u32 + u32 sub_uid, /* allocated in-file... too bad. */ + submesh_start, submesh_count, classtype, offset, @@ -106,9 +107,9 @@ struct mdl_animation u32 offset; }; -struct mdl_header +struct mdl_file_header { - u32 identifier, version, file_length; + u32 identifier, version, file_length, pad0; u32 vertex_count, vertex_offset, indice_count, indice_offset, @@ -116,7 +117,9 @@ struct mdl_header material_count, material_offset, node_count, node_offset, anim_count, anim_offset, - strings_offset, entdata_offset, animdata_offset; + strings_length, strings_offset, + entdata_length, entdata_offset, + keyframe_count, keyframe_offset; }; /* @@ -212,6 +215,26 @@ struct classtype_audio #pragma pack(pop) + +struct mdl_context +{ + FILE *file; + mdl_file_header info; + + /* each buffer becomes availible after each _load function is called */ + mdl_node *node_buffer; /* mdl_load_metadata() */ + mdl_submesh *submesh_buffer; + mdl_material *material_buffer; + mdl_animation *anim_buffer; + void *entdata_buffer; + const char *string_buffer; + + mdl_keyframe *keyframe_buffer; /* mdl_load_anim_data() */ + + mdl_vert *vertex_buffer; /* mdl_load_mesh_data() */ + u32 *index_buffer; +}; + /* * Simple mesh interface for OpenGL */ @@ -223,7 +246,7 @@ struct glmesh u32 loaded; }; -static void mesh_upload( glmesh *mesh, +VG_STATIC void mesh_upload( glmesh *mesh, mdl_vert *verts, u32 vert_count, u32 *indices, u32 indice_count ) { @@ -279,23 +302,23 @@ static void mesh_upload( glmesh *mesh, mesh->loaded = 1; } -static void mesh_bind( glmesh *mesh ) +VG_STATIC void mesh_bind( glmesh *mesh ) { glBindVertexArray( mesh->vao ); } -static void mesh_drawn( u32 start, u32 count ) +VG_STATIC void mesh_drawn( u32 start, u32 count ) { glDrawElements( GL_TRIANGLES, count, GL_UNSIGNED_INT, (void *)(start*sizeof(u32)) ); } -static void mesh_draw( glmesh *mesh ) +VG_STATIC void mesh_draw( glmesh *mesh ) { mesh_drawn( 0, mesh->indice_count ); } -static void mesh_free( glmesh *mesh ) +VG_STATIC void mesh_free( glmesh *mesh ) { if( mesh->loaded ) { @@ -305,156 +328,177 @@ static void mesh_free( glmesh *mesh ) } } +VG_STATIC void mdl_load_fatal_corrupt( mdl_context *mdl ) +{ + fclose( mdl->file ); + vg_file_print_invalid( mdl->file ); + vg_fatal_exit_loop( "Corrupt model" ); +} /* * Model implementation + * + * TODO. + * + * you have two api options for loading a model, first, the easy way: + * mdl_load ... + * will put the entire model straight into the linear_alloc + * + * or, to target different allocators: + * + * mdl_open + * mdl_load_metadata + * mdl_load_vertex_data + * mdl_load_indice_data + * mdl_close + * + * these should ideally be called in quick succession to limit stalls. */ -static mdl_header *mdl_load( const char *path ) +/* + * if calling mdl_open, and the file does not exist, the game will fatal quit + */ +VG_STATIC void mdl_open( mdl_context *mdl, const char *path ) { - i64 size; - mdl_header *header = vg_asset_read_s( path, &size ); + memset( mdl, 0, sizeof( mdl_context ) ); + mdl->file = fopen( path, "rb" ); - /* - * Check file is valid - */ - if( !header ) + if( !mdl->file ) { - vg_error( "Could not open '%s'\n", path ); - return NULL; + vg_error( "mdl_open('%s'): %s\n", path, strerror(errno) ); + vg_fatal_exit_loop( "see above for details" ); } - if( size < sizeof(mdl_header) ) - { - vg_free( header ); - vg_error( "Invalid file '%s' (too small for header)\n", path ); - return NULL; - } + u64 l = fread( &mdl->info, sizeof(mdl_file_header), 1, mdl->file ); + if( l != 1 ) + mdl_load_fatal_corrupt( mdl ); +} - if( header->file_length != size ) - { - vg_error( "Invalid file '%s'" - "(wrong .file_length, %ub != real file size %ub)\n", - path, header->file_length, size ); - vg_free( header ); - return NULL; - } +/* + * Load all metadata (everything up until the large buffers). Probs at most 50k + */ +VG_STATIC void mdl_load_metadata( mdl_context *mdl, void *lin_alloc ) +{ + assert( mdl->file ); + + u64 lheader = sizeof(mdl_file_header), + ldata = mdl->info.keyframe_offset - lheader; - /* - * Validate offsets and memory sections, to ensure all arrays are in-bounds, - * and that they do not overlap. - */ + void *all_data = vg_linear_alloc( lin_alloc, ldata ); - struct memregion + fseek( mdl->file, lheader, SEEK_SET ); + u64 l = fread( all_data, ldata, 1, mdl->file ); + + if( l != 1 ) { - const char *desc; - u32 count, max_count, size, offset; + vg_file_print_invalid( mdl->file ); + vg_fatal_exit_loop( "Corrupt model" ); } - regions[] = { - { - "Vertices", - header->vertex_count, MDL_VERT_MAX, - sizeof(mdl_vert), header->vertex_offset - }, - { - "Indices", - header->indice_count, MDL_INDICE_MAX, - sizeof(u32), header->indice_offset - }, - { - "Submesh", - header->submesh_count, MDL_SUBMESH_MAX, - sizeof(mdl_submesh), header->submesh_offset - }, - { - "Materials", - header->material_count, MDL_MATERIAL_MAX, - sizeof(mdl_material), header->material_offset - }, - { - "Nodes", - header->node_count, MDL_NODE_MAX, - sizeof(mdl_node), header->node_count - } - }; - for( int i=0; inode_buffer = all_data + (mdl->info.node_offset - lheader); + mdl->submesh_buffer = all_data + (mdl->info.submesh_offset - lheader); + mdl->material_buffer = all_data + (mdl->info.material_offset - lheader); + mdl->anim_buffer = all_data + (mdl->info.anim_offset - lheader); + mdl->entdata_buffer = all_data + (mdl->info.entdata_offset - lheader); + mdl->string_buffer = all_data + (mdl->info.strings_offset - lheader); +} - if( ri->count == 0 ) - continue; +/* + * Load just the mesh data + */ +VG_STATIC void mdl_load_mesh_data( mdl_context *mdl, void *lin_alloc ) +{ + assert( mdl->file ); + + u64 size_verts = mdl->info.vertex_count * sizeof(mdl_vert), + size_index = mdl->info.indice_count * sizeof(u32); - if( ri->count > ri->max_count ) - { - vg_free( header ); - vg_error( "'%s': '%s' buffer exceeds the maximum (%u/%u)\n", - path, ri->desc, ri->count, ri->max_count ); - return NULL; - } + mdl->vertex_buffer = vg_linear_alloc( lin_alloc, size_verts ); + mdl->index_buffer = vg_linear_alloc( lin_alloc, size_index ); + + { + fseek( mdl->file, mdl->info.vertex_offset, SEEK_SET ); + u64 l = fread( mdl->vertex_buffer, size_verts, 1, mdl->file ); + if( l != 1 ) + mdl_load_fatal_corrupt( mdl ); + } + { + fseek( mdl->file, mdl->info.indice_offset, SEEK_SET ); + u64 l = fread( mdl->index_buffer, size_index, 1, mdl->file ); + if( l != 1 ) + mdl_load_fatal_corrupt( mdl ); + } +} - if( ri->offset >= header->file_length ) - { - vg_free( header ); - vg_error( "'%s': '%s' buffer offset is out of range\n", - path, ri->desc ); - return NULL; - } +/* + * Load animation data + */ +VG_STATIC void mdl_load_anim_data( mdl_context *mdl, void *lin_alloc ) +{ + assert( mdl->file ); - if( ri->offset + ri->size*ri->count > header->file_length ) - { - vg_free( header ); - vg_error( "'%s': '%s' buffer size is out of range\n", - path, ri->desc ); - return NULL; - } + if( mdl->info.keyframe_count == 0 ) + return; + + u64 size_kf = mdl->info.keyframe_count * sizeof(mdl_keyframe); + mdl->keyframe_buffer = vg_linear_alloc( lin_alloc, size_kf ); + + fseek( mdl->file, mdl->info.keyframe_offset, SEEK_SET ); + u64 l = fread( mdl->keyframe_buffer, size_kf, 1, mdl->file ); + if( l != 1 ) + mdl_load_fatal_corrupt( mdl ); +} - for( int j=0; jcount == 0 ) - continue; +/* + * close file handle + */ +VG_STATIC void mdl_close( mdl_context *mdl ) +{ + fclose( mdl->file ); + mdl->file = NULL; +} - if( ri->offset >= rj->offset && - (ri->offset+ri->size*ri->count < rj->offset+rj->size*rj->count)) - { - vg_free( header ); - vg_error( "'%s': '%s' buffer overlaps '%s'\n", - path, ri->desc, rj->desc ); - return NULL; - } - } - } +/* open a model */ +VG_STATIC mdl_context *mdl_load_full( void *lin_alloc, const char *path ) +{ + /* Inspect the header by opening it, give us the size needed */ + mdl_context temp_ctx; + mdl_open( &temp_ctx, path ); - /* - * Pointer validation TODO(workshop) - */ + /* create allocator */ + u32 tot_size = temp_ctx.info.file_length + sizeof( mdl_context ); + void *data = vg_create_linear_allocator( lin_alloc, tot_size ); - /* - * strings TODO(workshop) - */ + /* copy context and load all other data */ + mdl_context *ctx = vg_linear_alloc( data, sizeof(mdl_context) ); + memcpy( ctx, &temp_ctx, sizeof(mdl_context) ); - return header; -} + mdl_load_metadata( ctx, data ); + mdl_load_anim_data( ctx, data ); + mdl_load_mesh_data( ctx, data ); + mdl_close( ctx ); -static void *mdl_baseptr( mdl_header *mdl, u32 offset ) -{ - return (void *)mdl + offset; + return ctx; } -static const char *mdl_pstr( mdl_header *mdl, u32 pstr ) +/* + * Item getters + * ---------------------------------------------------------------------------- + * TODO: Clamp access and oob errors + */ +VG_STATIC const char *mdl_pstr( mdl_context *mdl, u32 pstr ) { - return (const char *)(mdl_baseptr( mdl, mdl->strings_offset )) + pstr; + return mdl->string_buffer + pstr; } -static mdl_node *mdl_node_from_id( mdl_header *mdl, u32 id ) +VG_STATIC mdl_node *mdl_node_from_id( mdl_context *mdl, u32 id ) { - return ((mdl_node *)mdl_baseptr( mdl, mdl->node_offset )) + id; + return &mdl->node_buffer[id]; } -static mdl_node *mdl_node_from_name( mdl_header *mdl, const char *name ) +VG_STATIC mdl_node *mdl_node_from_name( mdl_context *mdl, const char *name ) { - for( int i=0; inode_count; i++ ) + for( int i=0; i < mdl->info.node_count; i++ ) { mdl_node *pnode = mdl_node_from_id( mdl, i ); @@ -465,43 +509,23 @@ static mdl_node *mdl_node_from_name( mdl_header *mdl, const char *name ) return NULL; } -static mdl_submesh *mdl_submesh_from_id( mdl_header *mdl, u32 id ) -{ - if( id >= mdl->submesh_count ) - return NULL; - - return ((mdl_submesh *)mdl_baseptr( mdl, mdl->submesh_offset )) + id; -} - -static mdl_submesh *mdl_node_submesh( mdl_header *mdl, mdl_node *node, u32 i ) -{ - if( i >= node->submesh_count ) - return NULL; - - return mdl_submesh_from_id( mdl, node->submesh_start+i ); -} - -static u32 *mdl_submesh_indices( mdl_header *mdl, mdl_submesh *sm ) +VG_STATIC mdl_submesh *mdl_node_submesh( mdl_context *mdl, + mdl_node *node, u32 i ) { - return ((u32 *)mdl_baseptr( mdl, mdl->indice_offset )) + sm->indice_start; + return &mdl->submesh_buffer[ node->submesh_start+i ]; } -static mdl_vert *mdl_submesh_vertices( mdl_header *mdl, mdl_submesh *sm ) +VG_STATIC u32 *mdl_submesh_indices( mdl_context *mdl, mdl_submesh *sm ) { - return ((mdl_vert *)mdl_baseptr(mdl,mdl->vertex_offset)) + sm->vertex_start; + return &mdl->index_buffer[ sm->indice_start ]; } -static mdl_material *mdl_material_from_id( mdl_header *mdl, u32 id ) +VG_STATIC mdl_vert *mdl_submesh_vertices( mdl_context *mdl, mdl_submesh *sm ) { - return ((mdl_material *)mdl_baseptr(mdl,mdl->material_offset)) + id; + return &mdl->vertex_buffer[ sm->vertex_start ]; } -static mdl_animation *mdl_animation_from_id( mdl_header *mdl, u32 id ) -{ - return ((mdl_animation *)mdl_baseptr(mdl,mdl->anim_offset)) + id; -} - -static void mdl_node_transform( mdl_node *pnode, m4x3f transform ) +VG_STATIC void mdl_node_transform( mdl_node *pnode, m4x3f transform ) { q_m3x3( pnode->q, transform ); v3_muls( transform[0], pnode->s[0], transform[0] ); @@ -510,20 +534,23 @@ static void mdl_node_transform( mdl_node *pnode, m4x3f transform ) v3_copy( pnode->co, transform[3] ); } -static void mdl_unpack_submesh( mdl_header *mdl, glmesh *mesh, mdl_submesh *sm ) +/* upload a mesh based on file submesh */ +VG_STATIC void mdl_unpack_submesh( mdl_context *mdl, glmesh *mesh, + mdl_submesh *sm ) { mesh_upload( mesh, mdl_submesh_vertices( mdl, sm ), sm->vertex_count, mdl_submesh_indices( mdl, sm ), sm->indice_count ); } -static void mdl_unpack_glmesh( mdl_header *mdl, glmesh *mesh ) +/* upload entire mesh from model */ +VG_STATIC void mdl_unpack_glmesh( mdl_context *mdl, glmesh *mesh ) { - u32 offset = mdl_submesh_from_id( mdl, 0 )->vertex_count; + u32 offset = mdl->submesh_buffer[0].vertex_count; - for( int i=1; i< mdl->submesh_count; i++ ) + for( int i=1; i< mdl->info.submesh_count; i++ ) { - mdl_submesh *sm = mdl_submesh_from_id( mdl, i ); - u32 *indices = mdl_submesh_indices( mdl, sm ); + mdl_submesh *sm = &mdl->submesh_buffer[i]; + u32 *indices = mdl_submesh_indices( mdl, sm ); for( u32 j=0; jindice_count; j++ ) indices[j] += offset; @@ -531,42 +558,39 @@ static void mdl_unpack_glmesh( mdl_header *mdl, glmesh *mesh ) offset += sm->vertex_count; } - mdl_vert *vertex_base = mdl_baseptr( mdl, mdl->vertex_offset ); - u32 *indice_base = mdl_baseptr( mdl, mdl->indice_offset ); - - mesh_upload( mesh, vertex_base, mdl->vertex_count, - indice_base, mdl->indice_count ); + mesh_upload( mesh, mdl->vertex_buffer, mdl->info.vertex_count, + mdl->index_buffer, mdl->info.indice_count ); } -static void mdl_draw_submesh( mdl_submesh *sm ) +VG_STATIC void mdl_draw_submesh( mdl_submesh *sm ) { mesh_drawn( sm->indice_start, sm->indice_count ); } -static void *mdl_get_entdata( mdl_header *mdl, mdl_node *pnode ) +VG_STATIC void *mdl_get_entdata( mdl_context *mdl, mdl_node *pnode ) { - return mdl_baseptr( mdl, mdl->entdata_offset ) + pnode->offset; + return mdl->entdata_buffer + pnode->offset; } -static mdl_keyframe *mdl_get_animdata( mdl_header *mdl, mdl_animation *anim ) +VG_STATIC mdl_keyframe *mdl_get_animdata( mdl_context *mdl, mdl_animation *anim ) { - return mdl_baseptr( mdl, mdl->animdata_offset ) + anim->offset; + return mdl->keyframe_buffer + anim->offset; } -static void mdl_link_materials( mdl_header *root, mdl_header *child ) +VG_STATIC void mdl_link_materials( mdl_context *root, mdl_context *child ) { u32 lookup[MDL_MATERIAL_MAX]; - for( int i=0; imaterial_count; i++ ) + for( int i=0; iinfo.material_count; i++ ) { - mdl_material *mi = mdl_material_from_id( child, i ); + mdl_material *mi = &child->material_buffer[i]; const char *si = mdl_pstr( child, mi->pstr_name ); lookup[i] = 0; - for( int j=0; jmaterial_count; j++ ) + for( int j=0; jinfo.material_count; j++ ) { - mdl_material *mj = mdl_material_from_id( root, j ); + mdl_material *mj = &root->material_buffer[j]; const char *sj = mdl_pstr( root, mj->pstr_name ); if( !strcmp( si, sj ) ) @@ -583,10 +607,10 @@ static void mdl_link_materials( mdl_header *root, mdl_header *child ) } } - for( int i=0; isubmesh_count; i++ ) + for( int i=0; iinfo.submesh_count; i++ ) { - mdl_submesh *sm = mdl_submesh_from_id( child, i ); - sm->material_id = lookup[sm->material_id]; + mdl_submesh *sm = &child->submesh_buffer[i]; + sm->material_id = lookup[sm->material_id]; } } diff --git a/models_src/alter.mdl b/models_src/alter.mdl index b5b0798bc89c92e05ca925a81c31bfecef4ae11e..502c98e5103299637a9e130228b277eedd8e60a2 100644 GIT binary patch delta 124 zcmZ2>lIhq zKnwz3fP5z?4da7oGp31dRugM1CT?(;xPfEh7n_L%ERziwmrPDs;Y2QmszR$$bb9Kg6_vl-KbMU%fU GIspJa4IN(q diff --git a/models_src/ch_default.mdl b/models_src/ch_default.mdl index 0d669618e2f47c90a23dd521b6289b8f57c1c3ee..7877bd285eea2e969acc6636748d91d024bf7c2a 100644 GIT binary patch delta 309 zcmXwyJr2S!427LE?a+1uAvQKSYc#hKrDe1 z;54-r=Y9Uk%kiGnk7NaKy8uP~kxpQo0%Vl0IlylzVM4uY1mLDs3@{~KQ@S`%-3Wlw z(08?qEN#ExsEHIEy_vbYT4<9iH`LZ^i(-J1!7x|`l({ZdTY52GtYn9P9T-f|?^`dZ n{A)F=83xOMAv=WqstJoGLi+NIk?MAD*@!L1dyGYgu`Hf{r};qt delta 286 zcmZp>&OPlKw>tyF+0_g{AoiMxL4=2a!GMc_;i(z}!v|j`1~H(x2O9$e6Oa}Fic5g_ zKnwyBKz_?hCKx@jQF!7677!|un>fW};u#x8#>s(~jND+}31%He9x#iCMTe0W%nD%9 zncTqQz{n5g-2jRUfLSuEI*fu~RsyTewoq5i5W;X_gv#S|^V9sdJ&FfxOAD;W1| NUcn@Ba&iij3joU-9n}B; diff --git a/models_src/ch_jordan.mdl b/models_src/ch_jordan.mdl index 80482dc745b6766d2fefbdcfa937ac5611253d54..0f65fb20133a08ce7d1980b317ef389f7f3a6f53 100644 GIT binary patch delta 972 zcmYk3ZAepL6vxk*yY8;tLa{ziJYgrCgq9&s z*a;^=%|)GWvRlhM+UL=AkLpyOI;mYn=Sbt&WV2Bz8aKqYA!}~wjZ+6=c`w~5nC?f{ zqP3PXPLB{ukt^r&U+J!gD001l%P-P9L{k*y@iq=1p5o2A&L7~EmuIPQhS&btodEhR zZ%8Q!0x)bPQkFviioF^b4+4~W`DFSlx4gVx1VA-;nu`_<7zuEXqRoL6(a?KDGp~|O z*=h?`**X=351}L&!k19Vwodk~t%41Z*#J!Bx#8?o!8-cSQKp;W>tirbF3P|dCC3e2 z6(0SuIL36jyksBK>W~C5`dU zZlP@DF+VgbNaZ31J!M-ERX@h31{dzr?S{@!Ur{^W*e-y5ABbEiQpumdNcB+dOi8;c?D{2$rA(n`IoualA0iE(duc*g}E+Rt22#V??`iNN~MO4%V zk=pdCN3=)Nl4w_R4eL(3VciL=rw3?P6;#xll*b9ZQBg~XZlmI#FQ$;?cv!Z5O)h1!&!-;h6x}wrTf@09~Z%>nUi#!y??J>fb_+Cec4- z`ef*|O^BLp!eE!oZ(K)Z@A#k4mBRND3#=Iuv|D=2)SGvOFUkFDp3r1rwZuw48?4#~ z#1tNj>+Zj9xgdqtJ!Uas3tqS9h3;oqH!N+)gr$P{?MSI?%i+Slxu>CxaZ4<^dBY>s z8#*(V#7w&}QF|4Kk92}}VM;2~TzhZ;alFkfiO%fJt1Kz__@LR|Tpki)3*_YVY?(!h zkv2JjDTsMqoxHGeYQtj|2S$Xt)?Vo<`{KYH!}Ql7>6;^yO%-DT%P+$S*Q{~nn96bA zSy~0&F?SE#md@K-f-H?L25OS)WVW{o6SU)%=;!s$yq6(n&PVIc<;CG(ZStBtZ)3sJY=1R|%{9R) zsXh#HZC|C#E-N%7oWmrO@xa(hJc~~GMmjFK2p^#(|FSq1FUNhI@kSQ< T-es3`=zgLU$3_i}67}Z~wBI|U delta 285 zcmX^8fc^1(c6SDbv#S|^;PHD#hRqxd3^|+(3~vM&82+qcWDo_4pI~KRU;@%9Kyfi3 z?E%Cf08+Q+9V3jM*eE=40t*Ng$xWPMGC71%VB#GeM#jm3jKY%@7U{(UF&g2QK4nP-yT=fDdE&^nUY}RF4 U&fLt+y`7tz(c$UlE1c$x0RII>cmMzZ diff --git a/models_src/ch_new.mdl b/models_src/ch_new.mdl index df1e23c0aff6a4df0acbe7bd2fafbcd5d2e1bcab..71c7a3f80fdb00f0aa4419d8696f2c3d2562d7cb 100644 GIT binary patch delta 580 zcmYk3JxIeq7>3{cw7IlWDpgR?A}Y4kr9;3B9a`w%>S9G4iga<2A{|_$LWer&5N_z^ zEVvXJsiT78qKi5>C^$NaU_b{4-;{_sczD0(ayjn1d$`DcUS?N;yHjv{PRIPfaRT_d zj-rwQIxQ0s&b^s{%Dm!|Ip!Kkl3RLH0ZvlDvq6so_X|K~R9+?~oz1kY#&u`kcHFY# zm8GSWWrMiHBbG`hF7b$^(TPhuV(E0^5|3CBI&q0dxVf~W#X;@{c^>3bwh zK%t?-;ymdBI&0KVDpNO&Fh7L-7zqI8h9O@A1G&v`?sy{C5VBVja*0mqnWDOoYgD8r zjTu62Q`Hc8Q^*-Qpj+y;gj}Q(dZdUgWZLF7Qx@&GDor~sM}6(dwy!;@woBfLOW_E) z$9hesD`b)mT~ThhA#L|#8tCWIc|)#dBJ=`;*{PYzqf;6N*{SQPjIxGdcCp`_`O+}X zzVp3S(*K@A?H8Xq<~{ps2?MGBoKB!+ApJi`h@y#g&kr-J7B)Q@=N5K6IrC=WfSFIv z#RE>-IAYg1(A=6`z6m_}_FHwERCOw?y8FE>FZ))q+2DRQsF6+vnPgS6L3^uIF7)hb EKflF*Hvj+t diff --git a/models_src/ch_outlaw.001.mdl b/models_src/ch_outlaw.001.mdl new file mode 100644 index 0000000000000000000000000000000000000000..fa405493821586f7ba8ac47e61af520d72159b0e GIT binary patch literal 99403 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 literal 0 HcmV?d00001 diff --git a/models_src/ch_outlaw.mdl b/models_src/ch_outlaw.mdl index 0fffc5ccd801b41564f3970d45b76d615c383ba9..ee1bbb80d8f32a3c27c9dd50ab9ed22650f1be99 100644 GIT binary patch delta 6194 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 delta 186344 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

2tiOz{V=9Nob~J&S$~`%it^+ZG;Fx$CBe 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%0D}uqoxz!_o=Iad!@cPf%+LW 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Ȍ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

VERk>nUgT?8v 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 BXJh~X diff --git a/models_src/mp_test.mdl b/models_src/mp_test.mdl new file mode 100644 index 0000000000000000000000000000000000000000..28b0a8bf94b89ae7c1d72829a776c40dfe5de9bd GIT binary patch literal 511 zcmZQzIJ=qw2>vsINCpNLAXW#m*?{zOAPo|J0K`l{%md_r=m;PN0TCcy7)rzVAR43} zH)ybDU_i#0D*poknrH(OAIJvlcLdT<43R~*7RCqp1q48T1M1n&Yhkk&L<6xslx+`F z%MDTzkdv5~s%K(m%uteARFs&RhpY|gd=LORfuRA!0s%}XBaDWqfT;)5_|yZP1p>(G c8|<-|kK_$x^$<3udPr1)q7MW>G&2wb06@AyaR2}S literal 0 HcmV?d00001 diff --git a/models_src/rs_cars.mdl b/models_src/rs_cars.mdl index 6e751036969aa62f70dac513a0020372f51e3c0a..40ddec8bed9d8163a7d41c3f4ad8f3ac2bf6260d 100644 GIT binary patch literal 336677 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®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 NjZfPBhTWyzAO0jpXl(!h delta 144 zcmZ2_OyuT8c6SDbv#S|^;N}ZPhHo4U41a*^EItMXne~hej6n7YAZ7yMFHqV8NP_@K z-4UQ3C_S-Jc;W;W5GsYFg;K#Ks``;Vx#cH2`nH~BsX!2$;2}@lX(~`nwK+fU(U$*BYbiTqcQ+1au+iI diff --git a/models_src/rs_foliage.mdl b/models_src/rs_foliage.mdl index bac68665acb0599c436cdac03b2e201a8a60aef2..adfdd5bebc5837bf4df1d6e5fd2a36723dd2854a 100644 GIT binary patch delta 133 zcmX?cfc41%)^G-fv#S|^ASHnjL@^vBWX=&{VE7`+$iM^?QvvcpbPbSZ2GS8g z3<51cz5tYl@j*0D|3r7oi8U4zH#kh(z%lVlDPK}feiB1^QDzE5Nl|KQb2{VpbVkOD FaR4Zi8*2an delta 126 zcmaEIfc3-yR(A%5v#S|^z$1Z?;SehWLk1%Q!yF+7h7+QU3`{_A4j>;y1Em?5LF#}Q z1VHL6fPzqZVx#cH2`nH~BsX!2$;2}@lX(~`o2N2vpUTL1K2CrkDJMUPA-yOwg`uP< HHI)GXAkZ94 diff --git a/models_src/rs_gate.mdl b/models_src/rs_gate.mdl index 30c54bc22b46b7f9f73310a02d0fb7d612a032b6..07e5ab267d8e056b92ac8547326214a1431d1e09 100644 GIT binary patch delta 118 zcmX@ab&D&Ef#K|G1|W!H1(6I4B0#Lf$iN^6q#v;`FaVhh4}h2nh8~Pyhe` diff --git a/models_src/rs_menu.mdl b/models_src/rs_menu.mdl index 160d37e2dca6b25ca9086728525b6478d340c7b6..dcee13c02f039f08e4602fe352ea2814ea535eb9 100644 GIT binary patch delta 247 zcmeC)!F78FS2zR1+0_g{5Iu(pL@_Y(FfcT;Gcah0GB9j*XJX(5ip^kQU;xQpVPjwr z0MZda3<7t6{N+#@#s|?r{S)0SC)QX@+~5Gz%D^!31B9MzzzAg&z!)1~j1Mq|0TWCO vjIja6_yA)VFvHZq7#m=W4^YNt1C|)3=_#|BmN)mXwfC?wZtr1Zx-kU+uwE=b delta 234 zcmcb;gR6T7mpcQ)+0_g{z&(eFfsu!Sp@)ruK}(c@VUHUV120hAgN1>C2}rj9#RWio zAO-=Dx|G>WFnVI6@Wcr$AXFqbaf-?05JrKCcXSvTCkHYLPgY>mnH<3Az{m{dtzgt) zWC63@09mYHmI0H_`XVNOuoam8~|u4Hnso& diff --git a/models_src/rs_scoretext.mdl b/models_src/rs_scoretext.mdl index 876dc580dcbd66c31c3d48fb47d180c66d39733c..637d1985e992f2ce4d05559a8a8361e93465dbd8 100644 GIT binary patch delta 302 zcmXxcJr06E6a?V6E}$Zch$ePkfr0~2(b5n##>N|P1dWA-g#rbwJq08dUIGgnE$|Q= zz`}vBn|ztsw?CK6D>H9N^h^n>{FrsnW=oVRMAIA5d1a7_nJ*D>q=vbUTtmI)*vD;( zeVwV299(0TTwOy6cZ-Ng;oc5&KVo)lF((Y9IA9Jw#q(U0N))Tp9tEQ0qEw<-T-@Q! wcX<={iho)1dzeN4Ktd1%0dLTEKp;u8Bv>R#Ne~E-NCXJX zoj4wWM?moFCfp>S%y%dIx9=_Yy_o2h5oY-t(0D?0b%>f9qTR@+67HTNlGtb5YuMkA zPyX-q6MXi17W>V068lb?w9{3`47r{@BGcv&*=05Z4$PJ{3tP|s3WYXP5wW!QlhCYe zy-<#=NNSVFhzs_0k(xbQ6{WeD*P*X2JkQ)k<}wJ7pumCrUH}h@P=Yd4pbB45gF5)o MIA(4T-c8FjZ?6nZ*8l(j diff --git a/models_src/rs_skydome.mdl b/models_src/rs_skydome.mdl index 9cc16f0671a8e01a1b55837586dc6e81768ae5bb..a3aea27c35f13f821893cf77ad8f7755b75f0d6c 100644 GIT binary patch delta 137 zcmX@v!uGa>Eu4Yj>}m!e$ZcW-Q4Gsj85rg=F)%2|FfhCoWMp6gimd@k0fiW1fCNyQ zAp(d&AO*;`gwilRhz9DP=x#Z&#$w_Ihlv|FCVsJ*SimybfYAX&6);|yF3`ki+3diy K-GPbmLOlRd3LCrt delta 137 zcmaFc!gjKS&7Fba>}m!e@N8maSkB78;K0PdpdiD*FhP)!fdweu!N|Y>6k@Od5fW}atNcq#5+2SjFSTyg(oX8>P!w`bYNr#^HwnK SX`aipeJ&H@h5E@UOqKwqG95?& diff --git a/models_src/rs_vig.mdl b/models_src/rs_vig.mdl index 26cdd0dc0fba211c4b39bdfbcd24e0621375ea47..2e27cf3f7c70803c54348d3bbd0a422e4bbeddb9 100644 GIT binary patch delta 295 zcmXxbAr1mD5Cza*+7gz81Oqp~LM6C$C^UF3&;uYyI6<=li^nuUph!3X>rtTUdjzIo z|0K~d+L&VN%C9L?kldG&@8jGT{t6L?kldEIYOi-rS;n>hp1~(#cnM IU#aoz2mjDCp8x;= delta 284 zcmXwzF-}535QgV}y9+#ghDT5;LTv0NYT*I4gAx-DK%(}<6F|5CFT(*WO|-MnhMtC= z!azl0;SngDoy5s*{_p=X#ccNeu=4|=%^T@FU4tG1(Ih8&X{abb=NfBuPV-THS97R8 zP1>7Y;XkWcr&{>*p8M7ER_;+&-wendI&uM)5h9$mS1`QMuTn6&$yml&MBUm~#%LHF zm2#u#SSBvw#M;_13Zud^PK`#MW$GhZ*0$m_pubParam; vg_info( " Connection status changed for %lu\n", info->m_hConn ); @@ -216,7 +216,7 @@ static void on_server_connect_status( CallbackMsg_t *msg ) } } -static void network_connect_gc(void) +VG_STATIC void network_connect_gc(void) { /* Connect to server if not connected */ SteamNetworkingIPAddr remoteAddr; @@ -236,7 +236,7 @@ static void network_connect_gc(void) hSteamNetworkingSockets, &remoteAddr, 0, NULL ); } -static void on_inet_scoreboard( SteamNetworkingMessage_t *msg ) +VG_STATIC void on_inet_scoreboard( SteamNetworkingMessage_t *msg ) { netmsg_scoreboard *sb = msg->m_pData; @@ -272,7 +272,7 @@ static void on_inet_scoreboard( SteamNetworkingMessage_t *msg ) network_scores_updated = 1; } -static void poll_connection(void) +VG_STATIC void poll_connection(void) { SteamNetworkingMessage_t *messages[32]; int len; @@ -308,7 +308,7 @@ static void poll_connection(void) /* * Subroutine to be connected to main game loop, runs all routines on timers */ -static void network_update(void) +VG_STATIC void network_update(void) { if( steam_ready ) { @@ -339,7 +339,7 @@ static void network_update(void) } } -static void network_init(void) +VG_STATIC void network_init(void) { if( steam_ready ) { @@ -349,7 +349,7 @@ static void network_init(void) } } -static void network_end(void*_) +VG_STATIC void network_end(void*_) { /* TODO: Fire off any buffered highscores that need to be setn */ if( cremote_state == k_ESteamNetworkingConnectionState_Connected || @@ -362,9 +362,9 @@ static void network_end(void*_) #else /* SR_NETWORKED */ -static void network_init(void){} -static void network_update(void){} -static void network_end(void*_){} +VG_STATIC void network_init(void){} +VG_STATIC void network_update(void){} +VG_STATIC void network_end(void*_){} #endif /* SR_NETWORKED */ #endif /* NETWORK_H */ diff --git a/network_msg.h b/network_msg.h index 1e3e475..5f1bc41 100644 --- a/network_msg.h +++ b/network_msg.h @@ -73,7 +73,7 @@ struct netmsg_scoreboard } boards[ vg_list_size(track_infos) ]; } -static scoreboard_client_data = { +VG_STATIC scoreboard_client_data = { .inetmsg_id = k_inetmsg_scoreboard, .board_count = vg_list_size(track_infos) }; diff --git a/player.h b/player.h index a7831b7..5a21afe 100644 --- a/player.h +++ b/player.h @@ -13,7 +13,7 @@ #include "skeleton.h" #include "bvh.h" -static float +VG_STATIC float k_walkspeed = 20.0f, /* no longer used */ k_runspeed = 20.0f, k_board_radius = 0.3f, @@ -38,9 +38,10 @@ static float k_walk_accel = 150.0f, k_walk_friction = 8.0f; -static int freecam = 0; -static int walk_grid_iterations = 1; -static float fc_speed = 10.0f; +VG_STATIC int cl_playermdl_id = 0; +VG_STATIC int freecam = 0; +VG_STATIC int walk_grid_iterations = 1; +VG_STATIC float fc_speed = 10.0f; /* * ----------------------------------------------------------------------------- @@ -48,7 +49,7 @@ static float fc_speed = 10.0f; * ----------------------------------------------------------------------------- */ -static struct gplayer +VG_STATIC struct gplayer { /* Physics */ rigidbody collide_front, collide_back; @@ -127,7 +128,9 @@ static struct gplayer /* player model */ struct player_model { - glmesh mesh; + glmesh player_meshes[3]; + + mdl_context meta; struct skeleton sk; struct skeleton_anim *anim_stand, *anim_highg, @@ -159,7 +162,7 @@ static struct gplayer rigidbody rb; u32 parent; } - *ragdoll; + ragdoll[32]; u32 ragdoll_count; int shoes[2]; @@ -175,12 +178,12 @@ player = /* * API */ -static float *player_get_pos(void); -static void player_kill(void); -static float *player_cam_pos(void); -static void player_save_frame(void); -static void player_restore_frame(void); -static void player_save_rewind_frame(void); +VG_STATIC float *player_get_pos(void); +VG_STATIC void player_kill(void); +VG_STATIC float *player_cam_pos(void); +VG_STATIC void player_save_frame(void); +VG_STATIC void player_restore_frame(void); +VG_STATIC void player_save_rewind_frame(void); /* * Submodules @@ -197,12 +200,20 @@ static void player_save_rewind_frame(void); * ----------------------------------------------------------------------------- */ -static void player_init(void) /* 1 */ +VG_STATIC void player_init(void) /* 1 */ { rb_init( &player.phys.rb ); rb_init( &player.collide_front ); rb_init( &player.collide_back ); + vg_convar_push( (struct vg_convar){ + .name = "cl_playermdl_id", + .data = &cl_playermdl_id, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=2, .clamp=1 }, + .persistent = 1 + }); + vg_convar_push( (struct vg_convar){ .name = "walk_speed", .data = &k_walkspeed, @@ -249,14 +260,14 @@ static void player_init(void) /* 1 */ }); player.rewind_length = 0; - player.rewind_buffer = vg_alloc( sizeof(struct rewind_frame) - * PLAYER_REWIND_FRAMES ); + player.rewind_buffer = + vg_linear_alloc( vg_mem.rtmemory, + sizeof(struct rewind_frame) * PLAYER_REWIND_FRAMES ); - /* other systems */ - vg_loader_highwater( player_model_init, player_model_free, NULL ); + player_model_init(); } -static void player_save_rewind_frame(void) +VG_STATIC void player_save_rewind_frame(void) { if( player.rewind_length < PLAYER_REWIND_FRAMES ) { @@ -278,7 +289,7 @@ static void player_save_rewind_frame(void) } /* Deal with input etc */ -static void player_update_pre(void) +VG_STATIC void player_update_pre(void) { struct player_phys *phys = &player.phys; @@ -289,7 +300,7 @@ static void player_update_pre(void) if( vg_get_button_down( "reset" ) ) { - double delta = world_routes.time - world_routes.last_use; + double delta = world.time - world.last_use; if( delta <= RESET_MAX_TIME ) { @@ -353,7 +364,7 @@ static void player_update_pre(void) } } -static void player_update_fixed(void) /* 2 */ +VG_STATIC void player_update_fixed(void) /* 2 */ { if( player.rewinding ) return; @@ -380,7 +391,7 @@ static void player_update_fixed(void) /* 2 */ } } -static void player_update_post(void) +VG_STATIC void player_update_post(void) { for( int i=0; ijump = vg_clampf( phys->jump, 0.0f, 1.0f ); } -static void player_save_frame(void) +VG_STATIC void player_save_frame(void) { player.phys_gate_frame = player.phys; } -static void player_restore_frame(void) +VG_STATIC void player_restore_frame(void) { player.phys = player.phys_gate_frame; rb_update_transform( &player.phys.rb ); } -static void player_do_motion(void) +VG_STATIC void player_do_motion(void) { struct player_phys *phys = &player.phys; @@ -684,9 +684,9 @@ static void player_do_motion(void) /* * Gate intersection, by tracing a line over the gate planes */ - for( int i=0; igate; if( gate_intersect( gate, phys->rb.co, prevco ) ) @@ -732,9 +732,9 @@ static void player_do_motion(void) /* * Free camera movement */ -static void player_mouseview(void) +VG_STATIC void player_mouseview(void) { - if( gui_want_mouse() ) + if( ui_want_mouse() ) return; static v2f mouse_last, @@ -757,7 +757,7 @@ static void player_mouseview(void) player.angles[1] = vg_clampf( player.angles[1], -VG_PIf*0.5f, VG_PIf*0.5f ); } -static void player_freecam(void) +VG_STATIC void player_freecam(void) { player_mouseview(); @@ -782,7 +782,7 @@ static void player_freecam(void) v3_add( move_vel, player.camera_pos, player.camera_pos ); } -static int reset_player( int argc, char const *argv[] ) +VG_STATIC int reset_player( int argc, char const *argv[] ) { struct player_phys *phys = &player.phys; struct respawn_point *rp = NULL, *r; diff --git a/player_ragdoll.h b/player_ragdoll.h index 28776c3..6193bf7 100644 --- a/player_ragdoll.h +++ b/player_ragdoll.h @@ -3,15 +3,16 @@ #include "player.h" -static float k_ragdoll_floatyiness = 20.0f, +VG_STATIC float k_ragdoll_floatyiness = 20.0f, k_ragdoll_floatydrag = 1.0f; /* * Setup ragdoll colliders */ -static void player_init_ragdoll( mdl_header *src ) +VG_STATIC void player_init_ragdoll(void) { struct player_model *mdl = &player.mdl; + mdl_context *src = &mdl->meta; if( !mdl->sk.collider_count ) { @@ -19,7 +20,6 @@ static void player_init_ragdoll( mdl_header *src ) return; } - mdl->ragdoll = vg_alloc(sizeof(struct ragdoll_part)*mdl->sk.collider_count); mdl->ragdoll_count = 0; for( u32 i=0; isk.bone_count; i ++ ) @@ -28,6 +28,9 @@ static void player_init_ragdoll( mdl_header *src ) if( bone->collider ) { + if( mdl->ragdoll_count > vg_list_size(player.mdl.ragdoll) ) + vg_fatal_exit_loop( "Playermodel has too many colliders" ); + struct ragdoll_part *rp = &mdl->ragdoll[ mdl->ragdoll_count ++ ]; rp->bone_id = i; @@ -73,7 +76,7 @@ static void player_init_ragdoll( mdl_header *src ) /* * Make the player model copy the ragdoll */ -static void player_model_copy_ragdoll(void) +VG_STATIC void player_model_copy_ragdoll(void) { struct player_model *mdl = &player.mdl; @@ -92,7 +95,7 @@ static void player_model_copy_ragdoll(void) /* * Make the ragdoll copy the player model */ -static void player_ragdoll_copy_model( v3f v ) +VG_STATIC void player_ragdoll_copy_model( v3f v ) { struct player_model *mdl = &player.mdl; @@ -117,7 +120,7 @@ static void player_ragdoll_copy_model( v3f v ) /* * Draw rigidbody colliders for ragdoll */ -static void player_debug_ragdoll(void) +VG_STATIC void player_debug_ragdoll(void) { struct player_model *mdl = &player.mdl; @@ -128,7 +131,7 @@ static void player_debug_ragdoll(void) /* * Ragdoll physics step */ -static void player_ragdoll_iter(void) +VG_STATIC void player_ragdoll_iter(void) { struct player_model *mdl = &player.mdl; rb_solver_reset(); diff --git a/render.h b/render.h index 8122b2a..209bed6 100644 --- a/render.h +++ b/render.h @@ -9,11 +9,11 @@ #include "shaders/standard.h" #include "shaders/vblend.h" -static void render_water_texture( m4x3f camera ); -static void render_water_surface( m4x4f pv, m4x3f camera ); -static void render_world( m4x4f projection, m4x3f camera ); -static void shader_link_standard_ub( GLuint shader, int texture_id ); -static void render_world_depth( m4x4f projection, m4x3f camera ); +VG_STATIC void render_water_texture( m4x3f camera ); +VG_STATIC void render_water_surface( m4x4f pv, m4x3f camera ); +VG_STATIC void render_world( m4x4f projection, m4x3f camera ); +VG_STATIC void shader_link_standard_ub( GLuint shader, int texture_id ); +VG_STATIC void render_world_depth( m4x4f projection, m4x3f camera ); #ifndef RENDER_H #define RENDER_H @@ -27,7 +27,7 @@ struct framebuffer int allocated; }; -static struct pipeline +VG_STATIC struct pipeline { float fov; glmesh fsquad; @@ -103,7 +103,7 @@ gpipeline = /* * http://www.terathon.com/lengyel/Lengyel-Oblique.pdf */ -static void plane_clip_projection( m4x4f mat, v4f plane ) +VG_STATIC void plane_clip_projection( m4x4f mat, v4f plane ) { v4f c = { @@ -121,7 +121,7 @@ static void plane_clip_projection( m4x4f mat, v4f plane ) mat[3][2] = c[3]; } -static void pipeline_projection( m4x4f mat, float nearz, float farz ) +VG_STATIC void pipeline_projection( m4x4f mat, float nearz, float farz ) { m4x4_projection( mat, gpipeline.fov, @@ -132,7 +132,7 @@ static void pipeline_projection( m4x4f mat, float nearz, float farz ) /* * Shaders */ -static void shader_link_standard_ub( GLuint shader, int texture_id ) +VG_STATIC void shader_link_standard_ub( GLuint shader, int texture_id ) { GLuint idx = glGetUniformBlockIndex( shader, "ub_world_lighting" ); glUniformBlockBinding( shader, idx, 0 ); @@ -142,7 +142,7 @@ static void shader_link_standard_ub( GLuint shader, int texture_id ) glUniform1i( glGetUniformLocation( shader, "g_world_depth" ), texture_id ); } -static void render_update_lighting_ub(void) +VG_STATIC void render_update_lighting_ub(void) { struct ub_world_lighting *winf = &gpipeline.ub_world_lighting; int c = 0; @@ -178,7 +178,7 @@ static void render_update_lighting_ub(void) * Framebuffers */ -static void fb_use( struct framebuffer *fb ) +VG_STATIC void fb_use( struct framebuffer *fb ) { if( !fb ) { @@ -192,7 +192,7 @@ static void fb_use( struct framebuffer *fb ) } } -static void fb_init( struct framebuffer *fb ) +VG_STATIC void fb_init( struct framebuffer *fb ) { i32 ix = vg.window_x / fb->div, iy = vg.window_y / fb->div; @@ -222,19 +222,19 @@ static void fb_init( struct framebuffer *fb ) fb->allocated = 1; } -static void fb_free( struct framebuffer *fb ) +VG_STATIC void fb_free( struct framebuffer *fb ) { glDeleteTextures( 1, &fb->colour ); glDeleteFramebuffers( 1, &fb->fb ); } -static void fb_bindtex( struct framebuffer *fb, int texture ) +VG_STATIC void fb_bindtex( struct framebuffer *fb, int texture ) { glActiveTexture( GL_TEXTURE0 + texture ); glBindTexture( GL_TEXTURE_2D, fb->colour ); } -static void fb_resize( struct framebuffer *fb ) +VG_STATIC void fb_resize( struct framebuffer *fb ) { if( !fb->allocated ) return; @@ -250,7 +250,7 @@ static void fb_resize( struct framebuffer *fb ) glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, ix, iy ); } -static void render_fb_resize(void) +VG_STATIC void render_fb_resize(void) { if( gpipeline.ready ) { @@ -261,7 +261,7 @@ static void render_fb_resize(void) } /* used for drawing player onto */ -static void render_init_temp_buffer(void) +VG_STATIC void render_init_temp_buffer(void) { vg_info( "[render] Allocate temporary framebuffer\n" ); @@ -284,7 +284,7 @@ static void render_init_temp_buffer(void) /* used for drawing world depth from the top view, used in our water and * lighting calculations */ -static void render_init_depthmap_buffer(void) +VG_STATIC void render_init_depthmap_buffer(void) { vg_info( "[render] Allocate depth map buffer\n" ); @@ -306,7 +306,7 @@ static void render_init_depthmap_buffer(void) VG_CHECK_GL_ERR(); } -static void render_init_fs_quad(void) +VG_STATIC void render_init_fs_quad(void) { vg_info( "[render] Allocate quad\n" ); @@ -326,7 +326,7 @@ static void render_init_fs_quad(void) VG_CHECK_GL_ERR(); } -static void render_init_uniform_buffers(void) +VG_STATIC void render_init_uniform_buffers(void) { vg_info( "[render] Allocate uniform buffer\n" ); @@ -341,7 +341,7 @@ static void render_init_uniform_buffers(void) VG_CHECK_GL_ERR(); } -static void render_init(void) +VG_STATIC void render_init(void) { shader_blit_register(); shader_standard_register(); @@ -361,24 +361,10 @@ static void render_init(void) vg_release_thread_sync(); } -static void render_free(void *_) -{ - glDeleteBuffers( 1, &gpipeline.ubo_world_lighting ); - - glDeleteVertexArrays( 1, &gpipeline.fsquad.vao ); - glDeleteBuffers( 1, &gpipeline.fsquad.vbo ); - - glDeleteFramebuffers( 1, &gpipeline.fb_depthmap ); - glDeleteTextures( 1, &gpipeline.rgb_depthmap ); - - glDeleteFramebuffers( 1, &gpipeline.fb_background ); - glDeleteTextures( 1, &gpipeline.rgb_background ); -} - /* * Utility */ -static void render_fsquad(void) +VG_STATIC void render_fsquad(void) { glBindVertexArray( gpipeline.fsquad.vao ); glDrawArrays( GL_TRIANGLES, 0, 6 ); diff --git a/rigidbody.h b/rigidbody.h index b9b863a..94ad181 100644 --- a/rigidbody.h +++ b/rigidbody.h @@ -11,8 +11,8 @@ #include "bvh.h" #include "scene.h" -static void rb_tangent_basis( v3f n, v3f tx, v3f ty ); -static bh_system bh_system_rigidbodies; +VG_STATIC void rb_tangent_basis( v3f n, v3f tx, v3f ty ); +VG_STATIC bh_system bh_system_rigidbodies; #ifndef RIGIDBODY_H #define RIGIDBODY_H @@ -23,7 +23,7 @@ static bh_system bh_system_rigidbodies; * ----------------------------------------------------------------------------- */ -static const float +VG_STATIC const float k_rb_rate = (1.0/VG_TIMESTEP_FIXED), k_rb_delta = (1.0/k_rb_rate), k_friction = 0.6f, @@ -74,7 +74,7 @@ struct rigidbody struct rb_scene { - scene *pscene; + bh_tree *bh_scene; } scene; } @@ -94,7 +94,7 @@ struct rigidbody m4x3f to_world, to_local; }; -static struct contact +VG_STATIC struct contact { rigidbody *rba, *rbb; v3f co, n; @@ -105,7 +105,7 @@ static struct contact u32 element_id; } rb_contact_buffer[256]; -static int rb_contact_count = 0; +VG_STATIC int rb_contact_count = 0; /* * ----------------------------------------------------------------------------- @@ -113,13 +113,13 @@ static int rb_contact_count = 0; * ----------------------------------------------------------------------------- */ -static float sphere_volume( float radius ) +VG_STATIC float sphere_volume( float radius ) { float r3 = radius*radius*radius; return (4.0f/3.0f) * VG_PIf * r3; } -static void rb_tangent_basis( v3f n, v3f tx, v3f ty ) +VG_STATIC void rb_tangent_basis( v3f n, v3f tx, v3f ty ) { /* Compute tangent basis (box2d) */ if( fabsf( n[0] ) >= 0.57735027f ) @@ -145,7 +145,7 @@ static void rb_tangent_basis( v3f n, v3f tx, v3f ty ) * ----------------------------------------------------------------------------- */ -static void rb_debug_contact( rb_ct *ct ) +VG_STATIC void rb_debug_contact( rb_ct *ct ) { v3f p1; v3_muladds( ct->co, ct->n, 0.1f, p1 ); @@ -153,7 +153,7 @@ static void rb_debug_contact( rb_ct *ct ) vg_line( ct->co, p1, 0xffffffff ); } -static void debug_sphere( m4x3f m, float radius, u32 colour ) +VG_STATIC void debug_sphere( m4x3f m, float radius, u32 colour ) { v3f ly = { 0.0f, 0.0f, radius }, lx = { 0.0f, radius, 0.0f }, @@ -187,7 +187,7 @@ static void debug_sphere( m4x3f m, float radius, u32 colour ) } } -static void debug_capsule( m4x3f m, float radius, float h, u32 colour ) +VG_STATIC void debug_capsule( m4x3f m, float radius, float h, u32 colour ) { v3f ly = { 0.0f, 0.0f, radius }, lx = { 0.0f, radius, 0.0f }, @@ -269,7 +269,7 @@ static void debug_capsule( m4x3f m, float radius, float h, u32 colour ) } } -static void rb_debug( rigidbody *rb, u32 colour ) +VG_STATIC void rb_debug( rigidbody *rb, u32 colour ) { if( rb->type == k_rb_shape_box ) { @@ -303,7 +303,7 @@ static void rb_debug( rigidbody *rb, u32 colour ) /* * Update world space bounding box based on local one */ -static void rb_update_bounds( rigidbody *rb ) +VG_STATIC void rb_update_bounds( rigidbody *rb ) { box_copy( rb->bbx, rb->bbx_world ); m4x3_transform_aabb( rb->to_world, rb->bbx_world ); @@ -312,7 +312,7 @@ static void rb_update_bounds( rigidbody *rb ) /* * Commit transform to rigidbody. Updates matrices */ -static void rb_update_transform( rigidbody *rb ) +VG_STATIC void rb_update_transform( rigidbody *rb ) { q_normalize( rb->q ); q_m3x3( rb->q, rb->to_world ); @@ -334,7 +334,7 @@ static void rb_update_transform( rigidbody *rb ) * Extrapolate rigidbody into a transform based on vg accumulator. * Useful for rendering */ -static void rb_extrapolate_transform( rigidbody *rb, m4x3f transform ) +VG_STATIC void rb_extrapolate_transform( rigidbody *rb, m4x3f transform ) { float substep = vg_clampf( vg.accumulator / k_rb_delta, 0.0f, 1.0f ); @@ -367,7 +367,7 @@ static void rb_extrapolate_transform( rigidbody *rb, m4x3f transform ) /* * Initialize rigidbody and calculate masses, inertia */ -static void rb_init( rigidbody *rb ) +VG_STATIC void rb_init( rigidbody *rb ) { float volume = 1.0f; @@ -397,7 +397,7 @@ static void rb_init( rigidbody *rb ) else if( rb->type == k_rb_shape_scene ) { rb->is_world = 1; - box_copy( rb->inf.scene.pscene->bbx, rb->bbx ); + box_copy( rb->inf.scene.bh_scene->nodes[0].bbx, rb->bbx ); } if( rb->is_world ) @@ -438,7 +438,7 @@ static void rb_init( rigidbody *rb ) rb_update_transform( rb ); } -static void rb_iter( rigidbody *rb ) +VG_STATIC void rb_iter( rigidbody *rb ) { v3f gravity = { 0.0f, -9.8f, 0.0f }; v3_muladds( rb->v, gravity, k_rb_delta, rb->v ); @@ -475,7 +475,7 @@ static void rb_iter( rigidbody *rb ) * These closest point tests were learned from Real-Time Collision Detection by * Christer Ericson */ -static float closest_segment_segment( v3f p1, v3f q1, v3f p2, v3f q2, +VG_STATIC float closest_segment_segment( v3f p1, v3f q1, v3f p2, v3f q2, float *s, float *t, v3f c1, v3f c2) { v3f d1,d2,r; @@ -552,13 +552,13 @@ static float closest_segment_segment( v3f p1, v3f q1, v3f p2, v3f q2, return v3_length2( v0 ); } -static void closest_point_aabb( v3f p, boxf box, v3f dest ) +VG_STATIC void closest_point_aabb( v3f p, boxf box, v3f dest ) { v3_maxv( p, box[0], dest ); v3_minv( dest, box[1], dest ); } -static void closest_point_obb( v3f p, rigidbody *rb, v3f dest ) +VG_STATIC void closest_point_obb( v3f p, rigidbody *rb, v3f dest ) { v3f local; m4x3_mulv( rb->to_local, p, local ); @@ -566,7 +566,7 @@ static void closest_point_obb( v3f p, rigidbody *rb, v3f dest ) m4x3_mulv( rb->to_world, local, dest ); } -static float closest_point_segment( v3f a, v3f b, v3f point, v3f dest ) +VG_STATIC float closest_point_segment( v3f a, v3f b, v3f point, v3f dest ) { v3f v0, v1; v3_sub( b, a, v0 ); @@ -578,7 +578,7 @@ static float closest_point_segment( v3f a, v3f b, v3f point, v3f dest ) return t; } -static void closest_on_triangle( v3f p, v3f tri[3], v3f dest ) +VG_STATIC void closest_on_triangle( v3f p, v3f tri[3], v3f dest ) { v3f ab, ac, ap; float d1, d2; @@ -667,7 +667,7 @@ static void closest_on_triangle( v3f p, v3f tri[3], v3f dest ) v3_muladds( dest, ac, w, dest ); } -static void closest_on_triangle_1( v3f p, v3f tri[3], v3f dest ) +VG_STATIC void closest_on_triangle_1( v3f p, v3f tri[3], v3f dest ) { v3f ab, ac, ap; float d1, d2; @@ -759,7 +759,7 @@ static void closest_on_triangle_1( v3f p, v3f tri[3], v3f dest ) /* * Project AABB, and triangle interval onto axis to check if they overlap */ -static int rb_box_triangle_interval( v3f extent, v3f axis, v3f tri[3] ) +VG_STATIC int rb_box_triangle_interval( v3f extent, v3f axis, v3f tri[3] ) { float @@ -780,7 +780,7 @@ static int rb_box_triangle_interval( v3f extent, v3f axis, v3f tri[3] ) /* * Seperating axis test box vs triangle */ -static int rb_box_triangle_sat( rigidbody *rba, v3f tri_src[3] ) +VG_STATIC int rb_box_triangle_sat( rigidbody *rba, v3f tri_src[3] ) { v3f tri[3]; @@ -870,7 +870,7 @@ struct capsule_manifold * Expand a line manifold with a new pair. t value is the time along segment * on the oriented object which created this pair. */ -static void rb_capsule_manifold( v3f pa, v3f pb, float t, float r, +VG_STATIC void rb_capsule_manifold( v3f pa, v3f pb, float t, float r, capsule_manifold *manifold ) { v3f delta; @@ -894,13 +894,13 @@ static void rb_capsule_manifold( v3f pa, v3f pb, float t, float r, } } -static void rb_capsule_manifold_init( capsule_manifold *manifold ) +VG_STATIC void rb_capsule_manifold_init( capsule_manifold *manifold ) { manifold->t0 = INFINITY; manifold->t1 = -INFINITY; } -static int rb_capsule_manifold_done( rigidbody *rba, rigidbody *rbb, +VG_STATIC int rb_capsule_manifold_done( rigidbody *rba, rigidbody *rbb, capsule_manifold *manifold, rb_ct *buf ) { float h = rba->inf.capsule.height, @@ -959,7 +959,7 @@ static int rb_capsule_manifold_done( rigidbody *rba, rigidbody *rbb, return count; } -static int rb_capsule_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_capsule_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { float h = rba->inf.capsule.height, ra = rba->inf.capsule.radius, @@ -999,7 +999,7 @@ static int rb_capsule_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return 0; } -static int rb_capsule_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_capsule_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { float ha = rba->inf.capsule.height, hb = rbb->inf.capsule.height, @@ -1037,7 +1037,7 @@ static int rb_capsule_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) /* * Generates up to two contacts; optimised for the most stable manifold */ -static int rb_capsule_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_capsule_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { float h = rba->inf.capsule.height, r = rba->inf.capsule.radius; @@ -1161,7 +1161,7 @@ static int rb_capsule_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return rb_capsule_manifold_done( rba, rbb, &manifold, buf ); } -static int rb_sphere_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_sphere_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { v3f co, delta; @@ -1218,7 +1218,7 @@ static int rb_sphere_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return 0; } -static int rb_sphere_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_sphere_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { v3f delta; v3_sub( rba->co, rbb->co, delta ); @@ -1247,7 +1247,7 @@ static int rb_sphere_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return 0; } -static int rb_sphere_triangle( rigidbody *rba, rigidbody *rbb, +VG_STATIC int rb_sphere_triangle( rigidbody *rba, rigidbody *rbb, v3f tri[3], rb_ct *buf ) { v3f delta, co; @@ -1284,22 +1284,22 @@ static int rb_sphere_triangle( rigidbody *rba, rigidbody *rbb, return 0; } -static int rb_sphere_scene( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_sphere_scene( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { - scene *sc = rbb->inf.scene.pscene; + scene *sc = rbb->inf.scene.bh_scene->user; u32 geo[128]; v3f tri[3]; - int len = bh_select( &sc->bhtris, rba->bbx_world, geo, 128 ); + int len = bh_select( rbb->inf.scene.bh_scene, rba->bbx_world, geo, 128 ); int count = 0; for( int i=0; iindices[ geo[i]*3 ]; + u32 *ptri = &sc->arrindices[ geo[i]*3 ]; for( int j=0; j<3; j++ ) - v3_copy( sc->verts[ptri[j]].co, tri[j] ); + v3_copy( sc->arrvertices[ptri[j]].co, tri[j] ); vg_line(tri[0],tri[1],0xff00ff00 ); vg_line(tri[1],tri[2],0xff00ff00 ); @@ -1318,22 +1318,22 @@ static int rb_sphere_scene( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return count; } -static int rb_box_scene( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_box_scene( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { - scene *sc = rbb->inf.scene.pscene; + scene *sc = rbb->inf.scene.bh_scene->user; u32 geo[128]; v3f tri[3]; - int len = bh_select( &sc->bhtris, rba->bbx_world, geo, 128 ); + int len = bh_select( rbb->inf.scene.bh_scene, rba->bbx_world, geo, 128 ); int count = 0; for( int i=0; iindices[ geo[i]*3 ]; + u32 *ptri = &sc->arrindices[ geo[i]*3 ]; for( int j=0; j<3; j++ ) - v3_copy( sc->verts[ptri[j]].co, tri[j] ); + v3_copy( sc->arrvertices[ptri[j]].co, tri[j] ); if( rb_box_triangle_sat( rba, tri ) ) { @@ -1458,7 +1458,7 @@ static int rb_box_scene( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return count; } -static int RB_MATRIX_ERROR( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int RB_MATRIX_ERROR( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { vg_error( "Collision type is unimplemented between types %d and %d\n", rba->type, rbb->type ); @@ -1466,27 +1466,27 @@ static int RB_MATRIX_ERROR( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) return 0; } -static int rb_sphere_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_sphere_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { return rb_capsule_sphere( rbb, rba, buf ); } -static int rb_box_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_box_capsule( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { return rb_capsule_box( rbb, rba, buf ); } -static int rb_box_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_box_sphere( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { return rb_sphere_box( rbb, rba, buf ); } -static int rb_scene_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) +VG_STATIC int rb_scene_box( rigidbody *rba, rigidbody *rbb, rb_ct *buf ) { return rb_box_scene( rbb, rba, buf ); } -static int (*rb_jump_table[4][4])( rigidbody *a, rigidbody *b, rb_ct *buf ) = +VG_STATIC int (*rb_jump_table[4][4])( rigidbody *a, rigidbody *b, rb_ct *buf ) = { /* box */ /* Sphere */ /* Capsule */ /* Mesh */ { RB_MATRIX_ERROR, rb_box_sphere, rb_box_capsule, rb_box_scene }, @@ -1495,7 +1495,7 @@ static int (*rb_jump_table[4][4])( rigidbody *a, rigidbody *b, rb_ct *buf ) = { rb_scene_box, RB_MATRIX_ERROR, RB_MATRIX_ERROR, RB_MATRIX_ERROR } }; -static int rb_collide( rigidbody *rba, rigidbody *rbb ) +VG_STATIC int rb_collide( rigidbody *rba, rigidbody *rbb ) { int (*collider_jump)(rigidbody *rba, rigidbody *rbb, rb_ct *buf ) = rb_jump_table[rba->type][rbb->type]; @@ -1530,12 +1530,12 @@ static int rb_collide( rigidbody *rba, rigidbody *rbb ) * ----------------------------------------------------------------------------- */ -static void rb_solver_reset(void) +VG_STATIC void rb_solver_reset(void) { rb_contact_count = 0; } -static rb_ct *rb_global_ct(void) +VG_STATIC rb_ct *rb_global_ct(void) { return rb_contact_buffer + rb_contact_count; } @@ -1543,7 +1543,7 @@ static rb_ct *rb_global_ct(void) /* * Initializing things like tangent vectors */ -static void rb_presolve_contacts( rb_ct *buffer, int len ) +VG_STATIC void rb_presolve_contacts( rb_ct *buffer, int len ) { for( int i=0; irba, *rbb = ct->rbb; @@ -1612,7 +1612,7 @@ static void rb_rcv( rb_ct *ct, v3f rv, v3f da, v3f db ) /* * Apply impulse to object */ -static void rb_linear_impulse( rigidbody *rb, v3f delta, v3f impulse ) +VG_STATIC void rb_linear_impulse( rigidbody *rb, v3f delta, v3f impulse ) { /* linear */ v3_muladds( rb->v, impulse, rb->inv_mass, rb->v ); @@ -1628,7 +1628,7 @@ static void rb_linear_impulse( rigidbody *rb, v3f delta, v3f impulse ) /* * One iteration to solve the contact constraint */ -static void rb_solve_contacts( rb_ct *buf, int len ) +VG_STATIC void rb_solve_contacts( rb_ct *buf, int len ) { for( int i=0; ibbx_world ); } -static float rb_bh_centroid( void *user, u32 item_index, int axis ) +VG_STATIC float rb_bh_centroid( void *user, u32 item_index, int axis ) { rigidbody *rb = &((rigidbody *)user)[ item_index ]; return (rb->bbx_world[axis][0] + rb->bbx_world[1][axis]) * 0.5f; } -static void rb_bh_swap( void *user, u32 ia, u32 ib ) +VG_STATIC void rb_bh_swap( void *user, u32 ia, u32 ib ) { rigidbody temp, *rba, *rbb; rba = &((rigidbody *)user)[ ia ]; @@ -1936,13 +1936,13 @@ static void rb_bh_swap( void *user, u32 ia, u32 ib ) *rbb = temp; } -static void rb_bh_debug( void *user, u32 item_index ) +VG_STATIC void rb_bh_debug( void *user, u32 item_index ) { rigidbody *rb = &((rigidbody *)user)[ item_index ]; rb_debug( rb, 0xff00ffff ); } -static bh_system bh_system_rigidbodies = +VG_STATIC bh_system bh_system_rigidbodies = { .expand_bound = rb_bh_expand_bound, .item_centroid = rb_bh_centroid, diff --git a/scene.h b/scene.h index a4f6bd1..51ce103 100644 --- a/scene.h +++ b/scene.h @@ -9,70 +9,89 @@ typedef struct scene scene; struct scene { - glmesh mesh; + mdl_vert *arrvertices; + u32 *arrindices; - mdl_vert *verts; - u32 *indices; - - bh_tree bhtris; - u32 vertex_count, - indice_count, - vertex_cap, - indice_cap; + u32 vertex_count, indice_count, + max_vertices, max_indices; boxf bbx; - - u32 shadower_count, - shadower_cap; - mdl_submesh submesh; }; -static void scene_init( scene *pscene ) +/* Initialize a scene description with bounded buffers */ +VG_STATIC scene *scene_init( void *lin_alloc, u32 max_verts, u32 max_indices ) { - pscene->verts = NULL; - pscene->indices = NULL; + u32 vertex_length = max_verts * sizeof(mdl_vert), + index_length = max_indices * sizeof(u32), + tot_size = sizeof(scene) + vertex_length + index_length; + + scene *pscene = vg_linear_alloc( lin_alloc, tot_size ); + + pscene->arrvertices = (mdl_vert *)(pscene+1); + pscene->arrindices = (u32 *)( pscene->arrvertices + max_verts ); + pscene->vertex_count = 0; pscene->indice_count = 0; - pscene->shadower_count = 0; - pscene->shadower_cap = 0; + pscene->max_vertices = max_verts; + pscene->max_indices = max_indices; + pscene->submesh.indice_start = 0; pscene->submesh.indice_count = 0; v3_fill( pscene->bbx[0], 999999.9f ); v3_fill( pscene->bbx[1], -999999.9f ); + + return pscene; } /* * Append a model into the scene with a given transform */ -static void scene_add_submesh( scene *pscene, mdl_header *mdl, - mdl_submesh *sm, m4x3f transform ) +VG_STATIC void scene_add_submesh( scene *pscene, mdl_context *mdl, + mdl_submesh *sm, m4x3f transform ) { - pscene->verts = buffer_reserve( pscene->verts, pscene->vertex_count, - &pscene->vertex_cap, sm->vertex_count, sizeof(mdl_vert) ); + if( pscene->vertex_count + sm->vertex_count > pscene->max_vertices ) + { + vg_error( "%u(current) + %u > %u\n", pscene->vertex_count, + sm->vertex_count, + pscene->max_vertices ); - pscene->indices = buffer_reserve( pscene->indices, pscene->indice_count, - &pscene->indice_cap, sm->indice_count, sizeof(u32) ); + vg_warn( "%p ... %p\n", pscene, sm ); + vg_fatal_exit_loop( "Scene vertex buffer overflow" ); + } - m3x3f normal_matrix; - m3x3_copy( transform, normal_matrix ); - v3_normalize( normal_matrix[0] ); - v3_normalize( normal_matrix[1] ); - v3_normalize( normal_matrix[2] ); + if( pscene->indice_count + sm->indice_count > pscene->max_indices ) + { + vg_error( "%u(current) + %u > %u\n", pscene->indice_count, + sm->indice_count, + pscene->max_indices ); + vg_warn( "%p ... %p\n", pscene, sm ); + + vg_fatal_exit_loop( "Scene index buffer overflow" ); + } + + mdl_vert *src_verts = mdl_submesh_vertices( mdl, sm ), + *dst_verts = &pscene->arrvertices[ pscene->vertex_count ]; + + u32 *src_indices = mdl_submesh_indices( mdl, sm ), + *dst_indices = &pscene->arrindices[ pscene->indice_count ]; /* Transform and place vertices */ - mdl_vert *src_verts = mdl_submesh_vertices( mdl, sm ); - u32 *src_indices = mdl_submesh_indices( mdl, sm ); - boxf bbxnew; box_copy( sm->bbx, bbxnew ); m4x3_transform_aabb( transform, bbxnew ); box_concat( pscene->bbx, bbxnew ); + + m3x3f normal_matrix; + m3x3_copy( transform, normal_matrix ); + v3_normalize( normal_matrix[0] ); + v3_normalize( normal_matrix[1] ); + v3_normalize( normal_matrix[2] ); for( u32 i=0; ivertex_count; i++ ) { - mdl_vert *pvert = &pscene->verts[ pscene->vertex_count+i ], + mdl_vert *pvert = &dst_verts[ i ], *src = &src_verts[ i ]; m4x3_mulv( transform, src->co, pvert->co ); @@ -87,23 +106,24 @@ static void scene_add_submesh( scene *pscene, mdl_header *mdl, for( u32 i=0; iindice_count; i++ ) { - u32 *pidx = &pscene->indices[ pscene->indice_count+i ]; - *pidx = src_indices[i] + pscene->vertex_count; + dst_indices[i] = src_indices[i] + pscene->vertex_count; } pscene->vertex_count += sm->vertex_count; pscene->indice_count += sm->indice_count; + } /* * One by one adders for simplified access (mostly procedural stuff) */ -static void scene_push_tri( scene *pscene, u32 tri[3] ) +VG_STATIC void scene_push_tri( scene *pscene, u32 tri[3] ) { - pscene->indices = buffer_reserve( pscene->indices, pscene->indice_count, - &pscene->indice_cap, 3, sizeof(u32) ); + if( pscene->indice_count + 3 > pscene->max_indices ) + vg_fatal_exit_loop( "Scene vertex buffer overflow" ); + + u32 *dst = &pscene->arrindices[ pscene->indice_count ]; - u32 *dst = &pscene->indices[pscene->indice_count]; dst[0] = tri[0]; dst[1] = tri[1]; dst[2] = tri[2]; @@ -111,14 +131,18 @@ static void scene_push_tri( scene *pscene, u32 tri[3] ) pscene->indice_count += 3; } -static void scene_push_vert( scene *pscene, mdl_vert *v ) +VG_STATIC void scene_push_vert( scene *pscene, mdl_vert *v ) { - pscene->verts = buffer_reserve( pscene->verts, pscene->vertex_count, - &pscene->vertex_cap, 1, sizeof(mdl_vert) ); - pscene->verts[pscene->vertex_count ++] = *v; + if( pscene->vertex_count + 1 > pscene->max_vertices ) + vg_fatal_exit_loop( "Scene vertex buffer overflow" ); + + mdl_vert *dst = &pscene->arrvertices[ pscene->vertex_count ]; + *dst = *v; + + pscene->vertex_count ++; } -static void scene_copy_slice( scene *pscene, mdl_submesh *sm ) +VG_STATIC void scene_copy_slice( scene *pscene, mdl_submesh *sm ) { sm->indice_start = pscene->submesh.indice_start; sm->indice_count = pscene->indice_count - sm->indice_start; @@ -130,79 +154,99 @@ static void scene_copy_slice( scene *pscene, mdl_submesh *sm ) pscene->submesh.vertex_start = pscene->vertex_count; } -static void scene_fix( scene *pscene ) +/* finalization: tightly pack data */ +__attribute__((warn_unused_result)) +VG_STATIC scene *scene_fix( void *lin_alloc, scene *pscene ) { - buffer_fix( pscene->verts, pscene->vertex_count, - &pscene->vertex_cap, sizeof( mdl_vert )); + u32 vertex_length = pscene->vertex_count * sizeof(mdl_vert), + index_length = pscene->indice_count * sizeof(u32), + tot_size = sizeof(scene) + vertex_length + index_length; - buffer_fix( pscene->indices, pscene->indice_count, - &pscene->indice_cap, sizeof( mdl_vert )); -} + scene *src_scene = pscene; + mdl_vert *src_verts = pscene->arrvertices; + u32 *src_indices = pscene->arrindices; -static void scene_upload( scene *pscene ) -{ - mesh_upload( &pscene->mesh, - pscene->verts, pscene->vertex_count, - pscene->indices, pscene->indice_count ); + scene *dst_scene = vg_linear_resize( lin_alloc, pscene, tot_size ); + memcpy( dst_scene, src_scene, sizeof(scene) ); - vg_info( "Scene upload\n" ); - vg_info( " indices:%u\n", pscene->indice_count ); - vg_info( " verts:%u\n", pscene->vertex_count ); -} + void *dst_verts = dst_scene+1, + *dst_indices = dst_verts + vertex_length; -static void scene_bind( scene *pscene ) -{ - mesh_bind( &pscene->mesh ); -} + memcpy( dst_verts, src_verts, vertex_length ); + memcpy( dst_indices, src_indices, index_length ); -static void scene_draw( scene *pscene ) -{ - mesh_drawn( 0, pscene->indice_count ); + dst_scene->arrvertices = dst_verts; + dst_scene->arrindices = dst_indices; + dst_scene->max_vertices = pscene->vertex_count; + dst_scene->max_indices = pscene->indice_count; + + return dst_scene; } -static void scene_free_offline_buffers( scene *pscene ) +#if 0 +/* finalization: delete any offline buffers and reduce size */ +__attribute__((warn_unused_result)) +VG_STATIC scene *scene_free_offline_buffers( void *lin_alloc, scene *pscene ) { - vg_free( pscene->verts ); - vg_free( pscene->indices ); + u32 tot_size = sizeof(scene); + + scene *src_scene = pscene; + mdl_vert *src_verts = pscene->arrvertices; + u32 *src_indices = pscene->arrindices; + + scene *dst_scene = vg_linear_resize( lin_alloc, pscene, tot_size ); + memcpy( dst_scene, src_scene, sizeof(scene) ); + + dst_scene->arrindices = NULL; + dst_scene->arrvertices = NULL; + + return dst_scene; } +#endif -static void scene_free( scene *pscene ) +VG_STATIC void scene_upload( scene *pscene, glmesh *mesh ) { - scene_free_offline_buffers( pscene ); + mesh_upload( mesh, + pscene->arrvertices, pscene->vertex_count, + pscene->arrindices, pscene->indice_count ); + + vg_info( "Scene upload\n" ); + vg_info( " indices:%u\n", pscene->indice_count ); + vg_info( " verts:%u\n", pscene->vertex_count ); } /* * BVH implementation */ -static void scene_bh_expand_bound( void *user, boxf bound, u32 item_index ) +VG_STATIC void scene_bh_expand_bound( void *user, boxf bound, u32 item_index ) { scene *s = user; - mdl_vert *pa = &s->verts[ s->indices[item_index*3+0] ], - *pb = &s->verts[ s->indices[item_index*3+1] ], - *pc = &s->verts[ s->indices[item_index*3+2] ]; + mdl_vert *pa = &s->arrvertices[ s->arrindices[item_index*3+0] ], + *pb = &s->arrvertices[ s->arrindices[item_index*3+1] ], + *pc = &s->arrvertices[ s->arrindices[item_index*3+2] ]; box_addpt( bound, pa->co ); box_addpt( bound, pb->co ); box_addpt( bound, pc->co ); } -static float scene_bh_centroid( void *user, u32 item_index, int axis ) +VG_STATIC float scene_bh_centroid( void *user, u32 item_index, int axis ) { scene *s = user; - mdl_vert *pa = &s->verts[ s->indices[item_index*3+0] ], - *pb = &s->verts[ s->indices[item_index*3+1] ], - *pc = &s->verts[ s->indices[item_index*3+2] ]; + mdl_vert *pa = &s->arrvertices[ s->arrindices[item_index*3+0] ], + *pb = &s->arrvertices[ s->arrindices[item_index*3+1] ], + *pc = &s->arrvertices[ s->arrindices[item_index*3+2] ]; return (pa->co[axis] + pb->co[axis] + pc->co[axis]) * (1.0f/3.0f); } -static void scene_bh_swap( void *user, u32 ia, u32 ib ) +VG_STATIC void scene_bh_swap( void *user, u32 ia, u32 ib ) { scene *s = user; - u32 *ti = &s->indices[ia*3]; - u32 *tj = &s->indices[ib*3]; + u32 *ti = &s->arrindices[ia*3]; + u32 *tj = &s->arrindices[ib*3]; u32 temp[3]; temp[0] = ti[0]; @@ -218,28 +262,29 @@ static void scene_bh_swap( void *user, u32 ia, u32 ib ) tj[2] = temp[2]; } -static void scene_bh_debug( void *user, u32 item_index ) +VG_STATIC void scene_bh_debug( void *user, u32 item_index ) { scene *s = user; u32 idx = item_index*3; - mdl_vert *pa = &s->verts[ s->indices[ idx+0 ] ], - *pb = &s->verts[ s->indices[ idx+1 ] ], - *pc = &s->verts[ s->indices[ idx+2 ] ]; + mdl_vert *pa = &s->arrvertices[ s->arrindices[ idx+0 ] ], + *pb = &s->arrvertices[ s->arrindices[ idx+1 ] ], + *pc = &s->arrvertices[ s->arrindices[ idx+2 ] ]; vg_line( pa->co, pb->co, 0xff0000ff ); vg_line( pb->co, pc->co, 0xff0000ff ); vg_line( pc->co, pa->co, 0xff0000ff ); } -static int scene_bh_ray( void *user, u32 index, v3f co, v3f dir, ray_hit *hit ) +VG_STATIC int scene_bh_ray( void *user, u32 index, v3f co, + v3f dir, ray_hit *hit ) { scene *s = user; v3f positions[3]; - u32 *tri = &s->indices[ index*3 ]; + u32 *tri = &s->arrindices[ index*3 ]; for( int i=0; i<3; i++ ) - v3_copy( s->verts[tri[i]].co, positions[i] ); + v3_copy( s->arrvertices[tri[i]].co, positions[i] ); float t; if(ray_tri( positions, co, dir, &t )) @@ -255,7 +300,7 @@ static int scene_bh_ray( void *user, u32 index, v3f co, v3f dir, ray_hit *hit ) return 0; } -static bh_system bh_system_scene = +VG_STATIC bh_system bh_system_scene = { .expand_bound = scene_bh_expand_bound, .item_centroid = scene_bh_centroid, @@ -267,17 +312,18 @@ static bh_system bh_system_scene = /* * An extra step is added onto the end to calculate the hit normal */ -static int scene_raycast( scene *s, v3f co, v3f dir, ray_hit *hit ) +VG_STATIC int scene_raycast( scene *s, bh_tree *bh, + v3f co, v3f dir, ray_hit *hit ) { - int count = bh_ray( &s->bhtris, 0, co, dir, hit ); + int count = bh_ray( bh, co, dir, hit ); if( count ) { v3f v0, v1; - float *pa = s->verts[hit->tri[0]].co, - *pb = s->verts[hit->tri[1]].co, - *pc = s->verts[hit->tri[2]].co; + float *pa = s->arrvertices[hit->tri[0]].co, + *pb = s->arrvertices[hit->tri[1]].co, + *pc = s->arrvertices[hit->tri[2]].co; v3_sub( pa, pb, v0 ); v3_sub( pc, pb, v1 ); @@ -289,10 +335,10 @@ static int scene_raycast( scene *s, v3f co, v3f dir, ray_hit *hit ) return count; } -static void scene_bh_create( scene *s ) +VG_STATIC bh_tree *scene_bh_create( void *lin_alloc, scene *s ) { u32 triangle_count = s->indice_count / 3; - bh_create( &s->bhtris, &bh_system_scene, s, triangle_count ); + return bh_create( lin_alloc, &bh_system_scene, s, triangle_count ); } #endif diff --git a/server.c b/server.c index d5d5d91..dfe8be8 100644 --- a/server.c +++ b/server.c @@ -36,6 +36,7 @@ static void *hSteamHTTP, static u8 steam_symetric_key[ k_nSteamEncryptedAppTicketSymmetricKeyLen ]; static HSteamNetPollGroup client_pollgroup; +#if 0 static void recieve_http( void *callresult, void *context ) { HTTPRequestCompleted_t *result = callresult; @@ -55,6 +56,7 @@ static void recieve_http( void *callresult, void *context ) vg_free( buffer ); SteamAPI_ISteamHTTP_ReleaseHTTPRequest( hSteamHTTP, result->m_hRequest ); } +#endif static u64_steamid get_connection_authsteamid( SteamNetworkingMessage_t *msg ) { @@ -335,7 +337,9 @@ int main( int argc, char *argv[] ) /* TODO: Options to override, ammend, remove etc */ + vg_prealloc_quota( 80*1024*1024 ); highscores_init( 250000, 10000 ); + if( !highscores_read() ) highscores_create_db(); @@ -424,7 +428,6 @@ int main( int argc, char *argv[] ) } highscores_serialize_all(); - highscores_free(); SteamAPI_ISteamNetworkingSockets_DestroyPollGroup( hSteamNetworkingSockets, client_pollgroup ); diff --git a/skeleton.h b/skeleton.h index 78a0b56..9f715ef 100644 --- a/skeleton.h +++ b/skeleton.h @@ -24,9 +24,22 @@ struct skeleton int collider; boxf hitbox; - char name[16]; + const char *name; } *bones; + u32 bone_count; + + struct skeleton_anim + { + const char *name; + u32 length; + + float rate; + mdl_keyframe *anim_data; + } + *anims; + u32 anim_count; + m4x3f *final_mtx; struct skeleton_ik @@ -35,28 +48,16 @@ struct skeleton m3x3f ia, ib; } *ik; + u32 ik_count; - struct skeleton_anim - { - float rate; - u32 length; - struct mdl_keyframe *anim_data; - char name[32]; - } - *anims; - - u32 bone_count, - ik_count, + u32 collider_count, - anim_count, - bindable_count; /* TODO: try to place IK last in the rig from export - so that we dont always upload transforms for - useless cpu IK bones. */ + bindable_count; }; -static u32 skeleton_bone_id( struct skeleton *skele, const char *name ) +VG_STATIC u32 skeleton_bone_id( struct skeleton *skele, const char *name ) { - for( u32 i=0; ibone_count; i++ ) + for( u32 i=1; ibone_count; i++ ) { if( !strcmp( skele->bones[i].name, name )) return i; @@ -65,7 +66,7 @@ static u32 skeleton_bone_id( struct skeleton *skele, const char *name ) return 0; } -static void keyframe_copy_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, int num ) +VG_STATIC void keyframe_copy_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, int num ) { for( int i=0; ibones[ id ], *sp = &skele->bones[ sb->parent ]; @@ -179,7 +180,7 @@ static int should_apply_bone( struct skeleton *skele, u32 id, anim_apply type ) /* * Apply block of keyframes to skeletons final pose */ -static void skeleton_apply_pose( struct skeleton *skele, mdl_keyframe *pose, +VG_STATIC void skeleton_apply_pose( struct skeleton *skele, mdl_keyframe *pose, anim_apply passtype ) { m4x3_identity( skele->final_mtx[0] ); @@ -217,7 +218,7 @@ static void skeleton_apply_pose( struct skeleton *skele, mdl_keyframe *pose, * creates the reference inverse matrix for an IK bone, as it has an initial * intrisic rotation based on the direction that the IK is setup.. */ -static void skeleton_inverse_for_ik( struct skeleton *skele, +VG_STATIC void skeleton_inverse_for_ik( struct skeleton *skele, v3f ivaxis, u32 id, m3x3f inverse ) { @@ -231,7 +232,7 @@ static void skeleton_inverse_for_ik( struct skeleton *skele, /* * Creates inverse rotation matrices which the IK system uses. */ -static void skeleton_create_inverses( struct skeleton *skele ) +VG_STATIC void skeleton_create_inverses( struct skeleton *skele ) { /* IK: inverse 'plane-bone space' axis '(^axis,^bone,...)[base] */ for( int i=0; iik_count; i++ ) @@ -241,7 +242,7 @@ static void skeleton_create_inverses( struct skeleton *skele ) m4x3f inverse; v3f iv0, iv1, ivaxis; v3_sub( skele->bones[ik->target].co, skele->bones[ik->lower].co, iv0 ); - v3_sub( skele->bones[ik->pole].co, skele->bones[ik->lower].co, iv1 ); + v3_sub( skele->bones[ik->pole].co, skele->bones[ik->lower].co, iv1 ); v3_cross( iv0, iv1, ivaxis ); v3_normalize( ivaxis ); @@ -253,7 +254,7 @@ static void skeleton_create_inverses( struct skeleton *skele ) /* * Apply a model matrix to all bones, should be done last */ -static void skeleton_apply_transform( struct skeleton *skele, m4x3f transform ) +VG_STATIC void skeleton_apply_transform( struct skeleton *skele, m4x3f transform ) { for( int i=0; ibone_count; i++ ) { @@ -266,7 +267,7 @@ static void skeleton_apply_transform( struct skeleton *skele, m4x3f transform ) * Apply an inverse matrix to all bones which maps vertices from bind space into * bone relative positions */ -static void skeleton_apply_inverses( struct skeleton *skele ) +VG_STATIC void skeleton_apply_inverses( struct skeleton *skele ) { for( int i=0; ibone_count; i++ ) { @@ -282,7 +283,7 @@ static void skeleton_apply_inverses( struct skeleton *skele ) /* * Apply all IK modifiers (2 bone ik reference from blender is supported) */ -static void skeleton_apply_ik_pass( struct skeleton *skele ) +VG_STATIC void skeleton_apply_ik_pass( struct skeleton *skele ) { for( int i=0; iik_count; i++ ) { @@ -362,7 +363,7 @@ static void skeleton_apply_ik_pass( struct skeleton *skele ) * Applies the typical operations that you want for an IK rig: * Pose, IK, Pose(deferred), Inverses, Transform */ -static void skeleton_apply_standard( struct skeleton *skele, mdl_keyframe *pose, +VG_STATIC void skeleton_apply_standard( struct skeleton *skele, mdl_keyframe *pose, m4x3f transform ) { skeleton_apply_pose( skele, pose, k_anim_apply_defer_ik ); @@ -375,7 +376,7 @@ static void skeleton_apply_standard( struct skeleton *skele, mdl_keyframe *pose, /* * Get an animation by name */ -static struct skeleton_anim *skeleton_get_anim( struct skeleton *skele, +VG_STATIC struct skeleton_anim *skeleton_get_anim( struct skeleton *skele, const char *name ) { for( int i=0; ianim_count; i++ ) @@ -389,8 +390,34 @@ static struct skeleton_anim *skeleton_get_anim( struct skeleton *skele, return NULL; } -/* Setup an animated skeleton from model */ -static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) +VG_STATIC void skeleton_alloc_from( struct skeleton *skele, + void *lin_alloc, + struct classtype_skeleton *inf ) +{ + skele->bone_count = inf->channels; + skele->ik_count = inf->ik_count; + skele->collider_count = inf->collider_count; + skele->anim_count = inf->anim_count; + + u32 bone_size = sizeof(struct skeleton_bone) * skele->bone_count, + ik_size = sizeof(struct skeleton_ik) * skele->ik_count, + mtx_size = sizeof(m4x3f) * skele->bone_count, + anim_size = sizeof(struct skeleton_anim) * skele->anim_count; + + skele->bones = vg_linear_alloc( lin_alloc, bone_size ); + skele->ik = vg_linear_alloc( lin_alloc, ik_size ); + skele->final_mtx = vg_linear_alloc( lin_alloc, mtx_size ); + skele->anims = vg_linear_alloc( lin_alloc, anim_size ); +} + +VG_STATIC void skeleton_fatal_err(void) +{ + vg_fatal_exit_loop( "Skeleton setup failed" ); +} + +/* Setup an animated skeleton from model. mdl's metadata should stick around */ +VG_STATIC void skeleton_setup( struct skeleton *skele, + void *lin_alloc, mdl_context *mdl ) { u32 bone_count = 1, skeleton_root = 0, ik_count = 0, collider_count = 0; skele->bone_count = 0; @@ -400,24 +427,14 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) struct classtype_skeleton *inf = NULL; - for( u32 i=0; inode_count; i++ ) + for( u32 i=0; iinfo.node_count; i++ ) { mdl_node *pnode = mdl_node_from_id( mdl, i ); if( pnode->classtype == k_classtype_skeleton ) { inf = mdl_get_entdata( mdl, pnode ); - if( skele->bone_count ) - { - vg_error( "Multiple skeletons in model file\n" ); - goto error_dealloc; - } - - skele->bone_count = inf->channels; - skele->ik_count = inf->ik_count; - skele->collider_count = inf->collider_count; - skele->bones =vg_alloc(sizeof(struct skeleton_bone)*skele->bone_count); - skele->ik = vg_alloc(sizeof(struct skeleton_ik)*skele->ik_count); + skeleton_alloc_from( skele, lin_alloc, inf ); skeleton_root = i; } else if( skele->bone_count ) @@ -432,7 +449,7 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) bone_count, skele->bone_count, mdl_pstr( mdl, pnode->pstr_name )); - goto error_dealloc; + skeleton_fatal_err(); } struct skeleton_bone *sb = &skele->bones[bone_count]; @@ -442,7 +459,7 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) v3_copy( pnode->co, sb->co ); v3_copy( pnode->s, sb->end ); sb->parent = pnode->parent-skeleton_root; - strncpy( sb->name, mdl_pstr(mdl,pnode->pstr_name), 15 ); + sb->name = mdl_pstr( mdl, pnode->pstr_name ); sb->deform = bone_inf->deform; if( is_ik ) @@ -453,7 +470,7 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) if( ik_count == skele->ik_count ) { vg_error( "Too many ik bones, corrupt model file\n" ); - goto error_dealloc; + skeleton_fatal_err(); } struct skeleton_ik *ik = &skele->ik[ ik_count ++ ]; @@ -476,7 +493,7 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) if( collider_count == skele->collider_count ) { vg_error( "Too many collider bones\n" ); - goto error_dealloc; + skeleton_fatal_err(); } collider_count ++; @@ -494,26 +511,27 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) if( !inf ) { vg_error( "No skeleton in model\n" ); - return 0; + skeleton_fatal_err(); } if( collider_count != skele->collider_count ) { vg_error( "Loaded %u colliders out of %u\n", collider_count, - skele->collider_count ); - goto error_dealloc; + skele->collider_count ); + skeleton_fatal_err(); } if( bone_count != skele->bone_count ) { vg_error( "Loaded %u bones out of %u\n", bone_count, skele->bone_count ); - goto error_dealloc; + vg_fatal_exit_loop( "Skeleton setup failed" ); + skeleton_fatal_err(); } if( ik_count != skele->ik_count ) { vg_error( "Loaded %u ik bones out of %u\n", ik_count, skele->ik_count ); - goto error_dealloc; + skeleton_fatal_err(); } /* fill in implicit root bone */ @@ -521,40 +539,29 @@ static int skeleton_setup( struct skeleton *skele, mdl_header *mdl ) v3_copy( (v3f){0.0f,1.0f,0.0f}, skele->bones[0].end ); skele->bones[0].parent = 0xffffffff; skele->bones[0].collider = 0; + skele->bones[0].name = "[root]"; - skele->final_mtx = vg_alloc( sizeof(m4x3f) * skele->bone_count ); - skele->anim_count = inf->anim_count; - skele->anims = vg_alloc( sizeof(struct skeleton_anim) * inf->anim_count); - - for( int i=0; ianim_count; i++ ) + /* process animation quick refs */ + for( int i=0; ianim_count; i++ ) { - mdl_animation *anim = - mdl_animation_from_id( mdl, inf->anim_start+i ); - - skele->anims[i].rate = anim->rate; - skele->anims[i].length = anim->length; - strncpy( skele->anims[i].name, mdl_pstr(mdl, anim->pstr_name), 31 ); + mdl_animation *anim = &mdl->anim_buffer[ inf->anim_start + i ]; - u32 total_keyframes = (skele->bone_count-1)*anim->length; - size_t block_size = sizeof(mdl_keyframe) * total_keyframes; - mdl_keyframe *dst = vg_alloc( block_size ); + skele->anims[i].rate = anim->rate; + skele->anims[i].length = anim->length; + skele->anims[i].name = mdl_pstr(mdl, anim->pstr_name); + skele->anims[i].anim_data = &mdl->keyframe_buffer[ anim->offset ]; - skele->anims[i].anim_data = dst; - memcpy( dst, mdl_get_animdata( mdl, anim ), block_size ); + vg_info( "animation[ %f, %u ] '%s'\n", anim->rate, + anim->length, + skele->anims[i].name ); } skeleton_create_inverses( skele ); vg_success( "Loaded skeleton with %u bones\n", skele->bone_count ); vg_success( " %u colliders\n", skele->collider_count ); - return 1; - -error_dealloc: - vg_free( skele->bones ); - vg_free( skele->ik ); - return 0; } -static void skeleton_debug( struct skeleton *skele ) +VG_STATIC void skeleton_debug( struct skeleton *skele ) { for( int i=0; ibone_count; i ++ ) { diff --git a/steam.h b/steam.h index a213222..a92c325 100644 --- a/steam.h +++ b/steam.h @@ -25,9 +25,9 @@ * nothing. */ -static char steam_username_at_startup[128]; +VG_STATIC char steam_username_at_startup[128]; -static void recv_steam_warning( int severity, const char *msg ) +VG_STATIC void recv_steam_warning( int severity, const char *msg ) { if( severity == 0 ) vg_low( "%s\n", msg ); @@ -35,23 +35,23 @@ static void recv_steam_warning( int severity, const char *msg ) vg_info( "%s\n", msg ); } -static int steam_ready = 0, +VG_STATIC int steam_ready = 0, steam_stats_ready = 0; -static void *hSteamNetworkingSockets, +VG_STATIC void *hSteamNetworkingSockets, *hSteamUser; -static ISteamUserStats *hSteamUserStats; -static HSteamPipe hSteamClientPipe; +VG_STATIC ISteamUserStats *hSteamUserStats; +VG_STATIC HSteamPipe hSteamClientPipe; -static const char *steam_achievement_names[] = +VG_STATIC const char *steam_achievement_names[] = { "ALBERT", "MARC", "ROUTE_MPY", "ROUTE_MPG", "ROUTE_MPB", "ROUTE_MPR", "ROUTE_TO", "ROUTE_TC" }; -static void steam_store_achievements(void) +VG_STATIC void steam_store_achievements(void) { if( steam_ready && steam_stats_ready ) { @@ -59,7 +59,7 @@ static void steam_store_achievements(void) } } -static void steam_set_achievement( const char *name ) +VG_STATIC void steam_set_achievement( const char *name ) { if( steam_ready && steam_stats_ready ) { @@ -78,7 +78,7 @@ static void steam_set_achievement( const char *name ) } } -static void steam_clear_achievement( const char *name ) +VG_STATIC void steam_clear_achievement( const char *name ) { if( steam_ready && steam_stats_ready ) { @@ -98,7 +98,7 @@ static void steam_clear_achievement( const char *name ) } -static int steam_list_achievements( int argc, char const *argv[] ) +VG_STATIC int steam_list_achievements( int argc, char const *argv[] ) { vg_info( "Achievements: \n" ); @@ -128,7 +128,7 @@ static int steam_list_achievements( int argc, char const *argv[] ) return 0; } -static int steam_clear_all_achievements( int argc, char const *argv[] ) +VG_STATIC int steam_clear_all_achievements( int argc, char const *argv[] ) { if( steam_ready && steam_stats_ready ) { @@ -147,7 +147,7 @@ static int steam_clear_all_achievements( int argc, char const *argv[] ) return 0; } -static int steam_set_achievemnt_test( int argc, char const *argv[] ) +VG_STATIC int steam_set_achievemnt_test( int argc, char const *argv[] ) { if( argc < 2 ) return 0; @@ -161,7 +161,7 @@ static int steam_set_achievemnt_test( int argc, char const *argv[] ) return 0; } -static void steam_on_recieve_current_stats( CallbackMsg_t *msg ) +VG_STATIC void steam_on_recieve_current_stats( CallbackMsg_t *msg ) { UserStatsReceived_t *rec = (UserStatsReceived_t *)msg->m_pubParam; @@ -177,7 +177,7 @@ static void steam_on_recieve_current_stats( CallbackMsg_t *msg ) } } -static int steam_init(void) +VG_STATIC int steam_init(void) { const char *username = NULL; @@ -249,13 +249,13 @@ static int steam_init(void) return 1; } -static void steam_update(void) +VG_STATIC void steam_update(void) { if( steam_ready ) steamworks_event_loop( hSteamClientPipe ); } -static void steam_end(void *nothing) +VG_STATIC void steam_end(void *nothing) { if( steam_ready ) { diff --git a/vg_config.h b/vg_config.h index b812ef2..8b1ea59 100644 --- a/vg_config.h +++ b/vg_config.h @@ -5,7 +5,7 @@ #define VG_CONFIG #include "vg/vg.h" -static struct button_binding vg_button_binds[] = +VG_STATIC struct button_binding vg_button_binds[] = { { .name = "primary", .bind = GLFW_MOUSE_BUTTON_LEFT }, { .name = "secondary", .bind = GLFW_MOUSE_BUTTON_RIGHT }, @@ -21,7 +21,7 @@ static struct button_binding vg_button_binds[] = { .name = "menu", .bind = GLFW_KEY_ESCAPE } }; -static struct button_binding vg_controller_binds[] = +VG_STATIC struct button_binding vg_controller_binds[] = { { "jump", GLFW_GAMEPAD_BUTTON_A }, { "break", GLFW_GAMEPAD_BUTTON_B }, @@ -30,7 +30,7 @@ static struct button_binding vg_controller_binds[] = { "menu", GLFW_GAMEPAD_BUTTON_BACK } }; -static struct axis_binding vg_axis_binds[] = +VG_STATIC struct axis_binding vg_axis_binds[] = { { .name = "lookh", .axis = GLFW_GAMEPAD_AXIS_LEFT_X }, { .name = "lookv", .axis = GLFW_GAMEPAD_AXIS_LEFT_Y }, @@ -40,6 +40,6 @@ static struct axis_binding vg_axis_binds[] = { .name = "grab", .axis = GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER }, }; -static struct vg_achievement vg_achievements[] = +VG_STATIC struct vg_achievement vg_achievements[] = { }; diff --git a/world.h b/world.h index 08fe437..8b1b1dc 100644 --- a/world.h +++ b/world.h @@ -4,7 +4,7 @@ #include "common.h" -static int ray_world( v3f pos, v3f dir, ray_hit *hit ); +VG_STATIC int ray_world( v3f pos, v3f dir, ray_hit *hit ); #ifndef WORLD_H #define WORLD_H @@ -19,8 +19,6 @@ static int ray_world( v3f pos, v3f dir, ray_hit *hit ); #include "bvh.h" #include "model.h" -#include "traffic.h" /*TODO: -> world_traffic.h */ - #include "shaders/terrain.h" #include "shaders/sky.h" #include "shaders/planeinf.h" @@ -30,28 +28,122 @@ static int ray_world( v3f pos, v3f dir, ray_hit *hit ); #include "shaders/fscolour.h" #include "shaders/alphatest.h" +typedef struct teleport_gate teleport_gate; + enum { k_max_ui_segments = 8 }; -enum { k_max_ui_splits_per_segment = 16 }; -enum { k_max_ui_elements = k_max_ui_segments*k_max_ui_splits_per_segment }; +enum { k_max_ui_elements = k_max_ui_segments }; enum { k_max_element_verts = 10 }; enum { k_max_element_indices = 20 }; enum { k_route_ui_max_verts = k_max_ui_elements*k_max_element_verts }; enum { k_route_ui_max_indices = k_max_ui_elements*k_max_element_indices }; -static struct gworld +enum logic_type +{ + k_logic_type_relay = 1, + k_logic_type_chance = 2, + k_logic_type_achievement = 3 +}; + +VG_STATIC struct gworld { - /* gameplay */ + /* + * Allocated as system memory + * -------------------------------------------------------------------------- + */ + + /* rendering */ + glmesh skydome; + mdl_submesh dome_upper, dome_lower; + + glmesh mesh_gate_surface; + + double sky_time, sky_rate, sky_target_rate; + + /* water rendering */ + struct + { + struct framebuffer fbreflect, fbdepth; + + boxf depthbounds; + int depth_computed; + + float height; + int enabled; + v4f plane; + } + water; + + /* split flap display */ + struct + { + mdl_submesh *sm_module, *sm_card; + glmesh mesh_base, mesh_display; + + u32 w, h; + float *buffer; + } + sfd; + + /* timing bars, fixed maximum amount */ + struct route_ui_bar + { + GLuint vao, vbo, ebo; + + u32 indices_head; + u32 vertex_head; + + float last_notch; + + struct route_ui_segment + { + float length; + u32 vertex_start, vertex_count, + index_start, index_count, notches; + } + segments[k_max_ui_segments]; + + u32 segment_start, segment_count, fade_start, fade_count; + double fade_timer_start; + float xpos; + } + ui_bars[16]; + + v3f render_gate_pos; + int active_route_board; + + /* + * Dynamically allocated when world_load is called. + * + * the following arrays index somewhere into this linear + * allocator + * + * (world_gen.h) + * -------------------------------------------------------------------------- + */ + void *dynamic_vgl; + + /* + * Main world .mdl + */ + mdl_context *meta; + + /* + * Named safe places to respawn + */ struct respawn_point { v3f co; v4f q; - char name[32]; + const char *name; } - spawns[32]; + * spawns; u32 spawn_count; + /* + * Audio player entities + */ struct world_audio_thing { v3f pos; @@ -62,98 +154,51 @@ static struct gworld audio_clip temp_embedded_clip; } * audio_things; - - u32 audio_things_count, - audio_things_cap; + u32 audio_things_count; - struct achievement_zone + /* + * Relays, random, etc + */ + struct logic_entity { - m4x3f transform, inv_transform; - char name[32]; - int triggered; + v3f pos; + enum logic_type logic_type; + int enabled; - union - { - mdl_node *ptarget_delegated; - struct world_audio_thing *ptarget; - }; + /* indexes the action array */ + u32 action_start, action_count; } - * achievement_zones; + * logic_entities; + u32 logic_entity_count; - u32 achievement_zones_count, - achievement_zones_cap; - - struct subworld_sfd + /* + * Action array + */ + struct logic_action { - scene mesh; - mdl_submesh *sm_module, *sm_card; - glmesh temp; + u32 event, /* on trigger, on enable, etc (TODO: Enum) */ + target_id; /* thing to target, 0: self */ - struct sfd_instance - { - float *buffer; - - u32 w,h; - } - tester; } - sfd; - - /* Paths */ - traffic_node traffic[128]; - u32 traffic_count; - -#if 0 - traffic_driver van_man[6]; -#endif - - double sky_time, sky_rate, sky_target_rate; - - /* Physics */ - - /* Rendering & geometry */ - scene geo, foliage; - rigidbody rb_geo; + * logic_actions; + u32 logic_action_count; - /* TODO Maybe make this less hardcoded */ - mdl_submesh sm_geo_std_oob, sm_geo_std, sm_geo_vb, - sm_foliage_main, sm_foliage_alphatest, - sm_graffiti, sm_subworld, sm_terrain; - - glmesh skybox, skydome; - mdl_submesh dome_upper, dome_lower; - - glmesh cars; - mdl_submesh car_holden; - - /* Load time */ - - struct instance_cache + /* + * Box trigger entities + */ + struct trigger_zone { - mdl_header *mdl; - u32 pstr_file; + m4x3f transform, inv_transform; + u32 trigger_entity; } - * instance_cache; - u32 instance_cache_count, - instance_cache_cap; + * triggers; + u32 trigger_count; - v3f render_gate_pos; - int active_route_board; -} -world ; - -typedef struct teleport_gate teleport_gate; -struct teleport_gate -{ - v3f co[2]; - v4f q[2]; - v2f dims; - m4x3f to_world, recv_to_world, transport; -}; - -struct subworld_routes -{ + /* + * Routes (world_routes.h) + * -------------------------------------------------------------------------- + */ struct route_node { v3f co, right, up, h; @@ -163,9 +208,7 @@ struct subworld_routes u32 route_ids[4]; /* Gates can be linked into up to four routes */ } *nodes; - - u32 node_count, - node_cap; + u32 node_count; struct route { @@ -180,41 +223,23 @@ struct subworld_routes double best_lap, latest_pass; /* Session */ - struct - { - GLuint vao, vbo, ebo; - - u32 indices_head; - u32 vertex_head; - - float last_notch; - - struct route_ui_segment - { - float length; - u32 vertex_start, vertex_count, - index_start, index_count, notches; - } - segments[k_max_ui_segments]; - - u32 segment_start, segment_count, fade_start, fade_count; - double fade_timer_start; - float xpos; - } - ui; - m4x3f scoreboard_transform; } *routes; - - double time, rewind_from, rewind_to, last_use; - - u32 route_count, - route_cap; + u32 route_count; struct route_gate { - teleport_gate gate; + struct teleport_gate + { + v3f co[2]; + v4f q[2]; + v2f dims; + + m4x3f to_world, recv_to_world, transport; + } + gate; + u32 node_id; struct route_timing @@ -225,34 +250,71 @@ struct subworld_routes timing; } *gates; + u32 gate_count; struct route_collector { struct route_timing timing; } *collectors; + u32 collector_count; + - u32 gate_count, - gate_cap, - collector_count, - collector_cap; + /* logic + * ---------------------------------------------------- + */ u32 active_gate, current_run_version; + double time, rewind_from, rewind_to, last_use; + + /* world geometry */ + scene *scene_geo, + *scene_no_collide, + *scene_lines; + + /* spacial mappings */ + bh_tree *audio_bh, + *trigger_bh, + *geo_bh; + + /* graphics */ + glmesh mesh_geo, + mesh_no_collide, + mesh_route_lines, + mesh_water; + + rigidbody rb_geo; + + /* TODO Maybe make this less hardcoded */ + mdl_submesh sm_geo_std_oob, sm_geo_std, sm_geo_vb, + sm_foliage_main, sm_foliage_alphatest, + sm_graffiti, sm_subworld, sm_terrain; - scene scene_lines; + /* + * Allocated AFTER all previous buffers are done + * -------------------------------------------------------------------------- + */ + + struct instance_cache + { + mdl_context *mdl; + u32 pstr_file; + } + instance_cache[32]; + u32 instance_cache_count; } -static world_routes; +world; /* * API */ -static int ray_hit_is_ramp( ray_hit *hit ); -static int ray_hit_is_terrain( ray_hit *hit ); -static void ray_world_get_tri( ray_hit *hit, v3f tri[3] ); -static int ray_world( v3f pos, v3f dir, ray_hit *hit ); +VG_STATIC int ray_hit_is_ramp( ray_hit *hit ); +VG_STATIC int ray_hit_is_terrain( ray_hit *hit ); +VG_STATIC void ray_world_get_tri( ray_hit *hit, v3f tri[3] ); +VG_STATIC int ray_world( v3f pos, v3f dir, ray_hit *hit ); /* * Submodules @@ -271,8 +333,16 @@ static int ray_world( v3f pos, v3f dir, ray_hit *hit ); * ----------------------------------------------------------------------------- */ -static void world_init(void) +VG_STATIC void world_init(void) { + vg_convar_push( (struct vg_convar){ + .name = "water_enable", + .data = &world.water.enabled, + .data_type = k_convar_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=1 }, + .persistent = 0 + }); + world.sky_rate = 1.0; world.sky_target_rate = 1.0; @@ -284,12 +354,9 @@ static void world_init(void) shader_alphatest_register(); vg_info( "Loading world resources\n" ); - - VG_REQUIRED_ASSET( mdl_header*, mcars, mdl_load, "models/rs_cars.mdl" ); - VG_REQUIRED_ASSET( mdl_header*, msky, mdl_load, "models/rs_skydome.mdl" ); - - mdl_node *nholden = mdl_node_from_name( mcars, "holden" ); - world.car_holden = *mdl_node_submesh( mcars, nholden, 0 ); + + vg_linear_clear( vg_mem.scratch ); + mdl_context *msky = mdl_load_full( vg_mem.scratch, "models/rs_skydome.mdl" ); mdl_node *nlower = mdl_node_from_name( msky, "dome_lower" ), *nupper = mdl_node_from_name( msky, "dome_upper" ); @@ -299,37 +366,25 @@ static void world_init(void) vg_acquire_thread_sync(); { - mdl_unpack_glmesh( mcars, &world.cars ); mdl_unpack_glmesh( msky, &world.skydome ); } vg_release_thread_sync(); - vg_free(mcars); - vg_free(msky); - /* Other systems */ vg_info( "Loading other world systems\n" ); - vg_loader_highwater( world_render_init, world_render_free, NULL ); - vg_loader_highwater( world_sfd_init, world_sfd_free, NULL ); - vg_loader_highwater( world_water_init, world_water_free, NULL ); - vg_loader_highwater( world_gates_init, world_gates_free, NULL ); - vg_loader_highwater( world_routes_init, world_routes_free, NULL ); -} - -static void world_free( void *_ ) -{ - mesh_free( &world.cars ); - mesh_free( &world.skydome ); - vg_free( world.achievement_zones ); + vg_loader_highwater( world_render_init, NULL, NULL ); + vg_loader_highwater( world_sfd_init, NULL, NULL ); + vg_loader_highwater( world_water_init, NULL, NULL ); + vg_loader_highwater( world_gates_init, NULL, NULL ); + vg_loader_highwater( world_routes_init, NULL, NULL ); - /* FIXME: This fucks with the audio player. Use-after-free */ -#if 0 - vg_free( world.audio_things ); -#endif + /* Allocate dynamic world memory arena */ + u32 max_size = 72*1024*1024; + world.dynamic_vgl = vg_create_linear_allocator( vg_mem.rtmemory, max_size ); } -static void world_update( v3f pos ) +VG_STATIC void world_update( v3f pos ) { world.sky_time += world.sky_rate * vg.time_delta; world.sky_rate = vg_lerp( world.sky_rate, world.sky_target_rate, @@ -343,9 +398,9 @@ static void world_update( v3f pos ) int closest = 0; float min_dist = INFINITY; - for( int i=0; itrack_id; @@ -370,12 +424,13 @@ static void world_update( v3f pos ) for( int i=0; i<13; i++ ) { - sfd_encode( &sfd->tester, i, &local_board->data[27*i] ); + sfd_encode( i, &local_board->data[27*i] ); } } } - static int in_zone = 0; +#if 0 + VG_STATIC int in_zone = 0; int in_zone_this_time = 0; @@ -415,8 +470,9 @@ static void world_update( v3f pos ) } in_zone = in_zone_this_time; +#endif - sfd_update( &world.sfd.tester ); + sfd_update(); } /* @@ -425,18 +481,18 @@ static void world_update( v3f pos ) * ----------------------------------------------------------------------------- */ -static void ray_world_get_tri( ray_hit *hit, v3f tri[3] ) +VG_STATIC void ray_world_get_tri( ray_hit *hit, v3f tri[3] ) { for( int i=0; i<3; i++ ) - v3_copy( world.geo.verts[ hit->tri[i] ].co, tri[i] ); + v3_copy( world.scene_geo->arrvertices[ hit->tri[i] ].co, tri[i] ); } -static int ray_world( v3f pos, v3f dir, ray_hit *hit ) +VG_STATIC int ray_world( v3f pos, v3f dir, ray_hit *hit ) { - return scene_raycast( &world.geo, pos, dir, hit ); + return scene_raycast( world.scene_geo, world.geo_bh, pos, dir, hit ); } -static int ray_hit_is_terrain( ray_hit *hit ) +VG_STATIC int ray_hit_is_terrain( ray_hit *hit ) { u32 valid_start = 0, valid_end = world.sm_terrain.vertex_count; @@ -445,7 +501,7 @@ static int ray_hit_is_terrain( ray_hit *hit ) (hit->tri[0] < valid_end); } -static int ray_hit_is_ramp( ray_hit *hit ) +VG_STATIC int ray_hit_is_ramp( ray_hit *hit ) { u32 valid_start = world.sm_geo_std.vertex_start, valid_end = world.sm_geo_vb.vertex_start; diff --git a/world_gate.h b/world_gate.h index 39a1e78..b57c799 100644 --- a/world_gate.h +++ b/world_gate.h @@ -5,35 +5,15 @@ #ifndef WORLD_GATE_H #define WORLD_GATE_H -#define GATE_RENDER_PERFORMANCE - #include "common.h" #include "model.h" #include "render.h" -#ifndef GATE_RENDER_PERFORMANCE - #include "shaders/gate.h" -#else - #include "shaders/gatelq.h" -#endif - +#include "shaders/gatelq.h" #include "world_water.h" -static struct -{ - struct framebuffer fb; - glmesh mdl; -} -grender = -{ - .fb = { - .format = GL_RGB, - .div = 1 - } -}; - -static void gate_transform_update( teleport_gate *gate ) +VG_STATIC void gate_transform_update( teleport_gate *gate ) { m4x3f to_local; @@ -47,37 +27,23 @@ static void gate_transform_update( teleport_gate *gate ) m4x3_mul( gate->recv_to_world, to_local, gate->transport ); } -static void world_gates_init(void) +VG_STATIC void world_gates_init(void) { vg_info( "world_gates_init\n" ); -#ifndef GATE_RENDER_PERFORMANCE - shader_gate_register(); -#else shader_gatelq_register(); -#endif - mdl_header *mgate = mdl_load( "models/rs_gate.mdl" ); + vg_linear_clear( vg_mem.scratch ); + mdl_context *mgate = mdl_load_full( vg_mem.scratch, "models/rs_gate.mdl" ); vg_acquire_thread_sync(); { - fb_init( &grender.fb ); - mdl_unpack_glmesh( mgate, &grender.mdl ); + mdl_unpack_glmesh( mgate, &world.mesh_gate_surface ); } vg_release_thread_sync(); } -static void world_gates_free(void*_) -{ - fb_free( &grender.fb ); -} - -static void gate_fb_resize(void) -{ - fb_resize( &grender.fb ); -} - -static int render_gate( teleport_gate *gate, v3f viewpos, m4x3f camera ) +VG_STATIC int render_gate( teleport_gate *gate, v3f viewpos, m4x3f camera ) { v3f viewdir, gatedir; m3x3_mulv( camera, (v3f){0.0f,0.0f,-1.0f}, viewdir ); @@ -135,11 +101,7 @@ static int render_gate( teleport_gate *gate, v3f viewpos, m4x3f camera ) m4x4_mul( projection, view, projection ); -#ifndef GATE_RENDER_PERFORMANCE - fb_use( &grender.fb ); - glClearColor( 0.11f, 0.35f, 0.37f, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); -#else + { shader_gatelq_use(); shader_gatelq_uPv( vg.pv ); shader_gatelq_uMdl( gate_xform ); @@ -154,53 +116,17 @@ static int render_gate( teleport_gate *gate, v3f viewpos, m4x3f camera ) glStencilFunc( GL_ALWAYS, 1, 0xFF ); glStencilMask( 0xFF ); - mesh_bind( &grender.mdl ); - mesh_draw( &grender.mdl ); + mesh_bind( &world.mesh_gate_surface ); + mesh_draw( &world.mesh_gate_surface ); glClear( GL_DEPTH_BUFFER_BIT ); glStencilFunc( GL_EQUAL, 1, 0xFF ); glStencilMask( 0x00 ); -#endif + } render_world( projection, cam_new ); -#ifndef GATE_RENDER_PERFORMANCE - - /* - * NOTE: Need to find a way to draw a stencil buffer into the water - * rendering - */ - - render_water_texture( cam_new ); - fb_use( &grender.fb ); - - render_water_surface( projection, cam_new ); - fb_use( NULL ); - - shader_gate_use(); - - shader_gate_uPv( vg_pv ); - shader_gate_uMdl( gate_xform ); - - fb_bindtex( &grender.fb, 0 ); - - shader_gate_uCam( viewpos ); - shader_gate_uTexMain( 0 ); - shader_gate_uTexWater( 1 ); - shader_gate_uTime( vg_time*0.25f ); - shader_gate_uInvRes( (v2f){ - 1.0f / (float)vg_window_x, - 1.0f / (float)vg_window_y }); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glBlendEquation(GL_FUNC_ADD); - - mesh_bind( &grender.mdl ); - mesh_draw( &grender.mdl ); - - glDisable(GL_BLEND); -#else + { glDisable( GL_STENCIL_TEST ); render_water_texture( cam_new ); @@ -212,12 +138,12 @@ static int render_gate( teleport_gate *gate, v3f viewpos, m4x3f camera ) glStencilMask( 0xFF ); glStencilFunc( GL_ALWAYS, 1, 0xFF ); glDisable( GL_STENCIL_TEST ); -#endif + } return 1; } -static int gate_intersect( teleport_gate *gate, v3f pos, v3f last ) +VG_STATIC int gate_intersect( teleport_gate *gate, v3f pos, v3f last ) { v4f surface; m3x3_mulv( gate->to_world, (v3f){0.0f,0.0f,-1.0f}, surface ); diff --git a/world_gen.h b/world_gen.h index 31722e5..ccd3eda 100644 --- a/world_gen.h +++ b/world_gen.h @@ -5,24 +5,23 @@ #ifndef WORLD_GEN_H #define WORLD_GEN_H -/* - * FUTURE: - * If we have multiple levels, write an unloader - */ - #include "world.h" -static void world_add_all_if_material( m4x3f transform, scene *pscene, - mdl_header *mdl, u32 id ) +/* load world TODO: Put back vg back in loading state while this happens */ +VG_STATIC void world_load( const char *mdl_file ); + + + +VG_STATIC void world_add_all_if_material( m4x3f transform, scene *pscene, + mdl_context *mdl, u32 id ) { - for( int i=0; inode_count; i++ ) + for( int i=0; iinfo.node_count; i++ ) { mdl_node *pnode = mdl_node_from_id( mdl, i ); for( int j=0; jsubmesh_count; j++ ) { mdl_submesh *sm = mdl_node_submesh( mdl, pnode, j ); - if( sm->material_id == id ) { m4x3f transform2; @@ -33,13 +32,14 @@ static void world_add_all_if_material( m4x3f transform, scene *pscene, } } +#if 0 if( pnode->classtype == k_classtype_instance ) { if( pnode->sub_uid ) { u32 instance_id = pnode->sub_uid -1; struct instance_cache *cache = &world.instance_cache[instance_id]; - mdl_header *mdl2 = cache->mdl; + mdl_context *mdl2 = cache->mdl; m4x3f transform2; mdl_node_transform( pnode, transform2 ); @@ -48,15 +48,20 @@ static void world_add_all_if_material( m4x3f transform, scene *pscene, world_add_all_if_material( transform2, pscene, mdl2, id ); } } +#endif } } -static void world_apply_procedural_foliage(void) +/* Sprinkle foliage models over the map on terrain material */ +VG_STATIC void world_apply_procedural_foliage(void) { - mdl_header *mfoliage = mdl_load("models/rs_foliage.mdl"); + vg_linear_clear( vg_mem.scratch ); + + mdl_context *mfoliage = + mdl_load_full( vg_mem.scratch, "models/rs_foliage.mdl"); v3f volume; - v3_sub( world.geo.bbx[1], world.geo.bbx[0], volume ); + v3_sub( world.scene_geo->bbx[1], world.scene_geo->bbx[0], volume ); volume[1] = 1.0f; m4x3f transform; @@ -68,7 +73,7 @@ static void world_apply_procedural_foliage(void) v3f pos; v3_mul( volume, (v3f){ vg_randf(), 1000.0f, vg_randf() }, pos ); pos[1] = 1000.0f; - v3_add( pos, world.geo.bbx[0], pos ); + v3_add( pos, world.scene_geo->bbx[0], pos ); ray_hit hit; hit.dist = INFINITY; @@ -90,124 +95,211 @@ static void world_apply_procedural_foliage(void) q_m3x3( qsurface, transform ); v3_copy( hit.pos, transform[3] ); - scene_add_submesh( &world.foliage, mfoliage, sm_blob, transform); + scene_add_submesh( world.scene_no_collide, mfoliage, + sm_blob, transform); } } } - - vg_free( mfoliage ); } -static void world_load(void) +VG_STATIC void world_ents_allocate(void) { - mdl_header *mworld = mdl_load( "models/mp_dev.mdl" ); - vg_info( "Loading world: models/mp_dev.mdl\n" ); + vg_info( "Allocating entities\n" ); - world.spawn_count = 0; - world.traffic_count = 0; - world.instance_cache = NULL; - - /* - * Process entities - */ - for( int i=0; inode_count; i++ ) + /* count entites to allocate buffers for them. + * maybe in the future we just store these numbers in the model file... + * + * TODO: use this in world_routes too */ + + struct countable { - mdl_node *pnode = mdl_node_from_id( mworld, i ); - - if( pnode->classtype == k_classtype_none ) - {} - else if( pnode->classtype == k_classtype_spawn ) + enum classtype ct; + void **to_allocate; + u32 item_size; + int count; + } + entity_counts[] = + { + { + k_classtype_spawn, + (void*)&world.spawns, + sizeof(struct respawn_point) + }, + { + k_classtype_audio, + (void*)&world.audio_things, + sizeof(struct world_audio_thing) + }, { - struct respawn_point *rp = &world.spawns[ world.spawn_count ++ ]; - - v3_copy( pnode->co, rp->co ); - v4_copy( pnode->q, rp->q ); - strcpy( rp->name, mdl_pstr( mworld, pnode->pstr_name ) ); + k_classtype_trigger, + (void*)&world.triggers, + sizeof(struct trigger_zone) } - else if( pnode->classtype == k_classtype_water ) + }; + + for( int i=0; iinfo.node_count; i++ ) + { + mdl_node *pnode = mdl_node_from_id( world.meta, i ); + + for( int j=0; jclasstype == entity_counts[j].ct ) { - vg_warn( "Multiple water surfaces in level! ('%s')\n", - mdl_pstr( mworld, pnode->pstr_name )); - continue; + entity_counts[j].count ++; + break; } + } + } - mdl_submesh *sm = mdl_node_submesh( mworld, pnode, 0 ); - - if( sm ) - { - vg_acquire_thread_sync(); - { - glmesh surf; - mdl_unpack_submesh( mworld, &surf, sm ); - water_set_surface( &surf, pnode->co[1] ); - } - vg_release_thread_sync(); - } + for( int i=0; iitem_size*counter->count; + *counter->to_allocate = vg_linear_alloc( world.dynamic_vgl, bufsize ); + } +} + +VG_STATIC void world_pct_spawn( mdl_node *pnode ) +{ + struct respawn_point *rp = &world.spawns[ world.spawn_count ++ ]; + + v3_copy( pnode->co, rp->co ); + v4_copy( pnode->q, rp->q ); + rp->name = mdl_pstr( world.meta, pnode->pstr_name ); +} + +VG_STATIC void world_pct_water( mdl_node *pnode ) +{ + if( world.water.enabled ) + { + vg_warn( "Multiple water surfaces in level! ('%s')\n", + mdl_pstr( world.meta, pnode->pstr_name )); + return; + } + + mdl_submesh *sm = mdl_node_submesh( world.meta, pnode, 0 ); + + if( sm ) + { + vg_acquire_thread_sync(); + { + mdl_unpack_submesh( world.meta, &world.mesh_water, sm ); + world.water.enabled = 1; + water_set_surface( pnode->co[1] ); + } + vg_release_thread_sync(); + } + else + { + vg_warn( "Water entity has no submeshes!\n" ); + } +} + +VG_STATIC void world_pct_instance( mdl_node *pnode ) +{ + struct classtype_instance *inst = mdl_get_entdata( world.meta, pnode ); + pnode->sub_uid = 0; + + int cache_entry = 0; + for( int i=0; ipstr_file == cache->pstr_file ) + { + cache_entry = 1; + pnode->sub_uid = i+1; + break; } - else if( pnode->classtype == k_classtype_car_path ) + } + + if( !cache_entry ) + { + if( world.instance_cache_count == vg_list_size(world.instance_cache) ) + vg_fatal_exit_loop( "Instance cache is full!" ); + + struct instance_cache *cache = + &world.instance_cache[world.instance_cache_count ++ ]; + + cache->pstr_file = inst->pstr_file; + +#if 0 + cache->mdl = mdl_load( filename ); + + if( cache->mdl ) { - struct classtype_car_path *p = mdl_get_entdata( mworld, pnode ); - traffic_node *tn = &world.traffic[ world.traffic_count ]; - tn->mn_next = NULL; - tn->mn_next1 = NULL; - - if( p->target ) tn->mn_next = mdl_node_from_id( mworld, p->target ); - if( p->target1 ) tn->mn_next1 = mdl_node_from_id( mworld, p->target1 ); - - m4x3f transform; - mdl_node_transform( pnode, transform ); - m3x3_mulv( transform, (v3f){1.0f,0.0f,0.0f}, tn->h ); - v3_copy( transform[3], tn->co ); - - pnode->sub_uid = world.traffic_count ++; + world.instance_cache_count ++; + pnode->sub_uid = world.instance_cache_count; + mdl_link_materials( mworld, cache->mdl ); + vg_success( "Cached %s\n", filename ); } - else if( pnode->classtype == k_classtype_instance ) + else { - struct classtype_instance *inst = mdl_get_entdata( mworld, pnode ); - pnode->sub_uid = 0; - - int cached = 0; - for( int i=0; ipstr_file == cache->pstr_file ) - { - cached = 1; - pnode->sub_uid = i+1; - break; - } - } + vg_warn( "Failed to cache %s\n", filename ); + } +#endif + } +} + +VG_STATIC void world_pct_audio( mdl_node *pnode ) +{ + struct world_audio_thing *thing = &world.audio_things[ + world.audio_things_count ]; + + memset( thing, 0, sizeof(struct world_audio_thing) ); + struct classtype_audio *aud = mdl_get_entdata( world.meta, pnode ); + + v3_copy( pnode->co, thing->pos ); + + if( aud->flags & AUDIO_FLAG_SPACIAL_3D ) + thing->volume = aud->volume * pnode->s[0]; + else + thing->volume = aud->volume; + + thing->flags = aud->flags; + thing->temp_embedded_clip.path = mdl_pstr( world.meta, aud->pstr_file ); + audio_clip_load( &thing->temp_embedded_clip ); + thing->player.name = mdl_pstr( world.meta, pnode->pstr_name ); + thing->player.enqued = 0; - if( !cached ) + pnode->sub_uid = world.audio_things_count; + world.audio_things_count ++; +} + +VG_STATIC void world_entities_process(void) +{ + struct entity_instruction + { + enum classtype ct; + void (*process)( mdl_node *pnode ); + } + entity_instructions[] = + { + { k_classtype_spawn, world_pct_spawn }, + { k_classtype_water, world_pct_water }, + { k_classtype_instance, world_pct_instance }, + { k_classtype_audio, world_pct_audio }, + }; + + for( int i=0; iinfo.node_count; i++ ) + { + mdl_node *pnode = mdl_node_from_id( world.meta, i ); + + for( int j=0; jclasstype == instr->ct ) { - world.instance_cache = buffer_reserve( - world.instance_cache, world.instance_cache_count, - &world.instance_cache_cap, 1, - sizeof(struct instance_cache) ); - - struct instance_cache *cache = - &world.instance_cache[world.instance_cache_count]; - - const char *filename = mdl_pstr(mworld, inst->pstr_file); - - cache->pstr_file = inst->pstr_file; - cache->mdl = mdl_load( filename ); - - if( cache->mdl ) - { - world.instance_cache_count ++; - pnode->sub_uid = world.instance_cache_count; - mdl_link_materials( mworld, cache->mdl ); - vg_success( "Cached %s\n", filename ); - } - else - { - vg_warn( "Failed to cache %s\n", filename ); - } + instr->process( pnode ); + break; } } + +#if 0 else if( pnode->classtype == k_classtype_achievement_box ) { world.achievement_zones = @@ -233,41 +325,10 @@ static void world_load(void) else zone->ptarget_delegated = NULL; } - else if( pnode->classtype == k_classtype_audio ) - { - world.audio_things = - buffer_reserve( world.audio_things, - world.audio_things_count, - &world.audio_things_cap, 1, - sizeof(struct world_audio_thing) ); - - struct world_audio_thing *thing = &world.audio_things[ - world.audio_things_count ]; - memset( thing, 0, sizeof(struct world_audio_thing) ); - struct classtype_audio *aud = mdl_get_entdata(mworld,pnode); - - v3_copy( pnode->co, thing->pos ); - - if( aud->flags & AUDIO_FLAG_SPACIAL_3D ) - thing->volume = aud->volume * pnode->s[0]; - else - thing->volume = aud->volume; - - thing->flags = aud->flags; - const char *fp = mdl_pstr( mworld, aud->pstr_file ); - char *path2 = vg_alloc( strlen(fp)+1 ); - strcpy( path2, fp ); - thing->temp_embedded_clip.path = path2; - thing->temp_embedded_clip.source_mode = k_audio_source_compressed; - audio_clip_load( &thing->temp_embedded_clip ); - thing->player.name = "[temp]"; - thing->player.enqued = 0; - - pnode->sub_uid = world.audio_things_count; - world.audio_things_count ++; - } +#endif } +#if 0 /* fixup links */ for( int i=0; iptarget = NULL; } +#endif +} - /* initialize audio if need be */ - audio_lock(); - for( int i=0; iplayer ); - audio_player_set_flags( &thingy->player, thingy->flags ); - audio_player_set_vol( &thingy->player, thingy->volume ); - audio_player_set_pan( &thingy->player, 0.0f ); - - if( thingy->flags & AUDIO_FLAG_SPACIAL_3D ) - audio_player_set_position( &thingy->player, thingy->pos ); - - if( thingy->flags & AUDIO_FLAG_AUTO_START ) - audio_player_playclip( &thingy->player, &thingy->temp_embedded_clip ); + const char *filename = mdl_pstr( world.meta, inst->pstr_file ); + inst->mdl = mdl_load_full( vg_mem.scratch, filename ); } - audio_unlock(); - - world.instance_cache = buffer_fix( world.instance_cache, - world.instance_cache_count, - &world.instance_cache_cap, - sizeof( struct instance_cache ) ); - -#if 0 - traffic_finalize( world.traffic, world.traffic_count ); - for( int i=0; imaterial_count; i++ ) + for( int i=1; iinfo.material_count; i++ ) { - mdl_material *mat = mdl_material_from_id( mworld, i ); - const char *mat_name = mdl_pstr( mworld, mat->pstr_name ); + mdl_material *mat = &world.meta->material_buffer[ i ]; + const char *mat_name = mdl_pstr( world.meta, mat->pstr_name ); if( !strcmp( "surf", mat_name )) mat_surf = i; @@ -346,50 +397,122 @@ static void world_load(void) m4x3f midentity; m4x3_identity( midentity ); + world_load_instance_cache(); + + /* + * Generate scene: collidable geometry + * ---------------------------------------------------------------- + */ + + vg_info( "Generating collidable geometry\n" ); + vg_info( "terrain...\n" ); + /* terrain */ if( mat_terrain ) - world_add_all_if_material( midentity, &world.geo, mworld, mat_terrain ); - scene_copy_slice( &world.geo, &world.sm_terrain ); + world_add_all_if_material( midentity, world.scene_geo, + world.meta, mat_terrain ); + scene_copy_slice( world.scene_geo, &world.sm_terrain ); + /* oob */ + vg_info( "oob...\n" ); if( mat_surf_oob ) - world_add_all_if_material( midentity, &world.geo, mworld, mat_surf_oob ); + world_add_all_if_material( midentity, world.scene_geo, + world.meta, mat_surf_oob ); else vg_warn( "No OOB surface\n" ); - scene_copy_slice( &world.geo, &world.sm_geo_std_oob ); + scene_copy_slice( world.scene_geo, &world.sm_geo_std_oob ); + + /* surface */ + vg_info( "surface...\n" ); if( mat_surf ) - world_add_all_if_material( midentity, &world.geo, mworld, mat_surf ); - scene_copy_slice( &world.geo, &world.sm_geo_std ); + world_add_all_if_material( midentity, world.scene_geo, + world.meta, mat_surf ); + scene_copy_slice( world.scene_geo, &world.sm_geo_std ); + /* vertex_blend */ + vg_info( "vertex blend...\n" ); if( mat_vertex_blend ) - world_add_all_if_material( midentity, &world.geo,mworld,mat_vertex_blend); - scene_copy_slice( &world.geo, &world.sm_geo_vb ); + world_add_all_if_material( midentity, world.scene_geo, + world.meta, mat_vertex_blend); + scene_copy_slice( world.scene_geo, &world.sm_geo_vb ); + + /* compress that bad boy */ + world.scene_geo = scene_fix( world.dynamic_vgl, world.scene_geo ); vg_acquire_thread_sync(); - scene_upload( &world.geo ); + { + scene_upload( world.scene_geo, &world.mesh_geo ); + } vg_release_thread_sync(); - scene_bh_create( &world.geo ); + /* setup spacial mapping and rigidbody */ + world.geo_bh = scene_bh_create( world.dynamic_vgl, world.scene_geo ); + v3_zero( world.rb_geo.co ); + q_identity( world.rb_geo.q ); - /* Foliage /nocollide layer. - * TODO: Probably should have material traits for this + world.rb_geo.type = k_rb_shape_scene; + world.rb_geo.inf.scene.bh_scene = world.geo_bh; + world.rb_geo.is_world = 1; + rb_init( &world.rb_geo ); + + /* + * Generate scene: non-collidable geometry + * ---------------------------------------------------------------- */ - scene_init( &world.foliage ); + vg_info( "Generating non-collidable geometry\n" ); + + world.scene_no_collide = scene_init( world.dynamic_vgl, 200000, 500000 ); + vg_info( "Applying foliage\n" ); world_apply_procedural_foliage(); - scene_copy_slice( &world.foliage, &world.sm_foliage_main ); + scene_copy_slice( world.scene_no_collide, &world.sm_foliage_main ); - world_add_all_if_material( midentity, &world.foliage, mworld, mat_alphatest); - scene_copy_slice( &world.foliage, &world.sm_foliage_alphatest ); + vg_info( "alphatest...\n" ); + world_add_all_if_material( midentity, world.scene_no_collide, + world.meta, mat_alphatest ); + scene_copy_slice( world.scene_no_collide, &world.sm_foliage_alphatest ); - world_add_all_if_material( midentity, &world.foliage, mworld, mat_graffiti ); - scene_copy_slice( &world.foliage, &world.sm_graffiti ); + vg_info( "graffiti...\n" ); + world_add_all_if_material( midentity, world.scene_no_collide, + world.meta, mat_graffiti ); + scene_copy_slice( world.scene_no_collide, &world.sm_graffiti ); + /* upload and free that */ vg_acquire_thread_sync(); { - scene_upload( &world.foliage ); + scene_upload( world.scene_no_collide, &world.mesh_no_collide ); + } + vg_release_thread_sync(); + + vg_linear_del( world.dynamic_vgl, world.scene_no_collide ); + world.scene_no_collide = NULL; +} +VG_STATIC void world_post_process(void) +{ + /* initialize audio if need be */ + audio_lock(); + for( int i=0; iplayer ); + audio_player_set_flags( &thingy->player, thingy->flags ); + audio_player_set_vol( &thingy->player, thingy->volume ); + audio_player_set_pan( &thingy->player, 0.0f ); + + if( thingy->flags & AUDIO_FLAG_SPACIAL_3D ) + audio_player_set_position( &thingy->player, thingy->pos ); + + if( thingy->flags & AUDIO_FLAG_AUTO_START ) + audio_player_playclip( &thingy->player, &thingy->temp_embedded_clip ); + } + audio_unlock(); + + vg_acquire_thread_sync(); + { /* * Rendering the depth map */ @@ -397,12 +520,12 @@ static void world_load(void) m4x3f camera; v3f extent; - v3_sub( world.geo.bbx[1], world.geo.bbx[0], extent ); + v3_sub( world.scene_geo->bbx[1], world.scene_geo->bbx[0], extent ); - float fl = world.geo.bbx[0][0], - fr = world.geo.bbx[1][0], - fb = world.geo.bbx[0][2], - ft = world.geo.bbx[1][2], + float fl = world.scene_geo->bbx[0][0], + fr = world.scene_geo->bbx[1][0], + fb = world.scene_geo->bbx[0][2], + ft = world.scene_geo->bbx[1][2], rl = 1.0f / (fr-fl), tb = 1.0f / (ft-fb); @@ -434,14 +557,18 @@ static void world_load(void) * TODO: World settings entity */ struct ub_world_lighting *winfo = &gpipeline.ub_world_lighting; - v4_copy( wrender.plane, winfo->g_water_plane ); - v4f bounds; - bounds[0] = world.geo.bbx[0][0]; - bounds[1] = world.geo.bbx[0][2]; - bounds[2] = 1.0f/ (world.geo.bbx[1][0]-world.geo.bbx[0][0]); - bounds[3] = 1.0f/ (world.geo.bbx[1][2]-world.geo.bbx[0][2]); - v4_copy( bounds, winfo->g_depth_bounds ); + if( world.water.enabled ) + v4_copy( world.water.plane, winfo->g_water_plane ); + + v4f info_vec; + v3f *bounds = world.scene_geo->bbx; + + info_vec[0] = bounds[0][0]; + info_vec[1] = bounds[0][2]; + info_vec[2] = 1.0f/ (bounds[1][0]-bounds[0][0]); + info_vec[3] = 1.0f/ (bounds[1][2]-bounds[0][2]); + v4_copy( info_vec, winfo->g_depth_bounds ); winfo->g_water_fog = 0.04f; render_update_lighting_ub(); @@ -449,25 +576,84 @@ static void world_load(void) vg_release_thread_sync(); - world_routes_loadfrom( mworld ); - - for( int i=0; igate.co[0], camera[3] ); if( dist < closest ) @@ -214,14 +191,14 @@ static void render_world_gates( m4x4f projection, v3f playerco, m4x3f camera ) } } - render_gate( &world_routes.gates[id].gate, playerco, camera ); + render_gate( &world.gates[id].gate, playerco, camera ); v3_lerp( world.render_gate_pos, - world_routes.gates[id].gate.co[0], + world.gates[id].gate.co[0], 1.0f, world.render_gate_pos ); } -static void render_world( m4x4f projection, m4x3f camera ) +VG_STATIC void render_world( m4x4f projection, m4x3f camera ) { render_sky( camera ); render_world_routes( projection, camera[3] ); @@ -232,9 +209,9 @@ static void render_world( m4x4f projection, m4x3f camera ) int closest = 0; float min_dist = INFINITY; - for( int i=0; inext[stack_i[si-1]]; stack_i[si-1] ++; @@ -107,37 +108,35 @@ static u32 world_routes_get_path( u32 starter, u32 stack[64] ) /* * Free a segment from the UI bar to be reused later */ -static void world_routes_ui_popfirst( u32 route ) +VG_STATIC void world_routes_ui_popfirst( struct route_ui_bar *pui ) { - struct route *pr = &world_routes.routes[route]; - - if( pr->ui.segment_count ) + if( pui->segment_count ) { - pr->ui.segment_start ++; + pui->segment_start ++; - if( pr->ui.segment_start == 32 ) - pr->ui.segment_start = 0; + if( pui->segment_start == 32 ) + pui->segment_start = 0; - pr->ui.segment_count --; + pui->segment_count --; } } /* * Reset ui bar completely */ -static void world_routes_ui_clear( u32 route ) +VG_STATIC void world_routes_ui_clear( struct route_ui_bar *pui ) { - struct route *pr = &world_routes.routes[route]; - pr->ui.segment_start = (pr->ui.segment_start + pr->ui.segment_count) % - k_max_ui_segments; - pr->ui.segment_count = 0; + pui->segment_start = (pui->segment_start + pui->segment_count) % + k_max_ui_segments; + pui->segment_count = 0; } /* * Break a index range into two pieces over the edge of the maximum it can * store. s1 is 0 always, so its a ring buffer. */ -static void world_routes_ui_split_indices( u32 s0, u32 count, u32 *c0, u32 *c1 ) +VG_STATIC void world_routes_ui_split_indices( u32 s0, u32 count, + u32 *c0, u32 *c1 ) { *c0 = (VG_MIN( s0+count, k_route_ui_max_indices )) - s0; *c1 = count-(*c0); @@ -147,41 +146,42 @@ static void world_routes_ui_split_indices( u32 s0, u32 count, u32 *c0, u32 *c1 ) * Place a set of indices into gpu array automatically splits * across bounds */ -static void world_routes_ui_set_indices( struct route *pr, - u16 *indices, u32 count ) +VG_STATIC void world_routes_ui_set_indices( struct route_ui_bar *pui, + u16 *indices, u32 count ) { u32 c0, c1; - world_routes_ui_split_indices( pr->ui.indices_head, count, &c0, &c1 ); + world_routes_ui_split_indices( pui->indices_head, count, &c0, &c1 ); - glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, pr->ui.ebo ); + glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, pui->ebo ); if( c0 ) { - glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, pr->ui.indices_head*sizeof(u16), + glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, pui->indices_head*sizeof(u16), c0*sizeof(u16), indices ); } if( c1 ) { glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, 0, c1*sizeof(u16), indices+c0 ); - pr->ui.indices_head = c1; + pui->indices_head = c1; } else - pr->ui.indices_head += c0; + pui->indices_head += c0; } /* * Place a set of vertices into gpu array */ -static u32 world_routes_ui_set_verts( struct route *pr, v2f *verts, u32 count ) +VG_STATIC u32 world_routes_ui_set_verts( struct route_ui_bar *pui, + v2f *verts, u32 count ) { - if( pr->ui.vertex_head + count >= k_route_ui_max_verts ) - pr->ui.vertex_head = 0; + if( pui->vertex_head + count >= k_route_ui_max_verts ) + pui->vertex_head = 0; - u32 vert_start = pr->ui.vertex_head; - pr->ui.vertex_head += count; + u32 vert_start = pui->vertex_head; + pui->vertex_head += count; - glBindBuffer( GL_ARRAY_BUFFER, pr->ui.vbo ); + glBindBuffer( GL_ARRAY_BUFFER, pui->vbo ); glBufferSubData( GL_ARRAY_BUFFER, (GLintptr)(vert_start*sizeof(v2f)), sizeof(v2f)*count, verts ); @@ -192,12 +192,12 @@ static u32 world_routes_ui_set_verts( struct route *pr, v2f *verts, u32 count ) * Update the last (count) vertices positions, does not add any. * Data must already be written to, and not cross either array boundaries. */ -static u32 world_routes_ui_update_verts( struct route *pr, +VG_STATIC u32 world_routes_ui_update_verts( struct route_ui_bar *pui, v2f *verts, u32 count ) { - u32 vert_start = pr->ui.vertex_head-count; + u32 vert_start = pui->vertex_head-count; - glBindBuffer( GL_ARRAY_BUFFER, pr->ui.vbo ); + glBindBuffer( GL_ARRAY_BUFFER, pui->vbo ); glBufferSubData( GL_ARRAY_BUFFER, (GLintptr)(vert_start*sizeof(v2f)), sizeof(v2f)*count, verts ); @@ -207,28 +207,29 @@ static u32 world_routes_ui_update_verts( struct route *pr, /* * Current/active segment of this UI bar */ -static struct route_ui_segment *world_routes_ui_curseg( struct route *pr ) +VG_STATIC struct route_ui_segment *world_routes_ui_curseg( + struct route_ui_bar *pui ) { - u32 index = (pr->ui.segment_start+pr->ui.segment_count-1)%k_max_ui_segments; - return &pr->ui.segments[ index ]; + u32 index = (pui->segment_start+pui->segment_count-1)%k_max_ui_segments; + return &pui->segments[ index ]; } /* * Start a new segment in the UI bar, will create a split on the last one if * there is one active currently. (api) */ -static void world_routes_ui_newseg( u32 route ) +VG_STATIC void world_routes_ui_newseg( u32 route ) { - struct route *pr = &world_routes.routes[route]; + struct route_ui_bar *pui = &world.ui_bars[route]; - pr->ui.last_notch = 0.0; + pui->last_notch = 0.0; - glBindVertexArray( pr->ui.vao ); - if( pr->ui.segment_count ) + glBindVertexArray( pui->vao ); + if( pui->segment_count ) { float const k_gap_width = 1.0f; - struct route_ui_segment *cseg = world_routes_ui_curseg(pr); + struct route_ui_segment *cseg = world_routes_ui_curseg( pui ); v2f verts[2]; verts[0][0] = cseg->length-k_gap_width; @@ -236,11 +237,11 @@ static void world_routes_ui_newseg( u32 route ) verts[1][0] = cseg->length-k_gap_width; verts[1][1] = -0.5f; - world_routes_ui_update_verts( pr, verts, 2 ); + world_routes_ui_update_verts( pui, verts, 2 ); } - pr->ui.segment_count ++; - struct route_ui_segment *segment = world_routes_ui_curseg(pr); + pui->segment_count ++; + struct route_ui_segment *segment = world_routes_ui_curseg( pui ); v2f verts[4]; verts[0][0] = 0.0f; @@ -252,7 +253,7 @@ static void world_routes_ui_newseg( u32 route ) verts[3][0] = 0.0f; verts[3][1] = -0.5f; - u32 vert_start = world_routes_ui_set_verts( pr, verts, 4 ); + u32 vert_start = world_routes_ui_set_verts( pui, verts, 4 ); u16 indices[6]; indices[0] = vert_start + 0; @@ -264,19 +265,19 @@ static void world_routes_ui_newseg( u32 route ) segment->vertex_start = vert_start; segment->vertex_count = 4; - segment->index_start = pr->ui.indices_head; + segment->index_start = pui->indices_head; segment->index_count = 6; segment->notches = 0; - world_routes_ui_set_indices( pr, indices, 6 ); + world_routes_ui_set_indices( pui, indices, 6 ); } /* * Extend the end of the bar */ -static void world_routes_ui_updatetime( u32 route, float time ) +VG_STATIC void world_routes_ui_updatetime( u32 route, float time ) { - struct route *pr = &world_routes.routes[route]; + struct route_ui_bar *pui = &world.ui_bars[route]; v2f verts[2]; verts[0][0] = time; @@ -284,96 +285,16 @@ static void world_routes_ui_updatetime( u32 route, float time ) verts[1][0] = time; verts[1][1] = -0.5f; - u32 vert_start = pr->ui.vertex_head-2; + u32 vert_start = pui->vertex_head-2; - glBindVertexArray( pr->ui.vao ); - world_routes_ui_update_verts( pr, verts, 2 ); + glBindVertexArray( pui->vao ); + world_routes_ui_update_verts( pui, verts, 2 ); - struct route_ui_segment *cseg = world_routes_ui_curseg(pr); + struct route_ui_segment *cseg = world_routes_ui_curseg( pui ); cseg->length = time; } -/* - * Create a notch in the bar, used when a reset is triggered by the user - */ -static void world_routes_ui_notch( u32 route, float time ) -{ - return; /* FIXME: Temporarily disabled */ - - struct route *pr = &world_routes.routes[route]; - - if( (time - pr->ui.last_notch) > 1.0 ) - { - struct route_ui_segment *segment = world_routes_ui_curseg(pr); - if( segment->notches == k_max_ui_splits_per_segment ) - return; - - segment->notches ++; - - v2f verts[8]; - - float const k_notch_width = 1.0f; - - float xa = time-k_notch_width, - xb = time-k_notch_width * 0.5f, - xc = time; - - verts[0][0] = xa; - verts[0][1] = 0.5f; - verts[1][0] = xa; - verts[1][1] = -0.5f; - - verts[2][0] = xb; - verts[2][1] = 0.25f; - verts[3][0] = xb; - verts[3][1] = -0.25f; - - verts[4][0] = xc; - verts[4][1] = 0.5f; - verts[5][0] = xc; - verts[5][1] = -0.5f; - - verts[6][0] = xc; - verts[6][1] = 0.5f; - verts[7][0] = xc; - verts[7][1] = -0.5f; - - glBindVertexArray( pr->ui.vao ); - u32 vert_start_mod = world_routes_ui_update_verts( pr, verts, 2 ), - vert_start_new = world_routes_ui_set_verts( pr, verts+2, 6 ); - - u16 indices[18]; - indices[ 0] = vert_start_mod+1; - indices[ 1] = vert_start_new+0; - indices[ 2] = vert_start_mod+0; - indices[ 3] = vert_start_mod+1; - indices[ 4] = vert_start_new+1; - indices[ 5] = vert_start_new+0; - - indices[ 6] = vert_start_new+0; - indices[ 7] = vert_start_new+1; - indices[ 8] = vert_start_new+3; - indices[ 9] = vert_start_new+0; - indices[10] = vert_start_new+3; - indices[11] = vert_start_new+2; - - indices[12] = vert_start_new+3; - indices[13] = vert_start_new+4; - indices[14] = vert_start_new+2; - indices[15] = vert_start_new+3; - indices[16] = vert_start_new+5; - indices[17] = vert_start_new+4; - - world_routes_ui_set_indices( pr, indices, 18 ); - - pr->ui.last_notch = time; - - segment->vertex_count += 6; - segment->index_count += 18; - } -} - -static void world_routes_ui_draw_segment( struct route_ui_segment *segment ) +VG_STATIC void world_routes_ui_draw_segment( struct route_ui_segment *segment ) { u32 c0, c1; world_routes_ui_split_indices( segment->index_start, @@ -388,28 +309,29 @@ static void world_routes_ui_draw_segment( struct route_ui_segment *segment ) /* * Draws full bar at Y offset(offset). */ -static void world_routes_ui_draw( u32 route, v4f colour, float offset ) +VG_STATIC void world_routes_ui_draw( u32 route, v4f colour, float offset ) { float const k_bar_height = 0.05f, k_bar_scale_x = 0.005f; - struct route *pr = &world_routes.routes[route]; + struct route *pr = &world.routes[route]; + struct route_ui_bar *pui = &world.ui_bars[route]; - float cx = pr->ui.xpos; + float cx = pui->xpos; shader_routeui_use(); - glBindVertexArray( pr->ui.vao ); + glBindVertexArray( pui->vao ); - float fade_amt = world_routes.time - pr->ui.fade_timer_start; + float fade_amt = world.time - pui->fade_timer_start; fade_amt = vg_clampf( fade_amt / 1.0f, 0.0f, 1.0f ); float fade_block_size = 0.0f, main_block_size = 0.0f; - for( u32 i=0; iui.fade_count; i++ ) + for( u32 i=0; ifade_count; i++ ) { - u32 j = (pr->ui.fade_start + i) % k_max_ui_segments; - struct route_ui_segment *segment = &pr->ui.segments[j]; + u32 j = (pui->fade_start + i) % k_max_ui_segments; + struct route_ui_segment *segment = &pui->segments[j]; fade_block_size += segment->length; } @@ -421,7 +343,7 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) fade_colour[3] *= 1.0f-fade_amt; /* 1 minute timer */ - float timer_delta = (world_routes.time - world_routes.last_use) * (1.0/45.0), + float timer_delta = (world.time - world.last_use) * (1.0/45.0), timer_scale = 1.0f - vg_minf( timer_delta, 1.0f ); /* @@ -432,10 +354,10 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) base = -1.0f + (offset+0.5f)*k_bar_height * timer_scale; shader_routeui_uColour( fade_colour ); - for( u32 i=0; iui.fade_count; i++ ) + for( u32 i=0; ifade_count; i++ ) { - u32 j = (pr->ui.fade_start + i) % k_max_ui_segments; - struct route_ui_segment *segment = &pr->ui.segments[j]; + u32 j = (pui->fade_start + i) % k_max_ui_segments; + struct route_ui_segment *segment = &pui->segments[j]; shader_routeui_uOffset( (v4f){ cx*k_bar_scale_x, base, k_bar_scale_x, height } ); @@ -448,10 +370,10 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) * Draw main bar */ shader_routeui_uColour( colour ); - for( u32 i=0; iui.segment_count; i++ ) + for( u32 i=0; isegment_count; i++ ) { - u32 j = (pr->ui.segment_start + i) % k_max_ui_segments; - struct route_ui_segment *segment = &pr->ui.segments[j]; + u32 j = (pui->segment_start + i) % k_max_ui_segments; + struct route_ui_segment *segment = &pui->segments[j]; shader_routeui_uOffset( (v4f){ cx*k_bar_scale_x, base, k_bar_scale_x, height } ); @@ -462,14 +384,14 @@ static void world_routes_ui_draw( u32 route, v4f colour, float offset ) main_block_size += segment->length; } - pr->ui.xpos = vg_lerpf( pr->ui.xpos, -main_block_size * 0.5f, 0.03f ); + pui->xpos = vg_lerpf( pui->xpos, -main_block_size * 0.5f, 0.03f ); } -static void world_routes_local_set_record( u32 route, double lap_time ) +VG_STATIC void world_routes_local_set_record( u32 route, double lap_time ) { vg_success( " NEW LAP TIME: %f\n", lap_time ); - struct route *pr = &world_routes.routes[route]; + struct route *pr = &world.routes[route]; if( pr->track_id != 0xffffffff ) { @@ -507,12 +429,13 @@ static void world_routes_local_set_record( u32 route, double lap_time ) * 2: the time of each segment will be recorded into the data buffer * (not implemented: TODO) */ -static void world_routes_verify_run( u32 route ) +VG_STATIC void world_routes_verify_run( u32 route ) { - struct route *pr = &world_routes.routes[route]; + struct route *pr = &world.routes[route]; + struct route_ui_bar *pui = &world.ui_bars[route]; u32 stack[64]; - u32 si = world_routes_get_path( world_routes.routes[route].start, stack ); + u32 si = world_routes_get_path( world.routes[route].start, stack ); /* * we only care about gates that ref gates, so shuffle down the array @@ -521,15 +444,15 @@ static void world_routes_verify_run( u32 route ) u32 sj = 0, maxv = 0, begin = 0; for( u32 i=0; ispecial_type == k_route_special_type_collector ) { - timings[sj ++] = &world_routes.collectors[ inode->special_id ].timing; + timings[sj ++] = &world.collectors[ inode->special_id ].timing; } else if( inode->special_type == k_route_special_type_gate ) { - timings[sj ++] = &world_routes.gates[inode->special_id].timing; + timings[sj ++] = &world.gates[inode->special_id].timing; } } @@ -543,10 +466,10 @@ static void world_routes_verify_run( u32 route ) } vg_info( "== begin verification (%u) ==\n", route ); - vg_info( " current version: %u\n", world_routes.current_run_version ); + vg_info( " current version: %u\n", world.current_run_version ); int verified = 0; - if( timings[begin]->version == world_routes.current_run_version ) + if( timings[begin]->version == world.current_run_version ) verified = 1; int valid_segment_count = 0; @@ -576,24 +499,24 @@ static void world_routes_verify_run( u32 route ) if( verified ) vg_success( " [ %u %f ] %f\n", timings[j1]->time, - timings[j1]->version, diff ); + timings[j1]->version, diff ); else vg_warn( " [ %u %f ]\n", timings[j1]->time, timings[j1]->version ); } - pr->ui.fade_start = pr->ui.segment_start; - pr->ui.fade_count = 0; - pr->ui.fade_timer_start = world_routes.time; + pui->fade_start = pui->segment_start; + pui->fade_count = 0; + pui->fade_timer_start = world.time; - int orig_seg_count = pr->ui.segment_count; + int orig_seg_count = pui->segment_count; world_routes_ui_newseg( route ); if( verified ) { world_routes_local_set_record( route, lap_time ); - world_routes_ui_popfirst(route); - pr->ui.fade_count ++; + world_routes_ui_popfirst( pui ); + pui->fade_count ++; } else vg_info( " ctime: %f\n", lap_time ); @@ -602,32 +525,33 @@ static void world_routes_verify_run( u32 route ) int to_remove = orig_seg_count-valid_segment_count; for( int i=0; iui.fade_count ++; + world_routes_ui_popfirst( pui ); + pui->fade_count ++; } - world_routes.routes[route].latest_pass = world_routes.time; + world.routes[route].latest_pass = world.time; } /* * When going through a gate this is called for bookkeeping purposes */ -static void world_routes_activate_gate( u32 id ) +VG_STATIC void world_routes_activate_gate( u32 id ) { - struct route_gate *rg = &world_routes.gates[id]; - struct route_node *pnode = &world_routes.nodes[rg->node_id], - *pdest = &world_routes.nodes[pnode->next[0]]; + struct route_gate *rg = &world.gates[id]; + struct route_node *pnode = &world.nodes[rg->node_id], + *pdest = &world.nodes[pnode->next[0]]; + + world.last_use = world.time; - world_routes.last_use = world_routes.time; + struct route_collector *rc = &world.collectors[ pdest->special_id ]; - struct route_collector *rc = &world_routes.collectors[ pdest->special_id ]; + world.active_gate = id; + rg->timing.version = world.current_run_version; + rg->timing.time = world.time; - world_routes.active_gate = id; - rg->timing.version = world_routes.current_run_version; - rg->timing.time = world_routes.time; - for( u32 i=0; iactive; @@ -644,30 +568,31 @@ static void world_routes_activate_gate( u32 id ) if( was_active && !route->active ) { - route->ui.fade_start = route->ui.segment_start; - route->ui.fade_count = route->ui.segment_count; - route->ui.fade_timer_start = world_routes.time; - world_routes_ui_clear(i); - - vg_success( "CLEARING -> %u %u \n", route->ui.fade_start, - route->ui.fade_count ); + struct route_ui_bar *pui = &world.ui_bars[i]; + pui->fade_start = pui->segment_start; + pui->fade_count = pui->segment_count; + pui->fade_timer_start = world.time; + + world_routes_ui_clear( pui ); + vg_success( "CLEARING -> %u %u \n", pui->fade_start, + pui->fade_count ); } } - world_routes.current_run_version ++; + world.current_run_version ++; - rc->timing.version = world_routes.current_run_version; - rc->timing.time = world_routes.time; - world_routes.current_run_version ++; + rc->timing.version = world.current_run_version; + rc->timing.time = world.time; + world.current_run_version ++; } /* * Notify the UI system that we've reset the player */ -static void world_routes_notify_reset(void) +VG_STATIC void world_routes_notify_reset(void) { - world_routes.rewind_from = world_routes.time; - world_routes.rewind_to = world_routes.last_use; + world.rewind_from = world.time; + world.rewind_to = world.last_use; #if 0 for( int i=0; iroute_count; i++ ) @@ -681,25 +606,23 @@ static void world_routes_notify_reset(void) } /* Rewind between the saved points in time */ -static void world_routes_rollback_time( double t ) +VG_STATIC void world_routes_rollback_time( double t ) { - world_routes.time = - vg_lerp( world_routes.rewind_to, world_routes.rewind_from, t ); + world.time = vg_lerp( world.rewind_to, world.rewind_from, t ); } /* draw lines along the paths */ -static void world_routes_debug(void) +VG_STATIC void world_routes_debug(void) { - - for( int i=0; ico, 1.0f, rn->special_type? 0xffffff00: 0xff00b2ff ); } - for( int i=0; istart, stack ); @@ -713,39 +636,31 @@ static void world_routes_debug(void) { int sk = (sj+1)%si; - struct route_node *pj = &world_routes.nodes[stack[sj]], - *pk = &world_routes.nodes[stack[sk]]; + struct route_node *pj = &world.nodes[stack[sj]], + *pk = &world.nodes[stack[sk]]; debug_sbpath( pj, pk, cc, (float)i ); } } - for( int i=0; inext[j] != 0xffffffff ) { - rj = &world_routes.nodes[ri->next[j]]; + rj = &world.nodes[ri->next[j]]; vg_line( ri->co, rj->co, 0x20ffffff ); } } } } -static void world_id_fixup( u32 *uid, mdl_header *mdl ) +VG_STATIC void world_routes_create_mesh( u32 route_id ) { - if( *uid ) - *uid = mdl_node_from_id( mdl, *uid )->sub_uid; - else - *uid = 0xffffffff; -} - -static void world_routes_create_mesh( u32 route_id ) -{ - struct route *route = &world_routes.routes[ route_id ]; + struct route *route = &world.routes[ route_id ]; u32 stack[64]; u32 si = world_routes_get_path( route->start, stack ); @@ -756,8 +671,8 @@ static void world_routes_create_mesh( u32 route_id ) { int sk=(sj+1)%si; - struct route_node *rnj = &world_routes.nodes[ stack[sj] ], - *rnk = &world_routes.nodes[ stack[sk] ], + struct route_node *rnj = &world.nodes[ stack[sj] ], + *rnk = &world.nodes[ stack[sk] ], *rnl; if( rnj->special_type && rnk->special_type ) @@ -771,7 +686,7 @@ static void world_routes_create_mesh( u32 route_id ) if( rnk->special_type ) { - rnl = &world_routes.nodes[ rnk->next[0] ]; + rnl = &world.nodes[ rnk->next[0] ]; base_x1 = (float)rnl->ref_count*-0.5f + (float)rnl->current_refs; } @@ -830,19 +745,19 @@ static void world_routes_create_mesh( u32 route_id ) v2_zero( va.uv ); v2_zero( vb.uv ); - scene_push_vert( &world_routes.scene_lines, &va ); - scene_push_vert( &world_routes.scene_lines, &vb ); + scene_push_vert( world.scene_lines, &va ); + scene_push_vert( world.scene_lines, &vb ); if( last_valid ) { /* Connect them with triangles */ - scene_push_tri( &world_routes.scene_lines, (u32[3]){ + scene_push_tri( world.scene_lines, (u32[3]){ last_valid+0-2, last_valid+1-2, last_valid+2-2} ); - scene_push_tri( &world_routes.scene_lines, (u32[3]){ + scene_push_tri( world.scene_lines, (u32[3]){ last_valid+1-2, last_valid+3-2, last_valid+2-2} ); } - last_valid = world_routes.scene_lines.vertex_count; + last_valid = world.scene_lines->vertex_count; } else last_valid = 0; @@ -860,255 +775,286 @@ static void world_routes_create_mesh( u32 route_id ) rnj->current_refs ++; } - scene_copy_slice( &world_routes.scene_lines, &route->sm ); + scene_copy_slice( world.scene_lines, &route->sm ); } /* * Create the strips of colour that run through the world along course paths */ -static int world_routes_create_all_meshes(void) +VG_STATIC void world_routes_generate(void) { vg_info( "Generating route meshes\n" ); + world.scene_lines = scene_init( world.dynamic_vgl, 200000, 300000 ); - scene_init( &world_routes.scene_lines ); - - for( u32 i=0; iclasstype == k_classtype_gate ) + { + struct classtype_gate *inf = mdl_get_entdata( world.meta, pnode ); - /* UI buffers */ - for( int i=0; itarget ) { - /* OpenGL strips */ - struct route *route = &world_routes.routes[i]; + mdl_node *pother = mdl_node_from_id( world.meta, inf->target ); + + if( pother->classtype == k_classtype_gate ) + { + return k_route_special_type_gate; + } + } - glGenVertexArrays( 1, &route->ui.vao ); - glGenBuffers( 1, &route->ui.vbo ); - glGenBuffers( 1, &route->ui.ebo ); - glBindVertexArray( route->ui.vao ); + return k_route_special_type_collector; + } - size_t stride = sizeof(v2f); + return k_route_special_type_none; +} - glBindBuffer( GL_ARRAY_BUFFER, route->ui.vbo ); - glBufferData( GL_ARRAY_BUFFER, k_route_ui_max_verts*stride, - NULL, GL_DYNAMIC_DRAW ); +/* count entities and allocate correct amount of memory in advance */ +VG_STATIC void world_routes_allocate(void) +{ + vg_info( "Allocating routes\n" ); - glBindVertexArray( route->ui.vao ); - glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, route->ui.ebo ); - glBufferData( GL_ELEMENT_ARRAY_BUFFER, - k_route_ui_max_indices*sizeof(u16), NULL, - GL_DYNAMIC_DRAW ); + /* count */ + u32 node_count = 0, + route_count = 0, + gate_count = 0, + collector_count = 0; + + for( int i=0; iinfo.node_count; i++ ) + { + mdl_node *pnode = mdl_node_from_id( world.meta, i ); - glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, stride, (void *)0 ); - glEnableVertexAttribArray( 0 ); - VG_CHECK_GL_ERR(); + if( pnode->classtype == k_classtype_route_node || + pnode->classtype == k_classtype_gate ) + { + pnode->sub_uid = node_count; + + enum route_special_type type = world_route_node_type( pnode ); + + if( type == k_route_special_type_gate ) + gate_count ++; + else if( type == k_route_special_type_collector ) + collector_count ++; + + node_count ++; + } + else if( pnode->classtype == k_classtype_route ) + { + route_count ++; } } - vg_release_thread_sync(); - scene_free_offline_buffers( &world_routes.scene_lines ); - return 1; -} + /* allocate */ + u32 node_size = node_count * sizeof(struct route_node), + route_size = route_count * sizeof(struct route), + gate_size = gate_count * sizeof(struct route_gate), + collector_size = collector_count * sizeof(struct route_collector); + world.nodes = vg_linear_alloc( world.dynamic_vgl, node_size ); + world.routes = vg_linear_alloc( world.dynamic_vgl, route_size ); + world.gates = vg_linear_alloc( world.dynamic_vgl, gate_size ); + world.collectors = vg_linear_alloc( world.dynamic_vgl, collector_size ); +} -static void world_routes_loadfrom( mdl_header *mdl ) +/* create node from mdl node */ +VG_STATIC struct route_node *world_routes_create_node( mdl_node *pnode ) { - vg_info( "Initializing routes\n" ); + struct route_node *rn = &world.nodes[ world.node_count ++ ]; - world_routes.nodes = NULL; - world_routes.node_count = 0; - world_routes.node_cap = 0; - world_routes.routes = NULL; - world_routes.route_count = 0; - world_routes.route_cap = 0; - world_routes.gates = NULL; - world_routes.gate_count = 0; - world_routes.gate_cap = 0; - - /* TODO Break this up */ - for( int i=0; inode_count; i++ ) - { - mdl_node *pnode = mdl_node_from_id(mdl,i); - m4x3f transform; + m4x3f transform; + mdl_node_transform( pnode, transform ); - if( pnode->classtype == k_classtype_route_node || - pnode->classtype == k_classtype_gate ) - { - mdl_node_transform( pnode, transform ); - pnode->sub_uid = world_routes.node_count; - - world_routes.nodes = buffer_reserve( world_routes.nodes, - world_routes.node_count, - &world_routes.node_cap, 1, - sizeof( struct route_node ) ); - - struct route_node *rn = &world_routes.nodes[world_routes.node_count]; - - v3_copy( transform[0], rn->right ); - v3_normalize( rn->right ); - v3_copy( transform[1], rn->up ); - v3_normalize( rn->up ); - v3_muls( transform[2], -1.0f, rn->h ); - v3_copy( transform[3], rn->co ); - rn->ref_count = 0; - rn->current_refs = 0; - rn->special_type = 0; - rn->special_id = 0; + v3_copy( transform[3], rn->co ); + v3_copy( transform[0], rn->right ); + v3_copy( transform[1], rn->up ); + v3_muls( transform[2], -1.0f, rn->h ); + v3_normalize( rn->right ); + v3_normalize( rn->up ); - if( pnode->classtype == k_classtype_gate ) - { - struct classtype_gate *inf = mdl_get_entdata( mdl, pnode ); + rn->next[0] = 0xffffffff; + rn->next[1] = 0xffffffff; - /* H is later scaled based on link distance */ - v3_normalize( rn->h ); - rn->next[0] = inf->target; - rn->next[1] = 0; + rn->special_type = 0; + rn->special_id = 0; + rn->current_refs = 0; + rn->ref_count = 0; - /* TODO */ - if( inf->target ) - { - mdl_node *pother = mdl_node_from_id( mdl, inf->target ); - - if( pother->classtype == k_classtype_gate ) - { - world_routes.gates = buffer_reserve( world_routes.gates, - world_routes.gate_count, - &world_routes.gate_cap, - 1, sizeof( struct route_gate ) ); - - struct route_gate *rg = - &world_routes.gates[world_routes.gate_count]; - - rg->node_id = world_routes.node_count; - rg->timing.time = 0.0; - rg->timing.version = 0; - - v3_copy( pnode->co, rg->gate.co[0] ); - v3_copy( pother->co, rg->gate.co[1] ); - v4_copy( pnode->q, rg->gate.q[0] ); - v4_copy( pother->q, rg->gate.q[1] ); - v2_copy( inf->dims, rg->gate.dims ); - - gate_transform_update( &rg->gate ); - rn->special_type = k_route_special_type_gate; - rn->special_id = world_routes.gate_count; - - world_routes.gate_count ++; - } - } + return rn; +} - if( rn->special_type == 0 ) - { - world_routes.collectors = buffer_reserve( - world_routes.collectors, - world_routes.collector_count, - &world_routes.collector_cap, - 1, sizeof( struct route_collector )); +/* retrieve the correct node id from mdl subuid */ +VG_STATIC u32 world_routes_get_subuid( u32 target ) +{ + if( target == 0 ) + return 0xffffffff; + else + return mdl_node_from_id( world.meta, target )->sub_uid; +} + +#if 0 +VG_STATIC void world_id_fixup( u32 *uid, mdl_context *mdl ) +{ + if( *uid ) + *uid = mdl_node_from_id( mdl, *uid )->sub_uid; + else + *uid = 0xffffffff; +} +#endif - struct route_collector *rc = - &world_routes.collectors[world_routes.collector_count]; - rc->timing.time = 0.0; - rc->timing.version = 0; +/* process gate attachement onto node */ +VG_STATIC void world_routes_process_gate( struct route_node *rn, + mdl_node *pnode ) +{ + struct classtype_gate *inf = mdl_get_entdata( world.meta, pnode ); - rn->special_type = k_route_special_type_collector; - rn->special_id = world_routes.collector_count; + /* H is later scaled based on link distance */ + v3_normalize( rn->h ); - world_routes.collector_count ++; - } - } - else - { - struct classtype_route_node *inf = mdl_get_entdata( mdl, pnode ); - rn->next[0] = inf->target; - rn->next[1] = inf->target1; - } + rn->next[0] = world_routes_get_subuid( inf->target ); + rn->next[1] = 0xffffffff; + rn->special_type = world_route_node_type( pnode ); - world_routes.node_count ++; - } - else if( pnode->classtype == k_classtype_route ) - { - struct classtype_route *inf = mdl_get_entdata( mdl, pnode ); - world_routes.routes = buffer_reserve( world_routes.routes, - world_routes.route_count, - &world_routes.route_cap, - 1, sizeof( struct route ) ); + /* process gate type */ + if( rn->special_type == k_route_special_type_gate ) + { + mdl_node *pother = mdl_node_from_id( world.meta, inf->target ); + + struct route_gate *rg = &world.gates[ world.gate_count ]; - struct route *route = &world_routes.routes[world_routes.route_count]; - memset( route, 0, sizeof(struct route) ); + rg->node_id = world.node_count-1; + rg->timing.time = 0.0; + rg->timing.version = 0; - v3_copy( inf->colour, route->colour ); - route->colour[3] = 1.0f; + v3_copy( pnode->co, rg->gate.co[0] ); + v3_copy( pother->co, rg->gate.co[1] ); + v4_copy( pnode->q, rg->gate.q[0] ); + v4_copy( pother->q, rg->gate.q[1] ); + v2_copy( inf->dims, rg->gate.dims ); + gate_transform_update( &rg->gate ); + rn->special_id = world.gate_count; - route->track_id = 0xffffffff; - for( u32 j=0; jpstr_name), track_infos[j].name )) - { - route->track_id = j; - break; - } - } + world.gate_count ++; + } - route->start = inf->id_start; - route->active = 0; - route->factive = 0.0f; - mdl_node_transform( pnode, route->scoreboard_transform ); - - route->ui.indices_head = k_route_ui_max_indices - 9; - route->ui.vertex_head = k_route_ui_max_verts - 200; - route->ui.segment_start = 0; - route->ui.segment_count = 0; - route->ui.last_notch = 0.0; - route->ui.fade_start = 0; - route->ui.fade_count = 0; - route->ui.fade_timer_start = 0.0; - - world_routes.route_count ++; - } + /* process collector type */ + else if( rn->special_type == k_route_special_type_collector ) + { + struct route_collector *rc = + &world.collectors[ world.collector_count ]; + + rc->timing.time = 0.0; + rc->timing.version = 0; + + rn->special_id = world.collector_count; + world.collector_count ++; } + else + vg_fatal_exit_loop( "Invalid state" ); +} - /* - * Apply correct system-local ids - */ - for( int i=0; icolour, route->colour ); + route->colour[3] = 1.0f; + route->track_id = 0xffffffff; + + for( u32 j=0; jnext[j], mdl ); + if( !strcmp( mdl_pstr(mdl,pnode->pstr_name), track_infos[j].name )) + { + route->track_id = j; + break; + } } - for( int i=0; istart = world_routes_get_subuid( inf->id_start ); + route->active = 0; + route->factive = 0.0f; + mdl_node_transform( pnode, route->scoreboard_transform ); + + struct route_ui_bar *pui = &world.ui_bars[ world.route_count ]; + pui->indices_head = k_route_ui_max_indices - 9; + pui->vertex_head = k_route_ui_max_verts - 200; + pui->segment_start = 0; + pui->segment_count = 0; + pui->last_notch = 0.0; + pui->fade_start = 0; + pui->fade_count = 0; + pui->fade_timer_start = 0.0; + + world.route_count ++; +} + +/* load all routes from model header */ +VG_STATIC void world_routes_process(void) +{ + vg_info( "Initializing routes\n" ); + mdl_context *mdl = world.meta; + + for( int i=0; iinfo.node_count; i++ ) { - struct route *route = &world_routes.routes[i]; - world_id_fixup( &route->start, mdl ); + mdl_node *pnode = mdl_node_from_id(mdl,i); + + if( pnode->classtype == k_classtype_route_node || + pnode->classtype == k_classtype_gate ) + { + struct route_node *rn = world_routes_create_node( pnode ); + + if( pnode->classtype == k_classtype_gate ) + { + world_routes_process_gate( rn, pnode ); + } + else + { + struct classtype_route_node *inf = mdl_get_entdata( mdl, pnode ); + rn->next[0] = world_routes_get_subuid( inf->target ); + rn->next[1] = world_routes_get_subuid( inf->target1 ); + } + } + else if( pnode->classtype == k_classtype_route ) + { + world_routes_create_route( pnode ); + } } /* * Gather references */ - for( int i=0; istart, stack ); for( int sj=0; sjroute_ids[ rn->ref_count ++ ] = i; if( rn->ref_count > 4 ) vg_warn( "Too many references on route node %i\n", i ); } } - - world_routes_create_all_meshes(); } /* @@ -1117,42 +1063,67 @@ static void world_routes_loadfrom( mdl_header *mdl ) * ----------------------------------------------------------------------------- */ -static void world_routes_init(void) +VG_STATIC void world_routes_init(void) { - world_routes.current_run_version = 2; - world_routes.time = RESET_MAX_TIME*2.0; - world_routes.last_use = 0.0; + world.current_run_version = 2; + world.time = RESET_MAX_TIME*2.0; + world.last_use = 0.0; shader_route_register(); shader_routeui_register(); -} -static void world_routes_free(void*_) -{ - vg_free( world_routes.nodes ); - vg_free( world_routes.routes ); - vg_free( world_routes.gates ); + vg_acquire_thread_sync(); + { + /* UI buffers */ + for( int i=0; ivao ); + glGenBuffers( 1, &pui->vbo ); + glGenBuffers( 1, &pui->ebo ); + glBindVertexArray( pui->vao ); + + size_t stride = sizeof(v2f); + + glBindBuffer( GL_ARRAY_BUFFER, pui->vbo ); + glBufferData( GL_ARRAY_BUFFER, k_route_ui_max_verts*stride, + NULL, GL_DYNAMIC_DRAW ); + + glBindVertexArray( pui->vao ); + glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, pui->ebo ); + glBufferData( GL_ELEMENT_ARRAY_BUFFER, + k_route_ui_max_indices*sizeof(u16), NULL, + GL_DYNAMIC_DRAW ); + + glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, stride, (void *)0 ); + glEnableVertexAttribArray( 0 ); + VG_CHECK_GL_ERR(); + } + } + vg_release_thread_sync(); } -static void world_routes_update(void) +VG_STATIC void world_routes_update(void) { - world_routes.time += vg.time_delta; + world.time += vg.time_delta; - for( int i=0; ifactive = vg_lerpf( route->factive, route->active, 0.6f*vg.time_delta ); if( route->active ) { - world_routes_ui_updatetime(i, world_routes.time - route->latest_pass ); + world_routes_ui_updatetime(i, world.time - route->latest_pass ); } } } -static void bind_terrain_textures(void); -static void render_world_routes( m4x4f projection, v3f camera ) +VG_STATIC void bind_terrain_textures(void); +VG_STATIC void render_world_routes( m4x4f projection, v3f camera ) { m4x3f identity_matrix; m4x3_identity( identity_matrix ); @@ -1166,11 +1137,11 @@ static void render_world_routes( m4x4f projection, v3f camera ) shader_route_uMdl( identity_matrix ); shader_route_uCamera( camera ); - scene_bind( &world_routes.scene_lines ); + mesh_bind( &world.mesh_route_lines ); - for( int i=0; icolour, route->factive, colour ); @@ -1181,16 +1152,16 @@ static void render_world_routes( m4x4f projection, v3f camera ) } } -static void render_world_routes_ui(void) +VG_STATIC void render_world_routes_ui(void) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); float active_offset = 0.0f; - for( int i=0; icolour, active_offset ); active_offset += route->factive; } diff --git a/world_sfd.h b/world_sfd.h index 0f8e374..a83fe0a 100644 --- a/world_sfd.h +++ b/world_sfd.h @@ -53,43 +53,37 @@ float sfd_encode_glyph( char c ) return (float)value; } -static void sfd_encode( struct sfd_instance *display, u32 row, const char *str ) +VG_STATIC void sfd_encode( u32 row, const char *str ) { int end=0; - u32 row_h = display->h-1-row; + u32 row_h = world.sfd.h -1 -row; - for( int i=0; iw; i++ ) + for( int i=0; ibuffer[display->w*row_h + i] = 0.0f; + world.sfd.buffer[world.sfd.w*row_h + i] = 0.0f; } else { if( !str[i] ) end = 1; - display->buffer[display->w*row_h + i] = sfd_encode_glyph( str[i] ); + world.sfd.buffer[world.sfd.w*row_h + i] = sfd_encode_glyph( str[i] ); } } } -static void sfd_new( struct sfd_instance *display, u32 w, u32 h ) +VG_STATIC void sfd_init( u32 w, u32 h ) { - display->w = w; - display->h = h; - display->buffer = vg_alloc( w*h*sizeof(float)*2 ); - - for( int i=0; ibuffer[i] = 0.0f; } -static void sfd_update( struct sfd_instance *display ) +VG_STATIC void sfd_update(void) { - for( int i=0; iw*display->h; i++ ) + for( int i=0; ibuffer[i], - *cur = target+display->w*display->h; + float *target = &world.sfd.buffer[i*2+0], + *cur = &world.sfd.buffer[i*2+1]; float const rate = vg.time_delta * 15.2313131414f; float d1 = *target-*cur; @@ -105,11 +99,9 @@ static void sfd_update( struct sfd_instance *display ) } } -static void sfd_render( struct sfd_instance *display, - m4x4f projection, v3f camera, m4x3f transform ) +VG_STATIC void sfd_render( m4x4f projection, v3f camera, m4x3f transform ) { - struct subworld_sfd *sfd = &world.sfd; - scene_bind( &sfd->mesh ); + mesh_bind( &world.sfd.mesh_display ); shader_scoretext_use(); shader_scoretext_uTexGarbage(0); @@ -122,13 +114,13 @@ static void sfd_render( struct sfd_instance *display, shader_scoretext_uMdl( transform ); shader_scoretext_uCamera( camera ); - for( int y=0;yh; y++ ) + for( int y=0;yw; x++ ) + for( int x=0; xbuffer[display->h*display->w+y*display->w+x]; + float value = world.sfd.buffer[(y*world.sfd.w+x)*2+1]; shader_scoretext_uInfo( (v3f){ x,y, value } ); - scene_draw( &sfd->mesh ); + mesh_draw( &world.sfd.mesh_display ); } } @@ -142,54 +134,53 @@ static void sfd_render( struct sfd_instance *display, shader_vblend_uMdl( transform ); shader_vblend_uCamera( camera ); - mesh_bind( &sfd->temp ); - mesh_draw( &sfd->temp ); + mesh_bind( &world.sfd.mesh_base ); + mesh_draw( &world.sfd.mesh_base ); } -static int world_sfd_test( int argc, const char *argv[] ) +VG_STATIC int world_sfd_test( int argc, const char *argv[] ) { - struct subworld_sfd *sfd = &world.sfd; - if( argc == 2 ) { - int row = vg_min(vg_max(atoi(argv[0]),0),sfd->tester.h); - sfd_encode( &sfd->tester, row, argv[1] ); + int row = vg_min( vg_max(atoi(argv[0]),0), world.sfd.h); + sfd_encode( row, argv[1] ); } return 0; } -static void world_sfd_init(void) +VG_STATIC void world_sfd_init(void) { vg_info( "world_sfd_init\n" ); shader_scoretext_register(); - struct subworld_sfd *sfd = &world.sfd; - vg_function_push( (struct vg_cmd){ .name = "sfd", .function = world_sfd_test }); - mdl_header *mboard = mdl_load( "models/rs_scoretext.mdl" ); - scene_init( &sfd->mesh ); + vg_linear_clear( vg_mem.scratch ); + mdl_context *mboard = + mdl_load_full( vg_mem.scratch, "models/rs_scoretext.mdl" ); + + scene *sc = scene_init( vg_mem.scratch, 3000, 8000 ); mdl_node *pn_backer = mdl_node_from_name( mboard, "backer" ); - mdl_submesh *backer = mdl_submesh_from_id( mboard, pn_backer->submesh_start); + mdl_submesh *backer = &mboard->submesh_buffer[ pn_backer->submesh_start ]; mdl_node *pn_card = mdl_node_from_name( mboard, "score_card" ); - mdl_submesh *card = mdl_submesh_from_id( mboard, pn_card->submesh_start ); + mdl_submesh *card = &mboard->submesh_buffer[ pn_card->submesh_start ]; m4x3f identity; m4x3_identity( identity ); for( int i=4;i<6;i++ ) { - u32 vert_start = sfd->mesh.vertex_count; - scene_add_submesh( &sfd->mesh, mboard, card, identity ); + u32 vert_start = sc->vertex_count; + scene_add_submesh( sc, mboard, card, identity ); for( int j=0; jvertex_count; j++ ) { - mdl_vert *vert = &sfd->mesh.verts[ vert_start+j ]; + mdl_vert *vert = &sc->arrvertices[ vert_start+j ]; float const k_glyph_uvw = 1.0f/64.0f; vert->uv[0] -= k_glyph_uvw * (float)(i-4); @@ -200,23 +191,22 @@ static void world_sfd_init(void) vg_acquire_thread_sync(); { - vg_tex2d_init( (vg_tex2d *[]){ &tex_scoretext }, 1 ); + scene_upload( sc, &world.sfd.mesh_display ); + mdl_unpack_submesh( mboard, &world.sfd.mesh_base, backer ); - scene_upload( &sfd->mesh ); - mdl_unpack_submesh( mboard, &sfd->temp, backer ); + vg_tex2d_init( (vg_tex2d *[]){ &tex_scoretext }, 1 ); } vg_release_thread_sync(); - scene_free_offline_buffers( &sfd->mesh ); - sfd_new( &sfd->tester, 27, 13 ); - vg_free( mboard ); -} + int w = 27, + h = 13; + world.sfd.w = w; + world.sfd.h = h; + world.sfd.buffer = vg_linear_alloc( vg_mem.rtmemory, 2*w*h*sizeof(float) ); -static void world_sfd_free(void *_) -{ - mesh_free( &world.sfd.mesh.mesh ); - vg_tex2d_free( (vg_tex2d *[]){ &tex_scoretext }, 1 ); + for( int i=0; i