From 2634c0bb12daeebdf8607c3c7099e89e9a59e2bb Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 8 Feb 2024 18:26:57 +1100 Subject: [PATCH] PSP: Use cooperative threading for map gen Also fix OpenAL backend not properly resetting error state before calling important functions that may set the error state --- src/Audio.c | 5 ++++- src/Core.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Audio.c b/src/Audio.c index 9fd25836c..509210c84 100644 --- a/src/Audio.c +++ b/src/Audio.c @@ -219,7 +219,7 @@ void Audio_Close(struct AudioContext* ctx) { if (ctx->source) { Audio_Stop(ctx); Audio_Reset(ctx); - _alGetError(); + _alGetError(); /* Reset error state */ } ClearFree(ctx); AudioBase_Clear(ctx); @@ -228,6 +228,7 @@ void Audio_Close(struct AudioContext* ctx) { cc_result Audio_SetFormat(struct AudioContext* ctx, int channels, int sampleRate) { ALenum i, err; if (!ctx->source) { + _alGetError(); /* Reset error state */ _alGenSources(1, &ctx->source); if ((err = _alGetError())) return err; @@ -257,6 +258,7 @@ cc_result Audio_QueueChunk(struct AudioContext* ctx, void* chunk, cc_uint32 size if (!ctx->free) return ERR_INVALID_ARGUMENT; buffer = ctx->freeIDs[--ctx->free]; + _alGetError(); /* Reset error state */ _alBufferData(buffer, ctx->channels, chunk, size, ctx->sampleRate); if ((err = _alGetError())) return err; @@ -278,6 +280,7 @@ cc_result Audio_Poll(struct AudioContext* ctx, int* inUse) { *inUse = 0; if (!ctx->source) return 0; + _alGetError(); /* Reset error state */ _alGetSourcei(ctx->source, AL_BUFFERS_PROCESSED, &processed); if ((err = _alGetError())) return err; diff --git a/src/Core.h b/src/Core.h index 7e1a460d1..cc0a5bdb7 100644 --- a/src/Core.h +++ b/src/Core.h @@ -276,6 +276,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_PSP #define CC_BUILD_OPENAL #define CC_BUILD_HTTPCLIENT + #define CC_BUILD_COOPTHREADED #define CC_BUILD_BEARSSL #define CC_BUILD_LOWMEM #define CC_BUILD_CONSOLE