PDA

Ver la Versión Completa : Flip horizontal en canvas


Cerb
04/02/12, 23:41:17
Buenas, soy Cerb ;D Estoy portando un juego de windows phone a android y he tenido unos problemas. En windows phone funcionaba perfectamente pero en android baja el framerate un huevo.
Es un juego de lucha y tengo que reflejar respecto del plano Y el personaje de la derecha. Las animaciones son imagenes 3D prerenderizadas que tienen que flipearse en cada iteracion. Ahi es donde peta.
He probado a flipear el canvas entero (multiplicacion por -1, 1), luego pintar normal y luego restaurarlo, suena rebuscado pero es lo que suelen proponer. Tambien he probado a crear un bitmap nuevo en cada iteracion que se escale por -1, 1, pero solo el bitmap, y luego se pinte en el canvas, esto parece que va un poco peor.
Tambien he probado a almacenar las imagenes al principio, en vez de flipearlas en tiempo real. Al principio del juego cargo todas las animaciones asociadas a los personajes seleccionados, las flipeo y las meto en un array de bitmaps, pero cuando llego a la imagen numero 70 dice que ya no tiene mas memoria.. cuando es realmente solo 1162k... si, 1 mega.
Me han dicho que es porque este flip lo hace la cpu, y que con opengl usaria la gpu. Pero como hago que el flip se haga usando al gpu? si llamo a Bitmap.createScaledBitmap y luego lo renderizo con opengl no ganara nada de velocidad, porque la propia multiplicacion del bitmap es la que se hace en cpu, independientemente de que despues vaya a canvas o a opengl (o eso creo yo).
A alguien le ha pasado algo asi? que puedo hacer para que vaya fluido? Gracias

kriogeN
05/02/12, 00:09:02
La librería Bitmap en Android, además de ser la culpable del 99% de los Memory Leak y FCs, es LEEEEEEENTA de cojones.

Por lo que estoy viendo al final vas a tener que ir a morir a NDK, tanto por el tema de memoria como por el tema de velocidad.

Cerb
07/02/12, 22:42:05
Y se supone que es normal que la gente tenga que hacerse sus arreglos porque las librerias oficiales son una castaña? Siento que soy el unico que tiene este problema :S
De todas formas cuando pueda intentare cargar la textura del resource a opengl sin pasar por bitmap (usando una libreria 3D) y lo cargare sobre un plano flipeado, desflipeare despues para dejarlo igual. Igual que hacia con el canvas ^^
Lo probe ayer en windows phone y va infinitamente mejor que en android, incluso pintando solo animaciones sin flipear...