123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780 |
- #include "CGFXSpec.h"
- #include "AndroidApp.h"
- #include "CFE.h"
- #include "CFTTAndroidDevice.h"
- #include "CFTTDevice.h"
- #include "CFTTGraphicsDevice.h"
- #include "CXmlUtil.h"
- #include "STORY.h"
- char CGFXSpec::s_cDeviceReport[0x1000];
- //-------------------------------------------------------------------------------------------------
- const char *list_ResLimit_323204[4] = {
- "ResLimit_Phone", //手机
- "ResLimit_Phablet", //平板手机
- "ResLimit_Tablet", //平板电脑
- "ResLimit_Screen" //
- };
- //-------------------------------------------------------------------------------------------------
- GFXSPEC_Specification GFXSPEC_tSpecification_AndroidLow{
- 0x1e, // field_0
- 1.399999976158142, // fLODMultGame_4
- 1.200000047683716, // fLODMultNIS_8
- 0.75, // fRTTScaleFactorX_C
- 0.75, // fRTTScaleFactorY_10
- 256, // iAtlasWidth_14
- 256, // iAtlasHeight_18
- 2, // iKitTexFormat_1C
- 512, // iKitDims_20
- false, // bSoftShadows_24
- true, // bEnvObjectShadows_25
- false, // bGameplayStadium_26
- true, // bCrowdAnimated_27
- false, // bDropTexMips_28
- false, // field_29 unuse
- false, // field_2A unuse
- false, // field_2B unuse
- 0, // eEnableDOF_2C
- false, // bEnableDepthFog_30
- false, // bEnableReflection_31
- false, // bEnableGodRays_32
- false, // bHighQualityNet_33
- 0u,
- 0u,
- 1u,
- 0u,
- nullptr, // pVHSShader_38
- false, // bHighQualityGroundShadows_3C
- false, // b3DGrass_3D
- false, // bFloatEnvMap_3E
- false, // bDynNormMap_3F
- 0, // eAntiAliasing_40
- EPlayerShader_Quality_0, // ePlayerLightingQuality_44
- EPitchShader_Quality_0, // eHighQualityGrass_48
- 0, // eCrowdQuality_4C
- -1, // iMinMaxResolution_50
- false, // bForce16Bit_54
- };
- //-------------------------------------------------------------------------------------------------
- GFXSPEC_Specification GFXSPEC_tSpecification_AndroidMed{
- 0x1e, // field_0
- 1.200000047683716, // fLODMultGame_4
- 1.100000023841858, // fLODMultNIS_8
- 0.75, // fRTTScaleFactorX_C
- 0.75, // fRTTScaleFactorY_10
- 256, // iAtlasWidth_14
- 256, // iAtlasHeight_18
- 3, // iKitTexFormat_1C
- 256, // iKitDims_20
- false, // bSoftShadows_24
- true, // bEnvObjectShadows_25
- true, // bGameplayStadium_26
- true, // bCrowdAnimated_27
- false, // bDropTexMips_28
- false, // field_29 unuse
- false, // field_2A unuse
- false, // field_2B unuse
- 1, // eEnableDOF_2C
- true, // bEnableDepthFog_30
- true, // bEnableReflection_31
- true, // bEnableGodRays_32
- true, // bHighQualityNet_33
- 1u,
- 1u,
- 3u,
- 0u,
- "2d_vhsbasic", // pVHSShader_38
- false, // bHighQualityGroundShadows_3C
- false, // b3DGrass_3D
- false, // bFloatEnvMap_3E
- false, // bDynNormMap_3F
- 0, // eAntiAliasing_40
- EPlayerShader_Quality_1, // ePlayerLightingQuality_44
- EPitchShader_Quality_1, // eHighQualityGrass_48
- 0, // eCrowdQuality_4C
- -1, // iMinMaxResolution_50
- false, // bForce16Bit_54
- };
- //-------------------------------------------------------------------------------------------------
- GFXSPEC_Specification GFXSPEC_tSpecification_AndroidHigh{
- 0x3c, // field_0
- 0.875, // fLODMultGame_4
- 0.75, // fLODMultNIS_8
- 1.0, // fRTTScaleFactorX_C
- 1.0, // fRTTScaleFactorY_10
- 256, // iAtlasWidth_14
- 256, // iAtlasHeight_18
- 3, // iKitTexFormat_1C
- 512, // iKitDims_20
- true, // bSoftShadows_24
- true, // bEnvObjectShadows_25
- true, // bGameplayStadium_26
- true, // bCrowdAnimated_27
- false, // bDropTexMips_28
- false, // field_29 unuse
- false, // field_2A unuse
- false, // field_2B unuse
- 2, // eEnableDOF_2C
- true, // bEnableDepthFog_30
- true, // bEnableReflection_31
- true, // bEnableGodRays_32
- true, // bHighQualityNet_33
- 1u,
- 1u,
- 4u,
- 0u,
- "2d_vhsfancy", // pVHSShader_38
- true, // bHighQualityGroundShadows_3C
- true, // b3DGrass_3D
- true, // bFloatEnvMap_3E
- true, // bDynNormMap_3F
- 0, // eAntiAliasing_40
- EPlayerShader_Quality_1, // ePlayerLightingQuality_44
- EPitchShader_Quality_2, // eHighQualityGrass_48
- 2, // eCrowdQuality_4C
- -1, // iMinMaxResolution_50
- false, // bForce16Bit_54
- };
- //-------------------------------------------------------------------------------------------------
- GFXSPEC_Specification GFXSPEC_tSpecification_AndroidHighest{
- 0x3c, // field_0
- 0.75, // fLODMultGame_4
- 0.5, // fLODMultNIS_8
- 1.0, // fRTTScaleFactorX_C
- 1.0, // fRTTScaleFactorY_10
- 256, // iAtlasWidth_14
- 256, // iAtlasHeight_18
- 3, // iKitTexFormat_1C
- 512, // iKitDims_20
- true, // bSoftShadows_24
- true, // bEnvObjectShadows_25
- true, // bGameplayStadium_26
- true, // bCrowdAnimated_27
- false, // bDropTexMips_28
- false, // field_29 unuse
- false, // field_2A unuse
- false, // field_2B unuse
- 3, // eEnableDOF_2C
- true, // bEnableDepthFog_30
- true, // bEnableReflection_31
- true, // bEnableGodRays_32
- true, // bHighQualityNet_33
- 1u,
- 1u,
- 4u,
- 0u,
- "2d_vhsfancy", // pVHSShader_38
- true, // bHighQualityGroundShadows_3C
- true, // b3DGrass_3D
- true, // bFloatEnvMap_3E
- true, // bDynNormMap_3F
- 3, // eAntiAliasing_40
- EPlayerShader_Quality_2, // ePlayerLightingQuality_44
- EPitchShader_Quality_3, // eHighQualityGrass_48
- 3, // eCrowdQuality_4C
- -1, // iMinMaxResolution_50
- false, // bForce16Bit_54
- };
- //-------------------------------------------------------------------------------------------------
- GFXSPEC_Specification *list_Specification_323214[]{
- &GFXSPEC_tSpecification_AndroidLow, &GFXSPEC_tSpecification_AndroidLow,
- &GFXSPEC_tSpecification_AndroidMed, &GFXSPEC_tSpecification_AndroidHigh,
- &GFXSPEC_tSpecification_AndroidHighest,
- };
- //-------------------------------------------------------------------------------------------------
- GFXSPEC_Specification *GFXSPEC_pSpecification;
- char CGFXSpec::s_cDeviceAnalyticsString[512];
- //-------------------------------------------------------------------------------------------------
- // 0018F3F0
- extern "C" {
- // 0018F3F0
- extern "C" {
- bool sub_18F3F0(CFTTXmlReaderNode *pXmlNode0, const char *pName, int *pOut) {
- CFTTXmlReaderNode xmlnode_C = pXmlNode0->GetFirstChild(pName);
- if (!xmlnode_C.IsValid()) return false;
- char *r0_text = CXmlUtil::GetText(xmlnode_C);
- if (r0_text == nullptr) return false;
- *pOut = atoi(r0_text);
- return true;
- }
- }
- }
- //-------------------------------------------------------------------------------------------------
- // 0018E728 经过单元测试,功能正常
- void CGFXSpec::Initialise() {
- // 只保留android相关的代码,ios的忽略
- // SYS_GetHardwareType();
- // locret_18E80A return
- LOGI("CGFXSpec::Initialise End");
- }
- //-------------------------------------------------------------------------------------------------
- // 0018EEF4 //^_- 经过单元测试,功能正常
- void CGFXSpec::UpdateGraphicsFromConfig(CFTTXmlReaderNode *pXmlNode) {
- char pbuf_134[256];
- CFTTAndroidDevice::GetDeviceType(pbuf_134, 256, false);
- char pbuf_234[256];
- CFTTAndroidDevice::GetDeviceType(pbuf_234, 256, true); // 0018EF26
- float fs16 = 0.01;
- int dInt_240, dr1;
- for (CFTTXmlReaderNode xmlnode_238 = pXmlNode->GetFirstChild("Spec");
- xmlnode_238.IsValid();
- xmlnode_238 = xmlnode_238.GetNextSibling("Spec")) {
- // loc_18EF82
- CFTTXmlReaderNode xmlnode_23C = xmlnode_238.GetFirstChild("Model");
- bool r5_isvalid = xmlnode_23C.IsValid();
- if (!xmlnode_23C.IsValid()) //注意此处的逻辑与原始的汇编略有区别 loc_18F000
- continue;
- while (xmlnode_23C.IsValid()) {
- // 0018EFA8
- char *r8_text = CXmlUtil::GetText(xmlnode_23C);
- if (r8_text != nullptr &&
- (strcmp(r8_text, pbuf_134) == 0 || strcmp(r8_text, pbuf_234) == 0)) {
- // loc_18F006
- break;
- }
- xmlnode_23C = xmlnode_23C.GetNextSibling("Model");
- }
- // loc_18F000 此处的判断被我移到上去面了
- // loc_18F006
- if (sub_18F3F0(&xmlnode_238, "fLODMultGame", &dInt_240))
- GFXSPEC_pSpecification->fLODMultGame_4 = (float)dInt_240 * (float)0.01;
- if (sub_18F3F0(&xmlnode_238, "fLODMultNIS", &dInt_240))
- GFXSPEC_pSpecification->fLODMultNIS_8 = (float)dInt_240 * (float)0.01;
- if (sub_18F3F0(&xmlnode_238, "fRTTScaleFactorX", &dInt_240))
- GFXSPEC_pSpecification->fRTTScaleFactorX_C =
- (float)dInt_240 * (float)0.01;
- if (sub_18F3F0(&xmlnode_238, "fRTTScaleFactorY", &dInt_240))
- GFXSPEC_pSpecification->fRTTScaleFactorY_10 =
- (float)dInt_240 * (float)0.01;
- // loc_18F086
- if (sub_18F3F0(&xmlnode_238, "iAtlasWidth", &dInt_240)) {
- dr1 = 256;
- if (!dInt_240) dr1 = 128;
- GFXSPEC_pSpecification->iAtlasWidth_14 = dr1;
- }
- // loc_18F0A4
- if (sub_18F3F0(&xmlnode_238, "iAtlasHeight", &dInt_240)) {
- dr1 = 256;
- if (!dInt_240) dr1 = 128;
- GFXSPEC_pSpecification->iAtlasHeight_18 = dr1;
- }
- if (sub_18F3F0(&xmlnode_238, "iKitTexFormat", &dInt_240)) {
- dr1 = 3;
- if (!dInt_240) dr1 = 2;
- GFXSPEC_pSpecification->iKitTexFormat_1C = dr1;
- }
- if (sub_18F3F0(&xmlnode_238, "iKitDims", &dInt_240)) {
- dr1 = 512;
- if (!dInt_240) dr1 = 256;
- GFXSPEC_pSpecification->iKitDims_20 = dr1;
- }
- if (sub_18F3F0(&xmlnode_238, "bSoftShadows", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bSoftShadows_24 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bEnvObjectShadows", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bEnvObjectShadows_25 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bGameplayStadium", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bGameplayStadium_26 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bCrowdAnimated", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bCrowdAnimated_27 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bDropTexMips", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bDropTexMips_28 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "eEnableDOF", &dInt_240))
- GFXSPEC_pSpecification->eEnableDOF_2C = dInt_240;
- if (sub_18F3F0(&xmlnode_238, "bEnableDepthFog", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bEnableDepthFog_30 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bEnableReflection", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bEnableReflection_31 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bEnableGodRays", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = 1;
- GFXSPEC_pSpecification->bEnableGodRays_32 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bHighQualityNet", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bHighQualityNet_33 = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "pVHSShader", &dInt_240)) {
- const char *r0_2d_vh = "2d_vhsbasic";
- if (dInt_240 != 1) r0_2d_vh = nullptr;
- if (dInt_240 == 2) r0_2d_vh = "2d_vhsfancy";
- GFXSPEC_pSpecification->pVHSShader_38 = r0_2d_vh;
- }
- if (sub_18F3F0(&xmlnode_238, "bHighQualityGroundShadows", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bHighQualityGroundShadows_3C = true;
- }
- if (sub_18F3F0(&xmlnode_238, "bFloatEnvMap", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bFloatEnvMap_3E = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "bDynNormMap", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bDynNormMap_3F = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "b3DGrass", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->b3DGrass_3D = br1;
- }
- if (sub_18F3F0(&xmlnode_238, "eHighQualityGrass", &dInt_240))
- GFXSPEC_pSpecification->eHighQualityGrass_48 =
- (EPitchShader_Quality)dInt_240;
- if (sub_18F3F0(&xmlnode_238, "eAntiAliasing", &dInt_240))
- GFXSPEC_pSpecification->eAntiAliasing_40 = dInt_240;
- if (sub_18F3F0(&xmlnode_238, "eCrowdQuality", &dInt_240))
- GFXSPEC_pSpecification->eCrowdQuality_4C = dInt_240;
- if (sub_18F3F0(&xmlnode_238, "ePlayerLightingQuality", &dInt_240))
- GFXSPEC_pSpecification->ePlayerLightingQuality_44 =
- (EPlayerShader_Quality)dInt_240;
- if (sub_18F3F0(&xmlnode_238, "iMinMaxResolution", &dInt_240))
- GFXSPEC_pSpecification->iMinMaxResolution_50 = dInt_240;
- if (sub_18F3F0(&xmlnode_238, "bForce16Bit", &dInt_240)) {
- bool br1 = false;
- if (dInt_240) br1 = true;
- GFXSPEC_pSpecification->bForce16Bit_54 = br1;
- }
- }
- CGFXSpec::ApplyResolutionClamp(pXmlNode);
- }
- // 0018E878 经过单元测试,功能正常
- void CGFXSpec::Platform_InspectDevice() {
- bool bGL_OES_depth_texture_B58, bHighFloat_B60, bIsGLES3_B50;
- int r7_dCpuCoreCount = CFTTDevice::GetCPUCoreCount();
- int r0_dRendererType =
- g_pGraphicsDevice->GetRendererType(); // OGLES=0; OGLES3=4; Vulkan=3
- // 0018E8A2
- if (r0_dRendererType == 4) { // OGLES3
- // loc_18E8D0
- if (g_pGraphicsDevice->bGL_OES_depth_texture_D)
- bGL_OES_depth_texture_B58 = true;
- else
- bGL_OES_depth_texture_B58 = false;
- if (g_pGraphicsDevice->bHighFloat_C)
- bHighFloat_B60 = true;
- else
- bHighFloat_B60 = false;
- // loc_18E8F0
- bIsGLES3_B50 = true;
- } else if (r0_dRendererType == 3) { // 0018E8A8 Vulkan
- // loc_18E8E8
- bGL_OES_depth_texture_B58 = true;
- bHighFloat_B60 = true;
- bIsGLES3_B50 = true;
- } else if (r0_dRendererType != 0) {
- // loc_18E8F4
- bGL_OES_depth_texture_B58 = false;
- bHighFloat_B60 = false;
- bIsGLES3_B50 = false;
- } else {
- // 0018E8AE
- if (g_pGraphicsDevice->bGL_OES_depth_texture_D)
- bGL_OES_depth_texture_B58 = true;
- else
- bGL_OES_depth_texture_B58 = false;
- if (g_pGraphicsDevice->bHighFloat_C)
- bHighFloat_B60 = true;
- else
- bHighFloat_B60 = false;
- if (g_pGraphicsDevice->bIsGLES3_B)
- bIsGLES3_B50 = true;
- else
- bIsGLES3_B50 = false;
- }
- // loc_18E900
- int r5_dWidth = g_pGraphicsDevice->width(); // 0018E908
- int r8_dHeight = g_pGraphicsDevice->height(); // 0018E916
- int iRAMKb_B6C = AndroidApp_GetTotalRAMInKB(); // 0018E92A
- char buf_428[1024];
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "Core Count: %d\n", r7_dCpuCoreCount); // 0018E93A
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018E954
- const char *pr3 = "NO";
- if (bIsGLES3_B50) {
- pr3 = "YES";
- }
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "GLES3: %s\n", pr3); // 0018E974
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018E97E
- pr3 = "NO";
- if (bHighFloat_B60) {
- pr3 = "YES";
- }
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "Highp in FS: %s\n", pr3); // 0018E994
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018E99E
- // 0018E9A0
- if (r5_dWidth > r8_dHeight) r5_dWidth = r8_dHeight;
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "Smaller Res: %d\n", r5_dWidth); // 0018E9B4
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018E9BE
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "RAM: %dKB\n", iRAMKb_B6C); // 0018E9D0
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018E9DA
- pr3 = "NO";
- if (bGL_OES_depth_texture_B58) {
- pr3 = "YES";
- }
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "Depth Texture Supported: %s\n", pr3); // 0018E9F0
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018E9FA
- int dr0 = bGL_OES_depth_texture_B58 ^ 1; // 0018E9FE
- if (r7_dCpuCoreCount == 1) {
- dr0++;
- }
- int r4_dNegatives = dr0 + (bHighFloat_B60 ^ 1);
- if (iRAMKb_B6C < (600 * 1024)) // 0018EA0A
- r4_dNegatives++;
- if (iRAMKb_B6C < (900 * 1024)) // 0018EA1A
- r4_dNegatives++;
- if (r5_dWidth < 640) r4_dNegatives++;
- if (CFTTAndroidDevice::GetSDKVersion() < 20) // 0018EA30
- r4_dNegatives++;
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "Negatives: %d\n", r4_dNegatives); // 0018EA42
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018EA4C
- dr0 = 0;
- if (r7_dCpuCoreCount > 3) dr0 = 1; // 0018EA54
- // 0018EA56
- if (iRAMKb_B6C > (1536 * 1024)) dr0++;
- int r5_dPositives = dr0;
- if (dr0 < 2) r5_dPositives = 2;
- if (!bIsGLES3_B50) r5_dPositives = dr0;
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "Positives: %d\n", r5_dPositives); // 0018EA7A
- strlcat(s_cDeviceReport, buf_428, 0x1000); // 0018EA84
- EAndroidGraphicsSettingsQuality r10_eQuality;
- if (r4_dNegatives >= 2) {
- // 0018EA8A
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "AGS_QUALITY_SETTING_FAST auto-chosen\n");
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r10_eQuality = EAndroidGraphicsSettingsQuality_FAST; // 0018EAA8
- } else {
- // loc_18EAAE
- if (r5_dPositives >= 2 && r4_dNegatives != 1) {
- // 0018EAB6
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "AGS_QUALITY_SETTING_HIGH auto-chosen");
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r10_eQuality = EAndroidGraphicsSettingsQuality_HIGH;
- } else {
- // loc_18EADA
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 1024, "AGS_QUALITY_SETTING_BALANCED auto-chosen");
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r10_eQuality = EAndroidGraphicsSettingsQuality_BALANCED;
- }
- }
- // loc_18EAFC
- char buf_model_628[512];
- memset(buf_model_628, 0, 512);
- CFTTDevice::GetModel(buf_model_628, 512); // 0018EB06
- int var_92C = -1;
- char buf_728[256];
- memset(buf_728, 0, 256);
- CFTTAndroidDevice::GetDeviceType(buf_728, 256, false); // 0018EB1C
- char buf_828[256];
- memset(buf_828, 0, 256);
- CFTTAndroidDevice::GetDeviceType(buf_828, 256, true); // 0018EB2A
- wchar_t wgpuname_B2C[256];
- memset(wgpuname_B2C, 0, sizeof(wchar_t) * 256);
- g_pGraphicsDevice->GetGPUName(wgpuname_B2C, 256); // 0018EB3C
- char gpuname_928[256];
- memset(gpuname_928, 0, 256);
- UnicodeToAscii(gpuname_928, wgpuname_B2C, 256, '_'); // 0018EB4A
- CGPUDatabaseMode tGPUDatabase_B44;
- tGPUDatabase_B44.dEnabled_0 = 0;
- tGPUDatabase_B44.dMinSamples_4 = 5;
- tGPUDatabase_B44.dMetric_8 = 0;
- tGPUDatabase_B44.dMed_C = 1500;
- tGPUDatabase_B44.dHigh_10 = 3500;
- tGPUDatabase_B44.dVHigh_14 = 8000;
- EAndroidGraphicsSettingsQuality dr7;
- EAndroidGraphicsSettingsQuality var_B60;
- EAndroidGraphicsSettingsQuality r8_eQuality = STORY_GetGfxQualityOverride(
- buf_728, buf_828, gpuname_928, tGPUDatabase_B44);
- // 0018EB76
- if (r8_eQuality == EAndroidGraphicsSettingsQuality_FAST ||
- r8_eQuality == EAndroidGraphicsSettingsQuality_BALANCED ||
- r8_eQuality == EAndroidGraphicsSettingsQuality_HIGH) {
- // 0018EB84
- snprintf(
- buf_428, 1024,
- "Graphics quality auto choice overridden by config. Was %d, now %d.\n",
- r10_eQuality, r8_eQuality);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- dr7 = r8_eQuality;
- var_B60 = EAndroidGraphicsSettingsQuality_ERR;
- } else {
- // loc_18EBB2
- var_B60 = (EAndroidGraphicsSettingsQuality)
- CFTTAndroidGraphicsSettings::ApplyGPUDatabaseOverride(
- "PKG:data/x_android/gpu_db.dat", buf_model_628, tGPUDatabase_B44,
- r10_eQuality,
- var_92C); // 0018EBC2
- memset(buf_428, 0, 1024);
- // 0018EBCA
- if (var_92C != -1) {
- // 0018EBCE
- if (var_B60 == r10_eQuality) {
- // 0018EBD4
- snprintf(buf_428, 1024,
- "Graphics quality unchanged by GPU Database. Score %d, "
- "Quality %d.\n",
- var_92C, r10_eQuality);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r8_eQuality = EAndroidGraphicsSettingsQuality_ERR;
- var_B60 = r10_eQuality;
- // MOV R7, R10
- dr7 = r10_eQuality;
- } else {
- // loc_18EC74
- snprintf(buf_428, 1024,
- "Graphics quality auto choice overridden by GPU Database. Was "
- "%d, now %d. Score=%d.\n",
- r10_eQuality, var_B60, var_92C);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r8_eQuality = EAndroidGraphicsSettingsQuality_ERR;
- }
- } else {
- // loc_18EC00 未知设备
- snprintf(buf_428, 1024,
- "Device %s not present in Android database or insufficient "
- "samples.\n",
- buf_model_628);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r8_eQuality = EAndroidGraphicsSettingsQuality_ERR;
- var_B60 = EAndroidGraphicsSettingsQuality_ERR;
- dr7 = r10_eQuality;
- }
- }
- // loc_18EC9E
- EAndroidGraphicsSettingsFPS r6_eFPS = EAndroidGraphicsSettingsFPS_2;
- GFXSPEC_pSpecification = list_Specification_323214[dr7];
- if (GFXSPEC_pSpecification->dFPS_0 == 30) {
- r6_eFPS = EAndroidGraphicsSettingsFPS_1;
- }
- CFTTAndroidGraphicsSettings::SetFPSAutoChoice(r6_eFPS); // 0018ECBE
- bool var_B49[5];
- var_B49[0] = var_B49[1] = var_B49[2] = true;
- var_B49[3] = dr7 > EAndroidGraphicsSettingsQuality_FAST;
- var_B49[4] = dr7 > EAndroidGraphicsSettingsQuality_BALANCED;
- CFTTAndroidGraphicsSettings::SetQualityChoice(dr7, &var_B49[0]);
- bool r10_bFPS = GFXSPEC_pSpecification->dFPS_0 == 30; // 0018ECFC
- EAndroidGraphicsSettingsQuality dUS_dr11 = (EAndroidGraphicsSettingsQuality)
- CFTTAndroidGraphicsSettings::GetUserSetting(
- EAndroidGraphicsSettingsOption_1);
- EAndroidGraphicsSettingsQuality dUS_dr4 = (EAndroidGraphicsSettingsQuality)
- CFTTAndroidGraphicsSettings::GetUserSetting(
- EAndroidGraphicsSettingsOption_0);
- EAndroidGraphicsSettingsQuality dUS_dr5 = (EAndroidGraphicsSettingsQuality)
- CFTTAndroidGraphicsSettings::GetUserSetting(
- EAndroidGraphicsSettingsOption_2);
- // 0018ED1C
- if (dUS_dr11 && dUS_dr11 != dr7) {
- // 0018ED28
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 0x400, "User overridden quality choice. Was %d, now %d",
- dr7, dUS_dr11);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- GFXSPEC_pSpecification = list_Specification_323214[dUS_dr11];
- }
- // loc_18ED5A //??? eFPS 及dUS_dr4
- // 类型都应该没有错,但是在这儿却做了比较,暂时只能这么写了
- if (dUS_dr4 && dUS_dr4 != (EAndroidGraphicsSettingsQuality)r6_eFPS) {
- // 0018ED60
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 0x400, "User overridden fps choice. Was %d, now %d",
- r6_eFPS, dUS_dr4);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- r10_bFPS = dUS_dr4 == EAndroidGraphicsSettingsQuality_FAST;
- }
- // loc_18ED8C
- int dr3 = 60;
- if (r10_bFPS) dr3 = 30;
- GFXSPEC_pSpecification->dFPS_0 = dr3;
- snprintf(s_cDeviceAnalyticsString, 512, "%s,%d,%d,%d,%d,%d,%d,%d",
- buf_model_628, r10_eQuality, r8_eQuality, var_B60, var_92C, dUS_dr11,
- dUS_dr4,
- dUS_dr5); // 0018EDC4
- // 0018EDD8
- memset(buf_428, 0, 1024);
- snprintf(buf_428, 0x400u, "Analytics String:%s\n", s_cDeviceAnalyticsString);
- strlcat(s_cDeviceReport, buf_428, 0x1000);
- // 0018EDE8
- if (!bGL_OES_depth_texture_B58) {
- GFXSPEC_pSpecification->bEnableDepthFog_30 = false;
- GFXSPEC_pSpecification->eEnableDOF_2C = 1;
- GFXSPEC_pSpecification->bEnableGodRays_32 = false;
- }
- // loc_18EDFE
- if (g_pGraphicsDevice->GetRendererType() == 0 ||
- g_pGraphicsDevice->GetRendererType() == 4) {
- // loc_18EE1A
- if (!g_pGraphicsDevice->field_24) {
- GFXSPEC_pSpecification->eEnableDOF_2C = true;
- GFXSPEC_pSpecification->bSoftShadows_24 = false;
- GFXSPEC_pSpecification->bEnableDepthFog_30 = false;
- GFXSPEC_pSpecification->bEnableReflection_31 = false;
- GFXSPEC_pSpecification->bEnableGodRays_32 = false;
- GFXSPEC_pSpecification->pVHSShader_38 = "2d_vhsbasic";
- }
- // loc_18EE3C &&
- if (g_pGraphicsDevice->bMapbuffer_9) {
- // 0018EE42
- if (g_pGraphicsDevice->field_20) {
- if (g_pGraphicsDevice->field_20 == 1) {
- GFXSPEC_pSpecification->fLODMultGame_4 = 1.8f;
- GFXSPEC_pSpecification->fLODMultNIS_8 = 1.2f;
- } else {
- return;
- }
- } else {
- // loc_18EE60
- GFXSPEC_pSpecification->fLODMultGame_4 = 3.0f;
- GFXSPEC_pSpecification->fLODMultNIS_8 = 1.5f;
- }
- } else {
- // loc_18EE50
- if (g_pGraphicsDevice->field_20) {
- // 0018EE52
- if (g_pGraphicsDevice->field_20 == 1) {
- // 0018EE48
- GFXSPEC_pSpecification->fLODMultGame_4 = 2.3f;
- GFXSPEC_pSpecification->fLODMultNIS_8 = 2.0f;
- } else {
- return;
- }
- } else {
- // loc_18EE6A
- GFXSPEC_pSpecification->fLODMultGame_4 = 4.3f;
- GFXSPEC_pSpecification->fLODMultNIS_8 = 3.0f;
- }
- }
- // loc_18EE70
- }
- // loc_18EE76
- }
- //-------------------------------------------------------------------------------------------------
- // 0018F41C //^_^
- void CGFXSpec::ApplyResolutionClamp(CFTTXmlReaderNode *pXmlNode) {
- // locret_18F4C6
- LOGE(" CGFXSpec::ApplyResolutionClamp%p",pXmlNode);
- }
- //-------------------------------------------------------------------------------------------------
|