Crash con Echo

Started by Drumpi, June 14, 2016, 12:31:29 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

Quería preguntarle a Splinter si en la r307 hay algún problema con scale_mode, porque esta línea:

scale_mode = scale_nofilter;

Es la que me está provocando un crash en los créditos de la revisión del Echo.
El código de los créditos se puede descargar en el terer mensaje de http://forum.bennugd.org/index.php?topic=4256.0
Si comento la línea, la ventana se queda a 320x240 y los créditos se completan hasta el final, pero si la dejo, la ventana tiene su tamaño (640x480) pero rompe el programa durante el bucle de espera tras:

say("Ultimo proceso: " + temp);

No me atrevo a usar ninguna versión más moderna de Bennu, primero porque no hay ninguna oficial, y segundo, por lo inestables que eran.
Te puedo pasar una versión super-recortada del código (un poco sucia por la cantidad de comanetarios para eliminar "código sobrante", o mejor dicho, código que no quiero que se reproduzca aun mientras soluciono el fallo), por si le quieres echar un vistazo.

Y luego a ver qué alternativas tengo, si usar una versión anterior de Bennu, como hacía hasta ahora (bueno, no tan vieja, claro ^^U), o usar scale_resolution.

Gracias.
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)

Drumpi

Bueno, por si acaso, subo el fichero del proyecto reducido.
La linea conflictiva es la 91 de echo.prg. Del resto del código apenas he dejado nada: el sistema de música, los créditos, y algún fichero extra por sus variables o despiste.
Ya digo, con el scale_mode activo, los créditos se cortan en windows cuando el primer bloque de agradecimientos se está retirando, y sin el no pasa nada. Y en anteriores rc de Bennu han ido bien (al menos, r100 y pico y r263).

Espero vuestras sugerencias para poder seguir.
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

vaya a saber cual es la 301... yo en mi repo tengo la 308... a ver las diffs.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

en linux tambien revienta, con la ultima version.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

No, r307, no la r301 (esa no la tengo ^^U).
Es la que está en la descarga oficial.
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

cuando quiere limpiar la pantalla para redibujar todo el frama, revienta en un clear_region, le quiere dar una limpieza a un area de datos de 4294967096 bytes, creo que imposible.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

perdon, no tengo 308, tengo 328.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Ya me extrañaba a mi que sólo tuvieras una revisión después de tantos intentos por solucionar aquel bug. r328 es más normal.

¿Entonces es cosa de Bennu? ¿No me he vuelto loco y veo duendes púrpura?

Juer, ¿4GB de datos para un clear screen? que yo sepa, las pantallas de Wiz aun no son 4K :D :D :D
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

no se, ahora mismo no tengo tiempo de revisarlo, aunque ya bennugd1 este en el arcon de los recuerdos, voy a echarle un ojo a ver que es... no se si es bennugd o algo en el codigo... lo raro que muere cuando se mueren todos los procesos...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#9
acote el ejemplo

con esto revienta

echo.prg

include "src/input/jkey.h";
include "src/debug.h";

GLOBAL
    int global_mode;
    int global_opt;

include "src/main_menu/default_menu.inc";
include "src/game/credits.inc";

BEGIN
    set_fps(0, 0);
    scale_mode = SCALE_NOFILTER;
    set_mode(320, 240, 16);
    credits();
END


credits.inc

process credits_img (x2, y, file, graph, alpha)
private
    int cont;
begin
    x = 260;
    frame;
end

process credits_img2 (file, graph, x, y, z)
begin
    signal(id, s_freeze);
    frame;
end

process credits ()
private
    int temp;
begin
    file = load_fpg("grafs/" + graph_dir + "/names.fpg");
    credits_img(20, 150, file, 11, 255);
    temp = credits_img2(file, 18, 160, 120, 0);
    frame;
    unload_fpg(file);
end


nunca llega al unload_fpg, el tema parece estar en una combinacion de cosas, pero creeria que es que al estar en scale, cuando un grafico renderea mas alla del ancho de la pantalla revienta... la cosa que pasa con estos 2 graficos...

no vi el codigo en bennugd, no tengo tiempo, pero limite el codigo para aislar el problema.

quise probarlo en bennugd2, pero no tengo scale_mode
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

edite y recorte mas el ejemplo
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Yo he encontrado un par de bugs en mi código de los gordos: intentaba escribir el contenido de un puntero con FWRITE tal que
FWRITE(id_fichero, *mi_ptr);
Y en versiones antiguas funcionaba, reconocía el tipo de estructura contenida y guardaba bien los datos, pero en la r307 no, y he hecho una copia de datos en una estructura nueva (sin punteros) y he guardado/leido los datos. Se ve que en aquel entonces andaba de experimentos.

Sin embargo, solucionado el bug, me sigue fallando en el mismo sitio, así que no afectaba.
Es posible que haya dado con una combinación de datos en memoria que haya disparado un bug latente en Bennu :P Anda que si es el que estabas buscando... :D
Si es así, lo mismo está en el código de BennuGD2.
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

bennugd2 es ligeramente diferente...

si, ya hare debug de eso, me intriga saber por que estalla...

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

SplinterGU

#13
encontre y fixee el bug... ahora tengo que pensar si no puede haber otros casos pasando lo mismo...

no era el blitter, era un calculo en la clear_region (usada internamente)

lo fixee para que no reviente, ahora no se si es la mejor solucion, deberia ver bien porque da esos valores, ya que aparentemente en los otros casos no pasa... (o quizas pasa y no revienta de casualidad, y quizas sea la causa de muchos de los crash que adjudicabamos al blitter y demas...)

en fin, gracias drumpi!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Ah, guay :)

Estooo... ¿al final dónde lo has subido? ¿Es una nueva r307b o es un cambio de la r321? ¿los cambios a qué plataformas afectan, además de a Linux? Más que nada, por seguir usando esa en lugar de ir para atrás y aprovechar los arreglos (y si es en la última versión, ir probando a ver si ya es estable).

Tendría que estar durmiendo, que mañana cambio el portátil por una carvana (me toca "carpintería creativa") :D
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)