Poste esta pergunta no SO, mas não obteve respostas. Talvez alguém possa me ajudar aqui.
Recentemente, tive um programa que funcionava bem que transmitia sons WAV e Ogg com o OpenAL. Decidi então abstrair os objetos de origem e de buffer nas classes C ++. Cheguei até a classe de origem. Minha função que retorna o número de buffers processados não está alterando o número inteiro passado alGetSourcei.
int ALSource::GetBuffersProcessed() const {
ALint processed;
alGetSourcei(this->source, AL_BUFFERS_PROCESSED, &processed);
int error = alGetError();
if(error != AL_NO_ERROR)
return -1;
return processed;
}
Eu verifiquei que errornunca é outra coisa senão AL_NO_ERROR. Eu gero a fonte no construtor:
alGenSources(1, &source);
Isso também nunca gera nenhum erro.
O sintoma atual disso é que processedé declarado, mas não inicializado. Seu valor final é o valor inicial de lixo eletrônico com o qual ele começa. (Geralmente algo como -8834824334).
Esse seria um comportamento esperado? A especificação OpenAL afirma que o valor deve ser de, 0 - anymas não é realmente mais específico do que isso. O guia dos programadores é o mesmo.