123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906 |
- #include "CFTTBatchModelManager.h"
- #include <arm_neon.h>
- #include "CFTTBatchModelBin.h"
- #include "CFTTDevice.h"
- #include "CFTTGraphicsDevice.h"
- #include "CFTTJobQueue.h"
- #include "CFTTMaterialManager.h"
- #include "CFTTMatrix32.h"
- #include "CFTTShaderBuiltInConstants.h"
- #include "CFTTSkinningTask.h"
- #include "TFTTCacheLookup.h"
- #include "global_func.h"
- #include "memctrl.h"
- CFTTBatchModelManager *GFXPLAYER_pBatch = nullptr;
- struct UseBy_dword_5C9840_Sub {
- CFTTJobQueue *p_cfttjobqueue_0;
- CFTTBatchModelManager *field_4;
- CFTTSkinningTask *field_8;
- int field_c;
- int field_10;
- };
- struct UseBy_dword_5C9840 {
- int field_0;
- int field_4;
- int field_8;
- int field_c;
- int field_10;
- UseBy_dword_5C9840_Sub useby_dword_5c9840_sub_14[4];
- };
- MYSTATIC UseBy_dword_5C9840 dword_5C9840;
- MYSTATIC CFTTSkinningTask cfttskinningtask_5AA834[1024];
- // 0020FEFC
- //乱写的
- MYSTATIC void sub_20FEFC(CFTTJob *p_cfttjob_r0_arg, void *p_v_r1_arg) {}
- //乱写的
- struct TFTTBatchVertexShadow {
- int un_0;
- };
- //乱写的
- // 0x20 00211460 080 ADDS R2, #0x20
- struct TFTTBatchVertexBump {
- float f_0;
- // 002111DC
- float f_4;
- // 00211224
- float f_8;
- // 0021126C
- short us_C;
- // 002112BC
- short us_E;
- // 00211302
- short us_10;
- // 00211348
- short us_12;
- // 没有看到给这儿赋值的地方
- short us_14;
- // 00211444
- short us_16;
- // 0021145E
- short us_18;
- // 0021138E
- short us_1A;
- // 002113D4
- short us_1C;
- // 0021141A
- short us_1E;
- // 没有看到给这儿赋值的地方,可能仅仅是为了内存对齐
- };
- // 0x14 00211E24 由此处确定
- struct VertBone {
- short us_0;
- short us_2;
- short us_4;
- short us_6;
- short us_8;
- short us_A;
- short us_C;
- short us_E;
- short us_10;
- short us_12;
- };
- struct VertNorTex {
- short us_0;
- short us_2;
- short us_4;
- short us_6;
- short us_8;
- short us_A;
- short us_C;
- short us_E;
- short us_10;
- short us_12;
- };
- struct VertNorTexTan : public VertNorTex {
- short us_14;
- short us_16;
- short us_18;
- ushort us_1A;
- };
- // 0x20
- struct VertNorTexBone : public VertBone {
- // VertBone tVerBone_0;
- short us_14;
- short us_16;
- short us_18;
- ushort us_1A;
- uchar uc_1C;
- // 00210FB2 LDRB.W R4, [R9,#0x1C]
- uchar uc_1D;
- // 0021108A LDRB.W R3, [R9,#0x1D]
- uchar uc_1E;
- // 00211086 LDRB.W R5, [R9,#0x1E]
- uchar uc_1F;
- // 00210FD6 LDRB.W R1, [R9,#0x1F]
- };
- // 0x28 00210FA0 由此处确定
- struct VertNorTexTanBone : public VertNorTexBone {
- // VertNorTexBone tVerNorTexBone_0;
- ushort us_20;
- //此处一定是ushort
- ushort us_22;
- ushort us_24;
- ushort us_26;
- };
- // VertNorTexTanBone
- // template <typename T>
- // void ProcessRigidVertsBumpCount(CFTTMatrix32 const *pMatrix320,
- // CFTTMatrix32 const *pMatrix321,
- // TFTTBatchVertexBump *pVertexbump2, T const
- // *pT3, uint ui4, TUV const *pTUV5) {
- // if (g_bNeonAvailable) {
- // // loc_2137D0
- // while (ui4) {
- // // loc_213686
- // }
- // return;
- // } else {
- // // loc_2137DA
- // // loc_213AE4
- // for(int r9_i=0;r9_i!=ui4;r9_i++) {
- // // loc_2137F8
- // float s2_f = pT3[r9_i].us_2;
- // float s6_f = pT3[r9_i].us_4;
- // float s12_f = pT3[r9_i].us_0;
- // s2_f = pMatrix320->d[1][0] * s2_f;
- // float s4_f = pMatrix320->d[0][0];
- // float s8_f = pMatrix320->d[2][0];
- // float s10_f = pMatrix320->d[3][0];
- // s2_f += s4_f * s12_f;
- // s2_f += s8_f * s6_f;
- // s2_f += s10_f;
- // pVertexbump2[r9_i].f_0 = s2_f;
- // s2_f = pT3[r9_i].us_2;
- // s6_f = pT3[r9_i].us_4;
- // s4_f = pMatrix320->d[0][1];
- // s8_f = pMatrix320->d[2][1];
- // s10_f = pMatrix320->d[3][1];
- // s2_f = pMatrix320->[1][1] * s2_f;
- // s2_f += s4_f * s12_f;
- // s2_f += s8_f * s6_f;
- // s2_f += s10_f;
- // pVertexbump2[r9_i].f_4 = s2_f;
- // // 00213896
- // s2_f = pT3[r9_i].us_2;
- // s6_f = pT3[r9_i].us_4;
- // s4_f = pMatrix320->d[0][2];
- // s8_f = pMatrix320->d[2][2];
- // s10_f = pMatrix320->d[3][2];
- // s2_f = pMatrix320->[1][2] * s2_f;
- // s2_f += s4_f * s12_f;
- // s2_f += s8_f * s6_f;
- // s2_f += s10_f;
- // pVertexbump2[r9_i].f_8 = s2_f;
- // // 002138DE
- // s2_f = pT3[r9_i].us_A;
- // s10_f = pT3[r9_i].us_8;
- // s6_f = pT3[r9_i].us_C;
- // s4_f = pMatrix321->d[0][0];
- // s8_f = pMatrix321->d[2][0];
- // s2_f = pMatrix321->d[1][0] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertexbump2[r9_i].us_C = s2_f;
- // // 00213926
- // s2_f = pT3[r9_i].us_A;
- // s10_f = pT3[r9_i].us_8;
- // s6_f = pT3[r9_i].us_C;
- // s4_f = pMatrix321->d[0][1];
- // s8_f = pMatrix321->d[2][1];
- // s2_f = pMatrix321->d[1][1] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertexbump2[r9_i].us_E = s2_f;
- // //0021396E
- // s2_f = pT3[r9_i].us_A;
- // s10_f = pT3[r9_i].us_8;
- // s6_f = pT3[r9_i].us_C;
- // s4_f = pMatrix321->d[0][2];
- // s8_f = pMatrix321->d[2][2];
- // s2_f = pMatrix321->d[1][2] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertexbump2[r9_i].us_10 = s2_f;
- // //002139B6
- // s2_f = pT3[r9_i].us_16;
- // s10_f = pT3[r9_i].us_14;
- // s6_f = pT3[r9_i].us_18;
- // s4_f = pMatrix321->d[0][0];
- // s8_f = pMatrix321->d[2][0];
- // s2_f = pMatrix321->d[1][0] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertexbump2[r9_i].us_18 = s2_f;
- // //002139FE
- // s2_f = pT3[r9_i].us_16;
- // s10_f = pT3[r9_i].us_14;
- // s6_f = pT3[r9_i].us_18;
- // s4_f = pMatrix321->d[0][1];
- // s8_f = pMatrix321->d[2][1];
- // s2_f = pMatrix321->d[1][1] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertexbump2[r9_i].us_1A = s2_f;
- // //00213A46
- // s2_f = pT3[r9_i].us_16;
- // s10_f = pT3[r9_i].us_14;
- // s6_f = pT3[r9_i].us_18;
- // s4_f = pMatrix321->d[0][2];
- // s8_f = pMatrix321->d[2][2];
- // s2_f = pMatrix321->d[1][2] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertexbump2[r9_i].us_1C = s2_f;
- // if(pTUV5){
- // //00213A90
- // pVertexbump2[r9_i].us_14= pTUV5[r9_i].x*32767.0f;
- // pVertexbump2[r9_i].us_16= pTUV5[r9_i].y*32767.0f;
- // }else{
- // //loc_213AB4
- // pVertexbump2[r9_i].us_14= pT3[r9_i].us_10;
- // pVertexbump2[r9_i].us_16= pT3[r9_i].us_12;;
- // }
- // }
- // }
- // }
- // VertBone
- template <typename T>
- void ProcessRigidVertsBumpCount(CFTTMatrix32 const *pMatrix320,
- CFTTMatrix32 const *pMatrix321,
- TFTTBatchVertexBump *pVertexbump2, T const *pT3,
- uint ui4, TUV const *pTUV5) {
- for (int r9_i = 0; r9_i != ui4; r9_i++) {
- float s2_f = pT3[r9_i].us_2;
- float s6_f = pT3[r9_i].us_4;
- float s12_f = pT3[r9_i].us_0;
- s2_f = pMatrix320->d[1][0] * s2_f;
- float s4_f = pMatrix320->d[0][0];
- float s8_f = pMatrix320->d[2][0];
- float s10_f = pMatrix320->d[3][0];
- s2_f += s4_f * s12_f;
- s2_f += s8_f * s6_f;
- s2_f += s10_f;
- pVertexbump2[r9_i].f_0 = s2_f;
- s2_f = pT3[r9_i].us_2;
- s6_f = pT3[r9_i].us_4;
- s4_f = pMatrix320->d[0][1];
- s8_f = pMatrix320->d[2][1];
- s10_f = pMatrix320->d[3][1];
- s2_f = pMatrix320->d[1][1] * s2_f;
- s2_f += s4_f * s12_f;
- s2_f += s8_f * s6_f;
- s2_f += s10_f;
- pVertexbump2[r9_i].f_4 = s2_f;
- s2_f = pT3[r9_i].us_2;
- s6_f = pT3[r9_i].us_4;
- s4_f = pMatrix320->d[0][2];
- s8_f = pMatrix320->d[2][2];
- s10_f = pMatrix320->d[3][2];
- s2_f = pMatrix320->d[1][2] * s2_f;
- s2_f += s4_f * s12_f;
- s2_f += s8_f * s6_f;
- s2_f += s10_f;
- pVertexbump2[r9_i].f_8 = s2_f;
- if (sizeof(*pT3) == sizeof(VertBone)) {
- // 00214B00
- s2_f = pT3[r9_i + 1].us_2;
- s10_f = pT3[r9_i + 1].us_0;
- s6_f = pT3[r9_i + 1].us_4;
- s4_f = pMatrix321->d[0][0];
- s8_f = pMatrix321->d[2][0];
- s2_f = pMatrix321->d[1][0] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_C = s2_f;
- s2_f = pT3[r9_i + 1].us_2;
- s10_f = pT3[r9_i + 1].us_0;
- s6_f = pT3[r9_i + 1].us_4;
- s4_f = pMatrix321->d[0][1];
- s8_f = pMatrix321->d[2][1];
- s2_f = pMatrix321->d[1][1] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_E = s2_f;
- s2_f = pT3[r9_i + 1].us_2;
- s10_f = pT3[r9_i + 1].us_0;
- s6_f = pT3[r9_i + 1].us_4;
- s4_f = pMatrix321->d[0][2];
- s8_f = pMatrix321->d[2][2];
- s2_f = pMatrix321->d[1][2] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_10 = s2_f;
- s2_f = pT3[r9_i + 1].us_A;
- s10_f = pT3[r9_i + 1].us_8;
- s6_f = pT3[r9_i + 1].us_C;
- s4_f = pMatrix321->d[0][0];
- s8_f = pMatrix321->d[2][0];
- s2_f = pMatrix321->d[1][0] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_18 = s2_f;
- s2_f = pT3[r9_i + 1].us_A;
- s10_f = pT3[r9_i + 1].us_8;
- s6_f = pT3[r9_i + 1].us_C;
- s4_f = pMatrix321->d[0][1];
- s8_f = pMatrix321->d[2][1];
- s2_f = pMatrix321->d[1][1] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_1A = s2_f;
- s2_f = pT3[r9_i + 1].us_A;
- s10_f = pT3[r9_i + 1].us_8;
- s6_f = pT3[r9_i + 1].us_C;
- s4_f = pMatrix321->d[0][2];
- s8_f = pMatrix321->d[2][2];
- s2_f = pMatrix321->d[1][2] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_1C = s2_f;
- } else if (sizeof(*pT3) == sizeof(VertNorTexTanBone)) {
- VertNorTexTanBone *pVertNorTexTanBone3 = (VertNorTexTanBone *)pT3;
- s2_f = pVertNorTexTanBone3[r9_i].us_A;
- s10_f = pVertNorTexTanBone3[r9_i].us_8;
- s6_f = pVertNorTexTanBone3[r9_i].us_C;
- s4_f = pMatrix321->d[0][0];
- s8_f = pMatrix321->d[2][0];
- s2_f = pMatrix321->d[1][0] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_C = s2_f;
- // 00213926
- s2_f = pVertNorTexTanBone3[r9_i].us_A;
- s10_f = pVertNorTexTanBone3[r9_i].us_8;
- s6_f = pVertNorTexTanBone3[r9_i].us_C;
- s4_f = pMatrix321->d[0][1];
- s8_f = pMatrix321->d[2][1];
- s2_f = pMatrix321->d[1][1] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_E = s2_f;
- // 0021396E
- s2_f = pVertNorTexTanBone3[r9_i].us_A;
- s10_f = pVertNorTexTanBone3[r9_i].us_8;
- s6_f = pVertNorTexTanBone3[r9_i].us_C;
- s4_f = pMatrix321->d[0][2];
- s8_f = pMatrix321->d[2][2];
- s2_f = pMatrix321->d[1][2] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_10 = s2_f;
- // 002139B6
- s2_f = pVertNorTexTanBone3[r9_i].us_16;
- s10_f = pVertNorTexTanBone3[r9_i].us_14;
- s6_f = pVertNorTexTanBone3[r9_i].us_18;
- s4_f = pMatrix321->d[0][0];
- s8_f = pMatrix321->d[2][0];
- s2_f = pMatrix321->d[1][0] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_18 = s2_f;
- // 002139FE
- s2_f = pVertNorTexTanBone3[r9_i].us_16;
- s10_f = pVertNorTexTanBone3[r9_i].us_14;
- s6_f = pVertNorTexTanBone3[r9_i].us_18;
- s4_f = pMatrix321->d[0][1];
- s8_f = pMatrix321->d[2][1];
- s2_f = pMatrix321->d[1][1] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_1A = s2_f;
- // 00213A46
- s2_f = pVertNorTexTanBone3[r9_i].us_16;
- s10_f = pVertNorTexTanBone3[r9_i].us_14;
- s6_f = pVertNorTexTanBone3[r9_i].us_18;
- s4_f = pMatrix321->d[0][2];
- s8_f = pMatrix321->d[2][2];
- s2_f = pMatrix321->d[1][2] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertexbump2[r9_i].us_1C = s2_f;
- }
- if (pTUV5) {
- // 00213A90
- pVertexbump2[r9_i].us_14 = pTUV5[r9_i].x * 32767.0f;
- pVertexbump2[r9_i].us_16 = pTUV5[r9_i].y * 32767.0f;
- } else {
- if (sizeof(*pT3) == sizeof(VertBone)) {
- pVertexbump2[r9_i].us_14 = pT3[r9_i + 1].us_10;
- pVertexbump2[r9_i].us_16 = pT3[r9_i + 1].us_12;
- } else if (sizeof(*pT3) == sizeof(VertNorTexTanBone)) {
- // loc_213AB4
- pVertexbump2[r9_i].us_14 = pT3[r9_i].us_10;
- pVertexbump2[r9_i].us_16 = pT3[r9_i].us_12;
- }
- }
- }
- }
- struct TFTTBatchVertex {
- float f_0;
- float f_4;
- float f_8;
- short us_C;
- short us_E;
- short us_10;
- short us_12;
- short us_14;
- short us_16;
- };
- template <typename T>
- void ProcessRigidVertsCount(CFTTMatrix32 const *pMatrix320,
- CFTTMatrix32 const *pMatrix321,
- TFTTBatchVertex *pVertex2, T const *pT3, uint u4,
- TUV const *pTUV5) {
- //LOGE("g_bNeonAvailable%x", g_bNeonAvailable);
- if (g_bNeonAvailable) {
- float32x4_t Q8 = vld1q_f32((float *)pMatrix321);
- float32x4_t Q12 = vld1q_f32(((float *)pMatrix321) + 4);
- float32x4_t Q10 = vld1q_f32(((float *)pMatrix321) + 8);
- float32x4_t Q9 = vld1q_f32((float *)pMatrix320);
- float32x4_t Q14 = vld1q_f32(((float *)pMatrix320) + 4);
- float32x4_t Q13 = vld1q_f32(((float *)pMatrix320) + 8);
- float32x4_t Q11 = vld1q_f32(((float *)pMatrix320) + 12);
- for (int i = 0; i != u4; i++) {
- //loc_215B78
- float32x4_t Q2;
- memcpy(&Q2, &Q11, sizeof(Q2));
- int16x4_t d30 = vld1_dup_s16((short *)&pT3[i]);
- float32x4_t Q15 = vmovl_s16(d30);
- Q15 = vcvtq_f32_s32(Q15);
- Q2 = vmlaq_f32(Q2, Q9, Q15);
- int16x4_t D1 = vld1_dup_s16(((short *)&pT3[i]) + 1);
- float32x4_t Q1 = vmovl_s16(D1);
- Q15 = vcvtq_f32_s32(Q1);
- Q2 = vmlaq_f32(Q2, Q14, Q15);
- D1 = vld1_dup_s16(((short *)&pT3[i]) + 2);
- Q1 = vmovl_s16(D1);
- Q15 = vcvtq_f32_s32(Q1);
- Q2 = vmlaq_f32(Q2, Q13, Q15);
- memcpy(&pVertex2[i], &Q2, sizeof(Q2));
- if (typeid(T) == typeid(VertBone)) {
- d30 = vld1_dup_s16(((short *)&pT3[i]) + 0xA);
- Q15 = vmovl_s16(d30);
- Q15 = vcvtq_f32_s32(Q15);
- Q15 = vmulq_f32(Q15, Q8);
- D1 = vld1_dup_s16(((short *)&pT3[i]) + 0xB);
- Q1 = vmovl_s16(D1);
- Q1 = vcvtq_f32_s32(Q1);
- Q15 = vmlaq_f32(Q15, Q12, Q1);
- D1 = vld1_dup_s16(((short *)&pT3[i]) + 0xC);
- Q2 = vmovl_s16(D1);
- Q1 = vcvtq_f32_s32(Q2);
- Q15 = vmlaq_f32(Q15, Q10, Q1);
- Q15 = vcvtq_s32_f32(Q15);
- d30 = vmovn_s32(Q15);
- memcpy(&pVertex2[i].us_C, &d30, sizeof(d30));
- }else {
- d30 = vld1_dup_s16(((short *)&pT3[i]) + 0x4);
- Q15 = vmovl_s16(d30);
- Q15 = vcvtq_f32_s32(Q15);
- Q15 = vmulq_f32(Q15, Q8);
- D1 = vld1_dup_s16(((short *)&pT3[i]) + 0x5);
- Q1 = vmovl_s16(D1);
- Q1 = vcvtq_f32_s32(Q1);
- Q15 = vmlaq_f32(Q15, Q12, Q1);
- D1 = vld1_dup_s16(((short *)&pT3[i]) + 0x6);
- Q2 = vmovl_s16(D1);
- Q1 = vcvtq_f32_s32(Q2);
- Q15 = vmlaq_f32(Q15, Q10, Q1);
- Q15 = vcvtq_s32_f32(Q15);
- d30 = vmovn_s32(Q15);
- memcpy(&pVertex2[i].us_C, &d30, sizeof(d30));
- }
- if (pTUV5) {
- pVertex2[i].us_14 = pTUV5[i].x * 32767.0f;
- pVertex2[i].us_16 = pTUV5[i].x * 32767.0f;
- } else {
- if (typeid(T) == typeid(VertBone)) {
- pVertex2[i].us_14 = pT3[i + 1].us_10;
- pVertex2[i].us_16 = pT3[i + 1].us_12;
- } else {
- pVertex2[i].us_14 = pT3[i].us_10;
- pVertex2[i].us_16 = pT3[i].us_12;
- }
- }
- }
- } else {
- for (int r9_i = 0; r9_i != u4; r9_i++) {
- float s2_f = pT3[r9_i].us_2;
- float s6_f = pT3[r9_i].us_4;
- float s12_f = pT3[r9_i].us_0;
- s2_f = pMatrix320->d[1][0] * s2_f;
- float s4_f = pMatrix320->d[0][0];
- float s8_f = pMatrix320->d[2][0];
- float s10_f = pMatrix320->d[3][0];
- s2_f += s4_f * s12_f;
- s2_f += s8_f * s6_f;
- s2_f += s10_f;
- pVertex2[r9_i].f_0 = s2_f;
- s2_f = pT3[r9_i].us_2;
- s6_f = pT3[r9_i].us_4;
- s4_f = pMatrix320->d[0][1];
- s8_f = pMatrix320->d[2][1];
- s10_f = pMatrix320->d[3][1];
- s2_f = pMatrix320->d[1][1] * s2_f;
- s2_f += s4_f * s12_f;
- s2_f += s8_f * s6_f;
- s2_f += s10_f;
- pVertex2[r9_i].f_4 = s2_f;
- s2_f = pT3[r9_i].us_2;
- s6_f = pT3[r9_i].us_4;
- s4_f = pMatrix320->d[0][2];
- s8_f = pMatrix320->d[2][2];
- s10_f = pMatrix320->d[3][2];
- s2_f = pMatrix320->d[1][2] * s2_f;
- s2_f += s4_f * s12_f;
- s2_f += s8_f * s6_f;
- s2_f += s10_f;
- pVertex2[r9_i].f_8 = s2_f;
- if (typeid(T) == typeid(VertBone)) {
- s2_f = pT3[r9_i + 1].us_2;
- s10_f = pT3[r9_i + 1].us_0;
- s6_f = pT3[r9_i + 1].us_4;
- s4_f = pMatrix321->d[0][0];
- s8_f = pMatrix321->d[2][0];
- s2_f = pMatrix321->d[1][0] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertex2[r9_i].us_C = s2_f;
- s2_f = pT3[r9_i + 1].us_2;
- s10_f = pT3[r9_i + 1].us_0;
- s6_f = pT3[r9_i + 1].us_4;
- s4_f = pMatrix321->d[0][1];
- s8_f = pMatrix321->d[2][1];
- s2_f = pMatrix321->d[1][1] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertex2[r9_i].us_E = s2_f;
- s2_f = pT3[r9_i + 1].us_2;
- s10_f = pT3[r9_i + 1].us_0;
- s6_f = pT3[r9_i + 1].us_4;
- s4_f = pMatrix321->d[0][2];
- s8_f = pMatrix321->d[2][2];
- s2_f = pMatrix321->d[1][2] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertex2[r9_i].us_10 = s2_f;
- if (typeid(T) == typeid(VertBone)) {
- pVertex2[r9_i].us_14 = pT3[r9_i + 1].us_10;
- pVertex2[r9_i].us_16 = pT3[r9_i + 1].us_12;
- } else {
- pVertex2[r9_i].us_14 = pT3[r9_i].us_10;
- pVertex2[r9_i].us_16 = pT3[r9_i].us_12;
- }
- } else {
- T *pVertNorTexTanBone3 = (T *)pT3;
- s2_f = pVertNorTexTanBone3[r9_i].us_A;
- s10_f = pVertNorTexTanBone3[r9_i].us_8;
- s6_f = pVertNorTexTanBone3[r9_i].us_C;
- s4_f = pMatrix321->d[0][0];
- s8_f = pMatrix321->d[2][0];
- s2_f = pMatrix321->d[1][0] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertex2[r9_i].us_C = s2_f;
- s2_f = pVertNorTexTanBone3[r9_i].us_A;
- s10_f = pVertNorTexTanBone3[r9_i].us_8;
- s6_f = pVertNorTexTanBone3[r9_i].us_C;
- s4_f = pMatrix321->d[0][1];
- s8_f = pMatrix321->d[2][1];
- s2_f = pMatrix321->d[1][1] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertex2[r9_i].us_E = s2_f;
- s2_f = pVertNorTexTanBone3[r9_i].us_A;
- s10_f = pVertNorTexTanBone3[r9_i].us_8;
- s6_f = pVertNorTexTanBone3[r9_i].us_C;
- s4_f = pMatrix321->d[0][2];
- s8_f = pMatrix321->d[2][2];
- s2_f = pMatrix321->d[1][2] * s2_f;
- s2_f += s4_f * s10_f;
- s2_f += s8_f * s6_f;
- pVertex2[r9_i].us_10 = s2_f;
- }
- // else if(typeid(T) == typeid(VertNorTex)){
- // //002159FA
- // VertNorTex *pVertNorTex3 = (VertNorTex *)pT3;
- // s2_f = pVertNorTex3[r9_i].us_A;
- // s10_f = pVertNorTex3[r9_i].us_8;
- // s6_f = pVertNorTex3[r9_i].us_C;
- // s4_f = pMatrix321->d[0][0];
- // s8_f = pMatrix321->d[2][0];
- // s2_f = pMatrix321->d[1][0] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertex2[r9_i].us_C = s2_f;
- // s2_f = pVertNorTex3[r9_i].us_A;
- // s10_f = pVertNorTex3[r9_i].us_8;
- // s6_f = pVertNorTex3[r9_i].us_C;
- // s4_f = pMatrix321->d[0][1];
- // s8_f = pMatrix321->d[2][1];
- // s2_f = pMatrix321->d[1][1] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertex2[r9_i].us_E = s2_f;
- // s2_f = pVertNorTex3[r9_i].us_A;
- // s10_f = pVertNorTex3[r9_i].us_8;
- // s6_f = pVertNorTex3[r9_i].us_C;
- // s4_f = pMatrix321->d[0][2];
- // s8_f = pMatrix321->d[2][2];
- // s2_f = pMatrix321->d[1][2] * s2_f;
- // s2_f += s4_f * s10_f;
- // s2_f += s8_f * s6_f;
- // pVertex2[r9_i].us_10 = s2_f;
- // }
- if (pTUV5) {
- // 00213A90
- pVertex2[r9_i].us_14 = pTUV5[r9_i].x * 32767.0f;
- pVertex2[r9_i].us_16 = pTUV5[r9_i].y * 32767.0f;
- } else {
- if (typeid(T) == typeid(VertBone)) {
- pVertex2[r9_i].us_14 = pT3[r9_i + 1].us_10;
- pVertex2[r9_i].us_16 = pT3[r9_i + 1].us_12;
- } else {
- pVertex2[r9_i].us_14 = pT3[r9_i].us_10;
- pVertex2[r9_i].us_16 = pT3[r9_i].us_12;
- }
- // }else if(typeid(T) == typeid(VertNorTex)){
- // //loc_215AF0
- // pVertex2[r9_i].us_14 = pT3[r9_i].us_10;
- // pVertex2[r9_i].us_16 = pT3[r9_i].us_12;
- // }
- }
- }
- }
- }
- void testProcessRigidVertsBumpCount() {
- CFTTMatrix32 a1;
- CFTTMatrix32 a2;
- TFTTBatchVertexBump a3;
- VertBone a4;
- TUV a6;
- VertNorTexTanBone a4_1;
- VertNorTex a4_2;
- TFTTBatchVertex a3_1;
- VertNorTexTan a4_3;
- ProcessRigidVertsCount(&a1, &a2, &a3_1, &a4_3, 5, &a6);
- ProcessRigidVertsCount(&a1, &a2, &a3_1, &a4_2, 5, &a6);
- ProcessRigidVertsBumpCount(&a1, &a2, &a3, &a4, 5, &a6);
- ProcessRigidVertsBumpCount(&a1, &a2, &a3, &a4_1, 5, &a6);
- }
- // // 00213594
- // //乱写的
- // void ProcessRigidVertsBumpCount(
- // uint ui_r0_arg, CFTTMatrix32 const *p_cfttmatrix32_r1_arg,
- // CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
- // TFTTBatchVertexBump *p_tfttbatchvertexbump_r3_arg, void const *p_v_arg_0,
- // uint ui_arg_4, TUV const *p_tuv_arg_8) {
- // float tmp = ui_r0_arg + p_cfttmatrix32_r1_arg->d[0][0] +
- // p_cfttmatrix32_r2_arg->d[0][0] +
- // p_tfttbatchvertexbump_r3_arg->un_0 + ((int)p_v_arg_0) +
- // ui_arg_4 + p_tuv_arg_8->x;
- // LOGI("ProcessRigidVertsBumpCount %f", tmp);
- // }
- //-------------------------------------------------------------------------------------------------
- // 0020F240 //^_- 经过单元测试,功能正常
- // 0020F2B6 指令顺序不同
- // 0020F2DE 指令顺序不同
- // CFTTBatchModelManager::CFTTBatchModelManager(int d_r1_arg, bool b_r2_arg,
- // int d_r3_arg,
- // unsigned int ud_arg_0,
- // bool b_arg_4, bool b_arg_8)
- // : cfttbmmmatrixcache_0(b_arg_8, 0x200, 0) {}
- //-------------------------------------------------------------------------------------------------
- // 0020F378 //^_^
- CFTTBatchModelManager::~CFTTBatchModelManager() {}
- //-------------------------------------------------------------------------------------------------
- // 0020F414 //^_^
- bool CFTTBatchModelManager::PerformFlushOnFull() { return false; }
- //-------------------------------------------------------------------------------------------------
- // 0020F450 //^_^
- void CFTTBatchModelManager::End() { LOGE("End%x", this); }
- //-------------------------------------------------------------------------------------------------
- // 0020F480 //^_^
- void CFTTBatchModelManager::Begin() { LOGE("Begin%x", this); }
- //-------------------------------------------------------------------------------------------------
- // 0020F4EC //^_-
- //单元测试等级: 目测游戏表现
- //单元测试内容: 启动游戏到第2关(包括第2关)
- //单元测试结果: 正常
- //已测试分支:
- // 0020F524
- // 0020F558
- void CFTTBatchModelManager::FlushThreaded() {}
- //-------------------------------------------------------------------------------------------------
- // 0020F5B4 //^_^
- void CFTTBatchModelManager::Flush(int i_r1_arg, bool b_r2_arg, bool b_r3_arg) {}
- //-------------------------------------------------------------------------------------------------
- // 0020F670 //^_^
- void CFTTBatchModelManager::ResetCache(bool b_r1_arg) {
- LOGE("%x", this);
- LOGE("%x", b_r1_arg);
- }
- //-------------------------------------------------------------------------------------------------
- // 0020F68C //^_^
- void CFTTBatchModelManager::SetMatrix(
- CFTTMatrix32 const &p_cfttmatrix32_r1_arg) {}
- //-------------------------------------------------------------------------------------------------
- // 0020F694 //^_-
- //单元测试等级: 目测游戏表现
- //单元测试内容: 启动游戏到第2关(包括第2关)
- //单元测试结果: 正常
- //已测试分支:
- // 0020F6D0
- // 0020F6FA
- // 0020F726
- // 0020F72E
- // 0020F79E
- // 0020F6BC
- // 0020F6C6
- // 0020F7E4
- int CFTTBatchModelManager::AddModelVerts(
- int i_r1_arg, CFTTModel *p_cfttmodel_r2_arg, int i_r3_arg,
- CFTTMatrix32 const *p_cfttmatrix32_arg_0, TUV *p_tuv_arg_4,
- TFTTCacheLookup tfttcachelookup_arg_8, callback_1 callback_arg_10,
- CFTTMatrix32 const *p_cfttmatrix32_arg_14) {
- return 0;
- }
- //-------------------------------------------------------------------------------------------------
- // 0020F8E4 //^_-
- //单元测试等级: 目测游戏表现
- //单元测试内容: 启动游戏到第2关(包括第2关)
- //单元测试结果: 正常
- //已测试分支:
- // 0020F944
- // 0020F97C
- // 0020F994
- // 0020F9B6
- // 0020F91E
- // 0020FA14
- // 0020FA24
- // 0020FA00
- // 0020FA04
- void CFTTBatchModelManager::SkinVertsBoned(
- CFTTModel *p_cfttmodel_r1_arg, int i_r2_arg, float *p_f_r3_arg,
- void *p_v_arg_0, CFTTMatrix32 const *p_cfttmatrix32_arg_4,
- CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_8,
- CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_10,
- TUV *p_tuv_arg_18, TFTTCacheLookup tfttcachelookup_arg_1c,
- callback_1 callback_1_arg_24) {}
- //-------------------------------------------------------------------------------------------------
- // 0020FA32 //^_^
- void CFTTBatchModelManager::CopyVerts(
- CFTTModel *p_cfttmodel_r1_arg, int i_r2_arg, float *p_f_r3_arg,
- void *p_v_arg_0, CFTTMatrix32 const *p_cfttmatrix32_arg_4,
- CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_8,
- CFTTBMMMatrixCache::StartCount cfttbmmmatrixcache_startcount_arg_10,
- TUV *p_tuv_arg_18, TFTTCacheLookup tfttcachelookup_arg_1c,
- callback_1 callback_1_arg_24) {}
- //-------------------------------------------------------------------------------------------------
- // 0020FAD8 //^_-
- //单元测试等级: 目测游戏表现
- //单元测试内容: 启动游戏到第2关(包括第2关)
- //单元测试结果: 正常
- //已测试分支:
- // 0020FB00
- // 0020FB0A
- // 0020FB3C
- // 0020FB4E
- // 0020FB60
- // 0020FCB6
- // 0020FCC0
- // 0020FCCE
- // 0020FCD4
- // 0020FCD8
- // 0020FB76
- // 0020FB80
- // 0020FBCC
- // 0020FBA2
- // 0020FBD8
- // 0020FB20
- void CFTTBatchModelManager::AddModel(
- CFTTModel *p_cfttmodel_r1_arg, CFTTMatrix32 const *p_cfttmatrix32_r2_arg,
- TUV *p_tuv_r3_arg, TFTTCacheInstance tfttcacheinstance_arg_0, int i_arg_4,
- int i_arg_8, callback_1 callback_arg_c,
- CFTTMatrix32 const *p_cfttmatrix32_arg_10) {
- LOGE(" CFTTBatchModelManager::AddModel%p%p%p%p%x%x%p%p",p_cfttmodel_r1_arg,p_cfttmatrix32_r2_arg,p_tuv_r3_arg,
- tfttcacheinstance_arg_0,i_arg_4,i_arg_8,callback_arg_c,p_cfttmatrix32_arg_10);
- // __android_log_print(ANDROID_LOG_INFO, "sh_log",
- // "CFTTBatchModelManager::AddModel end");
- }
- //-------------------------------------------------------------------------------------------------
- // 0020FD4A //^_-
- //单元测试等级: 目测游戏表现
- //单元测试内容: 启动游戏到第2关(包括第2关)
- //单元测试结果: 正常
- //已测试分支:
- // 0020FD6A
- // 0020FD76
- // 0020FD8A
- // 0020FD90
- // 0020FD9C
- // 0020FDA4
- // 0020FDD6
- void CFTTBatchModelManager::AddModelX(
- CFTTModel *p_cfttmodel_r1_arg, int i_r2_arg,
- CFTTMatrix32 const *p_cfttmatrix32_r3_arg, TUV *p_tuv_arg_0,
- callback_1 callback_1_arg_4, CFTTMatrix32 const *p_cfttmatrix32_arg_8) {}
- //-------------------------------------------------------------------------------------------------
- // 0020FE74
- void CFTTBatchModelManager::SkinVertsBlend(
- CFTTModel *, int, float *, void *, CFTTMatrix32 const *,
- CFTTBMMMatrixCache::StartCount, CFTTBMMMatrixCache::StartCount, TUV *,
- TFTTCacheLookup, void (*)(void *, CFTTModel *, int, CFTTMatrix32 const *)) {
- }
- //-------------------------------------------------------------------------------------------------
- // 0020FE76
- void CFTTBatchModelManager::SkinVerts(
- CFTTModel *, int, float *, void *, CFTTMatrix32 const *,
- CFTTBMMMatrixCache::StartCount, CFTTBMMMatrixCache::StartCount, TUV *,
- TFTTCacheLookup, void (*)(void *, CFTTModel *, int, CFTTMatrix32 const *)) {
- }
- //-------------------------------------------------------------------------------------------------
- // 0020FE6E //^_^
- void CFTTBatchModelManager::SetFlushOnFullCB(
- pFlushOnFullCBCallBack pFlushOnFullCBCallBack_r1, void *p_v_r2) {
- this->field_D4 = pFlushOnFullCBCallBack_r1;
- this->field_D8 = p_v_r2;
- }
- //-------------------------------------------------------------------------------------------------
- // 0020F494 经过单元测试,功能正常
- //^_^-
- // 0020F4D8处我的代码只取了一次this->field_70,而原始代码取了两次
- CFTTBatchModelBin *CFTTBatchModelManager::AddBin(
- CFTTBatchModelBin *p_cfttbatchmodelbin_r1_arg, int d_r2_arg, uint ud_r3_arg,
- int d_arg_0, // shader mat id
- int d_arg_4, bool b_arg_8, bool b_arg_c) {
- return 0;
- }
- //-------------------------------------------------------------------------------------------------
- //目前还没有实现给dword_5C9840.field_4、dword_5C9840.field_8等字段赋值的函数
- //接上,编译器优化会导致这些字段没了,所以自己写一个函数防止编译器优化
- void TestUseBy_dword_5C9840() {
- printf("%p", &dword_5C9840.field_0);
- printf("%p", &dword_5C9840.field_4);
- printf("%p", &dword_5C9840.field_8);
- printf("%p", &dword_5C9840.field_c);
- // printf("%p", &dword_5C9840.useby_dword_5c9840_sub_14[0].p_cfttjobqueue_0);
- }
- //-------------------------------------------------------------------------------------------------
- // 0020F1EC //^_^
- void CFTTBatchModelManager::InitialiseCodePath() {}
- //-------------------------------------------------------------------------------------------------
|