X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world.h;h=3f806cb8714e00dbabf0d8564dede4a7b9acd43b;hb=e61356f70eddb79f05d7b9e329e91963ec74f817;hp=b80db3776879f2b1dfb760b64ef432c2010ce6f1;hpb=56f320d8ce6e8997370ec8e02fe50ca2d07b67f0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world.h b/world.h index b80db37..3f806cb 100644 --- a/world.h +++ b/world.h @@ -24,6 +24,7 @@ typedef struct world_instance world_instance; #include "shaders/scene_vertex_blend.h" #include "shaders/scene_terrain.h" #include "shaders/scene_depth.h" +#include "shaders/scene_position.h" #include "shaders/model_sky.h" @@ -87,17 +88,23 @@ struct world_instance g_depth_bounds; float g_water_fog; + float g_time; int g_light_count; int g_light_preview; int g_shadow_samples; +#if 0 v4f g_point_light_positions[32]; v4f g_point_light_colours[32]; +#endif } ub_lighting; GLuint ubo_lighting; int ubo_bind_point; + GLuint tbo_light_entities, + tex_light_entities; + struct framebuffer heightmap; /* @@ -204,8 +211,11 @@ struct world_instance */ struct world_light { - v3f co; - v4f colour; + mdl_node *node; + struct classtype_world_light *inf; + + /* enabled.. etc? + * TODO: we should order entities in the binary by their type */ } * lights; u32 light_count; @@ -251,7 +261,7 @@ struct world_instance v4f q[2]; v2f dims; - m4x3f to_world, recv_to_world, transport; + m4x3f to_world, transport; } gate; @@ -267,6 +277,16 @@ struct world_instance *gates; u32 gate_count; + struct nonlocal_gate + { + struct teleport_gate gate; + mdl_node *node; + + u32 target_map_index, working; + } + *nonlocal_gates; + u32 nonlocalgate_count; + struct route_collector { struct route_timing timing; @@ -489,6 +509,7 @@ VG_STATIC void world_init(void) shader_scene_vertex_blend_register(); shader_scene_terrain_register(); shader_scene_depth_register(); + shader_scene_position_register(); shader_model_sky_register(); @@ -599,6 +620,18 @@ VG_STATIC void world_run_relay( world_instance *world, VG_STATIC void world_update( world_instance *world, v3f pos ) { + /* TEMP!!!!!! */ + static double g_time = 0.0; + g_time += vg.time_delta * (1.0/(k_day_length*60.0)); + + world->ub_lighting.g_time = g_time; + + glBindBuffer( GL_UNIFORM_BUFFER, world->ubo_lighting ); + glBufferSubData( GL_UNIFORM_BUFFER, 0, + sizeof(struct ub_world_lighting), &world->ub_lighting ); + /* TEMP!!!!!! */ + + #if 0 if( world.switching_to_new_world ) { @@ -626,10 +659,11 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) } } - world.sky_time += world.sky_rate * vg.time_delta; - world.sky_rate = vg_lerp( world.sky_rate, world.sky_target_rate, - vg.time_delta * 5.0 ); #endif + world_global.sky_time += world_global.sky_rate * vg.time_delta; + world_global.sky_rate = vg_lerp( world_global.sky_rate, + world_global.sky_target_rate, + vg.time_delta * 5.0 ); world_routes_update( world ); #if 0 @@ -700,20 +734,24 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) 0xff00ff00 ); } - for( int i=0; ilight_count; i++ ) + if( k_debug_light_index ) { - struct world_light *light = &world->lights[i]; + for( int i=0; ilight_count; i++ ) + { + struct world_light *light = &world->lights[i]; + struct classtype_world_light *inf = light->inf; - u32 colour = 0xff000000; - u8 r = light->colour[0] * 255.0f, - g = light->colour[1] * 255.0f, - b = light->colour[2] * 255.0f; + u32 colour = 0xff000000; + u8 r = inf->colour[0] * 255.0f, + g = inf->colour[1] * 255.0f, + b = inf->colour[2] * 255.0f; - colour |= r; - colour |= g << 8; - colour |= b << 16; + colour |= r; + colour |= g << 8; + colour |= b << 16; - vg_line_pt3( light->co, 0.25f, colour ); + vg_line_pt3( light->node->co, 0.25f, colour ); + } } world_global.in_trigger = in_trigger;