SDL 1.3

Started by SplinterGU, July 18, 2011, 05:08:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

laghengar

He estado buscando el video de dragon ball en el que todos dan su energía vital a Goku pero he sido incapaz, aquí quedaría muy bien, pero bueno, ahí lo dejo.

Mucho ánimo :)
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

josebita

Quote from: laghengar on August 14, 2013, 07:57:57 PM
He estado buscando el video de dragon ball en el que todos dan su energía vital a Goku pero he sido incapaz, aquí quedaría muy bien, pero bueno, ahí lo dejo.

Mucho ánimo :)
http://youtu.be/LBs8jJ-020k :D

laghengar

Quote from: josebita on August 14, 2013, 08:21:28 PM
Quote from: laghengar on August 14, 2013, 07:57:57 PM
He estado buscando el video de dragon ball en el que todos dan su energía vital a Goku pero he sido incapaz, aquí quedaría muy bien, pero bueno, ahí lo dejo.

Mucho ánimo :)
http://youtu.be/LBs8jJ-020k :D
http://www.youtube.com/watch?v=Jk8IqZokwJI
Dos mejor que uno XD
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

josebita

#48
Bueno, dejando a Goku a lo suyo, vuelvo con el tema.

Lo que veis abajo es la gráfica de rendimiento de cierto juego funcionando en mi iPod Touch 4G:

Como podeis ver, el juego funciona a 10fps. En realidad debería ir a 30 y lo cierto es que no es jugable.
Bueno, pues debajo teneis el mismo DCB utilizando el API de renderizado de SDL 2 sólo para hacer el escalado (la labor que normalmente haría scale_resolution):


Como veis, los FPS se han doblado dado que ahora el escalado se hace por GPU en el iPod, y el juego es jugable. También es cierto que he aplicado un escalado con algo de suavizado, que creo que BennuGD no lo hace por defecto con scale_resolution.

Mi código es, de momento, poco más que un apaño rápido y no es genérico aún. De hecho, tengo deshabilitados los dirty rectangles. Los voy a tratar de habilitar ahora, antes de ir a dormir, para ver cómo mejora el rendimiento, pero esto promete.

Ya os cuento.


[Edito] Los dirty rectangles no parecen ayudar demasiado (o no los estoy implementando bien) pero quitando el filtrado del escalado, el rendimiento sube hasta 25fps, con picos en 50fps.
Como ventaja adicional, el código de la función que hace el set_mode (gr_set_mode) se simplifica bastante :)
[Edito 2] En un iPad 2 a resolución nativa (768x1024) funciona a 60fps sin problema, así que imagino que en dispositivos mejores irá todavía mejor.

Erkosone

Pues si es solo una prueba y ya da el doble de rendimiento la cosa pinta muy bien, ultimamente le están dando un empujón a las SDL de la leche.
Oye Joseba mucho animo con esto, que aunque no sea un nuevo blitter, si hace esto que dices ya es la leche.

SplinterGU

y sin usar scale_resolution?

el scale_resolution es muy costoso... sin tocar el render, es claro que lo que cuesta es el scale.

la idea es cambiar todos los graph por textures.

pero no se cuando lo hare.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on August 15, 2013, 03:21:08 AM
y sin usar scale_resolution?

el scale_resolution es muy costoso... sin tocar el render, es claro que lo que cuesta es el scale.

la idea es cambiar todos los graph por textures.

pero no se cuando lo hare.
Claro, pues eso es lo que digo, que incluso sin tocar el renderer podemos convertir la operación de escalado en algo mucho más eficiente.

No quiero decir con eso que no haga falta tocar el renderer, pero sólo con esto podemos mejorar mucho el rendimiento.

Viene bien para cosas como portar juegos con resoluciones bajas a los 1080p que pide la ouya.

SplinterGU

claro, yo cambiare el render, si tu quieres hacer esto como un parche para "mientras tanto...", seria grandioso.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JaViS

Quote from: SplinterGU on August 15, 2013, 01:40:56 PM
claro, yo cambiare el render, si tu quieres hacer esto como un parche para "mientras tanto...", seria grandioso.


GRANDIOSO!!! :D :D :D :D
Working on Anarkade. A couch multiplayer 2D shooter.

SplinterGU

joseba, las texturas pueden ser de cualquier tamaño? o ahora hay que hacerlas cuadradas? por ejemplo, 128x128? ( estoy empezando a ver el tema, pero soy tan ansioso que no puedo esperar... ni evitar preguntar... :D )
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

