- switch( c ){
- case '!': value=base+0; break;
- case '?': value=base+1; break;
- case ',': value=base+2; break;
- case '.': value=base+3; break;
- case '#': value=base+4; break;
- case '$': value=base+5; break;
- case '%': value=base+6; break;
- case '*': value=base+7; break;
- case '+': value=base+8; break;
- case '-': value=base+9; break;
- case '/': value=base+10; break;
- case ':': value=base+11; break;
- default: value=0; break;
- }
- }
-
- return (float)value;
-}
-
-VG_STATIC void sfd_encode( u32 row, const char *str )
-{
- int end=0;
- u32 row_h = world_global.sfd.h -1 -row;
-
- for( int i=0; i<world_global.sfd.w; i++ ){
- u32 idx = (world_global.sfd.w*row_h + i) * 2;
-
- if( end ){
- world_global.sfd.buffer[idx] = 0.0f;
- }
- else{
- if( !str[i] )
- end = 1;
-
- world_global.sfd.buffer[idx] = sfd_encode_glyph( str[i] );
- }
- }
-}
-
-VG_STATIC void sfd_update(void)
-{
- for( int i=0; i<world_global.sfd.w*world_global.sfd.h; i++ ){
- float *target = &world_global.sfd.buffer[i*2+0],
- *cur = &world_global.sfd.buffer[i*2+1];
-
- float const rate = vg.time_delta * 15.2313131414f;
- float d1 = *target-*cur;
-
- if( fabsf(d1) > rate ){
- *cur += rate;
- if( *cur > 60.0f )
- *cur -= 60.0f;
- }
- else
- *cur = *target;
- }
-}
-
-VG_STATIC void bind_terrain_noise(void);
-VG_STATIC void sfd_render( world_instance *world, camera *cam, m4x3f transform )
-{
- mesh_bind( &world_global.sfd.mesh_display );
- shader_scene_scoretext_use();
- shader_scene_scoretext_uTexMain(1);
-
- world_link_lighting_ub( world, _shader_scene_scoretext.id );
- world_bind_position_texture( world, _shader_scene_scoretext.id,
- _uniform_scene_scoretext_g_world_depth, 2 );
- world_bind_light_array( world, _shader_scene_scoretext.id,
- _uniform_scene_scoretext_uLightsArray, 3 );
- world_bind_light_index( world, _shader_scene_scoretext.id,
- _uniform_scene_scoretext_uLightsIndex, 4 );
-
- bind_terrain_noise();
- vg_tex2d_bind( &tex_scoretext, 1 );
-
- m4x4f pvm_prev;
- m4x3_expand( transform, pvm_prev );
- m4x4_mul( cam->mtx_prev.pv, pvm_prev, pvm_prev );
-
- shader_scene_scoretext_uPv( cam->mtx.pv );
- shader_scene_scoretext_uPvmPrev( pvm_prev );
- shader_scene_scoretext_uMdl( transform );
- shader_scene_scoretext_uCamera( cam->transform[3] );
-
- for( int y=0;y<world_global.sfd.h; y++ ){
- for( int x=0; x<world_global.sfd.w; x++ ){
- float value = world_global.sfd.buffer[(y*world_global.sfd.w+x)*2+1];
- shader_scene_scoretext_uInfo( (v3f){ x,y, value } );
- mesh_draw( &world_global.sfd.mesh_display );
- }
- }
-
- 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 );
- 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 );
- world_bind_light_index( world, _shader_scene_vertex_blend.id,
- _uniform_scene_vertex_blend_uLightsIndex, 4 );
- bind_terrain_noise();
- vg_tex2d_bind( &tex_scoretext, 1 );
-
- shader_scene_vertex_blend_uPv( cam->mtx.pv );
- shader_scene_vertex_blend_uPvmPrev( pvm_prev );
- shader_scene_vertex_blend_uMdl( transform );
- shader_scene_vertex_blend_uCamera( cam->transform[3] );
-
- mesh_bind( &world_global.sfd.mesh_base );
- mdl_draw_submesh( &world_global.sfd.sm_base );