소리를 재생하기 위해 OpenAL을 사용하고 있습니다. 버퍼 ID를 가져 와서 이전에 할당 한 풀의 소스에 할당하고 재생하는 fire-and-getget 재생 기능을 구현하려고합니다. 그러나 개체 수명에 문제가 있습니다.
OpenGL에서 delete 함수는 사물을 자동으로 바인드 해제 (예 : 텍스처)하거나 바인딩이 해제 될 때 사물을 자동으로 삭제하므로 (예 : 쉐이더) 일반적으로 삭제를 관리하기 쉽습니다. 그러나 버퍼가 여전히 소스에 바인딩되어 있으면 alDeleteBuffers
단순히 실패합니다 AL_INVALID_OPERATION
.
OpenAL 버퍼를 "삭제"하는 관용적 방법으로 재생을 마친 다음 자동으로 바인딩을 해제하고 실제로 풀 수 있습니까? 버퍼 관리를 소스 풀에 더 깊이 묶어야합니까 (예 : 버퍼를 삭제하려면 할당 된 모든 소스도 확인해야 함)?
마찬가지로, 버퍼 재생이 끝났을 때 버퍼를 바인딩 해제 (삭제는 안 함)하는 관용적 방법이 있습니까? 무료 소스를 찾을 때 버퍼가 전혀 연결되어 있는지 확인하고 소스 상태를 확인하는 데 방해가되지 않으면 좋을 것입니다.
(C에 대한 접근 방식도 훌륭하지만 C ++을 사용하고 있습니다. GCd 언어를 가정하고 종료자를 사용하는 접근법은 해당되지 않을 수 있습니다.)