mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Fix vertex st scaling, when gSPModifyVertex is used.
Fix st scaling when otherMode.texturePersp is off.
This commit is contained in:
parent
1e4870e6b9
commit
c8f83889a8
30
OpenGL.cpp
30
OpenGL.cpp
|
@ -812,6 +812,16 @@ void OGL_AddTriangle( SPVertex *vertices, int v0, int v1, int v2 )
|
|||
OGL.vertices[OGL.numVertices].fog = max( 0.0f, vertices[v[i]].z / vertices[v[i]].w * (float)gSP.fog.multiplier + (float)gSP.fog.offset );
|
||||
}
|
||||
|
||||
if (!vertices[v[i]].st_scaled) {
|
||||
vertices[v[i]].s *= gSP.texture.scales;
|
||||
vertices[v[i]].t *= gSP.texture.scalet;
|
||||
if (gDP.otherMode.texturePersp == 0) {
|
||||
vertices[v[i]].s *= 0.5f;
|
||||
vertices[v[i]].t *= 0.5f;
|
||||
}
|
||||
vertices[v[i]].st_scaled = 1;
|
||||
}
|
||||
|
||||
if (combiner.usesT0)
|
||||
{
|
||||
if (cache.current[0]->frameBufferTexture)
|
||||
|
@ -820,19 +830,19 @@ void OGL_AddTriangle( SPVertex *vertices, int v0, int v1, int v2 )
|
|||
OGL.vertices[OGL.numVertices].t0 = (cache.current[0]->offsetT - (vertices[v[i]].t * cache.current[0]->shiftScaleT * gSP.texture.scalet - gSP.textureTile[0]->fult)) * cache.current[0]->scaleT;*/
|
||||
|
||||
if (gSP.textureTile[0]->masks)
|
||||
OGL.vertices[OGL.numVertices].s0 = (cache.current[0]->offsetS + (vertices[v[i]].s * cache.current[0]->shiftScaleS * gSP.texture.scales - fmod( gSP.textureTile[0]->fuls, 1 << gSP.textureTile[0]->masks ))) * cache.current[0]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].s0 = (cache.current[0]->offsetS + (vertices[v[i]].s * cache.current[0]->shiftScaleS - fmod( gSP.textureTile[0]->fuls, 1 << gSP.textureTile[0]->masks ))) * cache.current[0]->scaleS;
|
||||
else
|
||||
OGL.vertices[OGL.numVertices].s0 = (cache.current[0]->offsetS + (vertices[v[i]].s * cache.current[0]->shiftScaleS * gSP.texture.scales - gSP.textureTile[0]->fuls)) * cache.current[0]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].s0 = (cache.current[0]->offsetS + (vertices[v[i]].s * cache.current[0]->shiftScaleS - gSP.textureTile[0]->fuls)) * cache.current[0]->scaleS;
|
||||
|
||||
if (gSP.textureTile[0]->maskt)
|
||||
OGL.vertices[OGL.numVertices].t0 = (cache.current[0]->offsetT - (vertices[v[i]].t * cache.current[0]->shiftScaleT * gSP.texture.scalet - fmod( gSP.textureTile[0]->fult, 1 << gSP.textureTile[0]->maskt ))) * cache.current[0]->scaleT;
|
||||
OGL.vertices[OGL.numVertices].t0 = (cache.current[0]->offsetT - (vertices[v[i]].t * cache.current[0]->shiftScaleT - fmod( gSP.textureTile[0]->fult, 1 << gSP.textureTile[0]->maskt ))) * cache.current[0]->scaleT;
|
||||
else
|
||||
OGL.vertices[OGL.numVertices].t0 = (cache.current[0]->offsetT - (vertices[v[i]].t * cache.current[0]->shiftScaleT * gSP.texture.scalet - gSP.textureTile[0]->fult)) * cache.current[0]->scaleT;
|
||||
OGL.vertices[OGL.numVertices].t0 = (cache.current[0]->offsetT - (vertices[v[i]].t * cache.current[0]->shiftScaleT - gSP.textureTile[0]->fult)) * cache.current[0]->scaleT;
|
||||
}
|
||||
else
|
||||
{
|
||||
OGL.vertices[OGL.numVertices].s0 = (vertices[v[i]].s * cache.current[0]->shiftScaleS * gSP.texture.scales - gSP.textureTile[0]->fuls + cache.current[0]->offsetS) * cache.current[0]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].t0 = (vertices[v[i]].t * cache.current[0]->shiftScaleT * gSP.texture.scalet - gSP.textureTile[0]->fult + cache.current[0]->offsetT) * cache.current[0]->scaleT;
|
||||
OGL.vertices[OGL.numVertices].s0 = (vertices[v[i]].s * cache.current[0]->shiftScaleS - gSP.textureTile[0]->fuls + cache.current[0]->offsetS) * cache.current[0]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].t0 = (vertices[v[i]].t * cache.current[0]->shiftScaleT - gSP.textureTile[0]->fult + cache.current[0]->offsetT) * cache.current[0]->scaleT;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -840,13 +850,13 @@ void OGL_AddTriangle( SPVertex *vertices, int v0, int v1, int v2 )
|
|||
{
|
||||
if (cache.current[1]->frameBufferTexture)
|
||||
{
|
||||
OGL.vertices[OGL.numVertices].s1 = (cache.current[1]->offsetS + (vertices[v[i]].s * cache.current[1]->shiftScaleS * gSP.texture.scales - gSP.textureTile[1]->fuls)) * cache.current[1]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].t1 = (cache.current[1]->offsetT - (vertices[v[i]].t * cache.current[1]->shiftScaleT * gSP.texture.scalet - gSP.textureTile[1]->fult)) * cache.current[1]->scaleT;
|
||||
OGL.vertices[OGL.numVertices].s1 = (cache.current[1]->offsetS + (vertices[v[i]].s * cache.current[1]->shiftScaleS - gSP.textureTile[1]->fuls)) * cache.current[1]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].t1 = (cache.current[1]->offsetT - (vertices[v[i]].t * cache.current[1]->shiftScaleT - gSP.textureTile[1]->fult)) * cache.current[1]->scaleT;
|
||||
}
|
||||
else
|
||||
{
|
||||
OGL.vertices[OGL.numVertices].s1 = (vertices[v[i]].s * cache.current[1]->shiftScaleS * gSP.texture.scales - gSP.textureTile[1]->fuls + cache.current[1]->offsetS) * cache.current[1]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].t1 = (vertices[v[i]].t * cache.current[1]->shiftScaleT * gSP.texture.scalet - gSP.textureTile[1]->fult + cache.current[1]->offsetT) * cache.current[1]->scaleT;
|
||||
OGL.vertices[OGL.numVertices].s1 = (vertices[v[i]].s * cache.current[1]->shiftScaleS - gSP.textureTile[1]->fuls + cache.current[1]->offsetS) * cache.current[1]->scaleS;
|
||||
OGL.vertices[OGL.numVertices].t1 = (vertices[v[i]].t * cache.current[1]->shiftScaleT - gSP.textureTile[1]->fult + cache.current[1]->offsetT) * cache.current[1]->scaleT;
|
||||
}
|
||||
}
|
||||
OGL.numVertices++;
|
||||
|
|
12
gSP.cpp
12
gSP.cpp
|
@ -432,6 +432,7 @@ void gSPVertex( u32 v, u32 n, u32 v0 )
|
|||
gSP.vertices[i].flag = vertex->flag;
|
||||
gSP.vertices[i].s = _FIXED2FLOAT( vertex->s, 5 );
|
||||
gSP.vertices[i].t = _FIXED2FLOAT( vertex->t, 5 );
|
||||
gSP.vertices[i].st_scaled = 0;
|
||||
|
||||
if (gSP.geometryMode & G_LIGHTING)
|
||||
{
|
||||
|
@ -508,6 +509,7 @@ void gSPCIVertex( u32 v, u32 n, u32 v0 )
|
|||
gSP.vertices[i].flag = 0;
|
||||
gSP.vertices[i].s = _FIXED2FLOAT( vertex->s, 5 );
|
||||
gSP.vertices[i].t = _FIXED2FLOAT( vertex->t, 5 );
|
||||
gSP.vertices[i].st_scaled = 0;
|
||||
|
||||
u8 *color = &RDRAM[gSP.vertexColorBase + (vertex->ci & 0xff)];
|
||||
|
||||
|
@ -1241,8 +1243,14 @@ void gSPModifyVertex( u32 vtx, u32 where, u32 val )
|
|||
#endif
|
||||
break;
|
||||
case G_MWO_POINT_ST:
|
||||
gSP.vertices[vtx].s = _FIXED2FLOAT( (s16)_SHIFTR( val, 16, 16 ), 5 );
|
||||
gSP.vertices[vtx].t = _FIXED2FLOAT( (s16)_SHIFTR( val, 0, 16 ), 5 );
|
||||
if (gDP.otherMode.texturePersp > 0) {
|
||||
gSP.vertices[vtx].s = _FIXED2FLOAT( (s16)_SHIFTR( val, 16, 16 ), 5 );
|
||||
gSP.vertices[vtx].t = _FIXED2FLOAT( (s16)_SHIFTR( val, 0, 16 ), 5 );
|
||||
} else {
|
||||
gSP.vertices[vtx].s = _FIXED2FLOAT( (s16)_SHIFTR( val, 16, 16 ), 6 );
|
||||
gSP.vertices[vtx].t = _FIXED2FLOAT( (s16)_SHIFTR( val, 0, 16 ), 6 );
|
||||
}
|
||||
gSP.vertices[vtx].st_scaled = 1;
|
||||
#ifdef DEBUG
|
||||
DebugMsg( DEBUG_HIGH | DEBUG_HANDLED, "gSPModifyVertex( %i, %s, 0x%08X );\n",
|
||||
vtx, MWOPointText[(where - 0x10) >> 2], val );
|
||||
|
|
Loading…
Reference in New Issue
Block a user