- vg_convar_push( (struct vg_convar){
- .name = "aud_debug_soundscape",
- .data = &k_audio_debug_soundscape,
- .data_type = k_convar_dtype_i32,
- .opt_i32 = { .min=0, .max=1, .clamp=0 },
- .persistent = 1
- });
-
- vg_convar_push( (struct vg_convar){
- .name = "aud_occlusion_rate",
- .data = &k_audio_occlusion_rate,
- .data_type = k_convar_dtype_f32,
- .opt_f32 = { .clamp = 0 },
- .persistent = 1
- });
-}
-
-static void audio_free(void)
-{
- sfx_set_free( &audio_board );
-}
-
-static void audio_sample_occlusion( v3f origin )
-{
- float d = 0.0f,
- sample_dist = 880.0f;
-
- int sample_count = 8;
-
- for( int i=0; i<sample_count; i++ )
- {
- v3f dir;
- dir[0] = vg_randf();
- dir[1] = vg_randf();
- dir[2] = vg_randf();
-
- v3_muls( dir, 2.0f, dir );
- v3_sub( dir, (v3f){1.0f,1.0f,1.0f}, dir );
-
- v3_normalize( dir );
-
- ray_hit contact;
- contact.dist = 15.0f;
-
- if( ray_world( origin, dir, &contact ) )
- {
- d += contact.dist;
-
- vg_line( origin, contact.pos, 0xff0000ff );
- vg_line_pt3( contact.pos, 0.1f, 0xff0000ff );
- }
- else
- {
- v3f p1;
- v3_muladds( origin, dir, sample_dist, p1 );
- vg_line( origin, p1, 0xffcccccc );
-
- d += sample_dist;
- }
- }
-
- float occlusion = 1.0f - (d * (1.0f/(sample_dist*(float)sample_count))),
- rate = ktimestep * k_audio_occlusion_rate,
- target = powf( occlusion, 6.0f );
- audio_occlusion_current = vg_lerpf( audio_occlusion_current, target, rate );
-}
-
-static void audio_debug_soundscapes(void)
-{
- if( !k_audio_debug_soundscape ) return;