Combine multiple individual flags

This commit is contained in:
Chris Robinson 2022-06-19 07:59:08 -07:00
parent a6c099c63e
commit af690871b1
3 changed files with 67 additions and 105 deletions

View File

@ -593,21 +593,18 @@ private:
struct State1
{
bool changed{false};
Props1 i; // Immediate.
Props1 d; // Deferred.
}; // State1
struct State2
{
bool changed{false};
Props2 i; // Immediate.
Props2 d; // Deferred.
}; // State2
struct State3
{
bool changed{false};
Props3 i; // Immediate.
Props3 d; // Deferred.
}; // State3
@ -1112,6 +1109,7 @@ private:
}; // EnvironmentSizeDeferrer3
int version_;
bool changed_{};
Props3 props_{};
State1 state1_{};
State2 state2_{};
@ -1563,51 +1561,36 @@ void EaxReverbEffect::get(const EaxCall& call)
/*[[nodiscard]]*/ bool EaxReverbEffect::commit()
{
if((version_ == 1 && !state1_.changed)
|| (version_ == 2 && !state2_.changed)
|| (version_ == 3 && !state3_.changed)
|| (version_ == 4 && !state4_.changed)
|| (version_ == 5 && !state5_.changed))
{
if(!changed_)
return false;
}
changed_ = false;
const auto props = props_;
switch (version_)
switch(version_)
{
case 1:
state1_.changed = false;
state1_.i = state1_.d;
translate(state1_.d, props_);
break;
case 1:
state1_.i = state1_.d;
translate(state1_.d, props_);
break;
case 2:
state2_.i = state2_.d;
translate(state2_.d, props_);
break;
case 3:
state3_.i = state3_.d;
props_ = state3_.d;
break;
case 4:
state4_.i = state4_.d;
props_ = state4_.d;
break;
case 5:
state5_.i = state5_.d;
props_ = state5_.d;
break;
case 2:
state2_.changed = false;
state2_.i = state2_.d;
translate(state2_.d, props_);
break;
case 3:
state3_.changed = false;
state3_.i = state3_.d;
props_ = state3_.d;
break;
case 4:
state4_.changed = false;
state4_.i = state4_.d;
props_ = state4_.d;
break;
case 5:
state5_.changed = false;
state5_.i = state5_.d;
props_ = state5_.d;
break;
default:
fail_unknown_version();
default:
fail_unknown_version();
}
auto is_dirty = false;
@ -1953,17 +1936,16 @@ void EaxReverbEffect::set3(const EaxCall& call, Props3& props)
void EaxReverbEffect::set(const EaxCall& call)
{
const auto version = call.get_version();
switch (version)
switch(version)
{
case 1: set1(call, state1_.d); state1_.changed = true; break;
case 2: set2(call, state2_.d); state2_.changed = true; break;
case 3: set3(call, state3_.d); state3_.changed = true; break;
case 4: set3(call, state4_.d); state4_.changed = true; break;
case 5: set3(call, state5_.d); state5_.changed = true; break;
default: fail_unknown_version();
case 1: set1(call, state1_.d); break;
case 2: set2(call, state2_.d); break;
case 3: set3(call, state3_.d); break;
case 4: set3(call, state4_.d); break;
case 5: set3(call, state5_.d); break;
default: fail_unknown_version();
}
changed_ = true;
version_ = version;
}

View File

@ -4475,13 +4475,14 @@ void ALsource::eax_set(const EaxCall& call)
const auto eax_version = call.get_version();
switch(eax_version)
{
case 1: eax1_set(call, eax1_.d); eax1_.changed = true; break;
case 2: eax2_set(call, eax2_.d); eax2_.changed = true; break;
case 3: eax3_set(call, eax3_.d); eax3_.changed = true; break;
case 4: eax4_set(call, eax4_.d); eax4_.changed = true; break;
case 5: eax5_set(call, eax5_.d); eax5_.changed = true; break;
default: eax_fail_unknown_property_id();
case 1: eax1_set(call, eax1_.d); break;
case 2: eax2_set(call, eax2_.d); break;
case 3: eax3_set(call, eax3_.d); break;
case 4: eax4_set(call, eax4_.d); break;
case 5: eax5_set(call, eax5_.d); break;
default: eax_fail_unknown_property_id();
}
eax_changed_ = true;
eax_version_ = eax_version;
}
@ -4894,54 +4895,37 @@ void ALsource::eax_commit(EaxCommitType commit_type)
const auto primary_fx_slot_id = eax_al_context_->eax_get_primary_fx_slot_index();
const auto is_primary_fx_slot_id_changed = (eax_primary_fx_slot_id_ != primary_fx_slot_id);
const auto is_forced = is_primary_fx_slot_id_changed || commit_type == EaxCommitType::forced;
if(commit_type != EaxCommitType::forced && !is_primary_fx_slot_id_changed && !eax_changed_)
return;
eax_primary_fx_slot_id_ = primary_fx_slot_id;
eax_changed_ = false;
switch(eax_version_)
{
case 1:
if(!is_forced && !eax1_.changed)
return;
eax1_.changed = false;
eax1_.i = eax1_.d;
eax1_translate(eax1_.i, eax_);
break;
case 1:
eax1_.i = eax1_.d;
eax1_translate(eax1_.i, eax_);
break;
case 2:
eax2_.i = eax2_.d;
eax2_translate(eax2_.i, eax_);
break;
case 3:
eax3_.i = eax3_.d;
eax3_translate(eax3_.i, eax_);
break;
case 4:
eax4_.i = eax4_.d;
eax4_translate(eax4_.i, eax_);
break;
case 5:
eax5_.i = eax5_.d;
eax_ = eax5_.d;
break;
case 2:
if(!is_forced && !eax2_.changed)
return;
eax2_.changed = false;
eax2_.i = eax2_.d;
eax2_translate(eax2_.i, eax_);
break;
case 3:
if(!is_forced && !eax3_.changed)
return;
eax3_.changed = false;
eax3_.i = eax3_.d;
eax3_translate(eax3_.i, eax_);
break;
case 4:
if(!is_forced && !eax4_.changed)
return;
eax4_.changed = false;
eax4_.i = eax4_.d;
eax4_translate(eax4_.i, eax_);
break;
case 5:
if(!is_forced && !eax5_.changed)
return;
eax5_.changed = false;
eax5_.i = eax5_.d;
eax_ = eax5_.d;
break;
default:
eax_fail_unknown_version();
default:
eax_fail_unknown_version();
}
eax_set_efx_outer_gain_hf();

