Avances, Diario de...

Started by SplinterGU, April 17, 2008, 03:00:51 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DjSonyk

Humm Free ,has probado como te a dicho Splinter ¿crear los tiles por procesos?,mira yo te doy dos opciones.

1- Si no quieres nada de fondo ,usar una estructura que segun valla leyendola te valla colocando los tiles en la posición que quieres ,como map_block_copy,pero con procesos...
2- Si quieres fondo,le pones y haces lo de 1. Una estructura de 1024x1024pixel dividida en tiles de 16x16 te ocupa 16 kb+los graficos de los tiles....

Creo que la forma que estas haciendo para colocar los tiles a base de map_block_copy,es un poco ,y permitemelo decir ^^,estraña....

Drumpi

Te estas armando un lio tu solo:
Si quieres sacar información de un mapa, esa información debes colocarla en alguna parte, no puedes dejarla en el aire, porque ocupa un espacio de memoria si o si, por lo que debes guardarla en un mapa, o en su defecto, en una zona de memoria que hayas reservado con un puntero, pero va a gastar memoria... y entonces es mejor que la tengas en un mapa.

Otra cosa: si pegas información de un mapa en otro, el destio NO AUMENTA SU MEMORIA, sigue con la misma que ocupa siempre (ancho*alto*profundidad_de_color(8/16/32)), sobreescribes información, lo que hubiera antes en esa posición se pierde porque se ha cambiado, no existe la función "deshacer" sobre los mapas.

Ten en cuenta que todo lo que sea copia, requiere una memoria: en el caso de map_block_copy usa el espacio de memoria donde está el mapa origen (si descargas el mapa origen, entonces desaparecen estos datos y no se pueden copiar), si usas map_clone se crea un nuevo mapa con esa info. Hasta el copy/paste que haces en windows ocupa memoria nueva, esa info se almacena en una zona de memoria, y puedes consultarla si usas el "visor del portapapeles" (si sigue existiendo, es una vieja aplicación que traía w95, w98 y creo que w2000)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

#767
Otra cosa: si pegas información de un mapa en otro, el destio NO AUMENTA SU MEMORIA, sigue con la misma que ocupa siempre (ancho*alto*profundidad_de_color(8/16/32)), sobreescribes información, lo que hubiera antes en esa posición se pierde porque se ha cambiado, no existe la función "deshacer" sobre los mapas.

Vale, el problema se resume sólo a eso, segun las pruebas parece que esto no ocurre, si se sobrescribe información y se pierde lo que existia en esa posición, porque el juego pierde rendimiento si lo hago ? y porque si hago unload y vuelvo a cargar el mapa antes de volver a poner de nuevo los tiles en el, esto no ocurre ? Alguna cosa de errado hay, porque eso no parece que este funcionando, me gustaria que Splinter revisara justamente eso en map_block_copy, que confirmará que el tile anteriormente pintado en la posición del segundo que lo va a substituir, se pierde (hablando de memoria claro).

SplinterGU

eso que dices no tiene sentido como lo dices...

lo que necesitas es no pintar sobre ningun mapa, sino usar 1 proceso para cada tile.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: FreeYourMind on November 29, 2009, 02:15:52 AM
Otra cosa: si pegas información de un mapa en otro, el destio NO AUMENTA SU MEMORIA, sigue con la misma que ocupa siempre (ancho*alto*profundidad_de_color(8/16/32)), sobreescribes información, lo que hubiera antes en esa posición se pierde porque se ha cambiado, no existe la función "deshacer" sobre los mapas.

Vale, el problema se resume sólo a eso, segun las pruebas parece que esto no ocurre, si se sobrescribe información y se pierde lo que existia en esa posición, porque el juego pierde rendimiento si lo hago ? y porque si hago unload y vuelvo a cargar el mapa antes de volver a poner de nuevo los tiles en el, esto no ocurre ? Alguna cosa de errado hay, porque eso no parece que este funcionando, me gustaria que Splinter revisara justamente eso en map_block_copy, que confirmará que el tile anteriormente pintado en la posición del segundo que lo va a substituir, se pierde (hablando de memoria claro).

WTF!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Quote from: SplinterGU on November 29, 2009, 05:48:42 AM
WTF!

