@@ -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+
21105void 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