Posible bug con libsdlhandler

Started by josebita, December 15, 2010, 12:02:06 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

Diría que hay un bug con libsdlhandler, en particular con la función dump_new_events().
Entiendo que esa función descarta todos los eventos que no se hayan registrado hasta el momento, para limpiar la pila de eventos innecesarios y que, por tanto, debe ser ejecutada después de todas las demás que los utilicen (libmouse, libwm...).
El tema es que la prioridad de ejecución de la función dump_new_events() se establece a 5000, mientras que la de libmouse está en 4800. Eso provoca que la función do_mouse_events() de libmouse se ejecute más tarde y -en teoría- se encuentre la pila de eventos vacía y los eventos del ratón no se registran. libwm tiene la prioridad a 4700 y libkey a 4900.

Por alguna razón éste no es el caso con SDL1.2, pero sí en SDL1.3+iOS, lo que provocaba que los eventos de ratón/teclado/gestor de ventanas no se estuvieran registrando.
¿No podrías bajar la prioridad de libsdlhandler para que dump_new_events() se ejecute más tarde?

SplinterGU

Lo que decis no puede ser posible, ya que SDL_PeepEvents libera los eventos previamente obtenidos con SDL_PumpEvents y no los que estan a la espera de ser procesados.
Esto es, SDL tiene un buffer donde va metiendo los eventos internamente, ese buffer no es accedido por la funcion SDL_PeepEvents, cuando se ejecuta la funcion SDL_PumpEvents todos los eventos de ese buffer interno son pasados al buffer que si puede acceder la funcion SDL_PeepEvents, mientras vos procesas desde el codigo los eventos obtenidos con la SDL_PumpEvents, los nuevos eventos se vuelven a encolar en el buffer interno.

entonces no puede pasar esto que decis, a menos que SDL tenga un bug en SDL1.3+iOS, en ese caso toca que el equipo SDL corrija tal bug.

pero no puedo cambiar la prioridad, porque en ese caso, si uno quiere hacer algo que procese los eventos que no son procesados por bennugd, directamente desde codigo bennu (prg) no podria hacerlo, como es el caso de una lib de eventos SDL de Sandman.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Perdón, tienes razón. No me había dado cuenta de que SDL_PumpEvents() está siendo llamada después. Será cosa de la plataforma, u otra razón... habrá que mirarlo con un poco más de cariño...

Gracias.

josebita

Buff, por lo que veo, en realidad en el iOS la función PumpEvents sólo se encarga de que la aplicación no se muera demasiado mal cuando el usuario pulsa el botón... Vamos, que en realidad ese SDL_PumpEvents() en este caso en particular no está haciendo nada y lo que hay que hacer es que los eventos lleguen a la pila solitos; no se les puede forzar.

SplinterGU

eso es un horror, no pueden cambiar asi el comportamiento, mas en un comportamiento tan especifico de una funcion, en el caso de esta funcion su sentido de ser es este comportamiento.

te sugiero lo reportes al SDL team.

yo por lo pronto no usare la 1.3 si pasan estas cosas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Es cosa del port a iOS, que parece que aún tiene sus cosillas. He estado mirando el código de algunas otras plataformas y sí está bien...

SplinterGU

reportalo al team, con una incidencia reportada se activan las prioridades en los fix.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2