Aquí va un ejemplo parecido al juego que he echo pero usando EFS (con nitrofs falla igual)
En el emulador funciona, pero en en la DS con la acekard ó la itouchds NO
He visto que si no inicializo las PA9, es decir,que si quito la línea PA_Init() funciona; pero así tendría que cambiar
toooooodo el juego y usar libnds.
¿Alguien puede ayudarme?
P.D.: También os pongo un enlace con todo el programa para que hagáis experimentos
http://www.megaupload.com/?d=LS8TUYKV #include "PA9.h"
#include "efs_lib.h"
#include "stdlib.h" //Librería para funciones de ficheros
float rotateX = 0.0;
float rotateY = 0.0;
float moverz = 0.0;
u32* pespada = NULL;
int textureID;
u32* carga_md2(char* ruta)
{
FILE* fichero; //Creamos dos variables que apuntan a los ficheros
u32* archivo; //Creamos una variable puntero tipo u32
char rutacompleta[256];
int size;
struct stat st; //Creamos una variable st para el fichero
sprintf(rutacompleta,"/%s_md2.bin",ruta); //Completa la ruta añadiéndole '_md2.bin'
fichero = fopen(rutacompleta,"rb"); //Abrimos el fichero en modo lectura binaria
if (fichero != NULL) //Comprobamos que el fichero existe
{
stat(rutacompleta,&st); //Función que vuelca los datos del fichero sobre la estructura st
size = st.st_size; //Almacena el tamaño (en bytes) del fichero en la variable size
archivo = (u32*)malloc(size); //Devuelve un puntero del tipo u8 que 'apunta' al inicio en memoria de una porción de tamaño size
fread(archivo,1,size,fichero);
fclose(fichero);
return archivo;
}
else
{
PA_OutputText(1,0,0,"¡Error al abrir el fichero %s!",rutacompleta);
return 0;
}
}
u8* carga_bmp(char* ruta)
{
FILE* fichero; //variable que apunta a los ficheros
u8* archivo; //Creamos una variable puntero tipo u8
char rutacompleta[256];
int size;
struct stat st; //Creamos una variable st para el fichero
sprintf(rutacompleta,"/%s_bmp.bin",ruta); //Completa la ruta añadiéndole '_bmp.bin'
fichero = fopen(rutacompleta,"rb"); //Abrimos el fichero en modo lectura binaria
if (fichero != NULL) //Comprobamos que el fichero existe
{
stat(rutacompleta,&st); //Función que vuelca los datos del fichero sobre la estructura st
size = st.st_size; //Almacena el tamaño (en bytes) del fichero en la variable size
archivo = (u8*)malloc(size); //Devuelve un puntero del tipo u8 que 'apunta' al inicio en memoria de una porción de tamaño size
fread(archivo,1,size,fichero);
fclose(fichero);
return archivo;
}
else
{
PA_OutputText(1,0,0,"¡Error al abrir el fichero %s!",rutacompleta);
return 0;
}
}
int main()
{
if(EFS_Init(EFS_AND_FAT | EFS_DEFAULT_DEVICE, NULL))
{
PA_OutputSimpleText(1, 0, 0, "EFS init ok");
PA_OutputText(1, 0, 1, "found NDS path: %s", efs_path);
}
PA_Init();
//set mode 0, enable BG0 and set it to 3D
videoSetMode(MODE_0_3D);
PA_SwitchScreens(); //Hace que el motor 3D se activa en la pantalla superior y no por defecto en la táctil
// inicializa gl
glInit();
vramSetBankA(VRAM_A_TEXTURE);
glGenTextures(1, &textureID); // reservamos sitio para las textura
glBindTexture(0, textureID); // activamos la textura
glTexImage2D(0, 0, GL_RGB, TEXTURE_SIZE_128 , TEXTURE_SIZE_128, 0, TEXGEN_TEXCOORD,carga_bmp("espada"));
glEnable(GL_TEXTURE_2D | GL_ANTIALIAS); // Activa texturas y Antialias
// setup the rear plane
glClearColor(0,0,0,31); // BG must be opaque for AA to work
glClearPolyID(63); // BG must have a unique polygon ID for AA to work
glClearDepth(0x7FFF);
//this should work the same as the normal gl call
glViewport(0,0,255,191);
//any floating point gl call is being converted to fixed prior to being implemented
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, 256.0 / 192.0, 0.1, 100);
gluLookAt( 0.0, 0.0, 3.5, //posición cámara
0.0, 0.0, 0.0, //a dónde mira la cámara
0.0, 1.0, 0.0); //up
//Atributos de los polígonos. (POLY_ALPHA(31) desactiva las transparencias y POLY_CULL_NONE no renderiza los polígonos que están detrás de la cámara
glPolyFmt(POLY_ALPHA(31) | POLY_CULL_FRONT);
pespada=carga_md2("espada");
while(1)
{
glPushMatrix();
glRotateX(rotateX); //rota figura en eje x
glRotateY(rotateY); //rota figura en eje y
glTranslatef(0,0,moverz);
scanKeys();
u16 keys = keysHeld();
if(!(keys & KEY_UP)) rotateX += 3;
if(!(keys & KEY_DOWN)) rotateX -= 3;
if(!(keys & KEY_LEFT)) rotateY += 3;
if(!(keys & KEY_RIGHT)) rotateY -= 3;
glBindTexture(0, textureID);
glCallList(pespada);
glPopMatrix(1);
glFlush(0);
}
return 0;
}//end main