Anuncios Google

¿Como cargar 4 copias de un background?

 

Buenas.

 

Estoy teniendo unos problemillas con las libnds. Necesito cargar una imagen en modo 8 bit, y crear 4 copias de ella. Eso lo hago así:

 

u8* copia[3] = {(u8*)malloc(bmpLen), 
 
		       (u8*)malloc(bmpLen), 
 
	               (u8*)malloc(bmpLen)};
 
for(i = 0; i < 3; i++)
 
	memcpy(copia[i], bmp, bmpLen);

Esas serían las 3 copias + bmp, que es la original (luego tengo 4 copias). Eso creo que me funciona bien... en teoría al ser la imagen de 256x256, no debería tener ningún problema en usar solo el banco A de la VRAM, ya que tiene 256 KiB de memoria, y mis fondos ocuparían exactamente eso (64 KiB * 4 copias = 256KiB).

 

El problema es que no acabo de entender, como mover ahora esos fondos que he copiado (la paleta por cierto, usan los 4 fondos la paleta común de 256 colores). Si utilizara la matriz de transformación, movería todos a la vez, ya que se encuentran en BG2 (uso MODE_5_2D) y eso no es lo que quiero; quiero mostrar un cuadrado de 2x2 imágenes en la pantalla...

 

Luego después de copiar los 4 bitmaps, hago lo siguiente:

for(i = 0; i < 3; i++) {
	for(j = 0; j < bmpLen; j++) {
		if((pal[copia[i][j]] & 0x1F) > 20) {
			memcpy(&copia[i][j], &indice, sizeof(indice));
		}
		else {
			indice++;
			memcpy(&copia[i][j], &indice, sizeof(indice));
			indice--;
		}
	}
	indice += 2;
}

indice vale en un principio 34, y va aumentando en función de la imagen; lo que quiero hacer es que cambien los indices a los que se refieren los píxeles, de la paleta, para así cambiar sus colores. Eso creo que lo hace bien, pero claro como no se ahora cargarlos en memoria ni moverlos...

Alguna idea, sin usar sprites?

 

Un saludo!

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de kNightFox

Primer apunte, el banco A es

Primer apunte, el banco A es de 128kb no de 256kb.

Si lo que quieres hacer es un mosaico de 4 imagenes con colores cambiados, cais mejor que te olvides del modo 8 bits (si no tendras que usar 4 subpaletas de 64 colores) y usa el modo 16 bits, que podras darle a cada pixel el color que te de la gana. Para moverlos, create un backbuffer en RAM de 512x512, coloca ahi tus 4 imagenes en collage y luego haz un dmacopy de lineas de 256 pixeles a la VRAM. Cambiando el indice de inicio mostraras en pantalla la parte del buffer que quieres, creando un efecto de movimiento.

Ejemplos:

http://www.youtube.com/watch?v=5fjDiaW_fiQ

http://www.youtube.com/watch?v=2v7Xy_xk6bs


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de Puyover

No me queda muy claro, aunque

No me queda muy claro, aunque capto la idea de lo que dices. Debo de usar el modo 8 bit si o si xD así que esta vez si que no puedo utilizar el modo de 16 bit :/

Solo necesito 2 colores por copia, por lo que usando 8 colores de la paleta principal e intercambiando los índices creo que lo conseguiría.

Lo de la VRAM, cierto, fallo mio, no se donde lo leí entonces que era de 256 KiB. En ese caso entonces, me faltarían 128 KiB para mostrar 2 de las 4 copias. En este caso entonces como añado que se utilice otro banco de la VRAM? Y una última cosa, lo que dices del backbuffer; he probado poniendo BgSize_B8_512x512 en el BGCTRL[2] pero la imagen se me muestra mas pequeña y encima me salen 2 en la misma fila o.O Eso por que pasa?

Un saludo y gracias!

Imagen de kNightFox

A ver pipiolo ^^ tu solo

A ver pipiolo ^^ tu solo necesitas tener en VRAM un fondo de 64kb. Lo demas te lo manejas tu en un buffer virtual en RAM de 256 kb. En ese buffer tu dibuja lo que quieras y cuando sea necesario mandas a la VRAM los 64 kb que seran "visibles" (un fondo de 256x256), mandar mas a la VRAM es tonteria, por que NO SE VE. Dado que vas a usar fondos mas grandes de 256x256, (por lo que dices de 512x512) lo correcto seria esto que te he contado, un bufer de 256 KB conteniendo las 4 imagenes (imagina que la pantalla de la DS midiera 512x512) manipula lo que quieras en esa pantala virtual y cuando quieras (una vez por frame por ejemplo) copia en cacho de 256x192 (que son 56kb mas o menos) a la VRAM, que total es lo que realmente VES.


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de Puyover

Si, si eso lo entiendo xD En

Si, si eso lo entiendo xD

En mi caso lo que tengo hecho, es cargar la imagen (es de 256x256) en BG_GFX y su paleta. Después tengo implementado que con el botón L se disminuya su escala y con el R se aumente, así puedo ver la imagen entera... El problema es (y ya aparte de copiar las imágenes y todo el royo del primer post xD) que necesito tenerlas cargadas en memoria las 4 copias a la vez, y luego poder aumentar y reducir la escala de las 4 imágenes a la vez, luego dado que tengo que escalarlas, no se como afrontar lo de copiar solamente lo necesario :/

Eso lo tengo hecho para una imagen, lo que pasa es que me han dicho que lo haga en BgSize_B8_512x512 pero la imagen como te comento me sale mas pequeña y encima dos copias en una fila ._. (no es problema de la matriz de transformación, ya que está a 1:1)...

Imagen de kNightFox

A ver si esto te

A ver si esto te orienta...

 

http://nightfox.pastebin.com/wCMWTSaF 

Este codigo pilla un bitmap, en la pantalla inferior lo escala POR SOFTWARE para que encage en pantalla y en la superior lo enseña tal cual, permitiendo el scroll

Fijate en la parte que escala la imagen para generar la miniatura.
Y sin tener que usar el fondo affine...


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de Puyover

Gracias por el código,

Gracias por el código, precisamente estaba mirando un poco por encima el código fuente de tus librerías (muy buenas por cierto) para ver como haces ciertas cosas. Ya está todo funcionando, el bitmap se me copia 4 veces en memoria con la paleta de cada uno correctamente y al fin he conseguido desplazar los dos bitmaps que se me quedaban superpuestos 128 píxeles a la derecha.

Un saludo y gracias!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.