Problema con GX_DrawDone [solucionado] y 3D GX model loader

Pues eso, tengo un problema con GX_DrawDone() que se queda colgado ahi el programa y no se porque.
El codigo es de un cargador de modelos en formato wavefront .obj. Parsea y carga perfectamente todos los datos del modelo, creo arrays dinámicos para enviar los datos indexados a la gpu que es mas rápido y ocupa menos memoria... lo hago mas o menos de la siguiente manera.
Esta en ingles a partir de ahora porque puse el mensaje en el foro de tehskeen, pero en realidad creo que aqui hay muchos y buenos programadores, así que aver si alguien encuentra algun fallo :P

I declare the color array:
    u8 modelColor[] ATTRIBUTE_ALIGN(32) =
    {
        200,200,200,255    //rgba. light grey:
    };



I alloc the space for the data:
        f32 *modelVerts;

        modelVerts = (f32*)memalign(32,sizeof(f32)*vertices*3);
       
        //time to allocate  space for the faces indexes.
        int *modelFaces;

        modelFaces = (int *)memalign(32, sizeof(int)*faces*3);
then i set the vertex descriptors this way:
I use GX_INDEX16 because i use int as indexes.
  GX_ClearVtxDesc ();
  GX_SetVtxDesc (GX_VA_POS, GX_INDEX16);
  GX_SetVtxDesc (GX_VA_CLR0, GX_INDEX16);

  GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
  GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);

  GX_SetArray (GX_VA_POS, modelVerts, 3 * sizeof (f32));
  GX_SetArray (GX_VA_CLR0,modelColor, 4 * sizeof (u8));
Then i send data with:
  GX_Begin (GX_TRIANGLES, GX_VTXFMT0, vertices);

    for(i = 0; i< faces ; i++)
    {
    GX_Color1x8(0);

    GX_Position1x16(modelFaces[(i*3)]);
    GX_Position1x16(modelFaces[(i*3)+1]);
    GX_Position1x16(modelFaces[(i*3)+2]);


    }

  GX_End ();
As i only have one color and i want to use it for all the faces... is it better to doit sending direct data ? should i convert the indexes to u16 and stop using ints?
Yo creo que va en scene. La scene la forman los desarrolladores y los que crean contenidos :) sino el hilo de scene no existiria, estaria el de juegos y el de modchips y grabación solamente xD


Sobre el codigo, he visto un error...
Aquí indico que voy a pasar indices de 16 bits:
GX_SetVtxDesc (GX_VA_CLR0, GX_INDEX16);

y luego paso indices de 8 bits con:
GX_Color1x8(0);
lo he cambiado por:
GX_Color1x16(0);
Así que he solucionado ese error, pero sigue sin solucionarse el problema...
oyzzo, prueba a poner un GX_Color1x16 por cada GX_Position1x16 que hay, poniendolos asi:
GX_Position1x16(modelFaces[(i*3)]);
GX_Color1x8(0);
GX_Position1x16(modelFaces[(i*3)+1]);
GX_Color1x8(0);
GX_Position1x16(modelFaces[(i*3)]+2);
GX_Color1x8(0);


Y veo que ya has arreglado lo de los indices 16 de los colores. Con eso deberia estar bien. Creo que la GPU espera que le envies los datos una vez por cada vertice que crees. Por lo de u16 e int no deberias tener problemas, son lo mismo.

EDIT: y yo tambien creo que esto va en Scene jeje, que no lo mueva nadie! [ayay] please
jajaj, gracias technik por tu apoyo :) pues tienes razón con lo de un color por vértice, voy a probar y te digo algo [360º]

EDIT:
Pues sique dando el mismo problema [mamaaaaa] nose que puede ser...
en tehskeen me han dicho que el fifo, pero el tamaño que uso es de 256*1024 = 256kBytes. y envio 3 colores de 2 Bytes y 3 posiciones de 2Bytes por cara, son 60 caras el modelo, así que envio en total 3*2*60+3*2*60 = 360+360 = 720Bytes.
Bien, estare por aqui trabajando en mi cargador de 3ds, ya me cuentas que tal. Y espero que nos tengas al dia de tus avances ;)
Creo que voy a reescribirlo todo, aver si así veo algun fallo xD y en lugar de enviar los datos a la gpu indexados los voy a enviar directos... y si funciona luego lo cambio.


EDIT:
Solucionado, el fallo era en GX_Begin(GL_TRIANGLES, GX_VTXFMT0, vertices); en lugar de pasar el numero de vertices, tenia que pasar el numero de caras +3 (lsa caras son triangulos) que es lo que se iva a dibujar.


P.D. Mi cargador de modelos OBJ ya funciona!!! :D lo arreglo un poco y cuelgo una demo para que probeis.



EDIT: Aquí está la demo, leed el leeme.txt antes :
http://www.mediafire.com/?2u2tdtviyyp
6 respuestas