Saya menggunakan OpenAL untuk memutar suara. Saya mencoba menerapkan fungsi putar api dan lupa yang mengambil ID penyangga dan menetapkannya ke sumber dari kumpulan yang sebelumnya saya alokasikan, dan memutarnya. Namun, ada masalah dengan masa hidup objek.
Di OpenGL, hapus fungsi baik secara otomatis melepaskan ikatan hal-hal (misalnya tekstur), atau secara otomatis menghapus hal ketika akhirnya tidak terikat (mis. Shader) dan biasanya mudah untuk mengelola penghapusan. Namun alDeleteBuffers
justru gagal dengan AL_INVALID_OPERATION
jika buffer masih terikat ke sumber.
Apakah ada cara idiomatis untuk "menghapus" buffer OpenAL yang memungkinkan mereka untuk selesai bermain, dan kemudian secara otomatis melepaskan ikatan dan benar-benar mereka? Apakah saya perlu mengikat manajemen buffer lebih dalam ke dalam kumpulan sumber (misalnya menghapus buffer memerlukan memeriksa semua sumber yang dialokasikan juga)?
Demikian pula, adakah cara idiomatis untuk melepaskan ikatan (tetapi tidak menghapus) buffer ketika mereka selesai bermain? Akan lebih baik jika, ketika saya sedang mencari sumber gratis, saya hanya perlu melihat apakah buffer terpasang sama sekali dan tidak repot-repot memeriksa status sumber.
(Saya menggunakan C ++, meskipun pendekatan untuk C juga baik-baik saja. Pendekatan dengan asumsi bahasa GCd dan menggunakan finalizer mungkin tidak berlaku.)