Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Provide asynchronous property updates for sources | Chris Robinson | 2016-05-14 | 1 | -11/+37 |
| | | | | | | | | | | | | | | | | | | | | | | | | | This necessitates a change in how source updates are handled. Rather than just being able to update sources when a dependent object state is changed (e.g. a listener gain change), now all source updates must be proactively provided. Consequently, apps that do not utilize any deferring (AL_SOFT_defer_updates or alcSuspendContext/alcProcessContext) may utilize more CPU since it'll be filling out more update containers for the mixer thread to use. The upside is that there's less blocking between the app's calling thread and the mixer thread, particularly for vectors and other multi-value properties (filters and sends). Deferring behavior when used is also improved, since updates that shouldn't be applied yet are simply not provided. And when they are provided, the mixer doesn't have to ignore them, meaning the actual deferring of a context doesn't have to synchrnously force an update -- the process call will send any pending updates, which the mixer will apply even if another deferral occurs before the mixer runs, because it'll still be there waiting on the next mixer invocation. There is one slight bug introduced by this commit. When a listener change is made, or changes to multiple sources while updates are being deferred, it is possible for the mixer to run while the sources are prepping their updates, causing some of the source updates to be seen before the other. This will be fixed in short order. | ||||
* | Store the remaining context properties with the listener properties | Chris Robinson | 2016-05-13 | 1 | -6/+4 |
| | |||||
* | Use a lockless method for updating listener and context properties | Chris Robinson | 2016-05-11 | 1 | -6/+21 |
| | | | | | | | | | | | This uses a separate container to provide the relevant properties to the internal update method, using atomic pointer swaps. A free-list is used to avoid having too many individual containers. This allows the mixer to update the internal listener properties without requiring the lock to protect against async updates. It also allows concurrent read access to the user-facing property values, even the multi-value ones (e.g. the vectors). | ||||
* | Remove the MIDI code | Chris Robinson | 2015-10-20 | 1 | -96/+0 |
| | | | | | | | The extension's not going anywhere, and it can't do anything fluidsynth can't. The code maintenance and bloat is not worth keeping around, and ideally the AL API would be able to facilitate MIDI-like behavior anyway (envelopes, start-at- time, etc). | ||||
* | Avoid the ALCdevice_Lock/Unlock wrapper in some places | Chris Robinson | 2014-11-01 | 1 | -2/+3 |
| | |||||
* | Make alcSuspendContext and alcProcessContext batch updates | Chris Robinson | 2014-10-12 | 1 | -72/+2 |
| | | | | | | | | | | This behavior better matches Creative's hardware drivers and Rapture3D's OpenAL driver. A compatibility environment variable is provided to restore the old no-op behavior for any app that behaves badly from this change (set __ALSOFT_SUSPEND_CONTEXT to "ignore"). If too many apps have a problem with this, the default behavior may need to be changed to ignore, with the env var providing an option to defer/batch instead. | ||||
* | Protect alProcessUpdatesSOFT with a lock | Chris Robinson | 2014-09-03 | 1 | -2/+2 |
| | |||||
* | Rename activesource to voice | Chris Robinson | 2014-08-21 | 1 | -8/+8 |
| | |||||
* | Use an array of objects for active sources instead of pointers | Chris Robinson | 2014-08-21 | 1 | -4/+4 |
| | |||||
* | Use a NULL source for inactive activesources | Chris Robinson | 2014-08-21 | 1 | -6/+4 |
| | | | | Also only access the activesource's source field once per update. | ||||
* | Update COPYING to the latest ↵ | François Cami | 2014-08-18 | 1 | -2/+2 |
| | | | | https://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt to fix the FSF' address Fix the FSF' address in the source | ||||
* | Explicitly pass the address of atomics and parameters that can be modified | Chris Robinson | 2014-07-26 | 1 | -9/+9 |
| | |||||
* | Use generic atomics in more places | Chris Robinson | 2014-07-22 | 1 | -1/+1 |
| | |||||
* | Add macros for generic atomic functionality | Chris Robinson | 2014-07-22 | 1 | -8/+8 |
| | |||||
* | Use a RWLock to help protect the source's buffer queue | Chris Robinson | 2014-05-10 | 1 | -0/+4 |
| | | | | | In some instances this allows to to remove the device/mixer lock, or reduce how long it's held. | ||||
* | Add a generic vector interface and use it for the active effect slots | Chris Robinson | 2014-03-21 | 1 | -2/+2 |
| | |||||
* | Store some source mixing parameters in the active source struct | Chris Robinson | 2014-03-19 | 1 | -2/+2 |
| | |||||
* | Use a separate struct for tracking active sources | Chris Robinson | 2014-03-18 | 1 | -6/+10 |
| | |||||
* | Add a method to get the current MIDI state | Chris Robinson | 2014-01-12 | 1 | -0/+26 |
| | |||||
* | Add a method to set and get soundfonts | Chris Robinson | 2013-12-27 | 1 | -4/+48 |
| | | | | | The main purpose of this is to select soundfonts for playback, eventually, instead of the existing method that takes a filename. | ||||
* | Move the base MidiSynth to a separate file | Chris Robinson | 2013-12-17 | 1 | -1/+2 |
| | |||||
* | Add methods to set and get the MIDI gain | Chris Robinson | 2013-11-30 | 1 | -0/+12 |
| | |||||
* | Start a MIDI interface extension | Chris Robinson | 2013-11-28 | 1 | -0/+84 |
| | |||||
* | Rename VCALL and VCALL0 to V and V0 | Chris Robinson | 2013-11-02 | 1 | -1/+1 |
| | |||||
* | Modify how VCALL is handled | Chris Robinson | 2013-10-28 | 1 | -1/+1 |
| | | | | | | | | | | | Now instead of specifying the arguments as a third argument to the macro, like VCALL(object,function,(arg1, arg2)); they are specified separately after the macro, like VCALL(object,function)(arg1, arg2); Also, VCALL_NOARGS has been removed in favor of VCALL0, which behaves like above but expects an empty argument list (a separate macro is needed to work around preprocessor limitations). | ||||
* | Remove al_try from alState.c | Chris Robinson | 2013-10-07 | 1 | -326/+283 |
| | |||||
* | Fix up the naming convention of effect methods | Chris Robinson | 2013-05-29 | 1 | -1/+1 |
| | |||||
* | Use generic VCALL[_NOARGS] macros instead of type-specific wrappers | Chris Robinson | 2013-05-27 | 1 | -1/+1 |
| | |||||
* | Simplify al_try code | Chris Robinson | 2013-03-24 | 1 | -5/+1 |
| | |||||
* | Use a struct to store the FPU mode | Chris Robinson | 2012-09-16 | 1 | -3/+3 |
| | |||||
* | Remove an unused header | Chris Robinson | 2012-09-14 | 1 | -1/+1 |
| | |||||
* | Change alState.c to the new error handling | Chris Robinson | 2012-04-24 | 1 | -221/+233 |
| | |||||
* | Remove hungarian notation from the device and context structs | Chris Robinson | 2012-04-19 | 1 | -7/+7 |
| | |||||
* | Use a double to store the source offset and don't use milliseconds for seconds | Chris Robinson | 2012-04-16 | 1 | -1/+1 |
| | |||||
* | Pass a device to the effect update functions | Chris Robinson | 2012-03-13 | 1 | -1/+1 |
| | |||||
* | Use inline functions to set/restore the FPU mode for mixer updates | Chris Robinson | 2011-09-29 | 1 | -15/+3 |
| | |||||
* | Set toward-zero rounding when updating in alDeferUpdatesSOFT | Chris Robinson | 2011-09-28 | 1 | -0/+16 |
| | |||||
* | Pre-apply the deferred source offset only when it's playing or paused | Chris Robinson | 2011-09-12 | 1 | -1/+2 |
| | |||||
* | Rename the ALEffect_ macros to ALeffectState_ to reflect what they work on | Chris Robinson | 2011-09-12 | 1 | -1/+1 |
| | |||||
* | Avoid locking the context while getting and setting global state | Chris Robinson | 2011-08-31 | 1 | -41/+41 |
| | |||||
* | Use the active effect slot list for pending updates in alDeferUpdatesSOFT | Chris Robinson | 2011-08-30 | 1 | -8/+8 |
| | |||||
* | Rename GetReffedContext to GetContextRef | Chris Robinson | 2011-08-30 | 1 | -2/+2 |
| | |||||
* | Use a generic int type to handle enum swaps | Chris Robinson | 2011-08-29 | 1 | -5/+5 |
| | |||||
* | Make specific functions to lock/unlock UIntMap access | Chris Robinson | 2011-08-29 | 1 | -4/+4 |
| | |||||
* | Manually lock the map while iterating through its contents | Chris Robinson | 2011-08-29 | 1 | -0/+4 |
| | |||||
* | Do a proper exchange when setting a new state | Chris Robinson | 2011-08-29 | 1 | -2/+1 |
| | |||||
* | Lock the context as needed for the defer and process calls | Chris Robinson | 2011-08-29 | 1 | -9/+10 |
| | |||||
* | Use atomic exchanges when checking for updates to objects' internal parameters | Chris Robinson | 2011-08-29 | 1 | -8/+3 |
| | |||||
* | Prevent source and effect slot updates from occuring while updates are deferred | Chris Robinson | 2011-08-22 | 1 | -1/+43 |
| | |||||
* | Defer source offset changes requested by the app | Chris Robinson | 2011-08-21 | 1 | -4/+7 |
| |