Sesleri çalmak için OpenAL kullanıyorum. Bir arabellek kimliği alır ve daha önce ayırdığınız bir havuzdan bir kaynağa atar ve çalış bir ateşle ve unut oyun işlevini uygulamaya çalışıyorum. Bununla birlikte, nesne yaşamlarında bir sorun vardır.
OpenGL'de silme işlevleri ya şeyleri otomatik olarak çözer (örn. Dokular) ya da sonunda bağlanmamış olduğunda (örneğin gölgelendiriciler) otomatik olarak siler ve bu nedenle silme işlemini yönetmek kolaydır. Ancak , tampon hala bir kaynağa bağlıysa alDeleteBuffers
bunun yerine başarısız olur AL_INVALID_OPERATION
.
OpenAL arabelleklerini "silmenin" oynatmayı bitirmesine izin veren, sonra da otomatik olarak bağları gerçekten söker ve gerçekten onları çözer mi? Arabellek yönetimini kaynak havuzuna daha derinden bağlamam gerekiyor mu (örn. Bir tamponun silinmesi, tahsis edilen tüm kaynakları da kontrol etmeyi gerektirir)?
Benzer şekilde, arabellekleri oynatmayı bitirdiklerinde ayırmanın (ama silmemenin) deyimsel bir yolu var mı? Ücretsiz bir kaynak ararken, sadece bir tamponun takılı olup olmadığını görmek ve kaynak durumunu kontrol etmekten rahatsız olmamak güzel olurdu.
(C için yaklaşımlar da iyi olsa da, C ++ kullanıyorum. GCd dili varsayımı ve sonlandırıcıları kullanma yaklaşımları muhtemelen geçerli değildir.)