Başarılı bir glLinkProgramdan sonra, gölgelendiricilerimi silmeli / çıkarmalı mıyım?


45

Bağlantılı bir program yaptıktan ve savunma programlamayı düşündükten sonra, bu programı bağlamak için kullanılan gölgelendiricileri silip çıkarmalı mıyım?

Eğer evet ise, bu herhangi bir kaynağı serbest bırakacak mı? Yoksa bu gölgelendirici nesneleri yalnızca bir glDeleteProgram çağrısından sonra serbest bırakılacak mı?

düzenleme: Sadece açıklama için ne yapıyorum (cevabını ile tutarlı):

glCreateShader -> glShaderSource -> glCompileShader -> glCreateProgram -> glAttachShader -> glLinkProgram -> glDetachShader -> glDeleteShader -> bu shader programını kullanarak çizin ->

Yanıtlar:


46

Evet, bunu her zaman yapmalısın. Bunu yakın zamana kadar bulamadım, ancak bir gölgelendirici çıkarılıncaya glDeleteShaderkadar silinmez . İçin man sayfasında belirtilmiştirglDetachShader

EDIT : Neredeyse gölgelendiricileri silme konusunda biraz özledim. Evet, bunu gölgelendirici kaynağını ve bağlantısız nesne kodunu saklamak için kullanılan belleği boşalttığı için yapmalısınız. Bu, bu StackOverflow sorusunda daha ayrıntılı olarak açıklanmıştır .


+1 ayrıca izlemeniz ve glDelete uygulamanız için tek bir nesneniz olduğu için temizliği kolaylaştırır.
Maximus Minimus

2

Sıra doğru, ancak gölgelendiricilerin kullanımına gerçekten gerek duymuyorsunuz, çünkü glDeleteProgram'ı çağırmak tüm ekli gölgelendiricileri sizin için yapar ve sonra otomatik olarak silinir (eğer glDeleteShader işleviyle silmek için işaretlendiyse).

Referans: http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml .


Gölgelendirici nesneleri, her programla karşılaştırıldığında çok fazla bellek kaplar. Programlarınızı derledikten ve daha önemli şeyler için daha fazla hafıza bulunduktan sonra silmek daha iyidir.
Robert Rouhani
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.