BennuGD packager

Started by josebita, August 19, 2012, 11:13:44 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

Quote from: josebita on August 28, 2012, 05:08:50 PM
Quote from: SplinterGU on August 28, 2012, 04:47:43 PM
vuelta la burra (yo) al trigo...

parece que entendi mal, y entendi a josebita que no habia tocado nada del scale_resolution y set_mode, sino que era como se usaba desde el prg... pero segun dice o entiendo que dice, JaViS si hay cambios que hacen que ahora funcione...

me podrian dar luz en esto y explicarle que se cambio en caso de ser asi... quizas me sirve para la version oficial.
La historia fue así:
necesitaba una forma (fácil) de poner el móvil por defecto a su resolución nativa. Dado que SDL_SetVideoMode(0, 0, masargumentos) pone el modo de vídeo por defecto en Android, hice que set_mode(0, 0, masargumentos) lo hiciera también.
Sin embargo la rutina gr_set_mode() del código oficial no funciona bien si se hace gr_set_mode(0, 0, loquesea) porque asume que el tamaño de la SDL_Surface resultante es 0x0 (cuando en realidad es, pongamos, 480x800) y ponía las variables "C" scr_width y scr_height a 0x0. Por eso modifiqué la rutina gr_set_mode para que al final hiciera:
scr_width = screen->w;
scr_height = screen->h;
Con eso ya funcionaba set_mode(0,0) y gr_set_mode(0, 0)

Y lo mismo para las rutinas de escalado con scale_resolution (PERO en las rutinas de escalado lo hice mal y cambié los tamaños que se pasan a SDL_CreateRGBSurface) y eso hacía que el escalado no funcionara bien. No es que el programa diera segmentation fault ni nada; simplemente el escalado no se hacía y se pintaba a un tamaño incorrecto dado que las tablas de escalado se calculaban incorrectamente.

Parte de estos cambios los hice cuando estuve tocando el código para iOS y, como en iOS la gente pone la resolución directamente sin escalado el bug no les afectaba.
Cuando la gente ha empezado a usar las rutinas de escalado en Android, el bug ha aparecido y he tenido que arreglarlo. La solución era sencilla y pasa por dejar la parte del escalado como estaba en la versión oficial.
El código resultante lo tienes aquí:
http://code.google.com/p/bennugd-monolithic/source/diff?spec=svn529&r=527&format=side&path=/trunk/modules/libvideo/g_video.c&old_path=/trunk/modules/libvideo/g_video.c&old=500

Quizás lo único interesante para el código oficial sea poner casi al final de la rutina gr_set_mode() las líneas esas:
scr_width = screen->w;
scr_height = screen->h;

De forma que el si SDL crea la SDL_Surface con un tamaño que no es el que el usuario ha pedido, el usuario pueda saberlo desde código Bennu.

a ver si entiendo, dices que la sdl si le pides un setmode 0,0 pone a la resolucion del escritorio?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on August 28, 2012, 06:13:45 PM
Quote from: josebita on August 28, 2012, 05:08:50 PM
Quote from: SplinterGU on August 28, 2012, 04:47:43 PM
vuelta la burra (yo) al trigo...

parece que entendi mal, y entendi a josebita que no habia tocado nada del scale_resolution y set_mode, sino que era como se usaba desde el prg... pero segun dice o entiendo que dice, JaViS si hay cambios que hacen que ahora funcione...

me podrian dar luz en esto y explicarle que se cambio en caso de ser asi... quizas me sirve para la version oficial.
La historia fue así:
necesitaba una forma (fácil) de poner el móvil por defecto a su resolución nativa. Dado que SDL_SetVideoMode(0, 0, masargumentos) pone el modo de vídeo por defecto en Android, hice que set_mode(0, 0, masargumentos) lo hiciera también.
Sin embargo la rutina gr_set_mode() del código oficial no funciona bien si se hace gr_set_mode(0, 0, loquesea) porque asume que el tamaño de la SDL_Surface resultante es 0x0 (cuando en realidad es, pongamos, 480x800) y ponía las variables "C" scr_width y scr_height a 0x0. Por eso modifiqué la rutina gr_set_mode para que al final hiciera:
scr_width = screen->w;
scr_height = screen->h;
Con eso ya funcionaba set_mode(0,0) y gr_set_mode(0, 0)

