summaryrefslogtreecommitdiff
path: root/libpcsxcore
diff options
context:
space:
mode:
authoriCatButler <i.am.catbutler@gmail.com>2016-05-02 15:01:27 +0100
committeriCatButler <i.am.catbutler@gmail.com>2016-05-02 15:01:27 +0100
commit216c2ff3aefc9e0295ed9b1486935d65f6c13f55 (patch)
tree88791c94e67ac8a5b99b9b39238ca4513077adf6 /libpcsxcore
parent153c8eb4997d21d3b2965cf38d4348f05c29860f (diff)
downloadpcsxr-216c2ff3aefc9e0295ed9b1486935d65f6c13f55.tar.gz
Fix bugs from previous
Fix stray triangles - Switch to full floating point RTPS/RTPT - Clamp w values to near plane Fix texture corruption in 1.78, copy 2.4 Tweak - Remove matrix replacement - Add W component to vertices - Wrap glVertex3fv calls - Use counter to call glVertex4fv for PGXP vertices only
Diffstat (limited to 'libpcsxcore')
-rwxr-xr-xlibpcsxcore/gte.c16
-rw-r--r--libpcsxcore/pgxp_gte.c28
2 files changed, 22 insertions, 22 deletions
diff --git a/libpcsxcore/gte.c b/libpcsxcore/gte.c
index 2d02032a..abe3c205 100755
--- a/libpcsxcore/gte.c
+++ b/libpcsxcore/gte.c
@@ -497,11 +497,11 @@ int docop2(int op) {
SX2 = Lm_G1(F((s64) OFX + ((s64) IR1 * h_over_sz3) * (Config.Widescreen ? 0.75 : 1)) >> 16);
SY2 = Lm_G2(F((s64) OFY + ((s64) IR2 * h_over_sz3)) >> 16);
- PGXP_pushSXYZ2s(Lm_G1_ia((s64)OFX + (s64)(IR1 * h_over_sz3) * (Config.Widescreen ? 0.75 : 1)),
- Lm_G2_ia((s64)OFY + (s64)(IR2 * h_over_sz3)),
- SZ3, SXY2);
+ //PGXP_pushSXYZ2s(Lm_G1_ia((s64)OFX + (s64)(IR1 * h_over_sz3) * (Config.Widescreen ? 0.75 : 1)),
+ // Lm_G2_ia((s64)OFY + (s64)(IR2 * h_over_sz3)),
+ // SZ3, SXY2);
- //PGXP_RTPS(0, SXY2);
+ PGXP_RTPS(0, SXY2);
MAC0 = F((s64) DQB + ((s64) DQA * h_over_sz3));
IR0 = Lm_H(m_mac0, 1);
@@ -889,11 +889,11 @@ int docop2(int op) {
SX2 = Lm_G1(F((s64) OFX + ((s64) IR1 * h_over_sz3) * (Config.Widescreen ? 0.75 : 1)) >> 16);
SY2 = Lm_G2(F((s64) OFY + ((s64) IR2 * h_over_sz3)) >> 16);
- PGXP_pushSXYZ2s(Lm_G1_ia((s64)OFX + (s64)(IR1 * h_over_sz3) * (Config.Widescreen ? 0.75 : 1)),
- Lm_G2_ia((s64)OFY + (s64)(IR2 * h_over_sz3)),
- SZ3, SXY2);
+ //PGXP_pushSXYZ2s(Lm_G1_ia((s64)OFX + (s64)(IR1 * h_over_sz3) * (Config.Widescreen ? 0.75 : 1)),
+ // Lm_G2_ia((s64)OFY + (s64)(IR2 * h_over_sz3)),
+ // SZ3, SXY2);
- //PGXP_RTPS(v, SXY2);
+ PGXP_RTPS(v, SXY2);
}
MAC0 = F((s64) DQB + ((s64) DQA * h_over_sz3));
diff --git a/libpcsxcore/pgxp_gte.c b/libpcsxcore/pgxp_gte.c
index d5341dc6..5d681d85 100644
--- a/libpcsxcore/pgxp_gte.c
+++ b/libpcsxcore/pgxp_gte.c
@@ -306,8 +306,8 @@ void PGXP_RTPS(u32 _n, u32 _v)
float MAC2 = TRY + (R21 * VX(_n)) + (R22 * VY(_n)) + (R23 * VZ(_n));
float MAC3 = TRZ + (R31 * VX(_n)) + (R32 * VY(_n)) + (R33 * VZ(_n));
- float SZ3 = MAC3;
float H = psxRegs.CP2C.p[26].sw.l;
+ float SZ3 = max(MAC3, H);
float h_over_sz3 = H / SZ3;
// Offsets with 16-bit shift
@@ -333,26 +333,26 @@ int PGXP_NLCIP_valid()
float PGXP_NCLIP()
{
-// float nclip = ((SX0 * SY1) + (SX1 * SY2) + (SX2 * SY0) - (SX0 * SY2) - (SX1 * SY0) - (SX2 * SY1));
+ float nclip = ((SX0 * SY1) + (SX1 * SY2) + (SX2 * SY0) - (SX0 * SY2) - (SX1 * SY0) - (SX2 * SY1));
// ensure fractional values are not incorrectly rounded to 0
- //if ((fabs(nclip) < 1.0f) && (nclip != 0))
- // nclip += (nclip < 0.f ? -1 : 1);
+ if ((fabs(nclip) < 1.0f) && (nclip != 0))
+ nclip += (nclip < 0.f ? -1 : 1);
- float AX = SX1 - SX0;
- float AY = SY1 - SY0;
+ //float AX = SX1 - SX0;
+ //float AY = SY1 - SY0;
- float BX = SX2 - SX0;
- float BY = SY2 - SY0;
+ //float BX = SX2 - SX0;
+ //float BY = SY2 - SY0;
- // normalise A and B
- float mA = sqrt((AX*AX) + (AY*AY));
- float mB = sqrt((BX*BX) + (BY*BY));
+ //// normalise A and B
+ //float mA = sqrt((AX*AX) + (AY*AY));
+ //float mB = sqrt((BX*BX) + (BY*BY));
- // calculate AxB to get Z component of C
- float CZ = ((AX * BY) - (AY * BX)) * (1 << 12);
+ //// calculate AxB to get Z component of C
+ //float CZ = ((AX * BY) - (AY * BX)) * (1 << 12);
- return CZ;// nclip;
+ return nclip;
}
static precise_value PGXP_MFC2_int(u32 reg)