OpenAL - alGetSourcei e AL_BUFFERS_PROCESSED fornecem lixo


7

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.


Eu tive que ler isso duas vezes para descobrir o que você estava perguntando. Considere refazer a pergunta para tornar isso mais óbvio.
deft_code 27/07/10

@caspin, com quais partes você está tendo problemas?
Anthony

Respostas:


3

OK, aqui está a solução. A causa raiz foi uma chamada implícita de destruidor que destruiu meu contexto de AL. O interessante é que um erro na implementação do Windows faz com que o OpenAL falhe silenciosamente quando não há um contexto atual. Então, todas as minhas chamadas alGetErrorretornaram AL_NO_ERRORporque não havia contexto. É um inseto desagradável, na minha opinião.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.