Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Sound/al_audio_buffer.cpp')
-rw-r--r--Source/Sound/al_audio_buffer.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/Source/Sound/al_audio_buffer.cpp b/Source/Sound/al_audio_buffer.cpp
new file mode 100644
index 00000000..01bc5253
--- /dev/null
+++ b/Source/Sound/al_audio_buffer.cpp
@@ -0,0 +1,85 @@
+//-----------------------------------------------------------------------------
+// Name: al_audio_buffer.cpp
+// Developer: Wolfire Games LLC
+// Description:
+// License: Read below
+//-----------------------------------------------------------------------------
+//
+// Copyright 2022 Wolfire Games LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-----------------------------------------------------------------------------
+#include "al_audio_buffer.h"
+
+#include <Sound/soundlogging.h>
+
+alAudioBuffer::alAudioBuffer( )
+: buf( INVALID_BUF )
+{
+}
+
+void alAudioBuffer::Allocate()
+{
+ ALenum e = alGetError();
+ if( e != AL_NO_ERROR ) {
+ LOGW << "Entering alAudioBuffer with error: " << e << " " << alGetString(e) << std::endl;
+ }
+
+ alGenBuffers(1, &buf);
+
+ if( !IsValid() )
+ {
+ e = alGetError();
+ LOGW << "Unable to generate audio buffer: " << e << " " << alGetString(e) << std::endl;
+ buf = INVALID_BUF;
+ }
+}
+
+alAudioBuffer::~alAudioBuffer()
+{
+ if( IsValid() )
+ {
+ alDeleteBuffers(1, &buf);
+ buf = INVALID_BUF;
+ }
+}
+
+void alAudioBuffer::BufferData(ALenum format, const ALvoid *data, ALsizei size, ALsizei freq)
+{
+ if( !IsValid() )
+ {
+ Allocate();
+ }
+
+ if( IsValid() )
+ {
+ alBufferData(buf, format, data, size, freq );
+
+ ALenum err = alGetError();
+
+ if( err != AL_NO_ERROR )
+ {
+ LOGE << alErrString(err) << std::endl;
+ }
+ }
+ else
+ {
+ LOGE << "Can't buffer, buffer is invalid after attempted (re)allocation" << std::endl;
+ }
+}
+
+bool alAudioBuffer::IsValid()
+{
+ return buf != INVALID_BUF && alIsBuffer(buf);
+}