Browse Source

0x0017fab8,CGfxCharacter::RenderBatch bugfix

DESKTOP-AB9OQPJ\RED-10 3 years ago
parent
commit
efcce4ad2c

+ 5 - 2
jni/CFTTBatchModelBin.cpp

@@ -58,15 +58,18 @@ void CFTTBatchModelBin::Flush(bool b_r1_arg) {
 //-------------------------------------------------------------------------------------------------
 //0020F1AC
 int CFTTBatchModelBin::GetDrawCalls() const{
-  return 0;
+  LOGE("%pCFTTBatchModelBin::GetDrawCalls",this);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0020F1B0 //^_^
 int CFTTBatchModelBin::GetLastMatID() const{
-  return 0;
+    LOGE("%pCFTTBatchModelBin::GetLastMatID",this);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0020F1CC //^_^
 void CFTTBatchModelBin::SetMaterialID(int i_r1_arg) {
+  LOGE("CFTTBatchModelBin::SetMaterialID%p%x",this,i_r1_arg);
 }
 //-------------------------------------------------------------------------------------------------

+ 3 - 0
jni/CFTTBatchModelManager.cpp

@@ -836,6 +836,9 @@ void CFTTBatchModelManager::AddModel(
     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");
 }

+ 4 - 2
jni/CFTTGraphicsDevice.cpp

@@ -11,12 +11,14 @@ CFTTGraphicsDevice::~CFTTGraphicsDevice() {
 //-------------------------------------------------------------------------------------------------
 //00203880 //^_^
 bool CFTTGraphicsDevice::FloatTextureSupported() const {
-  return false;
+  LOGE("CFTTGraphicsDevice::FloatTextureSupported%p",this);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //00203884 //^_^
 bool CFTTGraphicsDevice::TextureLODSupported() const {
-  return false;
+   LOGE("CFTTGraphicsDevice::TextureLODSupported%p",this);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //00203888 //^_^

+ 606 - 3
jni/CGfxCharacter.cpp

@@ -375,13 +375,616 @@ void CGfxCharacter::SkinModels() {
   //locret_17FAB0
 }
 //-------------------------------------------------------------------------------------------------
-//0017FAB8
-void CGfxCharacter::RenderBatch(ESHADOWMAP_SAMPLING e_1, int i_2) {
+// 0017FAB8 ^_- 经过单元测试,功能正常(5,6两关 2022.02.20)
+void CGfxCharacter::RenderBatch(ESHADOWMAP_SAMPLING eShadowMap1, int i2) {
+  // 0017FAD2
+  
+  if (eShadowMap1 == ESHADOWMAP_SAMPLING_1 || eShadowMap1 == ESHADOWMAP_SAMPLING_2) {
+    if (eShadowMap1 == ESHADOWMAP_SAMPLING_1) {
+      // loc_17FAEA
+      CPlayerShader::s_tInstance.SetShadowMap(EPlayerShader_ShadowMap_1);
+    } else if (eShadowMap1 == ESHADOWMAP_SAMPLING_2) {
+      // 0017FAE4
+      CPlayerShader::s_tInstance.SetShadowMap(EPlayerShader_ShadowMap_2);
+    }
+
+    // 0017FAF4
+    if (CGfxShadowMapManager::ms_pManager->filed_20.ch[0]) {
+      // 0017FAFA !!!
+      int r0_index=CGfxShadowMapManager::ms_pManager->filed_20.ch[0];
+      if(CGfxShadowMapManager::ms_pManager->filed_20.ch[0]>=1){
+        r0_index=0;
+      }
+      CFTTTexParam tTexPar(CGfxShadowMapManager::ms_pManager->filed_4[r0_index]->GetTexture());
+      CPlayerShader::s_tInstance.SetShadowMapTex(tTexPar);
+    } else {
+      // loc_17FB12 
+      CFTTTexParam tTexPar(((CGfxShadowMap*)(NULL))->GetTexture());
+      CPlayerShader::s_tInstance.SetShadowMapTex(tTexPar);
+    }
+  } else {
+    // loc_17FB08
+    
+    CPlayerShader::s_tInstance.SetShadowMap(EPlayerShader_ShadowMap_0);
+  }
+
+  // loc_17FB22
+
+  CFTTModel *pCFTTModel_sp58 = m_BodyModles_4[m_lod_7c.m_lod1];
+  CFTTModel *pCFTTModel_sp64 = m_HairModeles_18[m_lod_7c.m_lod2];
+  CFTTModel *pCFTTModel_r9 = m_HeaderModles_2c[m_lod_7c.m_lod3];
+
+  // 0017FB3C
+  CGfxEnvironmentMap *r11_pCGfxEnvironmentMap = CGfxEnvironmentMap::Get();
+
+  ETimeOfDay r5_eETimeOfDay;
+  // 0017FB46
+  if (r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_1) {
+    // 0017FB4E
+  
+    r5_eETimeOfDay = ETimeOfDay_0;
+  } else if (r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_2 ||
+             r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_3) {  // loc_17FB52
+    // loc_17FB68
+    
+    r5_eETimeOfDay = ETimeOfDay_1;
+  } else {
+    // loc_18075E
+    // eETimeOfDay_r5 = ETimeOfDay_1;  // 00180764  此行是编译优化的结果不需要写出来 Anderson
+    if (r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_4 ||
+        tGame.mTLogic_6678.bisRunning_A9==0 ||
+        CMatchSetup::ms_tInfo.eTimeOfDay_0) {
+          
+      r5_eETimeOfDay = ETimeOfDay_1;  // 0018076C
+    } else {
+     
+      r5_eETimeOfDay = ETimeOfDay_0;  // 00180786
+    }
+  }
+
+  // loc_17FB6A
+  int ePlayerLightingQuality_44_sp70 = GFXSPEC_pSpecification->ePlayerLightingQuality_44;
+  int var_C0_sp78;
+  if (GFXSPEC_pSpecification->bFloatEnvMap_3E &&
+      g_pGraphicsDevice->FloatTextureSupported() &&
+      g_pGraphicsDevice->TextureLODSupported() &&
+      CGfxEnvironmentMap::Get()->GetForced() != EEnvMapOverride_3 &&
+      CGfxEnvironmentMap::Get()->GetForced() != EEnvMapOverride_4) {
+    var_C0_sp78 = 1;
+    CPlayerShader::s_tInstance.SetFloatingPoint(EPlayerShader_FloatingPoint_1);
+  } else {
+    // loc_17FBB0
+    var_C0_sp78 = 0;
+    CPlayerShader::s_tInstance.SetFloatingPoint(EPlayerShader_FloatingPoint_0);
+  }
+
+  CFTTTexture *pTexture_118_sp20;
+  CFTTTexture *pTexture_114_sp24;
+  CFTTTexture *pTexture_110_sp28;
+  CFTTTexture *pTexture_108_sp30;
+  CFTTTexture *pTexture_104_sp34;
+  CFTTTexture *pTexture_100_sp38;
+  CFTTTexture *pTexture_FC_sp3C;
+  CFTTTexture *pTexture_F8_sp40;
+  CFTTTexture *pTexture_F0_sp48;
+  CFTTTexture *pTexture_EC_sp4C;
+  CFTTTexture *pTexture_D0_sp68;
+  CFTTTexture *pTexture_CC_sp6C;
+
+  // 0017FBC0
+  if (r5_eETimeOfDay != ETimeOfDay_0) {
+   
+    CPlayerShader::s_tInstance.SetModel(EPlayerShader_Model_1);  // 0017FBD2
+
+    CFTTTexParam aTexParam(r11_pCGfxEnvironmentMap->GetDiffuseEnv());  // 0017FBD8 !!!
+    CPlayerShader::s_tInstance.SetDiffuseEnv(aTexParam);               // 0017FBE6
+
+    aTexParam.setTexture(r11_pCGfxEnvironmentMap->GetBRDFLUT());
+    CPlayerShader::s_tInstance.SetBRDFLUT(aTexParam);  // 0017FBF6
+
+    pTexture_118_sp20 = nullptr;
+    pTexture_114_sp24 = nullptr;
+    pTexture_110_sp28 = nullptr;
+    pTexture_108_sp30 = nullptr;
+    pTexture_104_sp34 = nullptr;
+    pTexture_100_sp38 = nullptr;
+    pTexture_FC_sp3C = nullptr;
+    pTexture_F8_sp40 = nullptr;
+    pTexture_F0_sp48 = nullptr;
+    pTexture_EC_sp4C = nullptr;
+    pTexture_D0_sp68 = nullptr;
+    pTexture_CC_sp6C = nullptr;
+  } else {
+    // loc_17FC28
+    
+    CPlayerShader::s_tInstance.SetModel(EPlayerShader_Model_0);
+
+    pTexture_EC_sp4C = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_0);   // 0017FC40
+    pTexture_CC_sp6C = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_6);   // 0017FC48
+    pTexture_FC_sp3C = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_1);   // 0017FC50
+    pTexture_108_sp30 = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_2);  // 0017FC58
+    pTexture_F8_sp40 = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_3);   // 0017FC60
+    pTexture_100_sp38 = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_4);  // 0017FC68
+    // 0017FC70
+    if (var_C0_sp78) {
+      // 0017FC72
+      pTexture_F0_sp48 = CPBRLighting::Get()->GetVersatile();
+      pTexture_114_sp24 = CPBRLighting::Get()->GetVersatile();
+      pTexture_110_sp28 = CPBRLighting::Get()->GetVersatile();
+      pTexture_118_sp20 = CPBRLighting::Get()->GetVersatile();
+      pTexture_104_sp34 = CPBRLighting::Get()->GetVersatile();
+      pTexture_D0_sp68 = CPBRLighting::Get()->GetVersatile();
+    } else {
+      // loc_17FC9A
+      pTexture_F0_sp48 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_0);
+      pTexture_114_sp24 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_1);
+      pTexture_110_sp28 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_2);
+      pTexture_118_sp20 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_3);
+      pTexture_104_sp34 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_4);
+      pTexture_D0_sp68 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_6);
+    }
+  }
+
+  // loc_17FCCE
+  float fs16 = 0.449999988f;
+  float fs18 = 0.550000012f;
+  float fs20 = 0.550000012f;
+  float fs22 = 0.200000003f;
+  //sp7C=this
+  //sp60=r9
+  //sp54=r11
+
+  if (tGame.mTLogic_6678.bisRunning_A9) {  // 0017FCF2
+    // 0017FCF6
+    if (CMatchSetup::ms_tInfo.eWeather_4) {
+      // 0017FD04
+       fs20 = 0.5f;
+      if (CMatchSetup::ms_tInfo.eWeather_4 == EWeather_2) {
+        fs16 = 0.449999988f;
+        fs18 = 0.550000012f;
+        fs20 = 0.550000012f;
+        fs22 = 0.200000003f;
+      } else {
+        fs16 = 0.400000006f;
+        fs18 = 0.400000006f;
+        fs22 = 0.100000001f;
+      }
+    }
+  }
+
+  // loc_17FD7C
+  float fr9 = powf(fs20, 3.0f);
+  CFTTVector32x4 tVec32_60_spD8;
+  tVec32_60_spD8.my[0] = fs20;  // 0017FD9C
+  float s_30 = 1.0f / (fr9 + fr9);
+  tVec32_60_spD8.my[2] = s_30 * 0.75f;
+  tVec32_60_spD8.my[1] = fs22;
+  
+  tVec32_60_spD8.my[3] = powf(fs20, 0.10000000149f);
+
+  CFTTVector32x4 tVec32_78_spC0;
+  tVec32_78_spC0.my[0] = 0.400000006f;  // 0017FDAE
+  tVec32_78_spC0.my[1] = 0.009999999776f;
+  tVec32_78_spC0.my[2] = 7.812499523163f;
+  tVec32_78_spC0.my[3] = 0.912443518639f;
+
+  CFTTVector32x4 tVec32_88_spB0;
+  tVec32_88_spB0.my[0] = fs20;  // 0017FDCC
+  tVec32_88_spB0.my[1] = fs22;
+  tVec32_88_spB0.my[2] = 1.0f / (powf(fs20, 3.0f) + powf(fs20, 3.0f));
+  tVec32_88_spB0.my[3] = powf(fs20, 0.10000000149f);
+
+  CFTTVector32x4 tVec32_98_spA0;
+  tVec32_98_spA0.my[0] = fs20;  // 0017FDF6
+  tVec32_98_spA0.my[1] = fs22;
+  tVec32_98_spA0.my[2] = 1.0f / (powf(fs20, 3.0f) + powf(fs20, 3.0f));
+  tVec32_98_spA0.my[3] = powf(fs20, 0.10000000149f);
+
+  CFTTVector32x4 tVec32_A8_sp90;
+  tVec32_A8_sp90.my[0] = fs18;  // 0017FE2C
+  tVec32_A8_sp90.my[1] = 0.028000000864f;
+  tVec32_A8_sp90.my[2] = 1.0f / (powf(fs18, 3.0f) + powf(fs18, 3.0f));
+  tVec32_A8_sp90.my[3] = powf(fs18, 0.10000000149f);
+
+  CFTTVector32x4 tVec32_B8_sp80;
+  tVec32_B8_sp80.my[0] = fs16;  // 0017FE58
+  tVec32_B8_sp80.my[1] = 0.028000000864f;
+  tVec32_B8_sp80.my[2] = 1.0f / (powf(fs16, 3.0) + powf(fs16, 3.0));
+  tVec32_B8_sp80.my[3] = powf(fs16, 0.100000001f);
+
+  // 0017FE66
+  fs22= tVec32_A8_sp90.my[2];
+  float  fs26 = 1.0f / (powf(fs16, 3.0) + powf(fs16, 3.0));
+  if (ePlayerLightingQuality_44_sp70 <= 0) {
+    // 0017FE72
+    fs22 = fs22 * 0.75f;
+    fs26 = fs26 * 0.75f;
+    tVec32_60_spD8.my[2]  = tVec32_60_spD8.my[2]* 0.75f;
+    tVec32_78_spC0.my[2] = 5.859374523163f;
+    tVec32_88_spB0.my[2] = tVec32_88_spB0.my[2] * 0.75f;
+    tVec32_98_spA0.my[2] =  tVec32_98_spA0.my[2] * 0.75f;
+    tVec32_A8_sp90.my[2] = fs22;
+    tVec32_B8_sp80.my[2] = fs26;
+  }
+
+  // loc_17FE9E
+  if (CMatchSetup::ms_tInfo.eWeather_4 == EWeather_1) {
+    tVec32_A8_sp90.my[2] = fs22 * 0.25f;
+    fs22=tVec32_A8_sp90.my[2];
+  }
+
+  float flt_2FEF3C[7] = {8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 0.0f};
+  float flt_2FDEA8[8] = {1.0f, 1.0f, 1.0f, 0.5f, 0.75f, 0.75f, 0.5f, 0.25f};
+
+  if ((r5_eETimeOfDay & var_C0_sp78) == 1) {  // 0017FEC4
+    // 0017FEC8
+    tVec32_60_spD8.my[0] = sqrtf(fs20);      // 0017FEE4
+    tVec32_78_spC0.my[0] = 0.632455527782f;  // 0017FEF6
+    tVec32_88_spB0.my[0] = tVec32_60_spD8.my[0];  // 0017FF08
+    tVec32_98_spA0.my[0] = tVec32_60_spD8.my[0];  // 0017FF24
+    tVec32_A8_sp90.my[0] = sqrtf(fs18);      // 0017FF40
+    tVec32_B8_sp80.my[0] = sqrtf(fs16);      // 0017FF68
+    
+    tVec32_60_spD8.my[2] = 0.75f;
+    tVec32_78_spC0.my[2] = 1.0f;
+    tVec32_88_spB0.my[2] = 1.0f;
+    tVec32_98_spA0.my[2] = 1.0f;
+    tVec32_A8_sp90.my[2] = flt_2FEF3C[m_Skincolor1_B8C] * 1.25f;
+    tVec32_B8_sp80.my[2] = flt_2FDEA8[m_HairColour_BA4];
+  } else {
+    // loc_17FF94
+    tVec32_A8_sp90.my[2] = flt_2FEF3C[m_Skincolor1_B8C] * fs22;
+    tVec32_B8_sp80.my[2] = flt_2FDEA8[m_HairColour_BA4] * fs26;
+  }
+
+  // loc_17FFC4
+
+  EPlayerShader_Bin r1_eShader = EPlayerShader_Bin_8;
+  int i_r6 = m_Materials_C24[2];
+
+  typedef void (*pfun)(void *, CFTTModel *, int, const CFTTMatrix32 *);
+  pfun pFunc_10C_sp2C = NULL;
+
+  // 0017FFD4
+  if (GFXSPEC_pSpecification->bDynNormMap_3F) {
+    // 0017FFD6
+    if ((int)m_lod_7c.m_lod1 < 2) {
+      pFunc_10C_sp2C = CGfxDynNormMap::PostSkinCB;
+      r1_eShader = EPlayerShader_Bin_3;
+    }
+  } else {
+    // loc_18001C
+    pFunc_10C_sp2C = NULL;
+  }
+
+  // loc_180020
+  CPlayerShader::s_tInstance.SetBin(r1_eShader, i_r6);
+
+  CFTTTexParam tTexParam;  // !!!
+  tTexParam.setDataEx(m_KitTextureID_B94);
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, i_r6);  // 00180052
+
+  tTexParam.setDataEx(CGfxCharacter::s_iKitSpecularTexture);  // !!!
+  CPlayerShader::s_tInstance.SetSpecular(tTexParam, i_r6);    // 0018006E
+
+  tTexParam.setDataEx(CGfxCharacter::s_iKitDynamicNormalTexture);  // !!!
+  CPlayerShader::s_tInstance.SetNormal(tTexParam, i_r6);           // 0018008C
+
+  tTexParam.setDataEx(CGfxCharacter::s_iKitDynamicAmbientTexture);  // !!!
+  CPlayerShader::s_tInstance.SetAmbient(tTexParam, i_r6);           // 001800AA
+
+  tTexParam.setTexture(pTexture_EC_sp4C);                               // !!!
+  CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, i_r6);  // 001800B6
+
+  tTexParam.setTexture(pTexture_F0_sp48);
+  CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, i_r6);  // 001800C2
+
+  CPlayerShader::s_tInstance.SetPBR(tVec32_60_spD8, i_r6);  // 001800CC
+
+  int i_cc0 = m_Materials_C24[3];
+
+  tTexParam.setDataEx(CGfxCharacter::m_KitTextureID_B94);                // !!!
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[3]);  // 001800EA
+
+  tTexParam.setTexture(pTexture_CC_sp6C);                                             // !!!
+  CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[3]);  // 001800F4
+
+  tTexParam.setTexture(pTexture_D0_sp68);                                          // !!!
+  CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[3]);  // 00180100
+
+  int i_sp44 = i_cc0;
+  CPlayerShader::s_tInstance.SetPBR(tVec32_78_spC0, m_Materials_C24[3]);  // 0018010C
+
+  //int i_c28 = m_Materials_C24[1];
+
+  tTexParam.setDataEx(m_UnknowTexture_BB4);                              // !!!
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[1]);  // 00180132
+
+  int r5_i = m_UnknowType_A4 - 1;
+  // 00180134
+  if (r5_i >= 2)  // 3
+    r5_i = 2;
+  else if (r5_i < 0)
+    r5_i = 0;
+
+  //最终r5_i只有可能是 2, 1, 0
+  tTexParam.setDataEx(CGfxCharacter::s_iManagerSpecularTextures[r5_i]);   // !!!
+  CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[1]);  // 0018015C
+
+  tTexParam.setDataEx(CGfxCharacter::s_iManagerNormalTextures[r5_i]);   // !!!
+  CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[1]);  // 0018017C
+
+  tTexParam.setDataEx(CGfxCharacter::s_iManagerAmbientTextures[r5_i]);   // !!!
+  CPlayerShader::s_tInstance.SetAmbient(tTexParam, m_Materials_C24[1]);  // 0018019C
+
+  if (((uint)(m_UnknowType_A4 - 1)) <= 1) {
+    LOGE("CGfxCharacter::RenderBatch_29");
+    tTexParam.setTexture(pTexture_F8_sp40);
+    CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[1]);  // 001801B6
+
+    tTexParam.setTexture(pTexture_118_sp20);
+    CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[1]);  // 001801C2
+
+    CPlayerShader::s_tInstance.SetPBR(tVec32_88_spB0, m_Materials_C24[1]);
+  } else {
+   
+    // loc_1801EC
+    tTexParam.setTexture(pTexture_100_sp38);
+    CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[1]);
+
+    tTexParam.setTexture(pTexture_104_sp34);
+    CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[1]);
+    CPlayerShader::s_tInstance.SetPBR(tVec32_98_spA0, m_Materials_C24[1]);
+  }
+
+  // 0018020E
+  tTexParam.setDataEx(m_UnknowTexture_BB4);                              // !!!
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[0]);  // 00180230
+
+  tTexParam.setDataEx(CGfxCharacter::s_iTorsoNormalTexture);            // !!!
+  CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[0]);  // 00180254
+
+  tTexParam.setDataEx(CGfxCharacter::s_iTorsoSpecularTexture);            // !!!
+  CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[0]);  // 00180278
+
+  tTexParam.setTexture(pTexture_FC_sp3C);
+  CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[0]);  // 00180290
+
+  tTexParam.setTexture(pTexture_114_sp24);
+  CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[0]);  // 001802A6
+
+  CPlayerShader::s_tInstance.SetPBR(tVec32_A8_sp90, m_Materials_C24[0]);  // 001802B6
+
+  tTexParam.setTexture(GetMegaTexture());                                // 001802BE
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[5]);  // 001802CA
+
+  tTexParam.setDataEx(CGfxCharacter::s_iAtlasNormalTexture);            // !!!
+  CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[5]);  // 001802EC
+
+  tTexParam.setDataEx(CGfxCharacter::s_iAtlasSpecularTexture);            // !!!
+  CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[5]);  // 0018030C
+
+  tTexParam.setDataEx(m_AtlasAmbientTexture_B98 );                    // !!!
+  CPlayerShader::s_tInstance.SetAmbient(tTexParam, m_Materials_C24[5]);  // 00180326
+
+  tTexParam.setTexture(pTexture_FC_sp3C);
+  CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[5]);  // 00180336
+
+  tTexParam.setTexture(pTexture_114_sp24);
+  CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[5]);  // 00180342
+
+  CPlayerShader::s_tInstance.SetPBR(tVec32_A8_sp90, m_Materials_C24[5]);  // 0018034E
+
+  // int v86 = m_Materials_C24[4];
+  tTexParam.setTexture(GetMegaTexture());                                // 00180358
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[4]);  // 00180364
+
+  // tTexParam.setTexture(GetMegaTexture());                                        // 00180358
+  // CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[4]);  // 00180364
+
+  tTexParam.setTexture(pTexture_CC_sp6C);
+  CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[4]);  // 0018036E
+
+  tTexParam.setTexture(pTexture_D0_sp68);
+  CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[4]);  // 00180378
+
+  CPlayerShader::s_tInstance.SetPBR(tVec32_78_spC0, m_Materials_C24[4]);  // 00180380
+
+  tTexParam.setDataEx(s_iHairMegaTexture);                               // !!!
+  CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[6]);  // 001803AA
+
+  tTexParam.setDataEx(CGfxCharacter::s_iHairNormalTexture);             // !!!
+  CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[6]);  // 001803CC
+
+  tTexParam.setDataEx(CGfxCharacter::s_iHairSpecularTexture);             // !!!
+  CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[6]);  // 001803EC
+
+  tTexParam.setTexture(pTexture_108_sp30);
+  CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[6]);  // 001803F8
+
+  tTexParam.setTexture(pTexture_110_sp28);
+  CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[6]);  // 00180406
+
+  CPlayerShader::s_tInstance.SetPBR(tVec32_B8_sp80, m_Materials_C24[6]);  // 0018040E
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));  // 0018041E
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[2]);          // 00180430
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, i_sp44);  // 00180442
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_1));  // 00180448
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[5]);          // 00180454
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));  // 0018045A
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[4]);          // 00180466
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_2));  // 0018046C
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[6]);          // 0018047C
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[1]);  // 0018048E
+
+  tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));
+  CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[0]);  // 001804A2
+
+  CGfxPlayer::SetupBatchConstants();  // 001804A8
+
+  for (int ir4 = 0; ir4 != 8; ir4++) {  // loc_1804EA
+    // 001804DC
+    
+    GFXPLAYER_spBatchBins[ir4]->SetMaterialID(m_Materials_C24[ir4]);
+  }
+
+  // 001804F4
+  GFXPLAYER_spBatchBins[7]->SetMaterialID(m_Materials_C24[6]);
+
+  // 00180500
+  int d_sp70 = i2 + 1;
+
+  // 001804F4
+  TFTTCacheInstance pTFTTCacheLookup_0;
+  pTFTTCacheLookup_0.ci_0 = (uint8)i2;
+  pTFTTCacheLookup_0.ci_1 = 0;
+
+  if (i2 == -1) {
+     LOGE("CGfxCharacter::RenderBatch_34");
+    pTFTTCacheLookup_0.ci_0 = pTFTTCacheLookup_0.ci_0;
+    pTFTTCacheLookup_0.ci_1 = 0xff;
+  }
+
+  GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
+                             m_SalMatrix_E4,
+                             m_BodyUV_40[m_lod_7c.m_lod1],
+                             pTFTTCacheLookup_0,  // sp 138
+                             2,                   // sp 134
+                             -1,                  // sp 130
+                             pFunc_10C_sp2C,           // sp 12C
+                             nullptr);            // 00180558
+
+  GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
+                             m_SalMatrix_E4,
+                             m_BodyUV_40[m_lod_7c.m_lod1],
+                             pTFTTCacheLookup_0,
+                             3,
+                             -1,
+                             nullptr,
+                             nullptr);  // 0018057A
+
+  GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
+                             m_SalMatrix_E4,
+                             m_BodyUV_40[m_lod_7c.m_lod1],
+                             pTFTTCacheLookup_0,
+                             5,
+                             -1,
+                             nullptr,
+                             nullptr);  // 0018059C
+
+  GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
+                             m_SalMatrix_E4,
+                             m_BodyUV_40[m_lod_7c.m_lod1],
+                             pTFTTCacheLookup_0,
+                             4,
+                             -1,
+                             nullptr,
+                             nullptr);  // 001805BE
+
+  GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
+                             m_SalMatrix_E4,
+                             m_BodyUV_40[m_lod_7c.m_lod1],
+                             pTFTTCacheLookup_0,
+                             0,
+                             -1,
+                             nullptr,
+                             nullptr);  // 001805DE
+
+  GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
+                             m_SalMatrix_E4,
+                             m_BodyUV_40[m_lod_7c.m_lod1],
+                             pTFTTCacheLookup_0,
+                             1,
+                             -1,
+                             nullptr,
+                             nullptr);  // 00180606
+
+  int i_CC_sp6C = GFXPLAYER_spBatchBins[6]->GetDrawCalls();  // 00180610
+  int ir8 = GFXPLAYER_spBatchBins[7]->GetDrawCalls();   // 0018061A
+
+  if (m_HeaderModles_2c[m_lod_7c.m_lod3] != nullptr) {
+    TFTTCacheInstance tCacheLookup;
+    tCacheLookup.ci_0 = 0;
+    tCacheLookup.ci_1 = 0xFF;
+    if (i2 != -1) {
+      tCacheLookup.ci_0 = 0;
+      tCacheLookup.ci_1 = 0x1;
+    }
+    tCacheLookup.ci_0 |=pTFTTCacheLookup_0.ci_0;
+    tCacheLookup.ci_1 |=pTFTTCacheLookup_0.ci_1;
+    GFXPLAYER_pBatch->AddModel(m_HeaderModles_2c[m_lod_7c.m_lod3],
+                               m_SalMatrix_E4,
+                               m_HeaderUV_68[m_lod_7c.m_lod3],
+                               tCacheLookup,
+                               -1,
+                               -1,
+                               nullptr,
+                               nullptr);  // 00180654
+  }
+
+  // loc_180658
+  if (m_HairModeles_18[m_lod_7c.m_lod2] != nullptr) {
+    TFTTCacheInstance tCacheLookup;
+    tCacheLookup.ci_0 = 0xff;
+    tCacheLookup.ci_1 = 0xff;
+    GFXPLAYER_pBatch->AddModel(m_HairModeles_18[m_lod_7c.m_lod2],
+                               m_SalMatrix_E4,
+                               m_HairUV_54[m_lod_7c.m_lod2],
+                               tCacheLookup,
+                               -1,
+                               -1,
+                               nullptr,
+                               nullptr);
+  }
+
+  // loc_180684
+  if (GFXRENDER_bIsDepthPass || GFXRENDER_bIsBlackDepthPass) {
+    // 00180698
+  
+    int ir6 = GFXPLAYER_spBatchBins[6]->GetDrawCalls();  // 0018069C
+    int ir5 = GFXPLAYER_spBatchBins[7]->GetDrawCalls();  // 001806A6
+
+    if (i_CC_sp6C != ir6 && ir6 != 0) {
+      // 001806B6
+      LOGE("CGfxCharacter::RenderBatch_38");
+      int ir4 = GFXPLAYER_spBatchBins[6]->GetLastMatID();
+      CLinearDepthShader::s_tInstance.SetSource(ELinearDepthShader_Source_1, ir4);
+
+      // 001806D6
+      tTexParam.setDataEx(CGfxCharacter::s_iHairMegaTexture);
+      CLinearDepthShader::s_tInstance.SetDiffuseMaterial(tTexParam, ir4);
+    }
+
+    // loc_1806F2
+    if (ir8 != ir5 && ir5 != 0) {
+      // 001806FA
+       LOGE("CGfxCharacter::RenderBatch_39");
+      int ir4 = GFXPLAYER_spBatchBins[7]->GetLastMatID();  // 001806FE
+      CLinearDepthShader::s_tInstance.SetSource(ELinearDepthShader_Source_1, ir4);
+
+      tTexParam.setDataEx(CGfxCharacter::s_iHairMegaTexture);
+      CLinearDepthShader::s_tInstance.SetDiffuseMaterial(tTexParam, ir4);
+    }
+  }
+
+  // loc_180730
+  if (CGfxPlayer::ms_iNumHairMats <= 32) {
+    CGfxPlayer::ms_iHairMatList[CGfxPlayer::ms_iNumHairMats++] = m_Materials_C24[6];
+  }
 }
 //-------------------------------------------------------------------------------------------------
 //00180860 ^_^
 CFTTTexture *CGfxCharacter::GetMegaTexture() {
-  return 0;
+  LOGE("CGfxCharacter::GetMegaTexture");
+  return (CFTTTexture *)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001808AC ^_- 经过单元测试,功能正常

+ 8 - 4
jni/CGfxEnvironmentMap.cpp

@@ -93,17 +93,20 @@ CFTTTexture* CGfxEnvironmentMap::GetRaw() {
 //-------------------------------------------------------------------------------------------------
 //001AE4D4
 CFTTTexture* CGfxEnvironmentMap::GetDiffuseEnv() {
-  return nullptr;
+  LOGE("CGfxEnvironmentMap::GetDiffuseEnv%p",this);
+  return (CFTTTexture*)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001AE500
-CFTTTexture* CGfxEnvironmentMap::GetSpecularEnv(EPBRLightingMat) {
-  return nullptr;
+CFTTTexture* CGfxEnvironmentMap::GetSpecularEnv(EPBRLightingMat a1) {
+  LOGE("CGfxEnvironmentMap::GetSpecularEnv%p%x",this,a1);
+  return (CFTTTexture*)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001AE534
 CFTTTexture* CGfxEnvironmentMap::GetBRDFLUT() {
   //乱写的
+  LOGE("%p",this);
   if (rand() > 0) {
     printf("dasddsdasadasdas");
     CFTTTexture* ret = GFXSCENE_GetSpecularLUT(ELightingLUTMat_0);
@@ -112,7 +115,7 @@ CFTTTexture* CGfxEnvironmentMap::GetBRDFLUT() {
     ret->width_4 = 1024;
     return ret;
   }
-  return NULL;
+  return (CFTTTexture*)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001AE538
@@ -122,6 +125,7 @@ void CGfxEnvironmentMap::GetVDC() {
 //001AE53C
 EEnvMapOverride CGfxEnvironmentMap::GetForced() {
   //xxx
+  LOGE("CGfxEnvironmentMap::GetForced");
   return (EEnvMapOverride)field_74;
 }
 //-------------------------------------------------------------------------------------------------

+ 2 - 2
jni/CGfxPlayer.cpp

@@ -48,8 +48,8 @@ bool GFXPLAYER_bPlayerShadowVisible[35];
 //0045F298
 CFTTAABB32 GFXPLAYER_tPlayerAABBL[33];
 
-//int CGfxPlayer::ms_iHairMatList[33];
-//int CGfxPlayer::ms_iNumHairMats;
+int CGfxPlayer::ms_iHairMatList[33];
+int CGfxPlayer::ms_iNumHairMats;
 
 //-------------------------------------------------------------------------------------------------
 //00186800

+ 2 - 1
jni/CGfxShadowMap.cpp

@@ -35,8 +35,9 @@ void CGfxShadowMap::Clear(bool a0, uchar a1) {
 //001C7D90 ^_^
 CFTTTexture *CGfxShadowMap::GetTexture() {
   //001C7D9C
+  LOGE("CGfxShadowMap::GetTexture%p",this);
 
-  return NULL;
+  return (CFTTTexture *)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001C9548

+ 3 - 0
jni/CLinearDepthShader.cpp

@@ -15,11 +15,14 @@ CLinearDepthShader::~CLinearDepthShader() {
 //-------------------------------------------------------------------------------------------------
 //00180884 //^_^
 void CLinearDepthShader::SetSource(ELinearDepthShader_Source eSource, int a2) {
+   LOGE("%p%x%xCLinearDepthShader::SetSource",this,eSource,a2);
 }
 //-------------------------------------------------------------------------------------------------
 //00180894 //^_^
 void CLinearDepthShader::SetDiffuseMaterial(CFTTTexParam aTexParam, int a2) {
+   LOGE("%p%x%x%xSetDiffuseMaterial",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(),a2);
 }
+
 //-------------------------------------------------------------------------------------------------
 //00187484 //^_^
 void CLinearDepthShader::SetTest(ELinearDepthShader_Test eTest) {

+ 6 - 3
jni/CPBRLighting.cpp

@@ -112,17 +112,20 @@ void CPBRLighting::CreateDiffuseLUTBall() {
 //-------------------------------------------------------------------------------------------------
 //0018E684 ^_^
 CFTTTexture *CPBRLighting::GetDiffuse(EPBRLightingMat eMat) {
-  return nullptr;
+  LOGE("CPBRLighting::GetDiffuse%p%x",this,eMat);
+  return (CFTTTexture *)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0018E68C ^_^
 CFTTTexture *CPBRLighting::GetSpecular(EPBRLightingMat eMat) {
-  return nullptr;
+  LOGE("CPBRLighting::GetSpecular%p%x",this,eMat);
+  return (CFTTTexture *)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0018E694 ^_^
 CFTTTexture *CPBRLighting::GetVersatile() {
-  return nullptr;
+   LOGE("CPBRLighting::GetVersatile%p",this);
+  return (CFTTTexture *)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0018E698 ^_^

+ 13 - 0
jni/CPlayerShader.cpp

@@ -14,34 +14,42 @@ CPlayerShader::~CPlayerShader() {
 //-------------------------------------------------------------------------------------------------
 //0011F980 //^_^
 void CPlayerShader::SetBin(EPlayerShader_Bin eBin, int a2) {
+  LOGE("CPlayerShader::SetBin%p%x%x",this,eBin,a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011F990 //^_^
 void CPlayerShader::SetDiffuse(CFTTTexParam aTexParam, int a2) {
+   LOGE("CPlayerShader::SetDiffuse%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011F9A8 //^_^
 void CPlayerShader::SetSpecular(CFTTTexParam aTexParam, int a2) {
+   LOGE("CPlayerShader::SetSpecular%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011F9C0 //^_^
 void CPlayerShader::SetNormal(CFTTTexParam aTexParam, int a2) {
+  LOGE("CPlayerShader::SetNormal%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011F9D8 //^_^
 void CPlayerShader::SetAmbient(CFTTTexParam aTexParam, int a2) {
+   LOGE("CPlayerShader::SetAmbient%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011F9F0 //^_^
 void CPlayerShader::SetDiffRimLightLUT(CFTTTexParam aTexParam, int a2) {
+  LOGE("CPlayerShader::SetAmbient%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011FA08 //^_^
 void CPlayerShader::SetSpecLightLUT(CFTTTexParam aTexParam, int a2) {
+  LOGE("CPlayerShader::SetAmbient%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011FA20 //^_^
 void CPlayerShader::SetSpecularEnv(CFTTTexParam aTexParam, int a2) {
+  LOGE("CPlayerShader::SetAmbient%p%x%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4(), a2);
 }
 //-------------------------------------------------------------------------------------------------
 //0011FDBC //^_^
@@ -113,22 +121,27 @@ void CPlayerShader::SetColourMulti4(CFTTVector32 const& pVector32, int a2) {
 //-------------------------------------------------------------------------------------------------
 //00180808 //^_^
 void CPlayerShader::SetShadowMapTex(CFTTTexParam aTexParam) {
+  LOGE("CPlayerShader::SetShadowMapTex%p%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4());
 }
 //-------------------------------------------------------------------------------------------------
 //0018081C //^_^
 void CPlayerShader::SetFloatingPoint(EPlayerShader_FloatingPoint eFloatingPoint) {
+  LOGE("CPlayerShader::SetFloatingPoint%p%d",this,eFloatingPoint);
 }
 //-------------------------------------------------------------------------------------------------
 //0018082E //^_^
 void CPlayerShader::SetDiffuseEnv(CFTTTexParam aTexParam) {
+   LOGE("CPlayerShader::SetDiffuseEnv%p%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4());
 }
 //-------------------------------------------------------------------------------------------------
 //00180842 //^_^
 void CPlayerShader::SetBRDFLUT(CFTTTexParam aTexParam) {
+   LOGE("CPlayerShader::SetBRDFLUT%p%x%x",this,aTexParam.GetFlag0(),aTexParam.GetFlag4());
 }
 //-------------------------------------------------------------------------------------------------
 //00180856 //^_^
 void CPlayerShader::SetPBR(CFTTVector32x4 const& pVector32x4, int a2) {
+   LOGE("CPlayerShader::SetBRDFLUT%p%x%x%x%x",this,pVector32x4.my[0],pVector32x4.my[1],pVector32x4.my[2],pVector32x4.my[3],a2);
 }
 //-------------------------------------------------------------------------------------------------
 //00186CF4 //^_^

+ 0 - 1
obj/local/armeabi-v7a/objs/cpufeatures/archiver.list.tmp

@@ -1 +0,0 @@
-./obj/local/armeabi-v7a/objs/cpufeatures/cpu-features.o