Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Rotando surfaces en SDL

Iniciado por AgeR, 20 de Julio de 2006, 04:45:22 PM

« anterior - próximo »

AgeR

Bueno, resulta que quería hacer rotar un surface SDL, para lo cual uso SDL_gfx y me ha surgido el problema de la velocidad.
El surface es de unos 400x400 pixels, de 32 bits y transparencia. El tema está en que rotar cada frame el surface implica crear un nuevo surface con el dibujo ya rotado y mostrarlo.

La primera pregunta es: es normal que se realentice tanto? Se producen incluso trompicones en la música. A mí me parece bastante normal pero chewrafa opina lo contrario.

Y la segunda, alguna solución? Lo más básico sería generar todos los surfaces con las rotaciones, pero en este caso es una burrada por el tamaño de la superficie 400x400 (que es mayor en caso de haber rotación) y 32 bits.

A ver si se os ocurre algo  :wink:

zupervaca

Si genera otro surface significara que esta haciendo esa rotacion por software y entonces si que es normal que vaya tan lento, ¿no tienes forma de obligarle a hacerlo por hard?


Pogacha

El mayor problema es el canal alpha ... si no tuviera transparencia casi te diria que tiene que andar en un P II 350 a una velocidad aceptable.
Lo que te queda es o quitar el canal alpha o usar OpenGL para la aceleración por hard.
Saludos.

TheAzazel

Cita de: "AgeR"Bueno, resulta que quería hacer rotar un surface SDL, para lo cual uso SDL_gfx y me ha surgido el problema de la velocidad.
El surface es de unos 400x400 pixels, de 32 bits y transparencia. El tema está en que rotar cada frame el surface implica crear un nuevo surface con el dibujo ya rotado y mostrarlo.

La primera pregunta es: es normal que se realentice tanto? Se producen incluso trompicones en la música. A mí me parece bastante normal pero chewrafa opina lo contrario.

Y la segunda, alguna solución? Lo más básico sería generar todos los surfaces con las rotaciones, pero en este caso es una burrada por el tamaño de la superficie 400x400 (que es mayor en caso de haber rotación) y 32 bits.

A ver si se os ocurre algo  :wink:

mirate glSDL...trae un añadido muy poco documentado que se llama glRotate o algo asi... y que hace? pues rota, escala y demas en SDL y usando OpenGL...

AgeR

Pues le he echado un ojo a glSDL, concretamente a la versión 0.6 (no sé si hay otra). Por lo que dice el autor, está trabajando en otra versión.

Bueno el posible problema de usar glSDL es con los usuarios que no tengan aceleración OpenGL. El juego está destinado al mayor público posible, por lo que quiero que funcione casi en cualquier ordenador.
Si compilo usando glSDL estoy haciéndolo con aceleración y puede que haya usuarios a los que no funcione.
Lo ideal sería que al ejecutarse eligiera entre SDL o glSDL automáticamente, pero por lo visto no puede hacerse.

No sé qué hacer  :? .


senior wapo

Si decides seguir por la via software, y si tu sprite es simétrico en algún eje, puedes reducir consumo de memoria guardando las rotaciones de 90 grados (por ejemplo) y luego bliteando ciertos ángulos con efecto espejo X/Y (invertido). Algo es algo.

zupervaca

En teoria opengl ¿no emulaba un render basico?, es decir, si no tienes aceleracion por hard me parece que renderizar mediante glvertex y demas si que te lo hace, aunque no estoy seguro.

TheAzazel

A ver... usando glSDL (que no se el glRotate ese...) ganas casi de forma automatica aceleracion hardware en tu CODIGO YA ESCRITO y en teoria, es tan sencillo como cambiar SDL.DLL sin soporte a glSDL por otra con soporte. Tengo dicha dll compilada con ese soporte por si quieres probar asi a voz de pronto, de primeras la tremenda mejora es hacer alphablending por hard incluso en modo ventana!
La ultima version de glSDL fue la 0.7x... pero, rebuscando por ahi lo que te encuentras es una SDL 1.2.x con el patch de glSDL aplicado y corregidas algunas movis.
Sobre la tarjeta grafica... y el opengl... pues eso, yo ya hice un benchmark de este estilo que colge y puse por aqui justo para probar como iria el glSDL y si en tarjetas antiguas funcionaria o no... veo que no lo has echado un ojo :(. La conclusion que saque fue: en tarjetas actuales y de las mas modernas, gana glSDL de lejos, en las viejas depende del tipo(ATI y nVidia suele funcionar bien) y las muy viejas (hablo de S3 Virge y de ese estilo) pues te la juegas a como tenga implementado el driver ogl....

No se, perder no pierdes nada, que no soporta OpenGL... pues seleccionas un directdraw o un windib...con la variable de entorno SDL_SETVIDEODRIVER lo consigues...

ahora, todas estas movis te pasan por no haber usado CRM32Pro ( :P ) mira tu que me dices que ocupaba 700Kb y vi el juego del arkanoid que estabas haciendo y en tus dlls habia casi el doble! jejeje si es que.....
si era otra cosa y esta la excusa... muy mal, porque cualquier critica la tengo muy en cuenta y normalmente lo implemento/reparo etc..

pos na, echa un ojo a eso que lo mismo te salva el tema del rendimiento :)

