Merge branch 'main' into 12.0-development

This commit is contained in:
slime
2022-10-10 14:35:52 -03:00
4 changed files with 51 additions and 18 deletions
+39 -1
View File
@@ -209,7 +209,16 @@ Audio::Audio()
#ifdef LOVE_IOS
love::ios::initAudioSessionInterruptionHandler();
#endif
#ifdef LOVE_ANDROID
bool hasPauseDeviceExt = alcIsExtensionPresent(device, "ALC_SOFT_pause_device") == ALC_TRUE;
alcDevicePauseSOFT = hasPauseDeviceExt
? (LPALCDEVICEPAUSESOFT) alcGetProcAddress(device, "alcDevicePauseSOFT")
: nullptr;
alcDeviceResumeSOFT = hasPauseDeviceExt
? (LPALCDEVICERESUMESOFT) alcGetProcAddress(device, "alcDeviceResumeSOFT")
: nullptr;
#endif
}
Audio::~Audio()
@@ -319,13 +328,42 @@ std::vector<love::audio::Source*> Audio::pause()
void Audio::pauseContext()
{
#ifdef LOVE_ANDROID
if (alcDevicePauseSOFT)
alcDevicePauseSOFT(device);
else
{
// This is extremely rare case since we're using OpenAL-soft
// in Android and the ALC_SOFT_pause_device has been supported
// since 1.16
for (auto &src: pausedSources)
src->release();
pausedSources = pause();
for (auto &src: pausedSources)
src->retain();
}
#else
alcMakeContextCurrent(nullptr);
#endif
}
void Audio::resumeContext()
{
#ifdef LOVE_ANDROID
if (alcDeviceResumeSOFT)
alcDeviceResumeSOFT(device);
else
{
// Again, this is rare case
play(pausedSources);
for (auto &src: pausedSources)
src->release();
pausedSources.resize(0);
}
#else
if (context && alcGetCurrentContext() != context)
alcMakeContextCurrent(context);
#endif
}
std::string Audio::getPlaybackDevice()
+10
View File
@@ -181,6 +181,16 @@ private:
DistanceModel distanceModel;
//float metersPerUnit = 1.0;
#ifdef LOVE_ANDROID
# ifndef ALC_SOFT_pause_device
typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device);
typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device);
# endif
LPALCDEVICEPAUSESOFT alcDevicePauseSOFT;
LPALCDEVICERESUMESOFT alcDeviceResumeSOFT;
std::vector<love::audio::Source*> pausedSources;
#endif
}; // Audio
#ifdef ALC_EXT_EFX
+2 -13
View File
@@ -640,20 +640,9 @@ Message *Event::convertWindowEvent(const SDL_Event &e)
if (auto audio = Module::getInstance<audio::Audio>(Module::M_AUDIO))
{
if (e.window.event == SDL_WINDOWEVENT_MINIMIZED)
{
for (auto &src : pausedSources)
src->release();
pausedSources = audio->pause();
for (auto &src : pausedSources)
src->retain();
}
audio->pauseContext();
else if (e.window.event == SDL_WINDOWEVENT_RESTORED)
{
audio->play(pausedSources);
for (auto &src : pausedSources)
src->release();
pausedSources.resize(0);
}
audio->resumeContext();
}
#endif
break;
-4
View File
@@ -78,10 +78,6 @@ private:
static std::map<SDL_Keycode, love::keyboard::Keyboard::Key> createKeyMap();
static std::map<SDL_Keycode, love::keyboard::Keyboard::Key> keys;
#ifdef LOVE_ANDROID
std::vector<love::audio::Source*> pausedSources;
#endif
}; // Event
} // sdl