Bueno, en lugar de espanto, estaria bien aclarar si el mapa destino ocuparia la misma memória, haciendo sobre el 10 map_block_copy
que 10000.

Drumpi

Free, no debería haber aumento de memoria en el mapa, hagas 10, 1000 o 100000000000000 map_block_copy, porque map_block_copy es como map_put_pixel pero con varios pixels a la vez. Una cosa es que los comandos PUT y familia (entre ellos map_block_copy) sean comando "lentos" (la gp2x no puede "refrescar" una pantalla de 320x240 a 30fps) y otra cosa es que se ralenticen.

Si haces unload del mapa, lógicamente se pierden los cambios porque no los has guardado, al hacer load cargas el que tenías en el disco, sin cambios. Si quieres que se guarden, debes hacerlo en el disco, no sólo en la memoria.

Me parece que no tienes claro el concepto de memoria.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

Hombre, la culpa ha sido mia no expresarme bien, si que tengo el concepto, si creeme :)

Lo que ocurre es que yo pongo los tiles en el mapa al empezar la fase, con lo cual no tendria que hacer un unload_map antes, ya que si voy a volver a poner los mismos tiles en el al repetir la fase, la logica es que como vuelve a pintar el mismo mapa con los mismos tiles,  no habria ningun cambio en la memoria.
Pero con las pruebas que hice (y claro esto sólo se puede observar en la Wiz), si no descargo antes el mapa al repetir la fase, la memoria se va incrementando (sea o no la del mapa en concreto, esto se me escapa, pero no cargo más ningun recurso en ese instante) hasta el punto que quedaba lento y petaba por memoria.

Otra cosa que ocurria y que arregle en parte, es que en ciertos puntos de algunos mapas el fps caia en picado haste el 0,1 fps, y lo curisoso es que salia al menu, y como tengo un let_me_alone tendria que recuperar su fps normal.
Esto no ocurria (dandole tiempo para hacerlo claro), y me entero que tambien es por problemas de memoria, ya que lo que hice fue descargar tambien el mapa al entrar al menu y no sólo al repetir fase.
Esto me soluciono lo del fps al salir de una fase que ocurra la caida brusca :) (lo bueno es que si descargas un mapa que no existe Bennu no peta, al reves de lo que ocurria con las musicas, pero vamos esto tampoco importa mucho, es ponerle la condicion is null y listo).
Así que con esto se conprueba que ni siempre los errores tienen origen en lo mismo, la caida del fps y su recuperación  siempre esta asociada al numero de procesos y rendimiento en determinado punto, pero tambien tiene origen en la memória que en ese punto se consume...

Sobre lo del unload, es buena tu observación, pero me imagino que cuando haces unload de un mapa cargado este será sobre el mapa que ya ha sido modificado en ejecución, o sea, con los cambios que tuvo en la Ram.

FreeYourMind

Ha y se me olvidaba. Sobre el tema tambien tengo una muy buena pregunta:

Como sabes ahora se permite, tal como en DIV, poner un tile sobre el mapa destino en regiones negativas (fuera del mapa destino), la pregunta es, las partes que quedan fuera (regiones del tile que no coincidan con el area del mapa destino) tambien se pintan o desaparecen ??

Es que estas partes si se pintan pues tambien ocuparan memória, o sea, si estan ahí, no vas a tener sólo la memória que ocupe el mapa destino, ya que el resultado va ser una region mayor...

SplinterGU

#774
Quote from: Drumpi on November 29, 2009, 02:12:41 PM
Free, no debería haber aumento de memoria en el mapa, hagas 10, 1000 o 100000000000000 map_block_copy, porque map_block_copy es como map_put_pixel pero con varios pixels a la vez. Una cosa es que los comandos PUT y familia (entre ellos map_block_copy) sean comando "lentos" (la gp2x no puede "refrescar" una pantalla de 320x240 a 30fps) y otra cosa es que se ralenticen.

Si haces unload del mapa, lógicamente se pierden los cambios porque no los has guardado, al hacer load cargas el que tenías en el disco, sin cambios. Si quieres que se guarden, debes hacerlo en el disco, no sólo en la memoria.

Me parece que no tienes claro el concepto de memoria.

esto es correcto...

