Refactor CAPU reconfiguration, make FDS lowpass filter configurable in settings#42
Merged
Gumball2415 merged 3 commits intomasterfrom Mar 17, 2021
Merged
Refactor CAPU reconfiguration, make FDS lowpass filter configurable in settings#42Gumball2415 merged 3 commits intomasterfrom
Gumball2415 merged 3 commits intomasterfrom
Conversation
The previous CAPU configuration methods were somewhat hacky (eg. CMixer::ExternalSound() called UpdateMixing() with the same parameters as before, but with different member variables) and depended on the order of method calls, which was confusing, and error-prone in theory (but the existing API usages worked fine in practice, and adding configurable FDS filter would've worked fine). I replaced the eager update system with CAPUConfig, a "transaction object" that queues up changes and recomputes the necessary set of derived data when destroyed. I find that this approach scales well to more complex scenarios like exotracker's GUI updates, which proved to be unworkable using eager updates.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Make FDS lowpass filter configurable in settings
The FDS lowpass filter cutoff slider is located in the Configuration dialog's new Emulation tab.
The code has to thread the FDS filter cutoff value from CSoundGen reading from its pointer to CSettings, through CAPUConfig::SetupMixer, to CMixer::SetMixing and CMixer::RecomputeMixing, finally into CFDS::UpdateFdsFilter().
Refactor CAPU reconfiguration into a transaction object
The previous CAPU configuration methods were somewhat hacky (eg. CMixer::ExternalSound() called UpdateMixing() with the same parameters as before, but with different member variables) and depended on the order of method calls, which was confusing, and error-prone in theory (but the existing API usages worked fine in practice, and adding configurable FDS filter would've worked fine).
I replaced the eager update system with CAPUConfig, a "transaction object" that queues up changes and recomputes the necessary set of derived data when destroyed. I find that this approach scales well to more complex scenarios like exotracker's GUI updates, which proved to be unworkable using eager updates.