View File

@ -200,7 +200,6 @@ private:
using Eax1Props = EAXBUFFER_REVERBPROPERTIES;
struct Eax1State {
bool changed{false};
Eax1Props i; // Immediate.
Eax1Props d; // Deferred.
};
@ -208,7 +207,6 @@ private:
using Eax2Props = EAX20BUFFERPROPERTIES;
struct Eax2State {
bool changed{false};
Eax2Props i; // Immediate.
Eax2Props d; // Deferred.
};
@ -216,7 +214,6 @@ private:
using Eax3Props = EAX30SOURCEPROPERTIES;
struct Eax3State {
bool changed{false};
Eax3Props i; // Immediate.
Eax3Props d; // Deferred.
};
@ -233,7 +230,6 @@ private:
};
struct Eax4State {
bool changed{false};
Eax4Props i; // Immediate.
Eax4Props d; // Deferred.
};
@ -251,7 +247,6 @@ private:
};
struct Eax5State {
bool changed{false};
Eax5Props i; // Immediate.
Eax5Props d; // Deferred.
};
@ -260,6 +255,7 @@ private:
EaxFxSlotIndex eax_primary_fx_slot_id_{};
EaxActiveFxSlots eax_active_fx_slots_{};
int eax_version_{};
bool eax_changed_{};
Eax1State eax1_{};
Eax2State eax2_{};
Eax3State eax3_{};