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