bufferネームとsourceネームをそれぞれ[buffer]と[source]としたとき
{
ALint processed_buffer_num[1];
alGetSourcei(source, AL_BUFFERS_PROCESSED, processed_buffer_num);
if (processed_buffer_num[0] > 0)
{
ALenum type[1];
alGetSourcei(source, AL_SOURCE_TYPE, type);
alGetError();
alSourceUnqueueBuffers(source, 1, buffer);
ALenum error = alGetError();
}
}
この状態でerrorが受け取った値がAL_INVALID_OPERATIONだった。つまりコンテキストがおかしいということらしい。もちろんtype[0]の値は、AL_STREAMINGになるように設定している。
調べてみるとAL_LOOPINGをTRUEにしているとこの症状になるようだということが分かった。
なので、
{
ALint processed_buffer_num[1];
alGetSourcei(source, AL_BUFFERS_PROCESSED, processed_buffer_num);
if (processed_buffer_num[0] > 0)
{
ALint loop = AL_FALSE;
alGetSourcei(source, AL_LOOPING, &loop);
alSourcei(source, AL_LOOPING, FALSE);
alSourceUnqueueBuffers(source, 1, buffer);
alSourcei(m_sources[0], AL_LOOPING, loop);
}
}
とすることでアンキューできるようになった。しかしあまりスマートな感じがしない・・・
0 件のコメント:
コメントを投稿