From 302b008f2298f54a95a5c5e0b46f2f573b49bb8e Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 1 Jul 2023 00:00:19 +0100 Subject: [PATCH] review: pointcloud.h --- player_skate.c | 2 -- pointcloud.h | 27 +++++++++++++++------------ world_routes.c | 40 +++++++++------------------------------- 3 files changed, 24 insertions(+), 45 deletions(-) diff --git a/player_skate.c b/player_skate.c index 6b5bdfb..8598f20 100644 --- a/player_skate.c +++ b/player_skate.c @@ -3130,8 +3130,6 @@ VG_STATIC void player__skate_post_animate( player_instance *player ) m4x3_mulv( av->sk.final_mtx[ av->id_head ], head, s->state.head_position ); m4x3_mulv( player->rb.to_local, s->state.head_position, s->state.head_position ); - - /* TODO: Extrapolate to_local matrix? */ } VG_STATIC void player__skate_reset_animator( player_instance *player ) diff --git a/pointcloud.h b/pointcloud.h index 4775dd7..427548c 100644 --- a/pointcloud.h +++ b/pointcloud.h @@ -46,8 +46,7 @@ struct pointcloud_buffer{ pointcloud_vert buf[]; }; -static void async_pointcloud_sub( void *payload, u32 size ) -{ +static void async_pointcloud_sub( void *payload, u32 size ){ glBindVertexArray( pointcloud.vao ); glBindBuffer( GL_ARRAY_BUFFER, pointcloud.vbo ); @@ -75,8 +74,7 @@ static void async_pointcloud_sub( void *payload, u32 size ) } } -static void async_pointcloud_alloc( void *payload, u32 size ) -{ +static void async_pointcloud_alloc( void *payload, u32 size ){ glGenVertexArrays( 1, &pointcloud.vao ); glGenBuffers( 1, &pointcloud.vbo ); glBindVertexArray( pointcloud.vao ); @@ -98,26 +96,23 @@ static void async_pointcloud_alloc( void *payload, u32 size ) VG_CHECK_GL_ERR(); } -static void pointcloud_init(void) -{ +static void pointcloud_init(void){ vg_async_call( async_pointcloud_alloc, NULL, 0 ); shader_point_map_register(); } -static void pointcloud_animate( enum pointcloud_anim anim ) -{ +static void pointcloud_animate( enum pointcloud_anim anim ){ pointcloud.anim = anim; pointcloud.anim_start = vg.time; } -static int pointcloud_idle(void) -{ +static int pointcloud_idle(void){ if( pointcloud.anim >= k_pointcloud_anim_idle_any ) return 1; else return 0; } -static void pointcloud_render( world_instance *world, camera *cam, m4x3f model ) -{ +static +void pointcloud_render( world_instance *world, camera *cam, m4x3f model ){ if( pointcloud.anim < k_pointcloud_anim_idle_any ){ f32 const k_transition = 0.6f; f32 t = (vg.time - pointcloud.anim_start) / k_transition; @@ -157,4 +152,12 @@ static void pointcloud_render( world_instance *world, camera *cam, m4x3f model ) glDrawArrays( GL_POINTS, 0, pointcloud.count ); } +static void pointcloud_packvert( pointcloud_vert *vert, v3f pos, v4f colour ){ + for( u32 i=0; i<3; i++ ) + vert->pos[i] = (pos[i]-0.5f) * 32767.0f; + + for( u32 i=0; i<4; i++ ) + vert->colour[i] = colour[i] * 255.0f; +} + #endif /* POINTCLOUD_H */ diff --git a/world_routes.c b/world_routes.c index 8567cdb..d2816d1 100644 --- a/world_routes.c +++ b/world_routes.c @@ -6,6 +6,7 @@ #define ROUTES_C #include +#include "entity.h" #include "world_routes.h" #include "world_gate.h" #include "world_load.h" @@ -250,15 +251,12 @@ void world_routes_pointcloud_spot( world_instance *world, v3_sub( point, pcbuf->boundary[0], pos ); v3_mul( pos, inv_ext, pos ); - for( u32 i=0; i<3; i++ ){ - vert->pos[i] = (pos[i]-0.5f) * 32767.0f; - } - float dist = 1.0f-(v3_length(jitter)); - for( u32 i=0; i<4; i++ ){ - vert->colour[i] = colour[i] * 255.0f * dist*dist; - } + v4f final_colour; + v4_muls( colour, dist*dist, final_colour ); + + pointcloud_packvert( vert, pos, final_colour ); } } @@ -302,14 +300,7 @@ void world_routes_pointcloud_tower( world_instance *world, v3_sub( point, pcbuf->boundary[0], point ); v3_mul( point, inv_ext, point ); - /* TODO....... */ - for( u32 i=0; i<3; i++ ){ - vert->pos[i] = (point[i]-0.5f) * 32767.0f; - } - - for( u32 i=0; i<4; i++ ){ - vert->colour[i] = colour[i] * 255.0f; - } + pointcloud_packvert( vert, point, colour ); } } @@ -662,10 +653,6 @@ VG_STATIC f64 world_routes_scatter_surface_points( world_instance *world, v3_sub( pt, pcbuf->boundary[0], pos ); v3_mul( pos, inv_ext, pos ); - for( u32 i=0; i<3; i++ ){ - vert->pos[i] = (pos[i]-0.5f) * 32767.0f; - } - static v4f colours[] = { [k_surface_prop_concrete] = { 0.13, 0.15, 0.17, 1.0 }, [k_surface_prop_grass] = { 0.07, 0.1, 0.14, 1.0 }, @@ -675,16 +662,13 @@ VG_STATIC f64 world_routes_scatter_surface_points( world_instance *world, }; v4f col = {0.0f,0.0f,0.0f,0.0f}; - if( surf->info.surface_prop < vg_list_size(colours) ){ + if( surf->info.surface_prop < vg_list_size(colours) ) v4_copy( colours[surf->info.surface_prop], col ); - } f32 brightness = v3_dot(vn,light_dir)*0.5f+0.5f; v3_muls( col, brightness, col ); - for( u32 j=0; j<4; j++ ){ - vert->colour[j] = col[j] * 255.0f; - } + pointcloud_packvert( vert, pos, col ); } } @@ -753,13 +737,7 @@ VG_STATIC void world_routes_surface_grid( world_instance *world, v3_sub( hit, pcbuf->boundary[0], co ); v3_mul( co, inv_ext, co ); - for( u32 i=0; i<3; i++ ){ - vert->pos[i] = (co[i]-0.5f) * 32767.0f; - } - - for( u32 i=0; i<4; i++ ){ - vert->colour[i] = colour[i] * 255.0f; - } + pointcloud_packvert( vert, co, colour ); } } } -- 2.25.1