Używam OpenAL do odtwarzania dźwięków. Usiłuję zaimplementować funkcję odtwarzania typu „podpal i zapomnij”, która pobiera identyfikator bufora i przypisuje go do źródła z puli, którą wcześniej przydzieliłem, i odtwarza go. Występuje jednak problem z czasem życia obiektu.
W OpenGL funkcje usuwania albo automatycznie usuwają powiązanie rzeczy (np. Tekstury), albo automatycznie usuwają rzecz, gdy w końcu jest niezwiązana (np. Shadery), więc zazwyczaj łatwo jest zarządzać usuwaniem. Jednak alDeleteBuffers
zamiast tego po prostu się nie powiedzie, AL_INVALID_OPERATION
jeśli bufor jest nadal powiązany ze źródłem.
Czy istnieje idiomatyczny sposób na „usunięcie” buforów OpenAL, który pozwala im zakończyć grę, a następnie automatycznie odłączyć i naprawdę je? Czy muszę głębiej powiązać zarządzanie buforami z pulą źródłową (np. Usunięcie bufora wymaga również sprawdzenia wszystkich przydzielonych źródeł)?
Podobnie, czy istnieje idiomatyczny sposób na usunięcie powiązania (ale nie usunięcie) buforów po zakończeniu gry? Byłoby miło, gdyby szukałem darmowego źródła, musiałem tylko sprawdzić, czy bufor jest w ogóle podłączony i nie zawracać sobie głowy sprawdzaniem stanu źródła.
(Używam C ++, chociaż podejścia do C również są w porządku. Podejścia zakładające język GCd i używanie finalizatorów prawdopodobnie nie mają zastosowania).