CFTTBatchModelManager.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. #include "CFTTBatchModelManager.h"
  2. #include "CFTTBatchModelBin.h"
  3. #include "CFTTDevice.h"
  4. #include "CFTTGraphicsDevice.h"
  5. #include "CFTTJobQueue.h"
  6. #include "CFTTMaterialManager.h"
  7. #include "CFTTShaderBuiltInConstants.h"
  8. #include "CFTTSkinningTask.h"
  9. #include "TFTTCacheLookup.h"
  10. #include "memctrl.h"
  11. CFTTBatchModelManager *GFXPLAYER_pBatch = nullptr;
  12. struct UseBy_dword_5C9840_Sub {
  13. CFTTJobQueue *p_cfttjobqueue_0;
  14. CFTTBatchModelManager *field_4;
  15. CFTTSkinningTask *field_8;
  16. int field_c;
  17. int field_10;
  18. };
  19. struct UseBy_dword_5C9840 {
  20. int field_0;
  21. int field_4;
  22. int field_8;
  23. int field_c;
  24. int field_10;
  25. UseBy_dword_5C9840_Sub useby_dword_5c9840_sub_14[4];
  26. };
  27. MYSTATIC UseBy_dword_5C9840 dword_5C9840;
  28. MYSTATIC CFTTSkinningTask cfttskinningtask_5AA834[1024];
  29. //0020FEFC
  30. //乱写的
  31. MYSTATIC void sub_20FEFC(CFTTJob *p_cfttjob_r0_arg, void *p_v_r1_arg) {
  32. }
  33. //乱写的
  34. struct TFTTBatchVertexShadow {
  35. int un_0;
  36. };
  37. //乱写的
  38. struct TFTTBatchVertexBump {
  39. int un_0;
  40. };
  41. //乱写的
  42. struct TFTTBatchVertex {
  43. int un_0;
  44. };
  45. //00216940
  46. //乱写的
  47. void ProcessBonedShadowVertsCount(uint ui_r0_arg,
  48. CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
  49. float const *p_f_r2_arg,
  50. TFTTBatchVertexShadow *p_tfttbatchvertexshadow_r3_arg,
  51. void const *p_v_arg_0,
  52. uint ui_arg_4) {
  53. float f_tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] + *p_f_r2_arg +
  54. p_tfttbatchvertexshadow_r3_arg->un_0 + (int)p_v_arg_0 + ui_arg_4;
  55. LOGI("ProcessBonedShadowVertsCount f_tmp: %f", f_tmp);
  56. }
  57. //00210CCC
  58. //乱写的
  59. void ProcessBonedVertsBumpCount(uint ui_r0_arg,
  60. CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
  61. CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
  62. TFTTBatchVertexBump *p_tfttbatchvertexbump_r3_arg,
  63. void const *p_v_arg_0,
  64. uint ui_arg_4,
  65. TUV const *p_tuv_arg_8) {
  66. float f_tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] + p_cfttmatrix32_r2_arg->d[0][0] +
  67. p_tfttbatchvertexbump_r3_arg->un_0 + (int)p_v_arg_0 + ui_arg_4 + p_tuv_arg_8->x;
  68. LOGI("ProcessBonedVertsBumpCount f_tmp: %f", f_tmp);
  69. }
  70. //002122EC
  71. //乱写的
  72. void ProcessBonedVertsCount(uint ui_r0_arg,
  73. CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
  74. CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
  75. TFTTBatchVertex *p_tfttbatchvertex_r3_arg,
  76. void const *p_v_arg_0,
  77. uint ui_arg_4,
  78. TUV const *p_tuv_arg_8) {
  79. float f_tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] + p_cfttmatrix32_r2_arg->d[0][0] +
  80. p_tfttbatchvertex_r3_arg->un_0 + (int)p_v_arg_0 + ui_arg_4 + p_tuv_arg_8->x;
  81. LOGI("ProcessBonedVertsCount f_tmp: %f", f_tmp);
  82. }
  83. //00215E70
  84. //乱写的
  85. void ProcessShadowVertsCount(uint ui_r0_arg,
  86. CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
  87. float const *p_f_r2_arg,
  88. TFTTBatchVertexShadow *p_tfttbatchvertexshadow_r3_arg,
  89. void const *p_v_arg_0,
  90. uint ui_arg_4) {
  91. float tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] + (*p_f_r2_arg) +
  92. p_tfttbatchvertexshadow_r3_arg->un_0 + ((int)p_v_arg_0) + ui_arg_4;
  93. LOGI("ProcessShadowVertsCount %f", tmp);
  94. }
  95. //00214CFC
  96. //乱写的
  97. void ProcessRigidVertsCount(uint ui_r0_arg,
  98. CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
  99. CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
  100. TFTTBatchVertex *p_tfttbatchvertex_r3_arg,
  101. void const *p_v_arg_0,
  102. uint ui_arg_4,
  103. TUV const *p_tuv_arg_8) {
  104. float tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] + p_cfttmatrix32_r2_arg->d[0][0] +
  105. p_tfttbatchvertex_r3_arg->un_0 + ((int)p_v_arg_0) + ui_arg_4 + p_tuv_arg_8->x;
  106. LOGI("ProcessRigidVertsCount %f", tmp);
  107. }
  108. //00213594
  109. //乱写的
  110. void ProcessRigidVertsBumpCount(uint ui_r0_arg,
  111. CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
  112. CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
  113. TFTTBatchVertexBump *p_tfttbatchvertexbump_r3_arg,
  114. void const *p_v_arg_0,
  115. uint ui_arg_4,
  116. TUV const *p_tuv_arg_8) {
  117. float tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] + p_cfttmatrix32_r2_arg->d[0][0] +
  118. p_tfttbatchvertexbump_r3_arg->un_0 + ((int)p_v_arg_0) + ui_arg_4 + p_tuv_arg_8->x;
  119. LOGI("ProcessRigidVertsBumpCount %f", tmp);
  120. }
  121. //-------------------------------------------------------------------------------------------------
  122. //0020F240 //^_- 经过单元测试,功能正常
  123. //0020F2B6 指令顺序不同
  124. //0020F2DE 指令顺序不同
  125. CFTTBatchModelManager::CFTTBatchModelManager(int d_r1_arg, bool b_r2_arg,
  126. int d_r3_arg, unsigned int ud_arg_0,
  127. bool b_arg_4, bool b_arg_8)
  128. : cfttbmmmatrixcache_0(b_arg_8, 0x200, 0) {
  129. }
  130. //-------------------------------------------------------------------------------------------------
  131. //0020F378 //^_^
  132. CFTTBatchModelManager::~CFTTBatchModelManager() {
  133. }
  134. //-------------------------------------------------------------------------------------------------
  135. //0020F414 //^_^
  136. bool CFTTBatchModelManager::PerformFlushOnFull() {
  137. return false;
  138. }
  139. //-------------------------------------------------------------------------------------------------
  140. //0020F450 //^_^
  141. void CFTTBatchModelManager::End() {
  142. LOGE("End%x",this);
  143. }
  144. //-------------------------------------------------------------------------------------------------
  145. //0020F480 //^_^
  146. void CFTTBatchModelManager::Begin() {
  147. LOGE("Begin%x",this);
  148. }
  149. //-------------------------------------------------------------------------------------------------
  150. //0020F4EC //^_-
  151. //单元测试等级: 目测游戏表现
  152. //单元测试内容: 启动游戏到第2关(包括第2关)
  153. //单元测试结果: 正常
  154. //已测试分支:
  155. // 0020F524
  156. // 0020F558
  157. void CFTTBatchModelManager::FlushThreaded() {
  158. }
  159. //-------------------------------------------------------------------------------------------------
  160. //0020F5B4 //^_^
  161. void CFTTBatchModelManager::Flush(int i_r1_arg, bool b_r2_arg, bool b_r3_arg) {
  162. }
  163. //-------------------------------------------------------------------------------------------------
  164. //0020F670 //^_^
  165. void CFTTBatchModelManager::ResetCache(bool b_r1_arg) {
  166. LOGE("%x",this);
  167. LOGE("%x",b_r1_arg);
  168. }
  169. //-------------------------------------------------------------------------------------------------
  170. //0020F68C //^_^
  171. void CFTTBatchModelManager::SetMatrix(CFTTMatrix32 const &p_cfttmatrix32_r1_arg) {
  172. }
  173. //-------------------------------------------------------------------------------------------------
  174. //0020F694 //^_-
  175. //单元测试等级: 目测游戏表现
  176. //单元测试内容: 启动游戏到第2关(包括第2关)
  177. //单元测试结果: 正常
  178. //已测试分支:
  179. // 0020F6D0
  180. // 0020F6FA
  181. // 0020F726
  182. // 0020F72E
  183. // 0020F79E
  184. // 0020F6BC
  185. // 0020F6C6
  186. // 0020F7E4
  187. int CFTTBatchModelManager::AddModelVerts(int i_r1_arg,
  188. CFTTModel *p_cfttmodel_r2_arg,
  189. int i_r3_arg,
  190. CFTTMatrix32 const *p_cfttmatrix32_arg_0,
  191. TUV *p_tuv_arg_4,
  192. TFTTCacheLookup tfttcachelookup_arg_8,
  193. callback_1 callback_arg_10,
  194. CFTTMatrix32 const *p_cfttmatrix32_arg_14) {
  195. return 0;
  196. }
  197. //-------------------------------------------------------------------------------------------------
  198. //0020F8E4 //^_-
  199. //单元测试等级: 目测游戏表现
  200. //单元测试内容: 启动游戏到第2关(包括第2关)
  201. //单元测试结果: 正常
  202. //已测试分支:
  203. // 0020F944
  204. // 0020F97C
  205. // 0020F994
  206. // 0020F9B6
  207. // 0020F91E
  208. // 0020FA14
  209. // 0020FA24
  210. // 0020FA00
  211. // 0020FA04
  212. void CFTTBatchModelManager::SkinVertsBoned(CFTTModel *p_cfttmodel_r1_arg,
  213. int i_r2_arg, float *p_f_r3_arg,
  214. void *p_v_arg_0,
  215. CFTTMatrix32 const *p_cfttmatrix32_arg_4,
  216. CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_8,
  217. CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_10,
  218. TUV *p_tuv_arg_18,
  219. TFTTCacheLookup tfttcachelookup_arg_1c,
  220. callback_1 callback_1_arg_24) {
  221. }
  222. //-------------------------------------------------------------------------------------------------
  223. //0020FA32 //^_^
  224. void CFTTBatchModelManager::CopyVerts(CFTTModel *p_cfttmodel_r1_arg,
  225. int i_r2_arg, float *p_f_r3_arg,
  226. void *p_v_arg_0,
  227. CFTTMatrix32 const *p_cfttmatrix32_arg_4,
  228. CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_8,
  229. CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_10,
  230. TUV *p_tuv_arg_18,
  231. TFTTCacheLookup tfttcachelookup_arg_1c,
  232. callback_1 callback_1_arg_24) {
  233. }
  234. //-------------------------------------------------------------------------------------------------
  235. //0020FAD8 //^_-
  236. //单元测试等级: 目测游戏表现
  237. //单元测试内容: 启动游戏到第2关(包括第2关)
  238. //单元测试结果: 正常
  239. //已测试分支:
  240. // 0020FB00
  241. // 0020FB0A
  242. // 0020FB3C
  243. // 0020FB4E
  244. // 0020FB60
  245. // 0020FCB6
  246. // 0020FCC0
  247. // 0020FCCE
  248. // 0020FCD4
  249. // 0020FCD8
  250. // 0020FB76
  251. // 0020FB80
  252. // 0020FBCC
  253. // 0020FBA2
  254. // 0020FBD8
  255. // 0020FB20
  256. void CFTTBatchModelManager::AddModel(CFTTModel *p_cfttmodel_r1_arg,
  257. CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
  258. TUV *p_tuv_r3_arg, TFTTCacheInstance tfttcacheinstance_arg_0,
  259. int i_arg_4, int i_arg_8,
  260. callback_1 callback_arg_c,
  261. CFTTMatrix32 const *p_cfttmatrix32_arg_10) {
  262. // __android_log_print(ANDROID_LOG_INFO, "sh_log", "CFTTBatchModelManager::AddModel end");
  263. }
  264. //-------------------------------------------------------------------------------------------------
  265. //0020FD4A //^_-
  266. //单元测试等级: 目测游戏表现
  267. //单元测试内容: 启动游戏到第2关(包括第2关)
  268. //单元测试结果: 正常
  269. //已测试分支:
  270. // 0020FD6A
  271. // 0020FD76
  272. // 0020FD8A
  273. // 0020FD90
  274. // 0020FD9C
  275. // 0020FDA4
  276. // 0020FDD6
  277. void CFTTBatchModelManager::AddModelX(CFTTModel *p_cfttmodel_r1_arg,
  278. int i_r2_arg,
  279. CFTTMatrix32 const *p_cfttmatrix32_r3_arg,
  280. TUV *p_tuv_arg_0,
  281. callback_1 callback_1_arg_4,
  282. CFTTMatrix32 const *p_cfttmatrix32_arg_8) {
  283. }
  284. //-------------------------------------------------------------------------------------------------
  285. //0020FE74
  286. void CFTTBatchModelManager::SkinVertsBlend(CFTTModel *, int, float *, void *, CFTTMatrix32 const *, CFTTBMMMatrixCache::StartCount, CFTTBMMMatrixCache::StartCount, TUV *, TFTTCacheLookup, void (*)(void *, CFTTModel *, int, CFTTMatrix32 const *)) {
  287. }
  288. //-------------------------------------------------------------------------------------------------
  289. //0020FE76
  290. void CFTTBatchModelManager::SkinVerts(CFTTModel *, int, float *, void *, CFTTMatrix32 const *, CFTTBMMMatrixCache::StartCount, CFTTBMMMatrixCache::StartCount, TUV *, TFTTCacheLookup, void (*)(void *, CFTTModel *, int, CFTTMatrix32 const *)) {
  291. }
  292. //-------------------------------------------------------------------------------------------------
  293. //0020FE6E //^_^
  294. void CFTTBatchModelManager::SetFlushOnFullCB(pFlushOnFullCBCallBack pFlushOnFullCBCallBack_r1, void *p_v_r2) {
  295. this->field_D4 = pFlushOnFullCBCallBack_r1;
  296. this->field_D8 = p_v_r2;
  297. }
  298. //-------------------------------------------------------------------------------------------------
  299. //0020F494 经过单元测试,功能正常
  300. //^_^-
  301. //0020F4D8处我的代码只取了一次this->field_70,而原始代码取了两次
  302. CFTTBatchModelBin *CFTTBatchModelManager::AddBin(CFTTBatchModelBin *p_cfttbatchmodelbin_r1_arg,
  303. int d_r2_arg,
  304. uint ud_r3_arg,
  305. int d_arg_0, //shader mat id
  306. int d_arg_4, bool b_arg_8, bool b_arg_c) {
  307. return 0;
  308. }
  309. //-------------------------------------------------------------------------------------------------
  310. //目前还没有实现给dword_5C9840.field_4、dword_5C9840.field_8等字段赋值的函数
  311. //接上,编译器优化会导致这些字段没了,所以自己写一个函数防止编译器优化
  312. void TestUseBy_dword_5C9840() {
  313. printf("%p", &dword_5C9840.field_0);
  314. printf("%p", &dword_5C9840.field_4);
  315. printf("%p", &dword_5C9840.field_8);
  316. printf("%p", &dword_5C9840.field_c);
  317. // printf("%p", &dword_5C9840.useby_dword_5c9840_sub_14[0].p_cfttjobqueue_0);
  318. }
  319. //-------------------------------------------------------------------------------------------------
  320. //0020F1EC //^_^
  321. void CFTTBatchModelManager::InitialiseCodePath() {
  322. }
  323. //-------------------------------------------------------------------------------------------------