aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoshua Reisenauer <kd7tck@msn.com>2016-05-01 23:07:02 -0700
committerJoshua Reisenauer <kd7tck@msn.com>2016-05-01 23:07:02 -0700
commit790bc7280685d714ddce3e1ee0afa11cee0c5e06 (patch)
treeb481d307b249654eb58e3c456b997ec5b08fccc2 /src
parent289a53221d1c0e51247d09cee0708a1ea9ec32c5 (diff)
downloadraylib-790bc7280685d714ddce3e1ee0afa11cee0c5e06.tar.gz
raylib-790bc7280685d714ddce3e1ee0afa11cee0c5e06.zip
bool return for failed update
Diffstat (limited to 'src')
-rw-r--r--src/audio.c9
-rw-r--r--src/audio.h2
-rw-r--r--src/raylib.h2
3 files changed, 9 insertions, 4 deletions
diff --git a/src/audio.c b/src/audio.c
index 7100a6c1..7b42b089 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -256,6 +256,7 @@ void CloseAudioContext(AudioContext ctx)
queued--;
}
+ //delete source and buffers
alDeleteSources(1, &context->alSource);
alDeleteBuffers(2, context->alBuffer);
mixChannelsActive_g[context->mixChannel] = NULL;
@@ -266,7 +267,8 @@ void CloseAudioContext(AudioContext ctx)
// Pushes more audio data into context mix channel, if none are ever pushed then zeros are fed in
// Call "UpdateAudioContext(ctx, NULL, 0)" every game tick if you want to pause the audio
-void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength)
+// Returns true if data was pushed onto queue, otherwise if queue is full then no data is added and false is returned
+bool UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength)
{
AudioContext_t *context = (AudioContext_t*)ctx;
if (context && mixChannelsActive_g[context->mixChannel] == context)
@@ -274,7 +276,9 @@ void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength
ALint processed = 0;
ALuint buffer = 0;
alGetSourcei(context->alSource, AL_BUFFERS_PROCESSED, &processed); // Get the number of already processed buffers (if any)
-
+
+ if(!processed) return false;//nothing to process, queue is still full
+
if (!data || !dataLength)// play silence
while (processed > 0)
{
@@ -283,6 +287,7 @@ void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength
alSourceQueueBuffers(context->alSource, 1, &buffer);
processed--;
}
+ return true;
}
}
diff --git a/src/audio.h b/src/audio.h
index 9037a843..4a198c59 100644
--- a/src/audio.h
+++ b/src/audio.h
@@ -88,7 +88,7 @@ bool IsAudioDeviceReady(void); // True if call
// all samples are floating point stereo by default
AudioContext InitAudioContext(unsigned short sampleRate, unsigned char mixChannel);
void CloseAudioContext(AudioContext ctx); // Frees audio context
-void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
+bool UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
Sound LoadSound(char *fileName); // Load sound to memory
Sound LoadSoundFromWave(Wave wave); // Load sound to memory from wave data
diff --git a/src/raylib.h b/src/raylib.h
index ade581d3..9c5a8258 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -874,7 +874,7 @@ bool IsAudioDeviceReady(void); // True if call
// all samples are floating point stereo by default
AudioContext InitAudioContext(unsigned short sampleRate, unsigned char mixChannel);
void CloseAudioContext(AudioContext ctx); // Frees audio context
-void UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
+bool UpdateAudioContext(AudioContext ctx, float *data, unsigned short dataLength); // Pushes more audio data into context mix channel, if NULL is passed to data then zeros are played
Sound LoadSound(char *fileName); // Load sound to memory
Sound LoadSoundFromWave(Wave wave); // Load sound to memory from wave data