OpenAL - alGetSourcei và AL_BUFFERS_PROCESSED cung cấp rác


7

Đăng câu hỏi này trên SO nhưng không có câu trả lời. Có lẽ ai đó có thể giúp tôi ở đây.

Gần đây tôi đã có một chương trình hoạt động tốt, phát trực tiếp âm thanh WAV và Ogg với OpenAL. Sau đó tôi quyết định trừu tượng hóa các đối tượng nguồn và bộ đệm thành các lớp C ++. Tôi đã đi xa như lớp nguồn. Hàm của tôi trả về số lượng bộ đệm đã xử lý không làm thay đổi số nguyên được truyền cho 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;
}

Tôi đã kiểm tra đó errorkhông bao giờ là bất cứ điều gì nhưng AL_NO_ERROR. Tôi tạo nguồn trong hàm tạo:

alGenSources(1, &source);

Điều này cũng không bao giờ đưa ra bất kỳ lỗi nào.

Triệu chứng thực tế của điều này là processedđược khai báo nhưng không được khởi tạo. Giá trị cuối cùng của nó là giá trị rác ban đầu mà nó bắt đầu. (Thường là một cái gì đó như -8834824334).

Đây sẽ là hành vi dự kiến? Đặc tả OpenAL nói rằng giá trị nên từ 0 - anynhưng không thực sự cụ thể hơn giá trị đó. Hướng dẫn của các lập trình viên là như nhau.


Tôi đã phải đọc điều này hai lần để tìm ra những gì bạn đang hỏi. Xem xét làm lại câu hỏi để làm cho điều này rõ ràng hơn.
deft_code

@caspin, bạn gặp rắc rối với những phần nào?
Anthony

Câu trả lời:


3

OK, đây là giải pháp. Nguyên nhân sâu xa là một cuộc gọi hủy diệt ngầm đã phá hủy bối cảnh AL của tôi. Điều thú vị là một lỗi trong quá trình triển khai Windows khiến OpenAL thất bại trong âm thầm khi không có bối cảnh hiện tại. Vì vậy, tất cả các cuộc gọi của tôi để alGetErrortrở lại AL_NO_ERRORvì không có bối cảnh. Đó là một lỗi nhỏ khó chịu, theo ý kiến ​​của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.