2010-01-09 15 views
5

Vio en algunos códigos de ejemplo, pero nunca lo he usado, a menos que abriera dinámicamente nuevas texturas de diferentes tamaños, etc.¿Debo usar glDeleteTextures() al final del programa?

¿Mi SO o algo así se encarga de liberar la memoria de textura cuando mi aplicación finaliza? ¿O tengo que liberarlo yo mismo?

Respuesta

4

Al igual que cualquier otro recurso, la mayoría de los sistemas operativos los liberarán si no lo hace.

Por lo general, la razón para hacerlo es asegurarse de no perder ningún recurso mientras se ejecuta su programa. Digamos, por ejemplo, que carga niveles, si no libera todas las texturas a medida que continúa cargando niveles, tarde o temprano se le acabará la memoria. Hacer un seguimiento de las fugas es más fácil si se limpia al salir.

3

Desde Android documentación GLSurfaceView.Renderer:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config) 

desde: API de nivel 3 llama cuando se crea o recrea la superficie. Se invoca cuando se inicia el subproceso de representación y cada vez que se pierde el contexto EGL. El contexto EGL típicamente se perderá cuando el dispositivo Android se despierte después de irse a dormir. Como se llama a este método al principio de la representación, así como cada vez que se pierde el contexto EGL, este método es un lugar conveniente para poner código para crear recursos que deben crearse cuando se inicia el procesamiento, y que deben ser recreado cuando se pierde el contexto EGL. Las texturas son un ejemplo de un recurso que quizás desee crear aquí. Tenga en cuenta que cuando se pierde el contexto EGL, todos los recursos OpenGL asociados con ese contexto se eliminarán automáticamente. No necesita llamar a los métodos correspondientes "glDelete" como glDeleteTextures para eliminar manualmente estos recursos perdidos.

Cuestiones relacionadas