Skip to content

Commit 40e69a1

Browse files
committed
Fix: compute air absorption in the correct place.
1 parent 898dae3 commit 40e69a1

File tree

2 files changed

+9
-17
lines changed

2 files changed

+9
-17
lines changed

src/server.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ void SteamAudioServer::tick() {
4949
attn_model.type = IPL_DISTANCEATTENUATIONTYPE_INVERSEDISTANCE;
5050
attn_model.minDistance = ls->cfg.min_attn_dist;
5151

52+
IPLAirAbsorptionModel absorp_model{};
53+
absorp_model.type = ls->cfg.air_absorption_model_type;
54+
absorp_model.coefficients[0] = ls->cfg.air_absorption_low;
55+
absorp_model.coefficients[1] = ls->cfg.air_absorption_mid;
56+
absorp_model.coefficients[2] = ls->cfg.air_absorption_high;
57+
5258
IPLCoordinateSpace3 src_coords;
5359
src_coords.ahead = IPLVector3{};
5460
src_coords.up = IPLVector3{};
@@ -60,8 +66,10 @@ void SteamAudioServer::tick() {
6066
inputs.directFlags = static_cast<IPLDirectSimulationFlags>(
6167
IPL_DIRECTSIMULATIONFLAGS_DISTANCEATTENUATION |
6268
IPL_DIRECTSIMULATIONFLAGS_OCCLUSION |
63-
IPL_DIRECTSIMULATIONFLAGS_TRANSMISSION);
69+
IPL_DIRECTSIMULATIONFLAGS_TRANSMISSION |
70+
IPL_DIRECTSIMULATIONFLAGS_AIRABSORPTION);
6471
inputs.distanceAttenuationModel = attn_model;
72+
inputs.airAbsorptionModel = absorp_model;
6573
inputs.source = src_coords;
6674
inputs.occlusionType = IPL_OCCLUSIONTYPE_VOLUMETRIC;
6775
inputs.occlusionRadius = ls->cfg.occ_radius;

src/stream.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,6 @@ int32_t SteamAudioStreamPlayback::_mix(AudioFrame *buffer, double rate_scale, in
7676
}
7777

7878
if (ls->cfg.is_air_absorp_on) {
79-
IPLAirAbsorptionModel airAbsorptionModel{};
80-
airAbsorptionModel.type = ls->cfg.air_absorption_model_type;
81-
82-
IPLVector3 sourcePosition = ipl_vec3_from(ls->src.player->get_global_transform().origin);
83-
IPLVector3 listenerPosition = gs->listener_coords.origin;
84-
float airAbsorption[3];
85-
airAbsorption[0] = ls->cfg.air_absorption_low;
86-
airAbsorption[1] = ls->cfg.air_absorption_mid;
87-
airAbsorption[2] = ls->cfg.air_absorption_high;
88-
89-
iplAirAbsorptionCalculate(gs->ctx, sourcePosition, listenerPosition, &airAbsorptionModel, airAbsorption);
90-
91-
ls->direct_outputs.airAbsorption[0] = airAbsorption[0];
92-
ls->direct_outputs.airAbsorption[1] = airAbsorption[1];
93-
ls->direct_outputs.airAbsorption[2] = airAbsorption[2];
94-
9579
ls->direct_outputs.flags = static_cast<IPLDirectEffectFlags>(
9680
ls->direct_outputs.flags |
9781
IPL_DIRECTEFFECTFLAGS_APPLYAIRABSORPTION);

0 commit comments

Comments
 (0)