Tengo un sprite que por si solo se dibuja con transparencia variable.
void enableTextureForBlend(){
GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT);
GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE);
GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0);
}
void SparkSprite::drawFrame(float fr){
// Aquí obvio el cálculo de anchos altos y coordenadas de mapeado
// suponemos un cálculo de alpha que viene dado por fr, del tipo alpha+=0x05;
enableTextureForBlend();
GX_LoadTexObj(&sprites,GX_TEXMAP0);
despY = getMoveFunctY(score);
GX_Begin(GX_QUADS, GX_VTXFMT0, 4);
GX_Position2f32(x, y);
GX_Color4u8(0xff,0xff,0xff, alpha);
GX_TexCoord2f32(0.0,0.0);
GX_Position2f32(x+width, y);
GX_Color4u8(0xff,0xff,0xff, alpha);
GX_TexCoord2f32(1.0,0.0);
GX_Position2f32(x+width, y+height);
GX_Color4u8(0xff,0xff,0xff, alpha);
GX_TexCoord2f32(1.0,1.0);
GX_Position2f32(x, y+height);
GX_Color4u8(0xff,0xff,0xff, alpha);
GX_TexCoord2f32(0.0,1.0);
GX_End();
}
Esto funciona, pero a la hora de crear otro sprite con otra textura diferente.
void drawWin(float frame)
{
int width = 272;
int height = 80;
int x = (getScreenWidth()-width)/2;
int y = (getScreenHeight()-height)/2;
//u8 alpha = 0xff;
enableTextureForBlend();
GX_LoadTexObj(&winImage,GX_TEXMAP0);
GX_Begin(GX_QUADS, GX_VTXFMT0, 4);
GX_Position2f32(x, y);
//GX_Color4u8(0xff,0xff,0xff, 0xff);
GX_TexCoord2f32(0.0,0.0);
GX_Position2f32(x+width, y);
GX_Color4u8(0xff,0xff,0xff, 0xff);
GX_TexCoord2f32(1.0,0.0);
GX_Position2f32(x+width, y+height);
GX_Color4u8(0xff,0xff,0xff, 0xff);
GX_TexCoord2f32(1.0,1.0);
GX_Position2f32(x, y+height);
GX_Color4u8(0xff,0xff,0xff, 0xff);
GX_TexCoord2f32(0.0,1.0);
GX_End();
}
Da un acojo-error, y todo se viene abajo a la hora de aplicar transparencia a la imagen.
No tengo mucha idea de esto, ya que estoy empezando, pero puede ser porque tengo que usar registros distintos para cada textura en el método enableTextureForBlend() ?
Muchas gracias por leer.