Y lo mismo para las rutinas de escalado con scale_resolution (PERO en las rutinas de escalado lo hice mal y cambié los tamaños que se pasan a SDL_CreateRGBSurface) y eso hacía que el escalado no funcionara bien. No es que el programa diera segmentation fault ni nada; simplemente el escalado no se hacía y se pintaba a un tamaño incorrecto dado que las tablas de escalado se calculaban incorrectamente.

Parte de estos cambios los hice cuando estuve tocando el código para iOS y, como en iOS la gente pone la resolución directamente sin escalado el bug no les afectaba.
Cuando la gente ha empezado a usar las rutinas de escalado en Android, el bug ha aparecido y he tenido que arreglarlo. La solución era sencilla y pasa por dejar la parte del escalado como estaba en la versión oficial.
El código resultante lo tienes aquí:
http://code.google.com/p/bennugd-monolithic/source/diff?spec=svn529&r=527&format=side&path=/trunk/modules/libvideo/g_video.c&old_path=/trunk/modules/libvideo/g_video.c&old=500

Quizás lo único interesante para el código oficial sea poner casi al final de la rutina gr_set_mode() las líneas esas:
scr_width = screen->w;
scr_height = screen->h;

De forma que el si SDL crea la SDL_Surface con un tamaño que no es el que el usuario ha pedido, el usuario pueda saberlo desde código Bennu.

a ver si entiendo, dices que la sdl si le pides un setmode 0,0 pone a la resolucion del escritorio?
En algunas plataformas sí, pero no en todas.

SplinterGU

ok, gracias...

creo que voy a poder ponerme a revisar finalmente tus cambios a SDL 2.0...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on August 28, 2012, 07:23:59 PM
ok, gracias...

creo que voy a poder ponerme a revisar finalmente tus cambios a SDL 2.0...
si tienes alguna duda, avisa.
hay algunas características interesantes que podríamos traer a bennu.

SplinterGU

Quote from: josebita on August 28, 2012, 07:33:00 PM
Quote from: SplinterGU on August 28, 2012, 07:23:59 PM
ok, gracias...

creo que voy a poder ponerme a revisar finalmente tus cambios a SDL 2.0...
si tienes alguna duda, avisa.
hay algunas características interesantes que podríamos traer a bennu.

si no se por que tengo esa sensacion de que me estoy olvidando de algo que traera algun problema... en fin...

gracias, cualquier cosa te consulto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on August 28, 2012, 08:22:01 PM
Quote from: josebita on August 28, 2012, 07:33:00 PM
Quote from: SplinterGU on August 28, 2012, 07:23:59 PM
ok, gracias...

creo que voy a poder ponerme a revisar finalmente tus cambios a SDL 2.0...
si tienes alguna duda, avisa.
hay algunas características interesantes que podríamos traer a bennu.

si no se por que tengo esa sensacion de que me estoy olvidando de algo que traera algun problema... en fin...

gracias, cualquier cosa te consulto.
Imagino que todas las plataformas "niche" tipo Pandora, Wiz... podrían darte problemas.
Las plataformas más "comunes" no deberían darte mayor problema.

Yo, al final, he optado por mantener una mini-capa de compatiblidad sólo para la función set_mode dado que el comportamiento "nuevo" es lo suficientemente alejado del original; para el resto del código estoy usando la API de SDL2.

Creo que las nuevas versiones de la SDL_mixer permiten reproducir más de una música a la vez, por cierto...

SplinterGU

viendo la documentacion de la sdl_setvideomode, si pones 0,0 (ambos, alto y ancho) desde la version 1.2.10 setea en el modo actual... si pones profundidad a 0, tambien hace lo mismo con la profundidad... el problema aca lo tenemos que aun no soportamos 24bits (solo porque son muchas funciones que escribir y me da fiaca)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Estoy subiendo el bennugd-packager a mi PPA (precise en adelante).

