vg_release_thread_sync();
}
-VG_STATIC void world_link_lighting_ub( world_instance *world,
- GLuint shader, int texture_id )
+VG_STATIC void world_link_lighting_ub( world_instance *world, GLuint shader )
{
GLuint idx = glGetUniformBlockIndex( shader, "ub_world_lighting" );
glUniformBlockBinding( shader, idx, world->ubo_bind_point );
+}
+
+VG_STATIC void world_bind_position_texture( world_instance *world,
+ GLuint shader, GLuint location,
+ int slot )
+{
+ render_fb_bind_texture( &world->heightmap, 0, slot );
+ glUniform1i( location, slot );
+}
- render_fb_bind_texture( &world->heightmap, 0, texture_id );
- glUniform1i( glGetUniformLocation( shader, "g_world_depth" ), texture_id );
+VG_STATIC void world_bind_light_array( world_instance *world,
+ GLuint shader, GLuint location,
+ int slot )
+{
+ glActiveTexture( GL_TEXTURE0 + slot );
+ glBindTexture( GL_TEXTURE_BUFFER, world->tex_light_entities );
+ glUniform1i( location, slot );
}
VG_STATIC void render_world_depth( world_instance *world, camera *cam );
shader_scene_vertex_blend_use();
shader_scene_vertex_blend_uTexGarbage(0);
shader_scene_vertex_blend_uTexGradients(1);
- world_link_lighting_ub( world, _shader_scene_vertex_blend.id, 2 );
+ world_link_lighting_ub( world, _shader_scene_vertex_blend.id );
+ world_bind_position_texture( world, _shader_scene_vertex_blend.id,
+ _uniform_scene_vertex_blend_g_world_depth, 2 );
+ world_bind_light_array( world, _shader_scene_vertex_blend.id,
+ _uniform_scene_vertex_blend_uLightsArray, 3 );
+
vg_tex2d_bind( &tex_terrain_noise, 0 );
shader_scene_vertex_blend_uPv( cam->mtx.pv );
shader_scene_standard_uTexMain(1);
shader_scene_standard_uPv( cam->mtx.pv );
shader_scene_standard_uPvmPrev( cam->mtx_prev.pv );
- world_link_lighting_ub( world, _shader_scene_standard.id, 2 );
+
+ world_link_lighting_ub( world, _shader_scene_standard.id );
+ world_bind_position_texture( world, _shader_scene_standard.id,
+ _uniform_scene_standard_g_world_depth, 2 );
+ world_bind_light_array( world, _shader_scene_standard.id,
+ _uniform_scene_standard_uLightsArray, 3 );
+
bind_terrain_noise();
shader_scene_standard_uMdl( identity_matrix );
shader_scene_standard_alphatest_uTexMain(1);
shader_scene_standard_alphatest_uPv( cam->mtx.pv );
shader_scene_standard_alphatest_uPvmPrev( cam->mtx_prev.pv );
- world_link_lighting_ub( world, _shader_scene_standard_alphatest.id, 2 );
+
+ world_link_lighting_ub( world, _shader_scene_standard_alphatest.id );
+ world_bind_position_texture( world, _shader_scene_standard_alphatest.id,
+ _uniform_scene_standard_alphatest_g_world_depth, 2 );
+ world_bind_light_array( world, _shader_scene_standard_alphatest.id,
+ _uniform_scene_standard_alphatest_uLightsArray, 3 );
+
+
bind_terrain_noise();
shader_scene_standard_alphatest_uMdl( identity_matrix );
shader_scene_terrain_use();
shader_scene_terrain_uTexGarbage(0);
shader_scene_terrain_uTexGradients(1);
- world_link_lighting_ub( world, _shader_scene_terrain.id, 2 );
+
+ world_link_lighting_ub( world, _shader_scene_terrain.id );
+ world_bind_position_texture( world, _shader_scene_terrain.id,
+ _uniform_scene_terrain_g_world_depth, 2 );
+ world_bind_light_array( world, _shader_scene_terrain.id,
+ _uniform_scene_terrain_uLightsArray, 3 );
vg_tex2d_bind( &tex_terrain_noise, 0 );
shader_scene_depth_uPv( cam->mtx.pv );
shader_scene_depth_uPvmPrev( cam->mtx_prev.pv );
shader_scene_depth_uMdl( identity_matrix );
- world_link_lighting_ub( world, _shader_scene_depth.id, 2 );
+ world_link_lighting_ub( world, _shader_scene_depth.id );
mesh_bind( &world->mesh_geo );
mesh_draw( &world->mesh_geo );
shader_scene_position_uPv( cam->mtx.pv );
shader_scene_position_uPvmPrev( cam->mtx_prev.pv );
shader_scene_position_uMdl( identity_matrix );
- world_link_lighting_ub( world, _shader_scene_position.id, 2 );
+ world_link_lighting_ub( world, _shader_scene_position.id );
mesh_bind( &world->mesh_geo );
mesh_draw( &world->mesh_geo );