#55
Quote from: SplinterGU on August 18, 2013, 07:20:50 PM
joseba, las texturas pueden ser de cualquier tamaño? o ahora hay que hacerlas cuadradas? por ejemplo, 128x128? ( estoy empezando a ver el tema, pero soy tan ansioso que no puedo esperar... ni evitar preguntar... :D )
No he visto nada de problemas de tamaño.
De hecho, en el código que tengo (el de las pruebas anteriores) las creo así:
    if(enable_16bits) {
        format = SDL_PIXELFORMAT_RGB565;
    } else if (enable_32bits) {
        format = SDL_PIXELFORMAT_RGBA8888;
    }
    texture = SDL_CreateTexture(renderer,
                                   format,
                                   SDL_TEXTUREACCESS_STREAMING,
                                   width, height);

Te voy a subir una copia del código, para que puedas echar un ojo a cómo funciona SDL2 contra SDL1.2 pero úsalo sólo como base, que yo he hecho algunos cambios medio grandes.

En cuanto esté pongo el enlace.


SplinterGU

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

josebita

#58
Quote from: SplinterGU on August 18, 2013, 10:13:00 PM
gracias!
Ese código sólo tiene soporte para SDL2. Algunas cosas que creo que merece la pena que revises:
* mod_wm: Es increíble la cantidad de código que nos ahorra SDL. Y encima, con hacerlo se soportan plataformas que hasta ahora no lo estaban.
* libvideo/g_video.c: Échale un ojo a gr_set_mode(). Ahora mismo no está soportado hacer varias llamadas a set_mode cambiando entre full_screen/ventana porque no me hace falta en mi código, pero sí hacer varias llamadas a set_mode con distintas resoluciones cuando se mantiene el scale_resolucion.
  Creo que te harás una idea de lo simple que es establecer el modo gráfico y hacer el escalado por hardware.
  Además, renderizar a textura nos debería ayudar con los temas de BGR de OS X e iOS e incluso nos abre la puerta a usar formatos tipo YUV, que seguro que es útil para las librerías de reproducción de vídeos.
* librender/g_screen.c: He cambiado la función gr_unlock_screen() para hacer el pintado del frame renderizado a la textura y después a pantalla.
  Además, el código tal y como viene permite hacer cosas como poner set_mode(640, 0) y el modo gráfico se pondrá con 640px de ancho y resolución nativa de alto.
  No se soporta rotación, pero debería ser muy fácil de implementar con las texturas, copiando una a otra (a través de SDL) girada, si hiciera falta. De todas formas lo mejor es que sea la plataforma nativa quien lo haga, en caso de ser necesario.
* libkey: Han cambiado algunas cosas, aunque la idea global es la misma. Parece que funciona bien pero hace falta un testeo profundo.
* mod_cd: SDL2 no soporta la reproducción de audio desde CD, pero creo que eso ya no lo usa nadie, en realidad. Habría que documentar una rotura de compatibilidad hacia atrás en Bennu, pero no creo que fuera muy grave.

Cosas que he borrado del código:
* Los dirty rectangles.
* Soporte para cualquier tipo de escalado tal y como se hacía antes (tanto la versión de Bennu de scale_resolution como scale_mode). He dejado las constantes por compatibilidad, pero no hacen nada.

He quitado estas cosas un poco a la ligera aunque tengo mis razones: como dije, la implementación de los dirty rects no aportaba ganancia de rendimiento sensible y será aún más irrelevante cuando haya renderizado por GPU y los escalados anteriores carecen de sentido tal desde mi punto de vista.

A la hora de implementarlo oficialmente en Bennu habrá que pensarlo con un poco más de cariño y pensar en todos los usos posibles.

De todas formas, quizás sea el momento de pensar romper en parte la compatibilidad hacia atrás (llámalo Bennu 2.0, si quieres) para estas cositas a costa de las ganancias que aporta la nueva versión de SDL. Por lo que veo, actualizar a SDL2 implica tener menos código en Bennu pero que funciona mejor.

SplinterGU

#59
ya tenia en cuenta esas cosas.

ademas, tengo que pensarlo en ventanas, agregar soporte multiples ventanas de render, y elegir incluso en cual se dibuja tal o cual proceso... seguramente lo manejare como regions.

lo que me preocupa es el tema de las colisiones pixel perfect... no lo pense mucho, desconozco el api de la nueva sdl, pero si tenes alguna idea al respecto, soy todo oido y ojos.

ah, tambien desapareceran algunos modulos/libs y habra otros nuevos... incluso, seguramente redistribuya los existentes. luego pensare en una capa de compatibilidad (hasta donde sea posible) para crear modulos dummy que llamen a los modulos reales.

edit: por favor, no tomen esto como noticia oficial anunciada con bombos y platillos... es solo un comentario informal.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2