Problemas dibujando un suelo de baldosas en gx

Hola a todos.

Estoy aprendiendo a programar en gc y me he encontrado con un problema que no soy capaz de entender.

Estoy intentando hacer un programa que permita desplazarse por un mundo virtual tipo Quake.
Para dibujar el suelo utilizo repetidas llamadas a una función que me dibuja una baldosa.

Si dibujo algunas baldosas individuales no hay problema, pero si dibujo más un determinado número de ellas (no muchas) el programa se cuelga.

Alguien puede ayudarme.

Abajo añado un extracto de mi programa.
¿Alguien tiene idea de lo que me está ocurriendo?

void DibujaBaldosa(float x, float z, GXTexObj *texture)
#define tBaldosa 1.0f
{

//set number of textures to generate
GX_SetNumTexGens(1);

GX_SetTevOp(GX_TEVSTAGE0,GX_BLEND);
GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);

GX_LoadTexObj(texture, GX_TEXMAP0);


guMtxIdentity(model);

guMtxTransApply(model, model, x,ySuelo,z);
guMtxConcat(view,model,modelview);


// load the modelview matrix into matrix memory
GX_LoadPosMtxImm(modelview, GX_PNMTX0);

guMtxInverse(modelview,mvi);
guMtxTranspose(mvi,modelview);
GX_LoadNrmMtxImm(modelview, GX_PNMTX0);


GX_Begin(GX_QUADS, GX_VTXFMT0, 4);

// Draw the floor
GX_Position3f32(tBaldosa, 0, -tBaldosa); // Top Right Of The Quad (Right)
GX_TexCoord2f32(10.0f,10.0f);
GX_Position3f32(-tBaldosa, 0, -tBaldosa); // Top Left Of The Quad (Right)
GX_TexCoord2f32(0.0f,10.0f);
GX_Position3f32(-tBaldosa, 0, tBaldosa); // Bottom Left Of The Quad (Right)
GX_TexCoord2f32(0.0f,0.0f);
GX_Position3f32(+tBaldosa, 0, tBaldosa); // Bottom Right Of The Quad (Right)
GX_TexCoord2f32(10.0f,0.0f);
GX_End(); // Done Drawing The Quad

}

void Dibujasuelo (GXTexObj *texture)
{
f32 x;
f32 z;

for (x = -4.0f; x < 6.0f;x = x + 2.0f)
for (z = -18.0f; z <= -6.0f; z = z + 2.0f)
DibujaBaldosa(x, z, texture);
}
No soy un gran entendido y a lo mejor es una tonteria lo que te voy a decir pero ¿has probado a hacer un
GX_InvalidateTexAll()
cada vez que se llama a la funcion DibujaBaldosa antes de hacer nada en la funcion?

Saludos.
Muchas gracias por la sugerencia.

Lo voy a probar porque tiene toda la pinta de ser un problema de memoria.

Ya te cuento.

Edito:

Muchas gracias por la idea. La solución no era llama a GX_InvalidateTexAll, pero tu sugerencia me ha dado la idea de eliminar la carga de la textura que hacía en cada llamada :). (jejeje Cosas de ser novato en esto de la programación de las GX).

Muchas gracias de nuevo. Llevaba tres días con esto.
Me alegro que te haya ayudado. Se lo que es estar haciendo pruebas y no encontrar la solucion me pase mas de 2 semanas intentando que funcionase la libreria FreeTypeGX en el programa con el que estoy liado. Y casi pierdo la cabeza!!! El gran problema que le veo a esto de programar con la wii es en lo disponer de un debbug y poder ver paso a paso que es lo q esta ocurriendo.

Si tienes otro problema me puedes mandar un privado, intentare ayudarte. Saludos!
3 respuestas