Free, lo que dices no es asi, si lo piensas y haces las cosas correctamente, no hay forma de que pase lo que dices... el map_block_copy (ya lo dije en su momento) no escribe mas alla de los limites del mapa destino, no crea ningun mapa nuevo ni lo agranda ni lo achica... seria ilogico si hace eso. Entonces, si yo tengo un escritorio con 10 cajones que solo entra un objeto en cada cajon, si yo hago un copy a ese cajon de otro objeto (reemplazando el que tenia previamente) cómo eso va a ser que mi escritorio tenga mas cajones? imposible. Por eso el "WTF!"

Desaparecen, ya te lo habia explicado, se ve que no lo hice bien. Es completamente ilogico que queden.

Ahora, si creas el mapa destino muchas veces o cargas constantemente los tiles y no los desacargas, o haces clone y no haces unload de esos mapas, entonces seguramente te va a consumir mas memoria cada vez. Revisa tu codigo, quizas tienes algo de eso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Ok, esta todo aclarado, entonces el cambio que hiciste en la rc112, para poder poner tiles que tienen parte de su gráfico fuera del mapa destino, se 'limpian' automaticamente y sólo queda en memoria la parte visible que pertenece a la region del mapa destino ???

No se si te acuerdas, pero DCelso te puso unas pantallas que aclaraban esto, y en ellas y segun el cambio que hiciste, ya se podian pintar tiles fuera de la region destino (como en DIV), o sea, tiles que parte de su cuerpo salian fuera del mapa destino.

Por otro lado lado me parece un poco raro que con el cambio que hiciste en la rc112, no ponga nada fuera del mapa destino, ya que yo por ejemplo pongo un tile (que creo que esta fuera del mapa destino, x<0) que sirve como pared invisible, que no deja que el prota pase de x < 0 del mapa destino, y esta pared ya se encuentra fuera del mapa visible pero tiene que estar ahí ya que el prota colisiona con ella.

De momento esta todo OK, esto fue a titulo de reflexión/dudas, para mi el map_block_copy no necesita ningun cambio, ni necesito buscar otra solución de momento, ya que en principio y segun mis ultimas pruebas ya no voy a tener más problemas de rendimiento en la Wiz, ya que en el juego final no vas a tener vida infinita como en mis pruebas :) Es que esto me permite pasar por varios enemigos y matar varios a la vez, encima que tenia el tiro en automatico (tirando mogollon de tiros al mismo tiempo) pero en la version final el jugador no llega a este estremo ya que va a morrir antes, con suerte luchará con 2 enemigos al mismo tiempo, heheheh, así que en rendimiento no va poder caer tan en picado :)

SplinterGU

a ver... nunca se copio mas alla del espacio que existe... antes directamente no se copiaba nada... si eran negativas las coords...

nooo! nunca se pintan tiles fuera de la region, ni en bennu ni en DIV...

que dificil es explicar algo muy basico... si yo tengo una bolsa (mapa destino) que entra 1kg de pan... por mas que yo tenga 10kg de pan para ponerle... en la bolsa solo entra 1kg de pan... el resto no entra, entonces no se pone...

creo que aun no logro que entiendas el concepto.

Por favor, alguien que me de una mano a explicar la cosa de forma mas simple...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Si te entiendo, no te preocupes. Grácias por la paciencia de santo.

Drumpi

Lo del map_block_copy es muy sencillo:
Imagina que en una pared cuelgas un papel grande, ahora trazas una linea enorme y esta se sale del papel y pintas la pared (es lo que sucede cuando tu mapa pinta fuera del mapa, cuando se sale), pues bien, si retiras el papel de la pared, sólo verás la linea que ha quedado dentro, lo que has pintado en la pared no aparece y el papel no se ha hecho más grande para abarcarlo. En el mapa destino pasa lo mismo, sólo almacena los datos del papel, lo que pase en la pared se pierde, como si nunca hubiera existido.
Y no, eso que se sale del mapa no ocupa memoria extra, simplemente no se dibuja en ningún sitio, en ese aspecto la brocha es "inteligente" y no mancha nada fuera del papel.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

si, con la salvedad que en bennu, cuando se va a pintar mas alla de los limites del papel, directamente no se pinta... no se hace el trabajo de pintarlo...

pero si, esa es la idea, gracias.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2