X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=inline;f=world_gen.h;h=59bed34a282cfdd8ae05687b4c94d261168c76ef;hb=409edea2cf6271956137918e4e0b4f1c2addf620;hp=5cfc9d102af3a94996e032ac177193ffc7ff4836;hpb=f3a2490079baf440238b78e54f4476649eddbda2;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_gen.h b/world_gen.h index 5cfc9d1..59bed34 100644 --- a/world_gen.h +++ b/world_gen.h @@ -596,6 +596,29 @@ VG_STATIC void world_post_process( world_instance *world ) vg_acquire_thread_sync(); { + /* create scene lighting buffer */ + glGenBuffers( 1, &world->tbo_light_entities ); + glBindBuffer( GL_TEXTURE_BUFFER, world->tbo_light_entities ); + glBufferData( GL_TEXTURE_BUFFER, world->light_count*sizeof(float)*8, + NULL, GL_DYNAMIC_DRAW ); + + v4f *light_dst = glMapBuffer( GL_TEXTURE_BUFFER, GL_WRITE_ONLY ); + + for( int i=0; ilight_count; i++ ) + { + struct world_light *light = &world->lights[i]; + + v3_muls( light->colour, light->colour[3] * 2.0f, light_dst[i*2+0] ); + v3_copy( light->co, light_dst[i*2+1] ); + } + + glUnmapBuffer( GL_TEXTURE_BUFFER ); + + glGenTextures( 1, &world->tex_light_entities ); + glBindTexture( GL_TEXTURE_BUFFER, world->tex_light_entities ); + glTexBuffer( GL_TEXTURE_BUFFER, GL_RGBA32F, world->tbo_light_entities ); + + /* Upload lighting uniform buffer */ if( world->water.enabled ) v4_copy( world->water.plane, world->ub_lighting.g_water_plane ); @@ -609,17 +632,6 @@ VG_STATIC void world_post_process( world_instance *world ) info_vec[3] = 1.0f/ (bounds[1][2]-bounds[0][2]); v4_copy( info_vec, world->ub_lighting.g_depth_bounds ); - /* add scene lights */ - for( int i=0; ilight_count; i++ ) - { - struct world_light *light = &world->lights[i]; - - v3_muls( light->colour, light->colour[3] * 2.0f, - world->ub_lighting.g_point_light_colours[i] ); - v3_copy( light->co, - world->ub_lighting.g_point_light_positions[i] ); - } - /* upload full buffer */ glBindBuffer( GL_UNIFORM_BUFFER, world->ubo_lighting ); glBufferSubData( GL_UNIFORM_BUFFER, 0,