OpenAL - alGetSourcei und AL_BUFFERS_PROCESSED geben Junk


7

Hat diese Frage auf SO gepostet, aber keine Antworten erhalten. Vielleicht kann mir hier jemand helfen.

Ich hatte kürzlich ein gut funktionierendes Programm, das WAV- und Ogg-Sounds mit OpenAL gestreamt hat. Ich habe mich dann entschlossen, die Quell- und Pufferobjekte in C ++ - Klassen zu abstrahieren. Ich bin bis zur Quellklasse gekommen. Meine Funktion, die die Anzahl der verarbeiteten Puffer zurückgibt, ändert die an übergebene Ganzzahl nicht 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;
}

Ich habe überprüft, dass errordas nie etwas anderes ist AL_NO_ERROR. Ich generiere die Quelle im Konstruktor:

alGenSources(1, &source);

Dies gibt auch nie einen Fehler.

Das eigentliche Symptom dafür ist, dass processedes deklariert, aber nicht initialisiert wird. Der endgültige Wert ist der anfängliche Junk-Wert, mit dem er beginnt. (Normalerweise so etwas wie -8834824334).

Wäre dies zu erwartendes Verhalten? Die OpenAL-Spezifikation besagt, dass der Wert von sein sollte, 0 - anyaber nicht wirklich spezifischer ist. Die Programmieranleitung ist dieselbe.


Ich musste das zweimal lesen, um herauszufinden, was Sie fragten. Überlegen Sie, die Frage zu überarbeiten, um dies deutlicher zu machen.
— Deft_code

@caspin, mit welchen Teilen hast du Probleme?
— Anthony

Antworten:


3

OK, hier geht die Lösung. Die Hauptursache war ein impliziter Destruktoraufruf, der meinen AL-Kontext zerstörte. Interessant ist, dass ein Fehler in der Windows-Implementierung dazu führt, dass OpenAL stillschweigend fehlschlägt, wenn kein aktueller Kontext vorhanden ist. Also alGetErrorkehrten alle meine Anrufe zurück, AL_NO_ERRORweil es keinen Kontext gab. Meiner Meinung nach ist es ein böser kleiner Fehler.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.