Skip to content

Commit cc2d662

Browse files
author
Niko
committed
rebuild_ps1 fixes
1 parent e7afcd0 commit cc2d662

File tree

1 file changed

+86
-7
lines changed

1 file changed

+86
-7
lines changed

rebuild_PS1/TEST_DrawInstances.c

Lines changed: 86 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,90 @@ int GetBit(unsigned int* vertData)
1818
return ret;
1919
}
2020

21+
// copied out of PsyCross library,
22+
// is this equal to the CTR function?
23+
#ifndef REBUILD_PC
24+
VECTOR* ApplyMatrixLV(MATRIX* m, VECTOR* v0, VECTOR* v1)
25+
{
26+
#if 1
27+
// correct Psy-Q implementation
28+
VECTOR tmpHI;
29+
VECTOR tmpLO;
30+
31+
gte_SetRotMatrix(m);
32+
33+
tmpHI.vx = v0->vx;
34+
tmpHI.vy = v0->vy;
35+
tmpHI.vz = v0->vz;
36+
37+
if (tmpHI.vx < 0)
38+
{
39+
tmpLO.vx = -(-tmpHI.vx >> 0xf);
40+
tmpHI.vx = -(-tmpHI.vx & 0x7fff);
41+
}
42+
else
43+
{
44+
tmpLO.vx = tmpHI.vx >> 0xf;
45+
tmpHI.vx = tmpHI.vx & 0x7fff;
46+
}
47+
48+
if (tmpHI.vy < 0)
49+
{
50+
tmpLO.vy = -(-tmpHI.vy >> 0xf);
51+
tmpHI.vy = -(-tmpHI.vy & 0x7fff);
52+
}
53+
else
54+
{
55+
tmpLO.vy = tmpHI.vy >> 0xf;
56+
tmpHI.vy = tmpHI.vy & 0x7fff;
57+
}
58+
59+
if (tmpHI.vz < 0)
60+
{
61+
tmpLO.vz = -(-tmpHI.vz >> 0xf);
62+
tmpHI.vz = -(-tmpHI.vz & 0x7fff);
63+
}
64+
else
65+
{
66+
tmpLO.vz = tmpHI.vz >> 0xf;
67+
tmpHI.vz = tmpHI.vz & 0x7fff;
68+
}
69+
70+
gte_ldlvl(&tmpLO);
71+
gte_rtir_sf0();
72+
gte_stlvnl(&tmpLO);
73+
74+
gte_ldlvl(&tmpHI);
75+
gte_rtir();
76+
77+
if (tmpLO.vx < 0)
78+
tmpLO.vx *= 8;
79+
else
80+
tmpLO.vx <<= 3;
81+
82+
if (tmpLO.vy < 0)
83+
tmpLO.vy *= 8;
84+
else
85+
tmpLO.vy <<= 3;
86+
87+
if (tmpLO.vz < 0)
88+
tmpLO.vz *= 8;
89+
else
90+
tmpLO.vz <<= 3;
91+
92+
gte_stlvnl(&tmpHI);
93+
94+
v1->vx = tmpHI.vx + tmpLO.vx;
95+
v1->vy = tmpHI.vy + tmpLO.vy;
96+
v1->vz = tmpHI.vz + tmpLO.vz;
97+
#else
98+
APPLYMATRIX(m, v0, v1);
99+
#endif
100+
return v1;
101+
}
102+
#endif
103+
104+
21105
void DrawOneInst(struct Instance* curr)
22106
{
23107
short posScreen1[4];
@@ -76,14 +160,9 @@ void DrawOneInst(struct Instance* curr)
76160
pos.vy = curr->matrix.t[1] - pb->matrix_Camera.t[1];
77161
pos.vz = curr->matrix.t[2] - pb->matrix_Camera.t[2];
78162

79-
#ifdef REBUILD_PC
163+
// TODO: ApplyMatrixLV_stub needs to be rewritten,
164+
// may be optimizations that Naughty Dog used in it
80165
ApplyMatrixLV(&pb->matrix_ViewProj, &pos, &mat2->t[0]);
81-
#else
82-
// Not rewritten yet,
83-
#if 0
84-
ApplyMatrixLV_stub(&pb->matrix_ViewProj, &pos, &mat2->t[0]);
85-
#endif
86-
#endif
87166

88167
gte_SetRotMatrix(mat2);
89168
gte_SetTransMatrix(mat2);

0 commit comments

Comments
 (0)