1111#include " dolphin/base/PPCArch.h"
1212#include " dolphin/os.h"
1313
14- #ifdef DEBUG
15- #define J3D_ASSERT (COND ) \
16- if ((COND) == 0 ) { \
17- JUTAssertion::showAssert (JUTAssertion::getSDevice (), __FILE__, __LINE__, \
18- " Error : null pointer" ); \
19- OSPanic (__FILE__, __LINE__, " Halt" ); \
20- }
21- #else
22- #define J3D_ASSERT (COND )
23- #endif
24-
2514/* 8032E1F8-8032E230 328B38 0038+00 0/0 1/1 0/0 .text __ct__13J3DDeformDataFv */
2615J3DDeformData::J3DDeformData () {
2716 mClusterNum = 0 ;
@@ -48,15 +37,15 @@ void J3DDeformData::offAllFlag(u32 i_flag) {
4837/* 8032E274-8032E298 328BB4 0024+00 0/0 1/1 0/0 .text deform__13J3DDeformDataFP8J3DModel
4938 */
5039void J3DDeformData::deform (J3DModel* model) {
51- J3D_ASSERT (model != NULL );
40+ J3D_ASSERT (110 , model, " Error : null pointer " );
5241
5342 deform (model->getVertexBuffer ());
5443}
5544
5645/* 8032E298-8032E364 328BD8 00CC+00 1/1 0/0 0/0 .text deform__13J3DDeformDataFP15J3DVertexBuffer
5746 */
5847void J3DDeformData::deform (J3DVertexBuffer* buffer) {
59- J3D_ASSERT (buffer != NULL );
48+ J3D_ASSERT (141 , buffer, " Error : null pointer " );
6049
6150 buffer->swapVtxPosArrayPointer ();
6251 buffer->swapVtxNrmArrayPointer ();
@@ -94,7 +83,7 @@ J3DDeformer::J3DDeformer(J3DDeformData* data) {
9483/* 8032E3BC-8032E4A4 328CFC 00E8+00 1/1 0/0 0/0 .text deform__11J3DDeformerFP15J3DVertexBufferUs
9584 */
9685void J3DDeformer::deform (J3DVertexBuffer* buffer, u16 param_1) {
97- J3D_ASSERT (buffer != 0 );
86+ J3D_ASSERT (222 , buffer, " Error : null pointer " );
9887
9988 u16 var_r31 = 0 ;
10089 if (mAnmCluster != NULL ) {
@@ -115,6 +104,7 @@ void J3DDeformer::deform(J3DVertexBuffer* buffer, u16 param_1) {
115104 * deform_VtxPosF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf */
116105void J3DDeformer::deform_VtxPosF32 (J3DVertexBuffer* i_buffer, J3DCluster* i_cluster,
117106 J3DClusterKey* i_key, f32 * i_weights) {
107+ J3DClusterKey* key;
118108 int posNum = i_cluster->mPosNum ;
119109 int keyNum = i_cluster->mKeyNum ;
120110 f32 * vtxPosArray = (f32 *)i_buffer->getVtxPosArrayPointer (0 );
@@ -129,18 +119,22 @@ void J3DDeformer::deform_VtxPosF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus
129119 }
130120
131121 f32 local_58[2 ] = {1 .0f , -1 .0f };
132-
122+
133123 for (u16 i = 0 ; i < posNum; i++) {
134124 int index = i_cluster->field_0x18 [i] * 3 ;
135125 for (u16 j = 0 ; j < keyNum; j++) {
136- int uVar7 = ((u16 *)i_key[j].field_0x4 )[i];
137- f32 * deform = &deformVtxPos[(uVar7 & ~0xE000 ) * 3 ];
138- f32 deform0 = deform[0 ];
139- f32 deform1 = deform[1 ];
140- f32 deform2 = deform[2 ];
141- deform0 *= local_58[((uVar7 & 0x8000 ) >> 0xF )];
142- deform1 *= local_58[((uVar7 & 0x4000 ) >> 0xE )];
143- deform2 *= local_58[((uVar7 & 0x2000 ) >> 0xD )];
126+ int uVar8;
127+ int uVar7;
128+ key = &i_key[j];
129+ uVar8 = uVar7 = ((u16 *)key->field_0x4 )[i];
130+ uVar7 &= ~0xE000 ;
131+ uVar7 *= 3 ;
132+ f32 deform0 = deformVtxPos[uVar7];
133+ f32 deform1 = deformVtxPos[uVar7 + 1 ];
134+ f32 deform2 = deformVtxPos[uVar7 + 2 ];
135+ deform0 *= local_58[((uVar8 & 0x8000 ) >> 0xF )];
136+ deform1 *= local_58[((uVar8 & 0x4000 ) >> 0xE )];
137+ deform2 *= local_58[((uVar8 & 0x2000 ) >> 0xD )];
144138 vtxPosArray[index] += deform0 * i_weights[j];
145139 vtxPosArray[index + 1 ] += deform1 * i_weights[j];
146140 vtxPosArray[index + 2 ] += deform2 * i_weights[j];
@@ -165,26 +159,30 @@ void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus
165159 iVar13[index + 1 ] = 0 .0f ;
166160 iVar13[index + 2 ] = 0 .0f ;
167161 for (u16 j = 0 ; j < keyNum; j++) {
168- int uVar3 = ((u16 *)i_key[j].field_0x8 )[i];
169- f32 deform0, deform1, deform2;
170- if (uVar3 & 0x8000 ) {
171- deform0 = -deformVtxNrm[(uVar3 & ~0xE000 ) * 3 ];
162+ J3DClusterKey* key = &i_key[j];
163+ int uVar3 = ((u16 *)key->field_0x8 )[i];
164+ int uVar4 = uVar3;
165+ uVar3 &= ~0xE000 ;
166+ uVar3 *= 3 ;
167+ Vec deform0;
168+ if (uVar4 & 0x8000 ) {
169+ deform0.x = -deformVtxNrm[uVar3];
172170 } else {
173- deform0 = deformVtxNrm[( uVar3 & ~ 0xE000 ) * 3 ];
171+ deform0. x = deformVtxNrm[uVar3];
174172 }
175- if (uVar3 & 0x4000 ) {
176- deform1 = -deformVtxNrm[( uVar3 & ~ 0xE000 ) * 3 + 1 ];
173+ if (uVar4 & 0x4000 ) {
174+ deform0. y = -deformVtxNrm[uVar3 + 1 ];
177175 } else {
178- deform1 = deformVtxNrm[( uVar3 & ~ 0xE000 ) * 3 + 1 ];
176+ deform0. y = deformVtxNrm[uVar3 + 1 ];
179177 }
180- if (uVar3 & 0x2000 ) {
181- deform2 = -deformVtxNrm[( uVar3 & ~ 0xE000 ) * 3 + 2 ];
178+ if (uVar4 & 0x2000 ) {
179+ deform0. z = -deformVtxNrm[uVar3 + 2 ];
182180 } else {
183- deform2 = deformVtxNrm[( uVar3 & ~ 0xE000 ) * 3 + 2 ];
181+ deform0. z = deformVtxNrm[uVar3 + 2 ];
184182 }
185- iVar13[index] += deform0 * i_weights[j];
186- iVar13[index + 1 ] += deform1 * i_weights[j];
187- iVar13[index + 2 ] += deform2 * i_weights[j];
183+ iVar13[index] += deform0. x * i_weights[j];
184+ iVar13[index + 1 ] += deform0. y * i_weights[j];
185+ iVar13[index + 2 ] += deform0. z * i_weights[j];
188186 }
189187 normalize (&iVar13[index]);
190188 }
@@ -210,7 +208,8 @@ void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus
210208 continue ;
211209 }
212210 int index = tmp * 3 ;
213- int index2 = clusterVtx->field_0x4 [j] * 3 ;
211+ u16 iVar4 = clusterVtx->field_0x4 [j];
212+ int index2 = iVar4 * 3 ;
214213
215214 f32 dot = vec.x * iVar13[index2] + vec.y * iVar13[index2 + 1 ]
216215 + vec.z * iVar13[index2 + 2 ];
@@ -228,18 +227,17 @@ void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus
228227 vtxNrmArray[index + 1 ] = vec.y ;
229228 vtxNrmArray[index + 2 ] = vec.z ;
230229 } else if (angle > i_cluster->mMaxAngle ) {
231- int index3 = clusterVtx->field_0x4 [j];
232- Vec* iVar13a = (Vec*)iVar13;
233- vtxNrmArray[index] = iVar13a[index3].x ;
234- vtxNrmArray[index + 1 ] = iVar13a[index3].y ;
235- vtxNrmArray[index + 2 ] = iVar13a[index3].z ;
230+ vtxNrmArray[index] = iVar13[iVar4 * 3 ];
231+ vtxNrmArray[index + 1 ] = iVar13[iVar4 * 3 + 1 ];
232+ vtxNrmArray[index + 2 ] = iVar13[iVar4 * 3 + 2 ];
236233 } else {
237- f32 weight1 = (angle - i_cluster->mMinAngle )
234+ f32 weights[2 ];
235+ weights[0 ] = (angle - i_cluster->mMinAngle )
238236 / (i_cluster->mMaxAngle - i_cluster->mMinAngle );
239- f32 weight2 = 1 .0f - weight1 ;
240- vtxNrmArray[index] = weight1 * iVar13[index2] + weight2 * vec.x ;
241- vtxNrmArray[index + 1 ] = weight1 * iVar13[index2 + 1 ] + weight2 * vec.y ;
242- vtxNrmArray[index + 2 ] = weight1 * iVar13[index2 + 2 ] + weight2 * vec.z ;
237+ weights[ 1 ] = 1 .0f - weights[ 0 ] ;
238+ vtxNrmArray[index] = weights[ 0 ] * iVar13[index2] + weights[ 1 ] * vec.x ;
239+ vtxNrmArray[index + 1 ] = weights[ 0 ] * iVar13[index2 + 1 ] + weights[ 1 ] * vec.y ;
240+ vtxNrmArray[index + 2 ] = weights[ 0 ] * iVar13[index2 + 2 ] + weights[ 1 ] * vec.z ;
243241 }
244242 }
245243 }
0 commit comments