Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Lufor en Julio 21, 2015, 01:39:15 AM

Título: Duda con screenshot y RAM [Solucionado]
Publicado por: Lufor en Julio 21, 2015, 01:39:15 AM
Buenas
Estaba empezando a implementar un sistema de pausa sacando una captura con screen_save para poder simular las instancias congeladas.

Al probar en juego noté que cada que saco la captura el consumo de Ram aumenta (el proceso Runner). Si pauso y despauso 4 o 5 veces ya habrá subido 1 MB de consumo.
Antes tuve el mismo problema (usaba la función surface_save) pero controlaba el consumo con la DLL cleanmem.
Puede que no sea tan grave pero al estar probando mi juego pasó de 9-10 MB a 40 MB con sólo poner y quitar la pausa.

¿Por qué pasa esto? ¿Afectará mucho en Android por ejemplo? Podría volver a utilizar la DLL pero quiero tratar de no depender de DLL's (creo que sólo funcionan en Windows).

Es mi duda, igual es algo normal. Tal vez nadie pause tanto mi juego que llegue a saturar la memoria jajaja.

NOTA: Sólo hago la captura, aún no uso sprite_add ni nada.

EDITO: Ya solucioné el detalle, en lugar de crear un PNG con la captura hago el sprite directamente con la función sprite_create_from_surface y, obviamente, elimino el sprite cuando ya no es necesario.
He estado probando mucho y al parecer la memoria RAM se mantiene estable, aumenta al crear el sprite y disminuye al eliminarlo.

Por ejemplo antes era asi:
  RAM Normal: 30,134 KB
  RAM Pausa: 34,567 KB
  RAM al despausar: 30,968 KB

Ahora es asi
  RAM Normal: 30,234 KB
  RAM Pausa: 36,567 KB
  RAM al despausar: 30,234 KB (a veces varia pero no es tanto, ya es cosa del juego no de la pausa)
Título: Re:Duda con screenshot y RAM
Publicado por: Guacusio en Julio 21, 2015, 02:13:05 AM
screen_save guarda en un archivo .png la ventana de juego. ¿cargas ese archivo a un sprite y luego lo dibujas en la pantalla? Depende de lo que estés haciendo puede ser que aumente el consumo de ram; tal vez no estás destruyendo esa imagen una vez sales de la pausa. No lo he probado pero tal vez una forma más eficiente de hacerlo es usando la surface application_surface en vez de generar un archivo con screen_save.
Título: Re:Duda con screenshot y RAM
Publicado por: Clamud en Julio 21, 2015, 02:35:46 AM
Si, he leído varias veces que usan la application_surface para mostrar pantallas de pausa, pero nunca lo he intentado, no estoy seguro de cómo hacerlo.

Cada vez que se carga una imagen externa se crea una nueva página de textura, y esos son de los recursos que más memoria ocupan, usar la función draw_texture_flush() al quitar la pausa ayudaría a liberar memoria.
Título: Re:Duda con screenshot y RAM
Publicado por: Lufor en Julio 21, 2015, 02:53:43 AM
Gracias a los dos por responder.

No,  no cargo la imagen ni nada, sólo saco la captura en un evento Create y ya.
Mi pausa funciona normal, sin elevar el consumo de Ram ni nada, pero si pongo en el evento CREATE esto
screen_save("pause.png");
aumenta la Ram cada que pauso. No cargo la imagen a un sprite ni lo dibujo en pantalla.

Es igual si uso
surface_save(application_surface,"pause.png");
O si elimino el .png del disco en el mismo CREATE.