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; i<world->light_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 );
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; i<world->light_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,