2010-06-02 26 views
8

Tôi đang cố gắng tạo mô hình hướng đối tượng để bao bọc OpenAL và có một chút vấn đề khi hiểu thiết bị, bộ đệm và ngữ cảnh.Thiết bị mở, bộ đệm và mối quan hệ ngữ cảnh

Từ những gì tôi có thể thấy trong Hướng dẫn của lập trình viên, có nhiều thiết bị, mỗi thiết bị có thể có nhiều ngữ cảnh cũng như nhiều bộ đệm. Mỗi ngữ cảnh có một người nghe, và các hàm alListener*() đều hoạt động trên trình nghe của ngữ cảnh hoạt động. (Có nghĩa là tôi phải làm cho một ngữ cảnh khác hoạt động trước nếu tôi muốn thay đổi người nghe của nó, nếu tôi có quyền đó.) Cho đến nay, rất tốt. Điều khiến tôi khó chịu là tôi cần phải chuyển thiết bị đến chức năng alcCreateContext(), nhưng không cần thiết đến alGenBuffers().

Tính năng này hoạt động như thế nào? Khi tôi mở nhiều thiết bị, thiết bị nào là bộ đệm được tạo? Bộ đệm có được chia sẻ giữa tất cả các thiết bị không? Điều gì sẽ xảy ra với bộ đệm nếu tôi đóng tất cả các thiết bị đang mở?

(Hoặc có điều gì tôi đã bỏ sót?)

Trả lời

4

OK, đã giải quyết được sự cố. Tôi đã đặt câu hỏi here và câu trả lời là

Tất cả chức năng al * (thay vì chức năng alc *) hoạt động trên ngữ cảnh hiện tại. Vì vậy, các cuộc gọi alGenBuffer sẽ hoạt động trên bối cảnh hiện tại và tạo Bộ đệm thuộc về Thiết bị của Ngữ cảnh (một Ngữ cảnh chỉ có thể có một Thiết bị).

Bộ đệm được tạo trên một Thiết bị không khả dụng trên một Thiết bị khác.

Bộ đệm của thiết bị (có thể) sẽ tự động bị hủy khi bạn gọi alcCloseDevice.

Vì vậy, tôi sẽ phải tạo một bối cảnh tùy ý cho thiết bị đó hoạt động, sau đó tạo bộ đệm, sau đó làm cho ngữ cảnh cũ hoạt động trở lại. Hoặc ngăn chặn việc tạo bộ đệm hoàn toàn nếu thiết bị không hoạt động, có nghĩa là không có ngữ cảnh nào của nó hoạt động.

Các vấn đề liên quan