josebita

Para el que le interese: binarios nuevos (para reemplazar el directorio templates/android/libs con escalado y mod_multi soportándolo (hasta ahora cuando se hacía escalado las coordenadas x e y que se reportaban eran incorrectas):
https://www.dropbox.com/s/wxhf1wd4bp01p8x/bennugd_android_20120830.tar.bz2

KeoH

Joseba .. estoy probando la version de Android porfin xD que he podido sacar algo de tiempo. Tengo un prg super simple llamado main.prg y su main.dcb.

import "mod_video"
import "mod_text"
import "mod_draw"
import "mod_map"
import "mod_key"
import "mod_mouse"
import "mod_proc"

global

    int depth;

end

process main()

begin

    x = graphic_info(0, 0, G_WIDTH);
    y = graphic_info(0, 0, G_HEIGHT);
   
    depth = graphic_info(0, 0, G_DEPTH);

    set_mode(x,y,depth,512);

    write(0, x/2, y/2, 4, "La resolucion es: "+x+" x "+y+". Con profundidad de "+depth+" bits");   

    loop

        if(key(_esc) or mouse.left)
            exit();
        end

        frame;
    end
end


La cosa esque el Packager no me genera el paquete, me da error en el main.py. Te pongo el error que muestra (archivo adjunto)





josebita

Mira a ver si puedes sacarme un screenshot en el que se vea la parte que dice "No existe el fichero o directorio" con la ruta completa, porfa.

Por otro lado, Pixel me ha hecho ver lo bonito que sería un mundo en el que todo lo necesario para que funcione el packager estuviera distribuído con el programa, sin ejecutar bats ni nada. Procuraré que en el futuro sea así.

KeoH

Quote from: josebita on September 04, 2012, 09:01:13 PM
Mira a ver si puedes sacarme un screenshot en el que se vea la parte que dice "No existe el fichero o directorio" con la ruta completa, porfa.

Por otro lado, Pixel me ha hecho ver lo bonito que sería un mundo en el que todo lo necesario para que funcione el packager estuviera distribuído con el programa, sin ejecutar bats ni nada. Procuraré que en el futuro sea así.

Ahi te he puesto en el archivo adjunto la captura del error .. es todo lo que sale .. me da el error ubuntu .. no tu aplicacion .. tu aplicacion lo unico que hace es poner Packagin .... ... y al momento sale el error .. ya despues nada

josebita

Quote from: KeoH on September 04, 2012, 09:08:31 PM
Quote from: josebita on September 04, 2012, 09:01:13 PM
Mira a ver si puedes sacarme un screenshot en el que se vea la parte que dice "No existe el fichero o directorio" con la ruta completa, porfa.

Por otro lado, Pixel me ha hecho ver lo bonito que sería un mundo en el que todo lo necesario para que funcione el packager estuviera distribuído con el programa, sin ejecutar bats ni nada. Procuraré que en el futuro sea así.

Ahi te he puesto en el archivo adjunto la captura del error .. es todo lo que sale .. me da el error ubuntu .. no tu aplicacion .. tu aplicacion lo unico que hace es poner Packagin .... ... y al momento sale el error .. ya despues nada
Falta la última parte de la línea del error. Que ensanches la ventana de error antes de hacer el screenshot, vamos.

KeoH

Pos aqui tienes el error .. no cabia en una sola imagen ... asin q tienes 4 bien expandidas xDDD

josebita

Quote from: KeoH on September 05, 2012, 12:01:51 AM
Pos aqui tienes el error .. no cabia en una sola imagen ... asin q tienes 4 bien expandidas xDDD
Es un defecto del empaquetado. Estoy subiendo al PPA una versión actualizada que lo debería corregir.
En un rato la actualización debería estar disponible y creo que solucionará los problemas.

También incluye una versión un poquito más recientes de Bennu en Android.