CGfxPitchLines.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. #include "CGfxPitchLines.h"
  2. #include "CCircle2dShader.h"
  3. #include "CFTTMaterialManager.h"
  4. #include "TPitchLineCircle.h"
  5. #include "CGraphicsTexLoadOptions.h"
  6. #include "CFTTRenderToTexture.h"
  7. #include "CFTTGraphicsDevice.h"
  8. #include "FTTSPtr.h"
  9. #include "FTT2D.h"
  10. #include <algorithm>
  11. #include "memctrl.h"
  12. CGfxPitchLines* CGfxPitchLines::ms_pInstance = nullptr;
  13. //-------------------------------------------------------------------------------------------------
  14. //001BCBC4 //^_^ 经过单元测试,功能正常
  15. CGfxPitchLines::CGfxPitchLines() {
  16. }
  17. //-------------------------------------------------------------------------------------------------
  18. //001BCC10 //^_^
  19. CGfxPitchLines::~CGfxPitchLines() {
  20. }
  21. //-------------------------------------------------------------------------------------------------
  22. //001BC1B8 //^_^
  23. void CGfxPitchLines::Init() {
  24. }
  25. //-------------------------------------------------------------------------------------------------
  26. //001BC1DC
  27. void CGfxPitchLines::Initialise() {
  28. tVec_PLP_0.Resize(2666);
  29. for (ushort r1_us = 0; r1_us <= 42; r1_us++) { // loc_1BC2A4
  30. // loc_1BC21A
  31. LOGE("分支1");
  32. float fs0 = (float)r1_us;
  33. float fs2 = fs0 + fs0;
  34. float fs22 = fs0 * 62.0f;
  35. float fs28 = fs2 + -42.0f;
  36. for (ushort r6_us = 0; r6_us < 62; r6_us++) { // loc_1BC292
  37. fs0 = (float)r6_us;
  38. // loc_1BC23C
  39. fs2 = fs0 + fs0;
  40. fs0 = fs22 + fs0;
  41. CGfxPitchLinePatch tPitchLinePatch_C8_sp80;
  42. //memset(&tPitchLinePatch_C8_sp80, 0, sizeof(CGfxPitchLinePatch)); //此行代码是我自己加的,因为后面有部分数据未初始化
  43. tPitchLinePatch_C8_sp80.pCGfxPitchLinePatch_0 = nullptr;
  44. tPitchLinePatch_C8_sp80.pFTTUPtr_Texture_4 = nullptr;
  45. memset(&tPitchLinePatch_C8_sp80.tFTTVector_TPitchLineRect_20, 0, sizeof(FTTVector<TPitchLineRect>));
  46. memset(&tPitchLinePatch_C8_sp80.tFTTVector_TPitchLineCircle_34, 0, sizeof(FTTVector<TPitchLineCircle>));
  47. tPitchLinePatch_C8_sp80.uyTransform_48=0;
  48. tPitchLinePatch_C8_sp80.field_49=0;
  49. tPitchLinePatch_C8_sp80.field_4A=0;
  50. tPitchLinePatch_C8_sp80.field_4B=0;
  51. tPitchLinePatch_C8_sp80.fUV_x_4C=0;
  52. tPitchLinePatch_C8_sp80.tFTTVector_TPitchLineRect_20.field_10 = 2.0f;
  53. tPitchLinePatch_C8_sp80.vec32_Centre_8.float_0 = fs28;
  54. tPitchLinePatch_C8_sp80.tFTTVector_TPitchLineCircle_34.field_10 = 2.0f;
  55. tPitchLinePatch_C8_sp80.vec32_Centre_8.float_4 = 0.0f;
  56. tPitchLinePatch_C8_sp80.vec32_Centre_8.float_8 = fs2 + -61.0f;
  57. tPitchLinePatch_C8_sp80.vec32_Dimensions_14.float_0 = 2.20000005f;
  58. tPitchLinePatch_C8_sp80.vec32_Dimensions_14.float_4 = 0.0f;
  59. tPitchLinePatch_C8_sp80.vec32_Dimensions_14.float_8 = 2.20000005f;
  60. //memset(&tPitchLinePatch_C8_sp80.tFTTVector_TPitchLineRect_20, 0, sizeof(FTTVector<TPitchLineRect>));
  61. // memset(&tPitchLinePatch_C8_sp80.tFTTVector_TPitchLineCircle_34, 0, sizeof(FTTVector<TPitchLineCircle>));
  62. //tPitchLinePatch_C8_sp80.uyTransform_48 = 0;
  63. tVec_PLP_0.list_0[(uint)fs0] = std::move(tPitchLinePatch_C8_sp80);
  64. } // 001BC2A0
  65. }
  66. CFTTVector32 vec32_1;
  67. vec32_1.float_0 = -1212416.0f;
  68. vec32_1.float_4 = 0.0f;
  69. vec32_1.float_8 = 0.0f;
  70. CFTTVector32 vec32_2;
  71. vec32_2.float_0 = 1212416.0f;
  72. vec32_2.float_4 = 0.0f;
  73. vec32_2.float_8 = 0.0f;
  74. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC2DE
  75. vec32_1.float_0 = -1212416.0f;
  76. vec32_1.float_4 = 0.0f;
  77. vec32_1.float_8 = 1802240.0f;
  78. vec32_2.float_0 = -1212416.0f;
  79. vec32_2.float_4 = 0.0f;
  80. vec32_2.float_8 = -1802240.0f;
  81. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC2FC
  82. vec32_1.float_0 = 1212416.0f;
  83. vec32_1.float_4 = 0.0f;
  84. vec32_1.float_8 = 1802240.0f;
  85. vec32_2.float_0 = 1212416.0f;
  86. vec32_2.float_4 = 0.0f;
  87. vec32_2.float_8 = -1802240.0f;
  88. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC316
  89. vec32_1.float_0 = -1212416.0f;
  90. vec32_1.float_4 = 0.0f;
  91. vec32_1.float_8 = -1802240.0f;
  92. vec32_2.float_0 = 1212416.0f;
  93. vec32_2.float_4 = 0.0f;
  94. vec32_2.float_8 = -1802240.0f;
  95. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC330
  96. vec32_1.float_0 = -1212416.0f;
  97. vec32_1.float_4 = 0.0f;
  98. vec32_1.float_8 = 1802240.0f;
  99. vec32_2.float_0 = 1212416.0f;
  100. vec32_2.float_4 = 0.0f;
  101. vec32_2.float_8 = 1802240.0f;
  102. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC348
  103. vec32_1.float_0 = -720896.0f;
  104. vec32_1.float_4 = 0.0f;
  105. vec32_1.float_8 = -1802240.0f;
  106. vec32_2.float_0 = -720896.0f;
  107. vec32_2.float_4 = 0.0f;
  108. vec32_2.float_8 = -1212416.0f;
  109. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC35E
  110. vec32_1.float_0 = 720896.0f;
  111. vec32_1.float_4 = 0.0f;
  112. vec32_1.float_8 = -1802240.0f;
  113. vec32_2.float_0 = 720896.0f;
  114. vec32_2.float_4 = 0.0f;
  115. vec32_2.float_8 = -1212416.0f;
  116. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC376
  117. vec32_1.float_0 = -720896.0f; // 1
  118. vec32_1.float_4 = 0.0f;
  119. vec32_1.float_8 = -1212416.0f;
  120. vec32_2.float_0 = 720896.0f;
  121. vec32_2.float_4 = 0.0f;
  122. vec32_2.float_8 = -1212416.0f;
  123. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC38C
  124. vec32_1.float_0 = -327680.0f;
  125. vec32_1.float_4 = 0.0f;
  126. vec32_1.float_8 = -1802240.0f;
  127. vec32_2.float_0 = -327680.0f;
  128. vec32_2.float_4 = 0.0f;
  129. vec32_2.float_8 = -1605632.0f;
  130. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC3A4
  131. vec32_1.float_0 = 327680.0f;
  132. vec32_1.float_4 = 0.0f;
  133. vec32_1.float_8 = -1802240.0f;
  134. vec32_2.float_0 = 327680.0f;
  135. vec32_2.float_4 = 0.0f;
  136. vec32_2.float_8 = -1605632.0f;
  137. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC3BC
  138. vec32_1.float_0 = -327680.0f;
  139. vec32_1.float_4 = 0.0f;
  140. vec32_1.float_8 = -1605632.0f;
  141. vec32_2.float_0 = 327680.0f;
  142. vec32_2.float_4 = 0.0f;
  143. vec32_2.float_8 = -1605632.0f;
  144. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC3D2
  145. vec32_1.float_0 = -720896.0f;
  146. vec32_1.float_4 = 0.0f;
  147. vec32_1.float_8 = 1802240.0f;
  148. vec32_2.float_0 = -720896.0f;
  149. vec32_2.float_4 = 0.0f;
  150. vec32_2.float_8 = 1212416.0f;
  151. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC3EC
  152. vec32_1.float_0 = 720896.0f;
  153. vec32_1.float_4 = 0.0f;
  154. vec32_1.float_8 = 1802240.0f;
  155. vec32_2.float_0 = 720896.0f;
  156. vec32_2.float_4 = 0.0f;
  157. vec32_2.float_8 = 1212416.0f;
  158. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC404
  159. vec32_1.float_0 = -720896.0f;
  160. vec32_1.float_4 = 0.0f;
  161. vec32_1.float_8 = 1212416.0f;
  162. vec32_2.float_0 = 720896.0f;
  163. vec32_2.float_4 = 0.0f;
  164. vec32_2.float_8 = 1212416.0f;
  165. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC41C
  166. vec32_1.float_0 = -327680.0f;
  167. vec32_1.float_4 = 0.0f;
  168. vec32_1.float_8 = 1802240.0f;
  169. vec32_2.float_0 = -327680.0f;
  170. vec32_2.float_4 = 0.0f;
  171. vec32_2.float_8 = 1605632.0f;
  172. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC434
  173. vec32_1.float_0 = 327680.0f;
  174. vec32_1.float_4 = 0.0f;
  175. vec32_1.float_8 = 1802240.0f;
  176. vec32_2.float_0 = 327680.0f;
  177. vec32_2.float_4 = 0.0f;
  178. vec32_2.float_8 = 1605632.0f;
  179. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC44C
  180. vec32_1.float_0 = -327680.0f;
  181. vec32_1.float_4 = 0.0f;
  182. vec32_1.float_8 = 1605632.0f;
  183. vec32_2.float_0 = 327680.0f;
  184. vec32_2.float_4 = 0.0f;
  185. vec32_2.float_8 = 1605632.0f;
  186. AddRect(vec32_1, vec32_2, 4300.0f, 1, 16384.0f); // 001BC44C
  187. vec32_1.float_0 = -1343488.0f;
  188. vec32_1.float_4 = 0.0f;
  189. vec32_1.float_8 = 425984.0f;
  190. vec32_2.float_0 = -1245184.0f;
  191. vec32_2.float_4 = 0.0f;
  192. vec32_2.float_8 = 425984.0f;
  193. AddRect(vec32_1, vec32_2, 6450.0f, 3, 16384.0f); // 001BC486
  194. vec32_1.float_0 = -1343488.0f;
  195. vec32_1.float_4 = 0.0f;
  196. vec32_1.float_8 = 32768.0f;
  197. vec32_2.float_0 = -1245184.0f;
  198. vec32_2.float_4 = 0.0f;
  199. vec32_2.float_8 = 32768.0f;
  200. AddRect(vec32_1, vec32_2, 6450.0f, 3, 16384.0f); // 001BC4A4
  201. vec32_1.float_0 = -1245184.0f;
  202. vec32_1.float_4 = 0.0f;
  203. vec32_1.float_8 = 32768.0f;
  204. vec32_2.float_0 = -1245184.0f;
  205. vec32_2.float_4 = 0.0f;
  206. vec32_2.float_8 = 425984.0f;
  207. AddRect(vec32_1, vec32_2, 6450.0f, 7, 16384.0f); // 001BC4BE
  208. vec32_1.float_0 = -1343488.0f;
  209. vec32_1.float_4 = 0.0f;
  210. vec32_1.float_8 = -425984.0f;
  211. vec32_2.float_0 = -1245184.0f;
  212. vec32_2.float_4 = 0.0f;
  213. vec32_2.float_8 = -425984.0f;
  214. AddRect(vec32_1, vec32_2, 6450.0f, 3, 16384.0f); // 001BC4D8
  215. vec32_1.float_0 = -1343488.0f;
  216. vec32_1.float_4 = 0.0f;
  217. vec32_1.float_8 = -32768.0f;
  218. vec32_2.float_0 = -1245184.0f;
  219. vec32_2.float_4 = 0.0f;
  220. vec32_2.float_8 = -32768.0f;
  221. AddRect(vec32_1, vec32_2, 6450.0f, 3, 16384.0f); // 001BC4F6
  222. vec32_1.float_0 = -1245184.0f;
  223. vec32_1.float_4 = 0.0f;
  224. vec32_1.float_8 = -425984.0f;
  225. vec32_2.float_0 = -1245184.0f;
  226. vec32_2.float_4 = 0.0f;
  227. vec32_2.float_8 = -32768.0f;
  228. AddRect(vec32_1, vec32_2, 6450.0f, 7, 16384.0f); // 001BC50E
  229. vec32_1.float_0 = 0.0f;
  230. vec32_1.float_4 = 0.0f;
  231. vec32_1.float_8 = 0.0f;
  232. AddCircle(vec32_1, 0.0f, 4096.0f, 0.0f, -1.0f); // 001BC52E
  233. vec32_1.float_0 = 0.0f;
  234. vec32_1.float_4 = 0.0f;
  235. vec32_1.float_8 = -1409024.0f;
  236. AddCircle(vec32_1, 0.0f, 4096.0f, 0.0f, -1.0f); // 001BC542
  237. vec32_1.float_0 = 0.0f;
  238. vec32_1.float_4 = 0.0f;
  239. vec32_1.float_8 = 1409024.0f;
  240. AddCircle(vec32_1, 0.0f, 4096.0f, 0.0f, -1.0f); // 001BC554
  241. vec32_1.float_0 = 0.0f;
  242. vec32_1.float_4 = 0.0f;
  243. vec32_1.float_8 = -1409024.0f;
  244. AddCircle(vec32_1, 325530.0f, 329830.0f, 0.643501163f, 1.854590416f); // 001BC56E
  245. vec32_1.float_0 = 0.0f;
  246. vec32_1.float_4 = 0.0f;
  247. vec32_1.float_8 = 1409024.0f;
  248. AddCircle(vec32_1, 325530.0f, 329830.0f, 3.785093784f, 1.854590416f); // 001BC582
  249. vec32_1.float_0 = 0.0f;
  250. vec32_1.float_4 = 0.0f;
  251. vec32_1.float_8 = 0.0f;
  252. AddCircle(vec32_1, 325530.0f, 329830.0f, 0.0f, -1.0f); // 001BC594
  253. vec32_1.float_0 = -1212416.0f;
  254. vec32_1.float_4 = 0.0f;
  255. vec32_1.float_8 = -1802240.0f;
  256. AddCircle(vec32_1, 30618.0f, 34918.0f, 0.0f, 1.570796371f); // 001BC5B2
  257. vec32_1.float_0 = 1212416.0f;
  258. vec32_1.float_4 = 0.0f;
  259. vec32_1.float_8 = -1802240.0f;
  260. AddCircle(vec32_1, 30618.0f, 34918.0f, 1.570796371f, 1.570796371f); // 001BC5C6
  261. vec32_1.float_0 = -1212416.0f;
  262. vec32_1.float_4 = 0.0f;
  263. vec32_1.float_8 = 1802240.0f;
  264. AddCircle(vec32_1, 30618.0f, 34918.0f, 4.712388992f, 1.570796371f); // 001BC5DC
  265. vec32_1.float_0 = 1212416.0f;
  266. vec32_1.float_4 = 0.0f;
  267. vec32_1.float_8 = 1802240.0f;
  268. AddCircle(vec32_1, 30618.0f, 34918.0f, 3.141592741f, 1.570796371f); // 001BC5F0
  269. // 001BC5F2
  270. for (int ir6 = 0; ir6 != 2666; ir6++) { // loc_1BC720
  271. for (uchar r4_uc = 0; r4_uc < tVec_Rect_28.use_count_C; r4_uc++) { // loc_1BC648
  272. // loc_1BC606
  273. tVec_PLP_0.list_0[ir6].AddRect(tVec_Rect_28.list_0[r4_uc]); // 001BC642
  274. }
  275. // 001BC652
  276. for (uchar r4_uc = 0; r4_uc < tVec_Circle_3C.use_count_C; r4_uc++) { // loc_1BC714
  277. // loc_1BC6D8
  278. /// !!!! 注意这里的TPitchLineCircle 析构函数应为空 否则崩溃
  279. tVec_PLP_0.list_0[ir6].AddCircle(tVec_Circle_3C.list_0[r4_uc]); // 001BC70E
  280. }
  281. }
  282. // 001BC72A
  283. for (int r4_i = 0; r4_i != 2666; r4_i++) { // loc_1BC77A
  284. // loc_1BC738
  285. if (tVec_PLP_0.list_0[r4_i].pCGfxPitchLinePatch_0 == nullptr) {
  286. for (int ir6 = r4_i + 1; ir6 != 2666; ir6++) { // loc_1BC770
  287. // loc_1BC74E
  288. if (tVec_PLP_0.list_0[ir6].pCGfxPitchLinePatch_0 == nullptr) {
  289. // 001BC75C
  290. if (tVec_PLP_0.list_0[r4_i].TestDuplicate(&tVec_PLP_0.list_0[ir6])) {
  291. // 001BC762
  292. LOGE("分支5");
  293. tVec_PLP_0.list_0[ir6].pCGfxPitchLinePatch_0 = &tVec_PLP_0.list_0[r4_i];
  294. }
  295. }
  296. }
  297. }
  298. }
  299. // 001BC77E
  300. CFTTTexLoadOptions opt_C8 = g_tGlobalTexLoadOptions.mTexLoadOptions_4;
  301. opt_C8.eMinFilter_18 = EFTTTex_MinFilter_6;
  302. CFTTTexture* r5_pTexture = CFTTTexture::LoadName("data/models/pitch/lineatlas.png", opt_C8, true);
  303. // 001BC7B0
  304. if (pTexture_Atlas_58 != nullptr) {
  305. delete pTexture_Atlas_58;
  306. }
  307. // loc_1BC7BE
  308. pTexture_Atlas_58 = r5_pTexture;
  309. for (int r4_i = 0; r4_i != 2666; r4_i++) { // loc_1BC7D6
  310. // loc_1BC7C8
  311. if (tVec_PLP_0.list_0[r4_i].pCGfxPitchLinePatch_0 != nullptr) {
  312. tVec_PLP_0.list_0[r4_i].pCGfxPitchLinePatch_0->CheckBlank();
  313. } else {
  314. tVec_PLP_0.list_0[r4_i].CheckBlank();
  315. }
  316. }
  317. // 001BC7DE
  318. uint r6_count = 0;
  319. for (int ir2 = 0; ir2 != 2666; ir2++) { // loc_1BC7FC
  320. // loc_1BC7EA
  321. if (tVec_PLP_0.list_0[ir2].pCGfxPitchLinePatch_0 == nullptr) {
  322. // 001BC7F0
  323. LOGE("分支9");
  324. r6_count += (tVec_PLP_0.list_0[ir2].bIsBlank_5C ^ 1);
  325. } // loc_1BC7F8 +
  326. }
  327. // 001BC800
  328. int r5_count = 0;
  329. for (int ir0 = 0; ir0 != 2666; ir0++) { // loc_1BC81E
  330. // loc_1BC808
  331. if (tVec_PLP_0.list_0[ir0].pCGfxPitchLinePatch_0 == nullptr) {
  332. r5_count += tVec_PLP_0.list_0[ir0].bIsBlank_5C;
  333. } else {
  334. r5_count += tVec_PLP_0.list_0[ir0].pCGfxPitchLinePatch_0->bIsBlank_5C;
  335. }
  336. }
  337. // 001BC822
  338. if (pTexture_Atlas_58 == nullptr) {
  339. // 001BC828
  340. for (int ir4 = 0; ir4 != 2666; ir4++) { // loc_1BC83C
  341. // loc_1BC82C
  342. if (tVec_PLP_0.list_0[ir4].pCGfxPitchLinePatch_0 == nullptr) {
  343. tVec_PLP_0.list_0[ir4].Render();
  344. }
  345. }
  346. }
  347. // loc_1BC840
  348. for (int ir4 = 0; ir4 != 2666; ir4++) { // loc_1BC850
  349. // loc_1BC844
  350. LOGE("分支13");
  351. tVec_PLP_0.list_0[ir4].CheckBlank();
  352. }
  353. // 001BC854
  354. float fs16 = (float)r6_count;
  355. float fs0 = ceilf(sqrtf(fs16)); // 001BC87C
  356. uint r4_ui = (uint)fs0;
  357. //001BC880
  358. float fs18 = r4_ui;
  359. fs16 = ceilf(fs16 / fs18);
  360. // 001BC89C
  361. fs0 = ceilf(Log2(fs18 * 72.0f));
  362. uint r6_i = fs0;
  363. // 001BC8BA
  364. float fs2 = ceilf(Log2(fs16 * 72.0f));
  365. uint r2_ui = 1 << r6_i;
  366. //sp20=r6_i
  367. //sp1c=r2_ui
  368. uint r10_ui = (uint)fs2;
  369. fs0 = (float)r2_ui;
  370. float fs4 = 64.0f / fs0; // 001BC90A VDIV.F32 S4, S16, S0
  371. float fs12 = fs4 *0.0909090936f;
  372. float fs24 = 4.0f / fs0;
  373. uint r0_i = 1 << (uint)fs2; // 001BC91A
  374. //sp18=r0_i
  375. fs2 = (float)r0_i;
  376. float fs20 = fs12 * 0.5f;
  377. float fs26 = 72.0f / fs0;
  378. float fs6 = 64.0f / fs2;
  379. float fs8 = fs6 * 0.0909090936f; // 001BC934 VMUL.F32 S8, S6, S8
  380. float fs28 = 4.0f / fs2;
  381. float fs22 = fs8 * 0.5f;
  382. float fs30 = 72.0f / fs2; // 001BC940 VDIV.F32 S30, S30, S2
  383. fs0 = fs20 + fs20;
  384. fs2 = fs22 + fs22;
  385. float fs17 = fs4 - fs0;
  386. float fs19 = fs6 - fs2;
  387. //LOGE("001BC954");
  388. // 001BC954
  389. int r7_i=0;
  390. for (uint r6_ui = 0; r6_ui != 2666; r6_ui++) { // loc_1BC9B8
  391. // loc_1BC956
  392. if (tVec_PLP_0.list_0[r6_ui].pCGfxPitchLinePatch_0 == nullptr &&
  393. tVec_PLP_0.list_0[r6_ui].bIsBlank_5C == false) {
  394. // 001BC968
  395. LOGE("分支14");
  396. uint r0_ui = r7_i / r4_ui;
  397. uint r1_ui = r7_i - (r0_ui * r4_ui);
  398. fs0 = (float)r0_ui;
  399. fs4 = fs28;
  400. fs2 = (float)r1_ui;
  401. fs4 += fs30 * fs0;
  402. fs0 = fs24;
  403. fs0 += fs26 * fs2;
  404. fs2 = fs22 + fs4;
  405. fs0 = fs20 + fs0; // 001BC99A VADD.F32 S0, S20, S0
  406. fs4 = fs19 + fs2;
  407. fs6 = fs17 + fs0;
  408. tVec_PLP_0.list_0[r6_ui].fUV_x_4C = fs0;
  409. tVec_PLP_0.list_0[r6_ui].fUV_y_50 = fs6;
  410. tVec_PLP_0.list_0[r6_ui].fUV_z_54 = fs2;
  411. tVec_PLP_0.list_0[r6_ui].fUV_w_58 = fs4;
  412. r7_i++;
  413. }
  414. }
  415. // 001BC9BE
  416. if (pTexture_Atlas_58 == nullptr) {
  417. // 001BC9C8
  418. if (r6_i > r10_ui) {
  419. LOGE("分支15");
  420. r10_ui = r6_i;
  421. }
  422. // 001BC9FA
  423. CFTTRenderToTexture* r1_pRendTex = g_pGraphicsDevice->createRenderToTexture(EFTTTexFormat_2,
  424. r2_ui,
  425. r0_i,
  426. r10_ui + 1,
  427. 0,
  428. EFTTRTTZBufMode_1,
  429. false,
  430. EFTTTextureType_0,
  431. 1);
  432. FTTSPtr<CFTTRenderToTexture> var_124_sp24(r1_pRendTex);
  433. var_124_sp24.pType_0->BeginRenderToTexture(g_tBlankCanvasClearSettings);
  434. FTT2D_Begin();
  435. FTT2D_SetDefaultMatBlend(EFTT2D_Blend_0);
  436. int r7_i=0;
  437. // 001BCA1C
  438. for (uint r6_i = 0; r6_i < 2666; r6_i++) { // loc_1BCABC
  439. // loc_1BCA38
  440. if (tVec_PLP_0.list_0[r6_i].pCGfxPitchLinePatch_0 != nullptr || tVec_PLP_0.list_0[r6_i].bIsBlank_5C)
  441. continue;
  442. LOGE("分支16");
  443. // 001BCA48
  444. FTT2D_SetTexture(tVec_PLP_0.list_0[r6_i].pFTTUPtr_Texture_4.pType_0, 0);
  445. uint r0_ui = r7_i / r4_ui;
  446. uint r1_ui = (r7_i++) - (r0_ui * r4_ui);
  447. uint r2_ui = 1 | (r0_ui << 1);
  448. float fs0 = (float)r2_ui;
  449. float fs4 = (float)r0_ui;
  450. r2_ui = 1 | (r1_ui << 1);
  451. float fs6 = (float)r1_ui;
  452. float fs2 = (float)r2_ui;
  453. fs2 = fs2 * 4.0f;
  454. fs0 += fs4 * 64.0f; // 001BCAA4 VMLA.F32 S0, S4, S16
  455. fs2 += fs6 * 64.0f;
  456. /*
  457. void FTT2D_DrawTexturedRect(float f1, float f2, float f3, float f4,
  458. uint argb5,
  459. float f6, float f7, float f8) {
  460. */
  461. FTT2D_DrawTexturedRect(fs2, fs0, 64.0f, 64.0f,
  462. 0xFFFFFFFF,
  463. 0.0f,
  464. -999999.0f,
  465. -999999.0f);
  466. }
  467. // 001BCAC2
  468. FTT2D_End();
  469. // 001BCACE
  470. CFTTTexture* r6_pTexture = var_124_sp24.pType_0->EndRenderToTexture(EFTTRTTCopyMode_2);
  471. if (pTexture_Atlas_58 != nullptr) {
  472. LOGE("分支17");
  473. delete pTexture_Atlas_58;
  474. }
  475. // loc_1BCADE
  476. pTexture_Atlas_58 = r6_pTexture;
  477. r6_pTexture->SetMinFilter(EFTTTex_MinFilter_6);
  478. }
  479. // loc_1BCAF2
  480. for (int r4_i = 0; r4_i < 2666; r4_i++) { // loc_1BCB02
  481. // loc_1BCAF6
  482. LOGE("分支18");
  483. tVec_PLP_0.list_0[r4_i].Cleanup();
  484. }
  485. // 001BCB06
  486. tVec_Rect_28.Clear(true);
  487. // 001BCB10
  488. tVec_Circle_3C.Clear(true);
  489. // 001BCB1A
  490. field_50 = r5_count;
  491. field_54 = (uint)(2666.0f - (float)r5_count);
  492. tVec_pPLP_14.Reserve(r5_count);
  493. // 001BCB42
  494. CGfxPitchLinePatch* var_124;
  495. CGfxPitchLinePatch* r1_patch;
  496. for (int r4_i = 0; r4_i != 2666; r4_i++) { // loc_1BCB68
  497. // loc_1BCB48
  498. r1_patch = tVec_PLP_0.list_0[r4_i].pCGfxPitchLinePatch_0;
  499. if (r1_patch == nullptr) {
  500. r1_patch = &tVec_PLP_0.list_0[r4_i];
  501. }
  502. if (r1_patch->bIsBlank_5C) {
  503. // 001BCB5C
  504. var_124 = &tVec_PLP_0.list_0[r4_i];
  505. tVec_pPLP_14.Insert(var_124);
  506. }
  507. }
  508. }
  509. //-------------------------------------------------------------------------------------------------
  510. //001BCB94 //^_^
  511. void CGfxPitchLines::Shutdown() {
  512. }
  513. //-------------------------------------------------------------------------------------------------
  514. //001BCBB4 //^_^
  515. CGfxPitchLines* CGfxPitchLines::Get() {
  516. return CGfxPitchLines::ms_pInstance;
  517. }
  518. //-------------------------------------------------------------------------------------------------
  519. //001BCEA4
  520. void CGfxPitchLines::AddRect(CFTTVector32 a1, CFTTVector32 a2, float a3, uchar a4, float a5) {
  521. LOGE("CGfxPitchLines::AddRect%p%x%x%x %x%x%x %x%x%x",this,a1.float_0,a1.float_4,a1.float_8,
  522. a2.float_0,a2.float_4,a2.float_8,a3,a4,a5);
  523. }
  524. //-------------------------------------------------------------------------------------------------
  525. //001BD0D8
  526. void CGfxPitchLines::AddCircle(CFTTVector32 a1, float a2, float a3, float a4, float a5) {
  527. LOGE("CGfxPitchLines::AddCircle%p%x%x%x %x%x%x%x",this,a1.float_0,a1.float_4,a1.float_8,
  528. a2,a3,a4,a5);
  529. }
  530. //-------------------------------------------------------------------------------------------------
  531. //001BD5E6 //^_^
  532. int CGfxPitchLines::GetMaterial() {
  533. return dMatId_Circle2dShader_5C;
  534. }
  535. //-------------------------------------------------------------------------------------------------
  536. //001BD5EA //^_^
  537. CFTTTexture* CGfxPitchLines::GetAtlas() {
  538. return pTexture_Atlas_58;
  539. }
  540. //-------------------------------------------------------------------------------------------------
  541. //001BD5F0 //^_^
  542. CGfxPitchLinePatch* CGfxPitchLines::GetPatch(uint u1, uint u2) {
  543. return 0;
  544. }
  545. //-------------------------------------------------------------------------------------------------
  546. //001BD620 //^_^
  547. CGfxPitchLinePatch* CGfxPitchLines::GetBlank(uint dIndex) {
  548. return 0;
  549. }
  550. //-------------------------------------------------------------------------------------------------