AgeR

Gracias a todos, en especial a Azazel.

Lo de no usar la CRM32Pro ya no fue por el espacio ni nada, sino porque soy bastante tikismikis y me cuesta utilizar librerías de "alto nivel".
De todas formas prometo echarle un nuevo ojo a tu librería. Seguramente me hubiera solventado muchos de los problemas que he tenido al usar un framework propio sobre SDL.

Voy a probar el tema de glSDL  :D .

Edit: Azazel, ya sé por qué no usé CRM32Pro al ver tu página: No tiene soporte para Mac  :( , aunque veo que lo tienes previsto. A ver si le das el soporte porque estoy buscando una librería sencillita para hacer un proyectillo share, de ahí que me pusiera yo a hacer mi propio framework...  :roll:

Pogacha

Lamentablemente tengo que informarte que no se puede.
No puedes hacer texture-mapping (rotacion, escala y demas transformaciones lineales) con alpha blending por software a una velocidad aceptable.

El dylo se perdió de mas de un efecto por culpa de esto y creo que me arrepiento hoy en día, pues todavia no he tenido ventas para computadoras que usen render por software.

En definitiva estoy pensando seriamente en descartar render por software para mi proximo proyecto.

He tratado de averiguar en mas de un lado y no he encontrado estadisticas de cuanta gente no cuenta con aceleracion de hardware, especialmente potenciales compradores de juegos casuales.

A quien me de información al respescto le estaré eternamente agradecido.

Saludos

zupervaca

Hablo por hablar, el verdadero boom de ventas de ordenadores fue cuando internet vio la luz para ver paginas wuarras, bajarse videos, emule, etc. en esa epoca los ordenadores venian todos con tarjetas graficas gforce~2 minimo a mi parecer, la gente anterior a esta epoca es gente que actualiza el ordenador cada cierto tiempo ya que lleva sus años metidos en ello.

Chewrafa

Yo también hablo por hablar, pero de la gente así que podría considerarse comprador casual no son gente que tenga equipos demasiado antiguos por que, generalmente, suelen tener a algún "enterado" cerca que les dice que eso está anticuado (aunque tenga sólo 2 años y lo usen únicamente para word, bajarse películas y jugar al buscaminas) y se gastan unas perras en actualizarlo. De hecho a mí me han querido meter al trapo de "que le tengo que poner al ordenador que me dicen que es muy viejo". El comprador casual no es una maruja o marujo que no sabe ni hacer un copy/paste, si no alguien que ya tiene un cierto manejo del pc, suficiente como para tener el navegador con sus plugins (para páginas de juegos flash, por ejemplo), una costumbre de uso con el pc y un cierto conocimiento (suficiente como para al menos saber buscarse las castañas para ojear y comprar juegos de manera correcta) al menos a nivel básico. Por otra parte es también lógico, o al menos lo veo así, que alguien que no se actualiza el equipo en, no sé, siete años, no es la típica persona que luego se ponga a buscar juegos share, más que nada porque son también los que menos se fían de cualquier cosa que se pueda comprar por internet, que lo ven como algo inmenso y desconocido. EN definitiva, y siempre según mi opinión, es muy poco probable que un comprador casual no tenga un equipo mínimamente actualizado (p4 1200 con una geforce2 como mínimo). Vamos, que la aceleración por hardware no la veo como impedimento para el comprador casual.
¿Está usted casada?¿Tiene dinero? Conteste primero a la segunda pregunta

AgeR

Sí, si yo podría estar de acuerdo contigo chewrafa, pero luego te pasas por los foros de indiegamer por ejemplo, y te encuentras que esto no es así, y que mucha gente tiene ordenadores antiguos, drivers sin actualizar (o incluso sin drivers!)...
Las cosas no son como creemos que son o nos gustaría desde nuestra lógica. Ojalá!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.