2010-06-02 3 views
8

OpenAL 랩으로 개체 지향 모델을 만들고 장치, 버퍼 및 컨텍스트를 이해하는 데 약간의 문제가 있습니다.OpenAL 장치, 버퍼 및 컨텍스트 관계

프로그래머 가이드에서 볼 수 있듯이 여러 장치가 있으며 각 장치에는 다중 컨텍스트와 여러 버퍼가있을 수 있습니다. 각 컨텍스트에는 청취자가 있고 alListener*() 함수는 모두 활성 컨텍스트의 수신기에서 작동합니다. (내가 청취자를 바꾸고 싶다면 먼저 다른 컨텍스트를 활성화해야한다는 것을 의미한다. 나는 그 권리를 얻는다.) 지금까지는 그렇게 좋았다. 나를 괴롭히는 것은 alcCreateContext() 함수에 장치를 전달해야하지만, 아무 것도 alGenBuffers()으로 전달해야한다는 것입니다.

어떻게 작동하나요? 여러 장치를 열면 어떤 장치에 버퍼가 생성됩니까? 버퍼가 모든 장치간에 공유됩니까? 열려있는 모든 장치를 닫으면 버퍼는 어떻게됩니까?

(또는 내가 빠진 것이 있습니까?)

답변

4

그래, 문제가 해결되었습니다. 나는 질문 here을 물어 대답은

현재 상황에서 작동하는 모든 알 * 기능 (오히려 ALC * 기능보다)이었다. 따라서 alGenBuffer 호출은 현재 컨텍스트에서 작동하고 컨텍스트의 장치에 속한 버퍼를 만듭니다 (컨텍스트는 하나의 장치 만 ).

한 장치에서 작성된 버퍼는 다른 장치에서 사용할 수 없습니다.

alcCloseDevice를 호출하면 장치 버퍼가 자동으로 삭제됩니다 (아마도).

그래서이 장치의 임의 컨텍스트를 활성화 한 다음 버퍼를 만든 다음 이전 컨텍스트를 다시 활성화해야합니다. 또는 장치가 활성 상태가 아니면 해당 컨텍스트가 활성 상태가 아님을 의미하는 버퍼 생성을 방지합니다.