X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world.h;h=ef935968257fd422b9be0f7f592c332fcefbdb55;hb=791f807111a1f740f745c67db642aa7a8bee56e8;hp=7611c249a7001558df94a1fdf96d2b19e5097f1e;hpb=34a8df54eb962f3ad2e036355041f5bc5cabe5a0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world.h b/world.h index 7611c24..ef93596 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,26 @@ 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; + int g_debug_indices; + int g_debug_complexity; + +#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 +214,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,9 +264,7 @@ struct world_instance v4f q[2]; v2f dims; - m4x3f to_world, recv_to_world, /* TODO: can probably remove these */ - - transport; + m4x3f to_world, transport; } gate; @@ -501,6 +512,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(); @@ -611,6 +623,20 @@ 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; + world->ub_lighting.g_debug_indices = k_debug_light_indices; + world->ub_lighting.g_debug_complexity = k_debug_light_complexity; + + 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 ) { @@ -638,10 +664,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 @@ -712,20 +739,24 @@ VG_STATIC void world_update( world_instance *world, v3f pos ) 0xff00ff00 ); } - for( int i=0; ilight_count; i++ ) + if( k_debug_light_indices ) { - 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;