2010-01-09 7 views
5

J'ai vu que dans certains exemples, mais jamais je ne l'ai utilisé, sauf si j'ouvre dynamiquement de nouvelles textures de taille différente etc.Dois-je utiliser glDeleteTextures() à la fin du programme?

Mon système d'exploitation ou autre prend-il soin de libérer la mémoire de texture quand mon application est terminée? Ou dois-je le libérer moi-même?

Répondre

4

Comme toutes les autres ressources, la plupart des systèmes d'exploitation les libéreront si vous ne le faites pas.

Habituellement, la raison pour cela est de s'assurer que vous ne fuyez aucune ressource pendant que votre programme fonctionne. Dites par exemple que vous chargez des niveaux, si vous ne libérez pas toutes vos textures lorsque vous gardez les niveaux de chargement, tôt ou tard, vous manquerez de mémoire. Garder une trace des fuites est plus facile si vous nettoyez à la sortie.

3

De la documentation Android GLSurfaceView.Renderer:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config) 

depuis: API Niveau 3 Appelé lorsque la surface est créée ou recréée. Appelée lorsque le thread de rendu démarre et lorsque le contexte EGL est perdu. Le contexte EGL sera généralement perdu lorsque l'appareil Android se réveille après s'être endormi. Puisque cette méthode est appelée au début du rendu, ainsi qu'à chaque fois que le contexte EGL est perdu, cette méthode est un endroit pratique pour mettre du code pour créer des ressources qui doivent être créées quand le rendu commence, et qui doivent être recréé lorsque le contexte EGL est perdu. Les textures sont un exemple de ressource que vous pourriez vouloir créer ici. Notez que lorsque le contexte EGL est perdu, toutes les ressources OpenGL associées à ce contexte seront automatiquement supprimées. Vous n'avez pas besoin d'appeler les méthodes "glDelete" correspondantes telles que glDeleteTextures pour supprimer manuellement ces ressources perdues.

Questions connexes