OpenAL-alGetSourceiとAL_BUFFERS_PROCESSEDがジャンクを与える


7

この質問をSOに投稿しましたが、回答がありませんでした。多分誰かがここで私を助けることができます。

私は最近、WAVとOggのサウンドをOpenALでストリーミングする、うまく機能するプログラムを持っていました。次に、ソースオブジェクトとバッファオブジェクトをC ++クラスに抽象化することにしました。私はソースクラスまで行きました。処理されたバッファの数を返す私の関数は、に渡される整数を変更していません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;
}

errorはそれが決して決して何でもないことを確認しましたAL_NO_ERROR。コンストラクターでソースを生成します。

alGenSources(1, &source);

これによってエラーが発生することもありません。

これの実際の症状は、processed宣言されているが初期化されていないことです。最終値は、最初のジャンク値です。(通常-8834824334のようなもの)。

これは予想される動作でしょうか?OpenAL仕様では、値はその値である必要があります0 - anyが、実際にはそれよりも具体的ではありません。プログラマーのガイドも同じです。


私はあなたが何を求めているのかを理解するためにこれを二度読まなければなりませんでした。これをより明確にするために質問を書き直すことを検討してください。
deft_code '07 / 07/27

@caspin、どの部分に問題がありますか?
Anthony、

回答:


3

はい、ここで解決策を説明します。根本的な原因は、ALコンテキストを破壊する暗黙のデストラクタ呼び出しでした。興味深いのは、Windows実装のバグにより、現在のコンテキストがないときにOpenALが警告なしに失敗することです。したがって、コンテキストがなかったため、すべての私の呼び出しがalGetError返さAL_NO_ERRORれました。私の意見では、それは厄介な小さなバグです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.