尝试删除缓冲区时,我收到OpenAL“无效操作”错误。我已经向alIsBuffer和alIsSource确认我的源和缓冲区是有效的OpenAL对象,事实就是这样。
assert(alIsBuffer(m_buffer) == AL_TRUE);
assert(alIsSource(m_source) == AL_TRUE);
alErrorChecking(alSourcei(m_source, AL_BUFFER, NULL));
alErrorChecking(alDeleteBuffers(1, &m_buffer)); //Here i'm getting the Invalid Operation error
m_buffer = 0;发布于 2015-03-30 22:40:22
缓冲区不能附加到源。假设m_buffer是在m_source上播放的,在删除缓冲区之前需要下面这一行:
alSourceUnqueueBuffers( m_source, 1, &m_buffer); 发布于 2014-12-26 03:33:44
下面是我用来关闭OpenAL的方法
ALenum errorCode = 0;
// Stop the sources
alSourceStopv(1, & streaming_source[0]); // streaming_source
// Clean-up
alDeleteSources(1, &streaming_source[0]);
alDeleteBuffers(16, &streaming_source[0]);
errorCode = alGetError();
alcMakeContextCurrent(NULL);
errorCode = alGetError();
alcDestroyContext(openal_output_context);
alcCloseDevice(openal_output_device);在我的标题中,我有
#include <AL/al.h>
#include <AL/alc.h>
ALuint streaming_source[1];
ALCdevice * openal_output_device;
ALCcontext * openal_output_context;https://stackoverflow.com/questions/27569525
复制相似问题