PlatformMesh.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. #include "PlatformMesh.h"
  2. #include "FTTUPtr.h"
  3. #include "CFTTRenderHelper.h"
  4. #include "CFTTShaderBuiltInConstants.h"
  5. static float g_f309C50[6] = {1.0, 1.0, 1.0, 0.0, 0.0, 0.0};
  6. //---------------------------------------------------------------------------------------------------------------------------------------------
  7. //0021B304
  8. void PlatformMesh_Free(CFTTPlatformMesh *) {
  9. }
  10. //---------------------------------------------------------------------------------------------------------------------------------------------
  11. //0021B340 //^_^
  12. void PlatformMesh_PerMeshSetup(CFTTPlatformMesh const *pPlatformMesh1, CFTTVector32x4 const *pFTTVector32x42, CFTTVector32x4 const *pFTTVector32x43) {
  13. }
  14. //---------------------------------------------------------------------------------------------------------------------------------------------
  15. //0021b370 ^_^
  16. void PlatformMesh_Render(CFTTPlatformMesh* r0_pPlatformMesh1, int r1_i, unsigned short r2_us, unsigned int r3_u, unsigned int sp10_u)
  17. {
  18. CFTTModel_struct_14* r12_list_model = r0_pPlatformMesh1->uOPData_44.list_model;
  19. if (r2_us ==0xFFFF )
  20. r2_us = r12_list_model[r1_i].tStr12_2.us_0;
  21. if (r3_u == 0xFFFFFFFF)
  22. r3_u = r12_list_model[r1_i].tStr12_2.field_6;
  23. if (sp10_u == 0xFFFFFFFF)
  24. sp10_u = r12_list_model[r1_i].tStr12_2.field_2 *3;
  25. return ((CFTTRenderHelper*)r0_pPlatformMesh1->pCFTTRenderHelper_94.pType_0)->Render( &CFTTShaderBuiltInConstants::ms_matWorld, r2_us, r3_u,sp10_u);
  26. }
  27. //---------------------------------------------------------------------------------------------------------------------------------------------
  28. //0021b3c8 ^_^
  29. void PlatformMesh_PerMeshRestore(CFTTPlatformMesh const *pMesh) {
  30. }
  31. //---------------------------------------------------------------------------------------------------------------------------------------------
  32. //0021B3F0 //^_^
  33. void PlatformMesh_CreateVolatileResources(CFTTPlatformMesh *p_cfttplatformesh_r0_arg, bool b_r1_arg) {
  34. }
  35. //---------------------------------------------------------------------------------------------------------------------------------------------
  36. //0021B44A
  37. void PlatformMesh_DeleteVolatileResources(CFTTPlatformMesh *, bool) {
  38. }
  39. //---------------------------------------------------------------------------------------------------------------------------------------------
  40. //0021B452
  41. void PlatformMesh_CreateManagedResources(CFTTPlatformMesh *, bool) {
  42. // empty
  43. }
  44. //---------------------------------------------------------------------------------------------------------------------------------------------
  45. //0021B454
  46. void PlatformMesh_DeleteManagedResources(CFTTPlatformMesh *, bool) {
  47. // empty
  48. }
  49. //---------------------------------------------------------------------------------------------------------------------------------------------
  50. //0021B456 //^_^
  51. void PlatformMesh_SetVerts(CFTTPlatformMesh *p_cfttplatformesh_r0) {
  52. }
  53. //---------------------------------------------------------------------------------------------------------------------------------------------
  54. //0021b478 ^_^
  55. void PlatformMesh_SetIndices(CFTTPlatformMesh *pPlatformMesh1) {
  56. }
  57. //---------------------------------------------------------------------------------------------------------------------------------------------
  58. //0x0021b488 ^_- 测试8关无异常
  59. void PlatformMesh_ToModel(CFTTPlatformMesh* pfTTPlatformMesh1, TFTTModel* pfTTModel2, EMeshModelFlags eMeshModelFlags3)
  60. {
  61. //LOGE("PlatformMesh_ToModel ");
  62. //0021B488
  63. TFTTVertexDescriptor* pTFTTVertexDescriptor_r6 = pfTTPlatformMesh1->uOPData_3C.pTFTTVertexDescriptor;
  64. FTTGetFVFFromDescriptor(pTFTTVertexDescriptor_r6);
  65. pfTTModel2->field_12 = 0;
  66. //!!!!!!注意这里的除法 field_58 定义需要改为short
  67. int sp4 = pfTTPlatformMesh1->field_30 / (short)pfTTPlatformMesh1->field_58;
  68. pfTTModel2->dCount_C = sp4;
  69. void* pr12 = pfTTModel2 + 1;
  70. pfTTModel2->us_10 = pfTTPlatformMesh1->count_40;
  71. if (eMeshModelFlags3 & 1)
  72. {
  73. pfTTModel2->u_28.pfTTModel = (TFTTModel*)pr12;
  74. pfTTModel2->u_34.pdat = (ushort*)((int)pr12 + pfTTModel2->us_10 * 12);
  75. unsigned int u_r12 = (3 + pfTTModel2->us_10 * 2) & 0x3FFFC;
  76. char b_r7 = 0;
  77. unsigned int u_r3 = 0;
  78. //goto loc_21B4F4;
  79. //loc_21B4E4
  80. while (pfTTModel2->us_10 > b_r7)
  81. {
  82. CFTTModel_struct_14* p_list_model2_r1 = pfTTPlatformMesh1->uOPData_44.list_model;
  83. u_r3 = p_list_model2_r1[b_r7].tStr12_2.field_2 + u_r3;
  84. b_r7++;
  85. }
  86. unsigned int p_r0 = (int)pfTTModel2->u_34.pdat + u_r12;
  87. pfTTModel2->field_E = u_r3;
  88. pfTTModel2->u_24.index = p_r0;
  89. unsigned int sp10 = (3 + u_r3 * 6) & 0xFFFFFFFC;
  90. unsigned char b_r10 = 0;
  91. unsigned int u_r9 = 0;
  92. //loc_21B57A:
  93. while (b_r10 < pfTTModel2->us_10)
  94. {
  95. //21B522
  96. CFTTModel_struct_14* plistMode_r2 = pfTTPlatformMesh1->uOPData_44.list_model;
  97. unsigned short us_r7 = plistMode_r2[b_r10].field_0;
  98. TFTTModel_struct_C_1* pTFTTModel_struct_C_1_r8 = &pfTTModel2->u_28.list_C[b_r10];//r8
  99. pTFTTModel_struct_C_1_r8->field_8 = us_r7;
  100. pTFTTModel_struct_C_1_r8->field_4 = 0;
  101. int ir2 = plistMode_r2[b_r10].tStr12_2.field_2;
  102. pTFTTModel_struct_C_1_r8->field_0 = 0;
  103. pTFTTModel_struct_C_1_r8->field_6 = ir2;
  104. int i_r1 = plistMode_r2[b_r10].tStr12_2.field_6;
  105. unsigned short* pus_r0 = pfTTModel2->u_24.pusbuf;
  106. unsigned u_r2 = ((unsigned short)ir2)*6;
  107. ushort* pus_r3 = pfTTPlatformMesh1->uOPData_34.pusData;
  108. memcpy((void*) & pus_r0[u_r9], (void*)&pus_r3[i_r1], u_r2 );
  109. unsigned u_r1 = pTFTTModel_struct_C_1_r8->field_6;
  110. b_r10++;
  111. u_r1 *= 3;
  112. u_r9 += u_r1;
  113. }
  114. pr12 = (void*)((int)p_r0 + sp10);
  115. //loc_21B5B0:
  116. unsigned char b_lr = 0;
  117. unsigned short* pus_r1;
  118. while (b_lr < pfTTModel2->us_10)
  119. {
  120. //loc_21B596
  121. CFTTModel_struct_14* pCFTTModel_struct_14_r3 = pfTTPlatformMesh1->uOPData_44.list_model;
  122. pus_r1 = pfTTModel2->u_34.pdat;
  123. pfTTModel2->u_34.pdat[b_lr] = pCFTTModel_struct_14_r3[b_lr].tStr12_2.us_0;
  124. b_lr++;
  125. }
  126. }
  127. //loc_21B5BE:
  128. unsigned int u_lr = eMeshModelFlags3 & 2;
  129. if (u_lr)
  130. {
  131. pfTTModel2->u_1C.pusbuf = (ushort*)pr12;
  132. pr12 = (void*)((int)pr12 + 12 * sp4);
  133. }
  134. unsigned int sp8 = eMeshModelFlags3 & 4; //r1
  135. float f_s0 = 32767.0;
  136. if (sp8)
  137. {
  138. pfTTModel2->u_20.pusbuf =(ushort*)pr12;
  139. pr12 = (void*)((int)pr12 + 12 * sp4);
  140. }
  141. float f_s2 = 65535.0;
  142. unsigned sp14 = eMeshModelFlags3 & 8;
  143. float f_s4 = 0.0;
  144. if (sp14)
  145. {
  146. pfTTModel2->u_30.pusbuf = (ushort*)pr12;
  147. pr12 = (void*)((int)pr12 + 12 * sp4);
  148. }
  149. unsigned sp10 = eMeshModelFlags3 & 0x20;
  150. if (sp10)
  151. {
  152. pfTTModel2->u_38.pusbuf = (ushort*)pr12;
  153. pr12 = (void*)((int)pr12 + 4 * sp4);
  154. }
  155. unsigned sp18 = eMeshModelFlags3 & 0x40;
  156. if (sp18)
  157. {
  158. unsigned int u_r1 = (int)pr12 + 2 * sp4;
  159. pfTTModel2->pmodel_struct_C_2_40 = (TFTTModel_struct_C_2*)u_r1;
  160. pfTTModel2->pmodel_struct_C_3_3C =(TFTTModel_struct_C_3*) pr12;
  161. pr12 = (void*)((int)u_r1 + 16 * sp4);
  162. }
  163. unsigned int u_r2 = eMeshModelFlags3 & 0x10;
  164. unsigned int spC = u_r2;
  165. if (spC)
  166. pfTTModel2->u_2C.index = (int)pr12;
  167. //loc_21BA12:
  168. //LOGE("PlatformMesh_ToModel while b ");
  169. while (pTFTTVertexDescriptor_r6->field_0 != -1)
  170. {
  171. //loc_21B638:
  172. unsigned int u_r8 = 0;
  173. unsigned int u_r9 = 0;
  174. unsigned int u_r10 = 0;
  175. unsigned int u_r11 = 0;
  176. //goto loc_21BA0A;
  177. //loc_21BA0A:
  178. for (; u_r11 != sp4; u_r11++)
  179. {
  180. unsigned int* p_r12 = (unsigned int*)(pfTTPlatformMesh1->field_58 * u_r11
  181. + pfTTPlatformMesh1->uOPData_2C.pData + pTFTTVertexDescriptor_r6->field_C);
  182. switch (pTFTTVertexDescriptor_r6->field_4)
  183. {
  184. case 0:
  185. {
  186. // LOGE("PlatformMesh_ToModel switch 0 ");
  187. //loc_21B67C:
  188. if (u_lr)
  189. {
  190. if (pTFTTVertexDescriptor_r6->field_0 == 2)
  191. {
  192. //LOGE("PlatformMesh_ToModel switch 0 2 ");
  193. ((int*)(pfTTModel2->u_1C.pmodel_union_struct_2[u_r11].pfbuf))[0] = p_r12[0];
  194. ((int*)(pfTTModel2->u_1C.pmodel_union_struct_2[u_r11].pfbuf))[1] = p_r12[1];
  195. ((int*)(pfTTModel2->u_1C.pmodel_union_struct_2[u_r11].pfbuf))[2] = p_r12[2];
  196. }
  197. //loc_21B6B2
  198. if (pTFTTVertexDescriptor_r6->field_0 == 0x1A)
  199. {
  200. //LOGE("PlatformMesh_ToModel switch 0 1a ");
  201. int icount_r7 = 0;
  202. pfTTModel2->u_1C.pmodel_union_struct_2[u_r11].pfbuf[0] = (float)(((short*)p_r12)[0]) / (float)32767.0;
  203. pfTTModel2->u_1C.pmodel_union_struct_2[u_r11].pfbuf[1] = (float)(((short*)p_r12)[1]) / (float)32767.0;
  204. pfTTModel2->u_1C.pmodel_union_struct_2[u_r11].pfbuf[2] = (float)(((short*)p_r12)[2]) / (float)32767.0;
  205. //LOGE("PlatformMesh_ToModel switch 0 1a while begin ");
  206. //loc_21B72C
  207. while (icount_r7 != 0x3)
  208. {
  209. //loc_21B70E
  210. pfTTModel2->u_1C.pmodel_union_struct_2[u_r8].pfbuf[icount_r7] =
  211. pfTTPlatformMesh1->pfloat_array_68[icount_r7]
  212. + pfTTPlatformMesh1->pfloat_array_5C[icount_r7]*
  213. pfTTModel2->u_1C.pmodel_union_struct_2[u_r8].pfbuf[icount_r7];
  214. icount_r7++;
  215. }
  216. // LOGE("PlatformMesh_ToModel switch 0 1a end ");
  217. }
  218. }
  219. break;
  220. }
  221. case 1:
  222. {
  223. // LOGE("PlatformMesh_ToModel switch 1 ");
  224. if (sp18)
  225. {
  226. pfTTModel2->pmodel_struct_C_2_40[u_r11].pfloatArray[0] = (float)(((unsigned short*)p_r12)[0]) / (float)65535.0;
  227. pfTTModel2->pmodel_struct_C_2_40[u_r11].pfloatArray[1] = (float)(((unsigned short*)p_r12)[1]) / (float)65535.0;
  228. pfTTModel2->pmodel_struct_C_2_40[u_r11].pfloatArray[2] = (float)(((unsigned short*)p_r12)[2]) / (float)65535.0;
  229. pfTTModel2->pmodel_struct_C_2_40[u_r11].pfloatArray[3] = (float)(((unsigned short*)p_r12)[3]) / (float)65535.0;
  230. int icount_r2 = 0;
  231. float f_s6 = 0.0;
  232. //loc_21B7C8
  233. while (icount_r2 != 4)
  234. {
  235. //loc_21B7BC
  236. f_s6 += pfTTModel2->pmodel_struct_C_2_40[u_r10].pfloatArray[icount_r2++];
  237. }
  238. int icount_r7 = 0;
  239. //loc_21B7E4
  240. while (icount_r7 != 2)
  241. {
  242. //loc_21B7D0
  243. pfTTModel2->pmodel_struct_C_2_40[u_r9].pfloatArray[icount_r7] = pfTTModel2->pmodel_struct_C_2_40[u_r9].pfloatArray[icount_r7] / f_s6;
  244. icount_r7++;
  245. }
  246. }
  247. break;
  248. }
  249. case 2:
  250. {
  251. // LOGE("PlatformMesh_ToModel switch 2 ");
  252. //loc_21B880
  253. if (sp18!=0)
  254. {
  255. pfTTModel2->pmodel_struct_C_3_3C[u_r11].field_0 = ((char*)p_r12)[0];
  256. pfTTModel2->pmodel_struct_C_3_3C[u_r11].field_1 = ((char*)p_r12)[1];
  257. }
  258. break;
  259. }
  260. case 3:
  261. {
  262. // LOGE("PlatformMesh_ToModel switch 3 ");
  263. //loc_21B8A2
  264. if (sp8)
  265. {
  266. if (pTFTTVertexDescriptor_r6->field_0 == 2)
  267. {
  268. pfTTModel2->u_20.pmodel_union_struct_2[u_r11].pfbuf[0] = ((float*)p_r12)[0];
  269. pfTTModel2->u_20.pmodel_union_struct_2[u_r11].pfbuf[1] = ((float*)p_r12)[1];
  270. pfTTModel2->u_20.pmodel_union_struct_2[u_r11].pfbuf[2] = ((float*)p_r12)[2];
  271. }
  272. //loc_21B8D6
  273. if (pTFTTVertexDescriptor_r6->field_0 == 0x1A)
  274. {
  275. pfTTModel2->u_20.pmodel_union_struct_2[u_r11].pfbuf[0] = (float)(((short*)p_r12)[0]) / (float)32767.0;
  276. pfTTModel2->u_20.pmodel_union_struct_2[u_r11].pfbuf[1] = (float)(((short*)p_r12)[1]) / (float)32767.0;
  277. pfTTModel2->u_20.pmodel_union_struct_2[u_r11].pfbuf[2] = (float)(((short*)p_r12)[2]) / (float)32767.0;
  278. }
  279. }
  280. break;
  281. }
  282. case 5:
  283. {
  284. // LOGE("PlatformMesh_ToModel switch 5 ");
  285. //loc_21B930
  286. if (spC)
  287. {
  288. int i_r7 = sp4;
  289. if (pTFTTVertexDescriptor_r6->field_8 != 1)
  290. i_r7 = 0;
  291. if (pTFTTVertexDescriptor_r6->field_0 == 1)
  292. {
  293. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[0] = p_r12[0];
  294. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[1] = p_r12[1];
  295. }
  296. //loc_21B968
  297. if (pTFTTVertexDescriptor_r6->field_0 == 0x19)
  298. {
  299. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[0]=(float)(((short*)p_r12)[0]) / (float) 32767.0;
  300. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[1]= (float)(((short*)p_r12)[1]) / (float)32767.0;
  301. CFTTVector32x4* pfttVector32x4 = &pfTTPlatformMesh1->pfTTVector32x4_74;
  302. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[0] =
  303. pfttVector32x4[pTFTTVertexDescriptor_r6->field_8].my[2] +
  304. pfttVector32x4[pTFTTVertexDescriptor_r6->field_8].my[0] *
  305. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[0];
  306. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[1] =
  307. pfttVector32x4[pTFTTVertexDescriptor_r6->field_8].my[3] +
  308. pfttVector32x4[pTFTTVertexDescriptor_r6->field_8].my[1] *
  309. pfTTModel2->u_2C.pmodel_union_struct_3[i_r7 + u_r11].pfbuf[1];
  310. }
  311. }
  312. break;
  313. }
  314. case 6:
  315. {
  316. //LOGE("PlatformMesh_ToModel switch 6 ");
  317. //loc_21B7EA
  318. if (sp14)
  319. {
  320. if (pTFTTVertexDescriptor_r6->field_0 == 2)
  321. {
  322. pfTTModel2->u_30.pmodel_union_struct_2[u_r11].pfbuf[0] = ((float*)p_r12)[0];
  323. pfTTModel2->u_30.pmodel_union_struct_2[u_r11].pfbuf[1] = ((float*)p_r12)[1];
  324. pfTTModel2->u_30.pmodel_union_struct_2[u_r11].pfbuf[2] = ((float*)p_r12)[2];
  325. }
  326. //loc_21B820
  327. if (pTFTTVertexDescriptor_r6->field_0 == 0x1A)
  328. {
  329. pfTTModel2->u_30.pmodel_union_struct_2[u_r11].pfbuf[0] = (float)(((short*)p_r12)[0]) / 32767.0;
  330. pfTTModel2->u_30.pmodel_union_struct_2[u_r11].pfbuf[1] = (float)(((short*)p_r12)[1]) / 32767.0;
  331. pfTTModel2->u_30.pmodel_union_struct_2[u_r11].pfbuf[2] = (float)(((short*)p_r12)[2]) / 32767.0;
  332. }
  333. }
  334. break;
  335. }
  336. case 10:
  337. {
  338. // LOGE("PlatformMesh_ToModel switch 10 ");
  339. if (sp10)
  340. pfTTModel2->u_38.pibuf[u_r11] = p_r12[0];
  341. break;
  342. }
  343. default:
  344. break;
  345. }
  346. //def_21B662
  347. u_r8 += 1;
  348. u_r9 +=1;
  349. u_r10 += 1;//
  350. }
  351. pTFTTVertexDescriptor_r6++;
  352. }
  353. //LOGE("PlatformMesh_ToModel memcpy ");
  354. memcpy((void*)&pfTTModel2->float32x2_t_54, (void*)&pfTTPlatformMesh1->tPlatformModel_0.tfloat32x2_24, sizeof(float32x2_t));
  355. memcpy((void*)&pfTTModel2->float32x2_t_44, (void*)&pfTTPlatformMesh1->tPlatformModel_0.tfloat32x2_14, sizeof(float32x2_t)*2);
  356. //LOGE("PlatformMesh_ToModel memcpy end ");
  357. return;
  358. }
  359. //---------------------------------------------------------------------------------------------------------------------------------------------
  360. //0021BA38
  361. void PlatformMesh_FromModel(CFTTPlatformMesh *, CFTTPlatformMesh *, TFTTModel *, EMeshModelFlags) {
  362. }
  363. //---------------------------------------------------------------------------------------------------------------------------------------------
  364. /*
  365. 0021B304 PlatformMesh_Free
  366. 0021BA38 PlatformMesh_FromModel
  367. 0021B44A PlatformMesh_DeleteVolatileResources
  368. */