Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: AgeR en 20 de Julio de 2006, 04:45:22 PM

Título: Rotando surfaces en SDL
Publicado por: AgeR en 20 de Julio de 2006, 04:45:22 PM
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:
Título: Rotando surfaces en SDL
Publicado por: zupervaca en 20 de Julio de 2006, 05:29:41 PM
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?
Título: Rotando surfaces en SDL
Publicado por: Lex en 20 de Julio de 2006, 05:44:32 PM
...
Título: Rotando surfaces en SDL
Publicado por: Pogacha en 20 de Julio de 2006, 05:57:15 PM
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.
Título: Re: Rotando surfaces en SDL
Publicado por: TheAzazel en 20 de Julio de 2006, 06:40:12 PM
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...
Título: Rotando surfaces en SDL
Publicado por: AgeR en 21 de Julio de 2006, 12:15:55 PM
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  :? .
Título: Rotando surfaces en SDL
Publicado por: Lex en 21 de Julio de 2006, 12:22:56 PM
...
Título: Rotando surfaces en SDL
Publicado por: senior wapo en 21 de Julio de 2006, 01:28:39 PM
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.
Título: Rotando surfaces en SDL
Publicado por: zupervaca en 21 de Julio de 2006, 02:34:57 PM
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.
Título: Rotando surfaces en SDL
Publicado por: TheAzazel en 21 de Julio de 2006, 03:12:08 PM
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 :)
Título: Rotando surfaces en SDL
Publicado por: AgeR en 21 de Julio de 2006, 03:47:17 PM
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:
Título: Rotando surfaces en SDL
Publicado por: Pogacha en 21 de Julio de 2006, 04:19:27 PM
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
Título: Rotando surfaces en SDL
Publicado por: zupervaca en 21 de Julio de 2006, 05:01:10 PM
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.
Título: Rotando surfaces en SDL
Publicado por: Chewrafa en 22 de Julio de 2006, 04:27:31 AM
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.
Título: Rotando surfaces en SDL
Publicado por: AgeR en 22 de Julio de 2006, 11:14:53 AM
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á!
Título: Rotando surfaces en SDL
Publicado por: Chewrafa en 22 de Julio de 2006, 06:22:01 PM
Pero luego esa misma gente quiere juegos que hagan cosas que sin drivers no se pueden hacer y no se yo si sacrificar atractivo de juego para la gente que tenga equipos muy antiguos o muy desactualizados compensa al final realmente pq puedes perder a otro tipo de público también casual pero con un equipo más funcional.
Título: Rotando surfaces en SDL
Publicado por: AgeR en 22 de Julio de 2006, 10:23:06 PM
Cita de: "Chewrafa"Pero luego esa misma gente quiere juegos que hagan cosas que sin drivers no se pueden hacer y no se yo si sacrificar atractivo de juego para la gente que tenga equipos muy antiguos o muy desactualizados compensa al final realmente pq puedes perder a otro tipo de público también casual pero con un equipo más funcional.

Bienvenido al eterno dilema de los desarrolladores de juegos casuales XD.
Título: Rotando surfaces en SDL
Publicado por: Pogacha en 23 de Julio de 2006, 01:32:06 AM
En realidad yo lo estoy dudando mucho también.
Los jugadores casuales no tienen placas GeForce o ATI, la mayoria tienen computadoras con placas integradas ( intel, sis o ese tipo ) por mas que sea nueva son en su mayoria maquinas hogareñas, no maquinas para juegos y para ver peliculas y usar el word les sobra.

Esas placas muchas veces soportan OpenGL y D3D tambien (creo que las que son desde despues del 2003 todas, Ref Popcap framework)

Bueno el problema son las placas integradas de antes de esa fecha que tienen problemas de compatibilidad, no obstante si hago una proyeccion geometrica.

Supongamos:
Año 2003, popcap determina que hay que usar software por que un 30%(inventado) de los usuarios así lo requieren. Maquina de 1996: Pentium II 266, 32 ram, 8mb video.
Año 2007, se supone que debieron actualizar sus ordenadores 4 años. Si la distribucion es normal, ese treinta por ciento cae a menos de un 10% para el principio del 2007. Computadora de año 2000, Pentium III de 1ghz con placa de video integrada (problemas de compatibilidad), pero suficiente para tirar por render por software, de todos modos de ese 30% tendriamos un 20% que actualizo su ordenador (por lo menos) mas los nuevos usuarios y entonces lo que pierdes será un menos del 10% en teoria. De aca se desprende: hacer un render por software te lleva mas o menos del 10% del desarrollo del juego y de ahí tu conclusión.

No se si estoy errando en el razonamiento, pero para el 2008, ya no tendríamos que estar preocupandonos por el render por software verdad?
Cada vez me parece que me estoy jugando mas por sacar de lado el render por software pero no se ... aun le tengo miedo.

Saludos.