1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Rewrite gDPTextureRectangle.

Code is the same for texrect and texrectFlip.
Taken from gles2n64.
This commit is contained in:
Sergey Lipskiy 2013-12-02 13:10:33 +07:00
parent daf0450241
commit 7c0b58cb25

45
gDP.cpp
View File

@ -848,6 +848,9 @@ void gDPTextureRectangle( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f
lry += 1.0f; lry += 1.0f;
} }
gDPTile *textureTileOrg[2];
textureTileOrg[0] = gSP.textureTile[0];
textureTileOrg[1] = gSP.textureTile[1];
gSP.textureTile[0] = &gDP.tiles[tile]; gSP.textureTile[0] = &gDP.tiles[tile];
gSP.textureTile[1] = &gDP.tiles[tile < 7 ? tile + 1 : tile]; gSP.textureTile[1] = &gDP.tiles[tile < 7 ? tile + 1 : tile];
@ -860,29 +863,37 @@ void gDPTextureRectangle( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f
if ((int(s) == 512) && (gDP.colorImage.width < 512)) if ((int(s) == 512) && (gDP.colorImage.width < 512))
s = 0.0f; s = 0.0f;
f32 lrs = s + (lrx - ulx - 1) * dsdx; f32 lrs, lrt;
f32 lrt = t + (lry - uly - 1) * dtdy; if (RSP.cmd == G_TEXRECTFLIP)
{
lrs = s + (lry - uly - 1) * dtdy;
lrt = t + (lrx - ulx - 1) * dsdx;
}
else
{
lrs = s + (lrx - ulx - 1) * dsdx;
lrt = t + (lry - uly - 1) * dtdy;
}
gDP.texRect.width = (u32)(max( lrs, s ) + dsdx); gDP.texRect.width = (u32)(max( lrs, s ) + dsdx);
gDP.texRect.height = (u32)(max( lrt, t ) + dtdy); gDP.texRect.height = (u32)(max( lrt, t ) + dtdy);
if (lrs > s) float tmp;
if (lrs < s)
{ {
if (lrt > t) tmp = ulx; ulx = lrx; lrx = tmp;
OGL_DrawTexturedRect( ulx, uly, lrx, lry, s, t, lrs, lrt, (RSP.cmd == G_TEXRECTFLIP) ); tmp = s; s = lrs; lrs = tmp;
else
OGL_DrawTexturedRect( ulx, lry, lrx, uly, s, lrt, lrs, t, (RSP.cmd == G_TEXRECTFLIP) );
} }
else if (lrt < t)
{ {
if (lrt > t) tmp = uly; uly = lry; lry = tmp;
OGL_DrawTexturedRect( lrx, uly, ulx, lry, lrs, t, s, lrt, (RSP.cmd == G_TEXRECTFLIP) ); tmp = t; t = lrt; lrt = tmp;
else
OGL_DrawTexturedRect( lrx, lry, ulx, uly, lrs, lrt, s, t, (RSP.cmd == G_TEXRECTFLIP) );
} }
gSP.textureTile[0] = &gDP.tiles[gSP.texture.tile]; OGL_DrawTexturedRect( ulx, uly, lrx, lry, s, t, lrs, lrt, (RSP.cmd == G_TEXRECTFLIP));
gSP.textureTile[1] = &gDP.tiles[gSP.texture.tile < 7 ? gSP.texture.tile + 1 : gSP.texture.tile];
gSP.textureTile[0] = textureTileOrg[0];
gSP.textureTile[1] = textureTileOrg[1];
gDP.colorImage.changed = TRUE; gDP.colorImage.changed = TRUE;
if (gDP.colorImage.width < 64) if (gDP.colorImage.width < 64)
@ -898,11 +909,11 @@ void gDPTextureRectangle( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f
void gDPTextureRectangleFlip( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f32 t, f32 dsdx, f32 dtdy ) void gDPTextureRectangleFlip( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f32 t, f32 dsdx, f32 dtdy )
{ {
gDPTextureRectangle( ulx, uly, lrx, lry, tile, s + (lrx - ulx) * dsdx, t + (lry - uly) * dtdy, -dsdx, -dtdy ); gDPTextureRectangle( ulx, uly, lrx, lry, tile, s, t, dsdx, dtdy );
#ifdef DEBUG #ifdef DEBUG
DebugMsg( DEBUG_HIGH | DEBUG_HANDLED, "gDPTextureRectangleFlip( %f, %f, %f, %f, %i, %i, %f, %f, %f, %f );\n", DebugMsg( DEBUG_HIGH | DEBUG_HANDLED, "gDPTextureRectangleFlip( %f, %f, %f, %f, %i, %f, %f, %f, %f);\n",
ulx, uly, lrx, lry, tile, s, t, dsdx, dtdy ); ulx, uly, lrx, lry, tile, s, t, dsdx, dtdy );
#endif #endif
} }