Desplazar los mapas?

Started by Drumpi, April 27, 2009, 12:43:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

Teneis que coger un día y poner la info sobre las funciones de la wikipedia para los que no disponemos de internet, que yo aun ando con un archivo hlp de la version 083 como documentación tanto para Fenix como para bennu (bueno, para bennu tengo una lista de funciones que venía en una r2X sin info del funcionamiento).

Bueno, el caso es que quería saber cual es la mejor froma de desplazar todos los pixels de un mapa X posiciones en una direccion sin usar un mapa auxiliar. Ya he tenido malas experiencias con el map_put con un mapa consigo mismo: en una direccion va bien, pero en la otra, la primera linea se repite a todo lo largo del mapa, porque internamente no prevee eso y no cambia la direccion de redibujado. ¿Se llegó a solucionar?
Si no, la otra idea era acceder al buffer del mapa y desplazar los bytes, pero (que yo haya visto) no existe dicha función de memoria (roll memory o similar) así que (salvo que esté realmente desfasado) lo anoto como sugerencia.
Porque la última opción es trabajar com map_put_pixel, y para lo que es, prefiero usar otras funciones de bloques. Si, es para lo de siempre, pero la gp2x no me da mucho margen de maniobra: para estas cosas el código bennu/fenix es lento, y no puedo implementarlo a nivel C porque no me pilla las dlls que hago.

Además, seguro que una función de desplazar bytes de memoria siempre es útil para alguna otra cosa (así de pronto sólo se me ocurre lo mismo que roll_palete, pero hoy no tengo el dia). Podría ser algo así como roll_memory(&puntero_a_primera_posición, int número_de_posiciones_a_desplazar, unsigned int número_de_bytes) (con número de posiciones en positivo y negativo para una dirección u otra).

Gracias por vuestro tiempo ;)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

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

Drumpi

Lo dicho: debo actualizar mi base de datos.
La pregunta en cuestión ¿se controla la dirección de reescritura o no? Porque supongamos que no, que tenemos cinco posiciones de memoria, y que se copia de derecha a izquierda. Si desplazamos a la derecha 2 posiciones, la 5ª valdrá lo que la 3ª, la 4ª lo que la 2ª y la 3ª lo que la 1ª (supongo que el resto, cero), pero si deplazamos a la izquierda, la 3ª valdrá lo que la 5ª, la 2ª lo que la 4ª, la 1ª lo que la 3ª ¡que es lo que la 5ª, ya que hemos perdido el anterior valor!

Eso es más o menos lo que me pasaba con map_put consigo mismo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

hasta la version actual cualquiera de las 2 manejan bien la superposicion, pero deberias utilizar la mem_move, ya que acabo de cambiar esto, y la mem_copy ahora llama a la memcpy de C (que no maneja la superposicion)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2