diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 0a0f19d3..031fe6c2 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -40188,7 +40188,7 @@ Address,Quality,Size,Name 0x00000071006726dc,U,000264, 0x00000071006727e4,U,000164,_ZN4sead6Worker10getNextJQ_Ev 0x0000007100672888,U,000260, -0x000000710067298c,U,000372,_ZN4sead15FixedSafeStringILi19EEaSERKNS_14SafeStringBaseIcEE +0x000000710067298c,U,000372, 0x0000007100672b00,U,000028, 0x0000007100672b1c,U,000028, 0x0000007100672b38,U,000040, @@ -68997,62 +68997,62 @@ Address,Quality,Size,Name 0x0000007100c19b48,U,000004,nullsub_3524 0x0000007100c19b4c,U,000020,_ZN4gsys19ModelSceneComponentC2Ev 0x0000007100c19b60,U,000080,_ZN4gsys19ModelSceneComponentD2Ev -0x0000007100c19bb0,U,000092,_ZThn176_N2nn3atk6detail6driver23AdvancedWaveSoundPlayerD0Ev +0x0000007100c19bb0,U,000092, 0x0000007100c19c0c,U,000008, 0x0000007100c19c14,U,000068,_ZN4gsys19ModelSceneComponent14setUpComponentEiPN4sead4HeapES3_ 0x0000007100c19c58,U,000004,nullsub_3525 -0x0000007100c19c5c,U,000404, -0x0000007100c19df0,U,000404, -0x0000007100c19f84,U,014120,_ZN4gsys16ModelSceneConfigC2Ev -0x0000007100c1d6ac,U,000552,_ZN4sead9SafeArrayIN3agl3utl9ParameterIbEELi42EEC2Ev -0x0000007100c1d8d4,U,000296, -0x0000007100c1d9fc,U,000480,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi64EEEEELi8EEC2Ev -0x0000007100c1dbdc,U,000476,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi32EEEEELi8EEC2Ev -0x0000007100c1ddb8,U,000008, -0x0000007100c1ddc0,U,000008, -0x0000007100c1ddc8,U,000032,_ZNK3eui6Screen8isClosedEv -0x0000007100c1dde8,U,000032, -0x0000007100c1de08,U,000568,_ZNK4gsys16ModelSceneConfig9preWrite_Ev -0x0000007100c1e040,U,000028, -0x0000007100c1e05c,U,001504,_ZN4gsys16ModelSceneConfig9postRead_Ev -0x0000007100c1e63c,U,000008, -0x0000007100c1e644,U,000040,_ZNK4gsys16ModelSceneConfig21getEnvObjSetTemplate_Ei -0x0000007100c1e66c,U,001168,_ZN3agl3env6EnvObjC2Ev -0x0000007100c1eafc,U,001520,_ZN4gsys20ModelSceneConfigListC2Ev -0x0000007100c1f0ec,U,000500,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EEC2Ev -0x0000007100c1f2e0,U,000076,_ZN4gsys20ModelSceneConfigList12applyResouceEPKv -0x0000007100c1f32c,U,000492,_ZN4gsys20ModelSceneConfigList5setupERKN4sead14SafeStringBaseIcEE -0x0000007100c1f518,U,000560,_ZN4gsys20ModelSceneConfigList6reloadERKN4sead14SafeStringBaseIcEE -0x0000007100c1f748,U,000096,_ZNK4gsys20ModelSceneConfigList9preWrite_Ev -0x0000007100c1f7a8,U,000088, -0x0000007100c1f800,U,000112,_ZN4gsys20ModelSceneConfigList8preRead_Ev -0x0000007100c1f870,U,000112, -0x0000007100c1f8e0,U,000460,_ZN4gsys20ModelSceneConfigList9postRead_Ev -0x0000007100c1faac,U,000008, -0x0000007100c1fab4,U,000016, -0x0000007100c1fac4,U,001012, -0x0000007100c1feb8,U,000036, -0x0000007100c1fedc,U,000008, -0x0000007100c1fee4,U,000040, -0x0000007100c1ff0c,U,000004,j__ZdlPv_772 -0x0000007100c1ff10,U,001352, -0x0000007100c20458,U,000036, -0x0000007100c2047c,U,000008, -0x0000007100c20484,U,000040, -0x0000007100c204ac,U,000064, -0x0000007100c204ec,U,000004,j__ZdlPv_773 -0x0000007100c204f0,U,000172, -0x0000007100c2059c,U,000004,j__ZdlPv_774 -0x0000007100c205a0,U,000240,_ZN4sead15FixedSafeStringILi27EEaSERKNS_14SafeStringBaseIcEE -0x0000007100c20690,U,000004,j__ZdlPv_775 -0x0000007100c20694,U,000240,_ZN4sead19FixedSafeStringBaseIcLi27EEaSERKNS_14SafeStringBaseIcEE -0x0000007100c20784,U,000168, -0x0000007100c2082c,U,000004,j__ZdlPv_776 -0x0000007100c20830,U,000240,_ZN4sead15FixedSafeStringILi50EEaSERKNS_14SafeStringBaseIcEE -0x0000007100c20920,U,000004,j__ZdlPv_777 -0x0000007100c20924,U,000240,_ZN4sead19FixedSafeStringBaseIcLi50EEaSERKNS_14SafeStringBaseIcEE -0x0000007100c20a14,U,000504,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EED2Ev -0x0000007100c20c0c,U,000696, +0x0000007100c19c5c,O,000404,_ZNK4gsys12_GLOBAL__N_111DepthFormat4textEv +0x0000007100c19df0,O,000404,_ZNK4gsys12_GLOBAL__N_120DepthShadowMapFormat4textEv +0x0000007100c19f84,m,014120,_ZN4gsys16ModelSceneConfigC1Ev +0x0000007100c1d6ac,O,000552,_ZN4sead9SafeArrayIN3agl3utl9ParameterIbEELi42EEC2Ev +0x0000007100c1d8d4,O,000296,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfig16DepthShadowParamELi2EEC2Ev +0x0000007100c1d9fc,O,000480,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi64EEEEELi8EEC2Ev +0x0000007100c1dbdc,O,000476,_ZN4sead9SafeArrayIN3agl3utl9ParameterINS_15FixedSafeStringILi32EEEEELi8EEC2Ev +0x0000007100c1ddb8,O,000008,_ZNK4gsys16ModelSceneConfig31getStaticDepthShadowDepthFormatEv +0x0000007100c1ddc0,O,000008,_ZNK4gsys16ModelSceneConfig40getStaticDepthShadowDepthShadowMapFormatEv +0x0000007100c1ddc8,O,000032,_ZN4gsys16ModelSceneConfig8preRead_Ev +0x0000007100c1dde8,O,000032,_ZThn8_N4gsys16ModelSceneConfig8preRead_Ev +0x0000007100c1de08,O,000568,_ZNK4gsys16ModelSceneConfig9preWrite_Ev +0x0000007100c1e040,O,000028,_ZThn8_NK4gsys16ModelSceneConfig9preWrite_Ev +0x0000007100c1e05c,O,001504,_ZN4gsys16ModelSceneConfig9postRead_Ev +0x0000007100c1e63c,O,000008,_ZThn8_N4gsys16ModelSceneConfig9postRead_Ev +0x0000007100c1e644,O,000040,_ZNK4gsys16ModelSceneConfig21getEnvObjSetTemplate_Ei +0x0000007100c1e66c,O,001168,_ZN4gsys16ModelSceneConfig17EnvObjSetTemplateC1Ev +0x0000007100c1eafc,O,001520,_ZN4gsys20ModelSceneConfigListC1Ev +0x0000007100c1f0ec,O,000500,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EEC2Ev +0x0000007100c1f2e0,O,000076,_ZN4gsys20ModelSceneConfigList12applyResouceEPKv +0x0000007100c1f32c,O,000492,_ZN4gsys20ModelSceneConfigList5setupERKN4sead14SafeStringBaseIcEE +0x0000007100c1f518,O,000560,_ZN4gsys20ModelSceneConfigList6reloadERKN4sead14SafeStringBaseIcEE +0x0000007100c1f748,O,000096,_ZNK4gsys20ModelSceneConfigList9preWrite_Ev +0x0000007100c1f7a8,O,000088,_ZThn8_NK4gsys20ModelSceneConfigList9preWrite_Ev +0x0000007100c1f800,O,000112,_ZN4gsys20ModelSceneConfigList8preRead_Ev +0x0000007100c1f870,O,000112,_ZThn8_N4gsys20ModelSceneConfigList8preRead_Ev +0x0000007100c1f8e0,M,000460,_ZN4gsys20ModelSceneConfigList9postRead_Ev +0x0000007100c1faac,O,000008,_ZThn8_N4gsys20ModelSceneConfigList9postRead_Ev +0x0000007100c1fab4,O,000016,_ZN4gsys20ModelSceneConfigList21EnvObjSetTemplateList8preRead_Ev +0x0000007100c1fac4,O,001012,_ZN4gsys16ModelSceneConfigD2Ev +0x0000007100c1feb8,O,000036,_ZN4gsys16ModelSceneConfigD0Ev +0x0000007100c1fedc,O,000008,_ZThn8_N4gsys16ModelSceneConfigD1Ev +0x0000007100c1fee4,O,000040,_ZThn8_N4gsys16ModelSceneConfigD0Ev +0x0000007100c1ff0c,O,000004,_ZN4gsys20ModelSceneConfigList21EnvObjSetTemplateListD0Ev +0x0000007100c1ff10,O,001352,_ZN4gsys20ModelSceneConfigListD2Ev +0x0000007100c20458,O,000036,_ZN4gsys20ModelSceneConfigListD0Ev +0x0000007100c2047c,O,000008,_ZThn8_N4gsys20ModelSceneConfigListD1Ev +0x0000007100c20484,O,000040,_ZThn8_N4gsys20ModelSceneConfigListD0Ev +0x0000007100c204ac,O,000064,_ZN4gsys16ModelSceneConfig17EnvObjSetTemplateD2Ev +0x0000007100c204ec,O,000004,_ZN4gsys16ModelSceneConfig17EnvObjSetTemplateD0Ev +0x0000007100c204f0,O,000172,_ZN4gsys12_GLOBAL__N_111DepthFormat9getArray_Ev +0x0000007100c2059c,O,000004,_ZN4sead15FixedSafeStringILi19EED0Ev +0x0000007100c205a0,O,000240,_ZN4sead15FixedSafeStringILi19EEaSERKNS_14SafeStringBaseIcEE +0x0000007100c20690,O,000004,_ZN4sead19FixedSafeStringBaseIcLi19EED0Ev +0x0000007100c20694,O,000240,_ZN4sead19FixedSafeStringBaseIcLi19EEaSERKNS_14SafeStringBaseIcEE +0x0000007100c20784,O,000168,_ZN4gsys12_GLOBAL__N_120DepthShadowMapFormat9getArray_Ev +0x0000007100c2082c,O,000004,_ZN4sead15FixedSafeStringILi57EED0Ev +0x0000007100c20830,O,000240,_ZN4sead15FixedSafeStringILi57EEaSERKNS_14SafeStringBaseIcEE +0x0000007100c20920,O,000004,_ZN4sead19FixedSafeStringBaseIcLi57EED0Ev +0x0000007100c20924,O,000240,_ZN4sead19FixedSafeStringBaseIcLi57EEaSERKNS_14SafeStringBaseIcEE +0x0000007100c20a14,O,000504,_ZN4sead9SafeArrayIN4gsys16ModelSceneConfigELi32EED2Ev +0x0000007100c20c0c,O,000696,_GLOBAL__sub_I_gsysModelSceneConfig.cpp 0x0000007100c20ec4,U,000120,_ZN4gsys17ModelSceneContextC2Ev 0x0000007100c20f3c,U,000096, 0x0000007100c20f9c,U,000104, @@ -86267,9 +86267,9 @@ Address,Quality,Size,Name 0x000000710101c90c,O,000412,_ZN4ksys3snd25EnvPaletteReactiveBgmInfo25EnvPaletteReactiveBgmEnum5text_Ei 0x000000710101caa8,U,000428, 0x000000710101cc54,U,000004,j__ZdlPv_1094 -0x000000710101cc58,U,000240,_ZN4sead19FixedSafeStringBaseIcLi113EEaSERKNS_14SafeStringBaseIcEE +0x000000710101cc58,U,000240, 0x000000710101cd48,U,000004,j__ZdlPv_1095 -0x000000710101cd4c,U,000240,_ZN4sead19FixedSafeStringBaseIcLi19EEaSERKNS_14SafeStringBaseIcEE +0x000000710101cd4c,U,000240, 0x000000710101ce3c,U,000032, 0x000000710101ce5c,U,000176, 0x000000710101cf0c,U,000072, diff --git a/lib/agl b/lib/agl index eb11f3af..0f55dfba 160000 --- a/lib/agl +++ b/lib/agl @@ -1 +1 @@ -Subproject commit eb11f3af9f3a39f4e515ec53f122a11527083c1b +Subproject commit 0f55dfbaa9fcaf53e769cfc2cfc6e94187793e75 diff --git a/lib/gsys/CMakeLists.txt b/lib/gsys/CMakeLists.txt index f6ec27a6..f51725f1 100644 --- a/lib/gsys/CMakeLists.txt +++ b/lib/gsys/CMakeLists.txt @@ -1,14 +1,22 @@ project(gsys CXX ASM) add_library(gsys OBJECT + include/gsys/gsysMaskedProjLight.h + include/gsys/gsysMaskedProjLight.h + include/gsys/gsysMaskedSpotLight.h include/gsys/gsysModel.h include/gsys/gsysModelAccessKey.h include/gsys/gsysModelNW.h + include/gsys/gsysModelSceneConfig.h include/gsys/gsysModelUnit.h + include/gsys/gsysOfxLensFlareRig.h include/gsys/gsysORUtil.h include/gsys/gsysParticleConfig.h + include/gsys/gsysPointLight.h + include/gsys/gsysSpotLight.h src/gsys/gsysModelAccessKey.cpp + src/gsys/gsysModelSceneConfig.cpp src/gsys/gsysParticleConfig.cpp ) diff --git a/lib/gsys/include/gsys/gsysLightRigObj.h b/lib/gsys/include/gsys/gsysLightRigObj.h new file mode 100644 index 00000000..ad40f986 --- /dev/null +++ b/lib/gsys/include/gsys/gsysLightRigObj.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +namespace gsys { + +class MaskedSpotLight; +class PointLight; +class SpotLight; + +// TODO +template +class LightRigObj { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +extern template class LightRigObj; +extern template class LightRigObj; +extern template class LightRigObj; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysMaskedProjLight.h b/lib/gsys/include/gsys/gsysMaskedProjLight.h new file mode 100644 index 00000000..749b6328 --- /dev/null +++ b/lib/gsys/include/gsys/gsysMaskedProjLight.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +namespace gsys { + +// TODO +class MaskedProjLight { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +// TODO +class MaskedProjLightRig { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysMaskedSpotLight.h b/lib/gsys/include/gsys/gsysMaskedSpotLight.h new file mode 100644 index 00000000..8a484aef --- /dev/null +++ b/lib/gsys/include/gsys/gsysMaskedSpotLight.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +namespace gsys { + +// TODO +class MaskedSpotLight { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +// TODO +class MaskedSpotLightRig { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysModelSceneConfig.h b/lib/gsys/include/gsys/gsysModelSceneConfig.h new file mode 100644 index 00000000..bebe7966 --- /dev/null +++ b/lib/gsys/include/gsys/gsysModelSceneConfig.h @@ -0,0 +1,287 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace gsys { + +class ModelSceneConfigList; + +class ModelSceneConfig : public sead::hostio::Node, public agl::utl::IParameterObj { +public: + static constexpr int NumFeatures = 42; + + struct FeatureDescription { + const char* description; + const char* parameter_name; + bool _10; + bool _11; + bool should_create_by_default; + const char* jp_description; + }; + + enum class Feature { + LightMap = 0, + LightProbe = 1, + SnapShot = 2, + DepthShadow = 3, + MaskedLight = 4, + StaticDepthShadow = 5, + EnvCubeMap = 6, + Reflection = 7, + LocalReflection = 8, + ZPrePass = 9, + LightPrePass = 10, + ShadowPrePass = 11, + Decal = 12, + NormalDrawer = 13, + SSAO = 14, + SSII = 15, + SSSSS = 16, + OcclusionQeuery = 17, + DeferredShading = 18, + OpaqueAlphaMask = 19, + OutlineSilhouette = 20, + DepthSilhouette = 21, + XluSeal = 22, + Cloud = 23, + VolumeMask = 24, + XluWater = 25, + Xlu = 26, + XluIndirect = 27, + XluFx = 28, + ReducedBuffer = 29, + ShadowMask = 30, + RadialBlur = 31, + DOF = 32, + XluZPrePass = 33, + Bloom = 34, + GlareFilter = 35, + FlareFilter = 36, + OccludedEffect = 37, + AutoExposure = 38, + HDR = 39, + ColorCorrection = 40, + FilterAA = 41, + }; + + struct DepthShadowParam { + agl::utl::Parameter use_uniform_mtx; + agl::utl::Parameter cascade_num; + sead::SafeArray, 4> near; + agl::utl::Parameter far; + agl::utl::Parameter offset_near; + agl::utl::Parameter offset_far; + }; + + struct EnvObjSetTemplate : agl::utl::IParameterObj { + EnvObjSetTemplate(); + + agl::utl::Parameter enable; + agl::utl::Parameter num; + agl::utl::Parameter ambient_light_num; + agl::utl::Parameter directional_light_num; + agl::utl::Parameter hemisphere_light_num; + agl::utl::Parameter fog_num; + agl::utl::Parameter light_map_obj_num; + agl::utl::Parameter> template_name; + }; + + ModelSceneConfig(); + + int getStaticDepthShadowDepthFormat() const; + int getStaticDepthShadowDepthShadowMapFormat() const; + + EnvObjSetTemplate& getEnvObjSetTemplate_(int index) const; + + bool preRead_() override; + void postRead_() override; + bool preWrite_() const override; + + static constexpr int cConfig_Max = 32; + +private: + friend class ModelSceneConfigList; + + agl::utl::IParameterObj _c0; + agl::env::EnvObjMgr::InitArg mEnvObjMgrInitArg; + agl::env::EnvObjBuffer::AllocateArg mEnvObjBufferAllocateArg; + + sead::SafeArray, NumFeatures> mEnabledFeatures; + sead::SafeArray, NumFeatures> mShouldCreateFeatures; + agl::env::EnvObjSetMgr::InitArg mEnvObjSetMgrInitArg; + const sead::FixedSafeString<32>* mConfigName{}; + ModelSceneConfigList* mpConfigList{}; + bool _1798 = false; + bool _1799 = false; + sead::FixedSafeString<64> _17A0; + int mIndex1 = -1; + int mIndex2 = -1; + int mStaticSdwDepthFormat; + int mStaticSdwShadowMapFormat; + agl::utl::Parameter mOpaPolygonOffset; + agl::utl::Parameter mOpaPolygonScale; + agl::utl::Parameter mXluPolygonOffset; + agl::utl::Parameter mXluPolygonScale; + agl::utl::Parameter mRevPolygonOffset; + agl::utl::Parameter mRevPolygonScale; + agl::utl::Parameter mLinearLightingEnable; + agl::utl::Parameter mHizExpandEnable; + agl::utl::Parameter mNldEnable; + agl::utl::Parameter mNld32Bit; + agl::utl::Parameter mNldHalf32Bit; + agl::utl::Parameter mDepthReduce; + agl::utl::Parameter mZPrePassSelectable; + agl::utl::Parameter mDepthClear; + agl::utl::Parameter mGBufferAlbedoSrgb; + agl::utl::Parameter mIndirectBufferLDR; + agl::utl::Parameter mReducedBuffer16Bit; + agl::utl::Parameter mReducedBufferEdgeAdjustBake; +#ifdef UKING_NX_V150 + agl::utl::Parameter mReducedBufferBlurAdjustBake; +#endif + agl::utl::Parameter mReducedBufferEdgeAdjust; + agl::utl::Parameter mReducedBufferEdgeAdjustCoeff; + agl::utl::Parameter mGBufferAlbedoReduceNearest; + agl::utl::Parameter mGBufferNormal8Bit; + agl::utl::Parameter mGBufferNormalDisableReduce; + agl::utl::Parameter mGBufferNormalReduceNearest; + agl::utl::Parameter mGBufferNormalZSignW; + agl::utl::Parameter mGBufferDepth; + agl::utl::Parameter mGBufferMaterialIdFormat; + agl::utl::Parameter mBaseResoWidth; + agl::utl::Parameter mBaseResoHeight; + agl::utl::Parameter mGpuStressAnalyzerEnable; + agl::utl::Parameter mEnableDrcFilterAa; + agl::utl::Parameter mInitFilterAaSmaaResTextures; + agl::utl::Parameter mGpuStressAnalyzerReduceBufferenable; + sead::SafeArray, 3> mLmMax; + agl::utl::Parameter mLightMapSizeSphere; + agl::utl::Parameter mLightMapCube; + agl::utl::Parameter mLightMapAmbientLight; + agl::utl::Parameter mLightMapHemiSphereLight; + agl::utl::Parameter mLightMapDirectionalLight; + sead::SafeArray, 2> mCubeMapMaxTex; + agl::utl::Parameter mLightPrepassTextureHalf; + agl::utl::Parameter mUseDecalAo; + agl::utl::Parameter mDecalAoObjectMax; + agl::utl::Parameter mDecalAoTextureMax; + agl::utl::Parameter mDecalAoTextureWidth; + agl::utl::Parameter mDecalAoTextureHeight; + agl::utl::Parameter mDecalAoTextureCannelNum; + agl::utl::Parameter mUseDecalBuffer; + agl::utl::Parameter mUseDecalTrail; + agl::utl::Parameter mStaticSdwWidth; + mutable agl::utl::Parameter> mStaticSdwDepthFormatName; + mutable agl::utl::Parameter> mStaticSdwShadowMapFormatName; + agl::utl::Parameter mMaskedLightShadowOnly; + agl::utl::Parameter mDepthShadowClipPlaneEnable; + agl::utl::Parameter mDepthShadowExClipPlaneNum; + sead::SafeArray, 4> mDepthShadowClipPlanes; + agl::utl::Parameter mDepthShadowPcfOffset; + agl::utl::Parameter mDepthShadowTexWidth; + agl::utl::Parameter mDepthShadowTexHeight; + agl::utl::Parameter mDepthShadowEnableBbClip; + agl::utl::Parameter mDepthShadowCheckOnly; + agl::utl::Parameter mDepthShadowMatrixViewCoordinate; + agl::utl::Parameter mDepthShadowEnableHiZ; + agl::utl::Parameter mDepthShadowForceArray; + agl::utl::Parameter mBloomCorrectDepth; + agl::utl::Parameter mDepthShadowNearFarMargin; + agl::utl::Parameter mDepthShadowPolygonOffset; + agl::utl::Parameter mDepthShadowPolygonScale; + sead::SafeArray, 4> mDepthShadowRefValueThresholds; + agl::utl::Parameter mDepthShadowReleaseGbuffer; + sead::SafeArray mDepthShadowParams; + agl::utl::Parameter mProjectionShadowNum; + agl::utl::Parameter mProjShadowMatrixViewCoordinate; + agl::utl::Parameter mSsaoWidthScale; + agl::utl::Parameter mSsaoIsDepthFull; + agl::utl::Parameter mModelSceneEnvDataSetNum; + agl::utl::Parameter mCubemapArray; + agl::utl::Parameter mCubemapDynamicRange; + agl::utl::Parameter mCubemapHdrComposePower; + agl::utl::Parameter mCubemapMaxModelUnitNum; + agl::utl::Parameter mCubemapMaxShapeNum; + agl::utl::Parameter mCubemapDisableEncode; + agl::utl::Parameter mModelNum; + agl::utl::Parameter mModelUnitNum; + agl::utl::Parameter mShapeNum; + agl::utl::Parameter mOcclusionQueryNum; + agl::utl::Parameter mEnvObjPointLightNum; + agl::utl::Parameter mEnvObjPointLightRigNum; + agl::utl::Parameter mEnvObjSpotLightNum; + agl::utl::Parameter mEnvObjSpotLightRigNum; + agl::utl::Parameter mEnvObjMaskedSpotLightNum; + agl::utl::Parameter mEnvObjMaskedSpotLightRigNum; + agl::utl::Parameter mEnvObjMaskedProjLightNum; + agl::utl::Parameter mOfxNumLensFlare; + agl::utl::Parameter mOfxNumLensFlarePreset; + agl::utl::Parameter mOfxNumLensFlareDynamic; + agl::utl::Parameter mOfxNumLensFlareDynamicPreset; + agl::utl::Parameter mOfxNumLensFlareRig; + agl::utl::Parameter mOfxNumLensFlareRigObj; + agl::utl::Parameter mOfxNumLensFlareRigPreset; + agl::utl::Parameter mOfxNumLargeLensFlareRig; + agl::utl::Parameter mOfxNumLargeLensFlareRigObj; + agl::utl::Parameter mOfxNumLargeLensFlareRigPreset; + sead::SafeArray>, 8> mDeferredShadingModels; + agl::utl::Parameter> mSceneMaterialModel; + sead::SafeArray>, 8> mUserVisualizeClrNames; + sead::SafeArray>, 8> mUserVisualizeTexNames; +}; + +class ModelSceneConfigList : public sead::hostio::Node, public agl::utl::IParameterIO { +public: + struct EnvObjSetTemplateList : agl::utl::IParameterList { + EnvObjSetTemplateList(); + bool preRead_() override; + + bool unk = false; + }; + + ModelSceneConfigList(); + + // sic + void applyResouce(const void* resource); + + const ModelSceneConfig& setup(const sead::SafeString& config_name); + void reload(const sead::SafeString& config_name); + + void copyPassConfig(const sead::SafeString& config_name_1, + const sead::SafeString& config_name_2); + + void copyPassConfig(int config_idx_1, int config_idx_2); + +protected: + bool preRead_() override; + void postRead_() override; + bool preWrite_() const override; + +private: + friend class ModelSceneConfig; + + ModelSceneConfig& addNewConfig_(const sead::SafeString& config_name); + void deleteConfig_(ModelSceneConfig* config); + + agl::utl::IParameterObj mNameArrayObj; + EnvObjSetTemplateList mEnvObjSetTemplateList; + sead::SafeArray mConfigs; + sead::SafeArray>, ModelSceneConfig::cConfig_Max> + mConfigNames; + sead::SafeArray mEnvObjSetTemplates; + int mCurrentConfigIndex = -1; + bool _821e4 = true; + const void* mResource = nullptr; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysORUtil.h b/lib/gsys/include/gsys/gsysORUtil.h index 83fa18dc..ff626f61 100644 --- a/lib/gsys/include/gsys/gsysORUtil.h +++ b/lib/gsys/include/gsys/gsysORUtil.h @@ -14,6 +14,16 @@ enum class Icon { _b = 0xB, }; +enum class Category { + _0 = 0, +}; + +enum class Attribute { + _2 = 2, +}; + +void setNodeMeta(sead::hostio::Node* node, Category category, sead::Heap* heap); +void setNodeMeta(sead::hostio::Node* node, Category category, Attribute attr, sead::Heap* heap); void setNodeMetaIcon(sead::hostio::Node* node, Icon icon, sead::Heap* heap); } // namespace gsys::ORUtil diff --git a/lib/gsys/include/gsys/gsysOfxLensFlareRig.h b/lib/gsys/include/gsys/gsysOfxLensFlareRig.h new file mode 100644 index 00000000..728d3616 --- /dev/null +++ b/lib/gsys/include/gsys/gsysOfxLensFlareRig.h @@ -0,0 +1,43 @@ +#pragma once + +#include + +namespace gsys { + +// TODO +class OfxLensFlareImpl { +public: + // TODO + class Preset { + public: + static const agl::env::TypeInfo* sTypeInfo; + }; + + static const agl::env::TypeInfo* sTypeInfo; +}; + +// TODO +class OfxLensFlareRig { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +// TODO +class OfxLargeLensFlareImpl { +public: + // TODO + class Preset { + public: + static const agl::env::TypeInfo* sTypeInfo; + }; + + static const agl::env::TypeInfo* sTypeInfo; +}; + +// TODO +class OfxLargeLensFlareRig { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysPointLight.h b/lib/gsys/include/gsys/gsysPointLight.h new file mode 100644 index 00000000..d049e299 --- /dev/null +++ b/lib/gsys/include/gsys/gsysPointLight.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace gsys { + +// TODO +class PointLight {}; + +// TODO +class PointLightRig { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysSpotLight.h b/lib/gsys/include/gsys/gsysSpotLight.h new file mode 100644 index 00000000..e68d3d46 --- /dev/null +++ b/lib/gsys/include/gsys/gsysSpotLight.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +namespace gsys { + +// TODO +class SpotLight {}; + +// TODO +class SpotLightRig { +public: + static const agl::env::TypeInfo* sTypeInfo; +}; + +} // namespace gsys diff --git a/lib/gsys/src/gsys/gsysModelSceneConfig.cpp b/lib/gsys/src/gsys/gsysModelSceneConfig.cpp new file mode 100644 index 00000000..b3e0f88b --- /dev/null +++ b/lib/gsys/src/gsys/gsysModelSceneConfig.cpp @@ -0,0 +1,638 @@ +#include "gsys/gsysModelSceneConfig.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "agl/fx/aglFxOfxLensFlare.h" +#include "gsys/gsysLightRigObj.h" +#include "gsys/gsysMaskedProjLight.h" +#include "gsys/gsysMaskedSpotLight.h" +#include "gsys/gsysORUtil.h" +#include "gsys/gsysOfxLensFlareRig.h" +#include "gsys/gsysPointLight.h" +#include "gsys/gsysSpotLight.h" + +namespace gsys { + +namespace { + +SEAD_ENUM_EX(DepthFormat, Depth_32, Depth_16) +SEAD_ENUM_EX_VALUES(DepthFormat, 60, 59) + +SEAD_ENUM_EX(DepthShadowMapFormat, R32_G32_float, R16_G16_float, R16_G16_uNorm, R8_G8_uNorm) +SEAD_ENUM_EX_VALUES(DepthShadowMapFormat, 38, 25, 21, 10) + +} // namespace + +static sead::FixedSafeString<32> sDepthFormat32Str{DepthFormat(60).text()}; + +static sead::FixedSafeString<32> sDepthShadowMapFormat_R32_G32_float_Str{ + DepthShadowMapFormat(38).text()}; + +static const ModelSceneConfig::FeatureDescription sModelSceneFeatures[] = { + {"LightMap", "light_map", false, false, true, "環境マップにライトを合成"}, + {"LightProbe", "light_probe", false, false, false, "静的なライトプローブ"}, + {"SnapShot", "snap_shot", false, false, false, "モデルのスナップショットを作成"}, + {"DepthShadow", "depth_shadow", false, false, false, "動的デプスシャドウ"}, + {"MaskedLight", "masked_light", false, false, false, "シャドウによってマスクされるライト"}, + {"StaticDepthShadow", "static_depth_shadow", false, false, false, "静的デプスシャドウ"}, + {"EnvCubeMap", "env_cube_map", false, false, true, "環境キューブマップ"}, + {"Reflection", "reflection", false, false, false, "平面的な反射"}, + {"LocalReflection", "local_reflection", false, false, false, "ローカルリフレクション"}, + {"Z-PrePass", "z_pre_pass", true, false, true, "Z値だけをを先に埋める"}, + {"Light-PrePass", "light_pre_pass", false, false, false, + "Deferred Lighting用のライトバッファ生成"}, + {"ShadowPrePass", "shadow_pre_pass", false, false, false, + "Deferred Shadowing用のシャドウバッファ生成"}, + {"Decal", "decal", false, false, false, "デカール"}, + {"NormalDrawer", "normal_drawer", false, false, false, "法線をモディファイしたり"}, + {"SSAO", "ssocclusion", false, false, false, "スクリーンスペースのアンビエントオクルージョン"}, + {"SSII", "ssii", false, false, false, "スクリーンスペースの間接光"}, + {"SSSSS", "sssss", false, false, false, "スクリーンスペースのサブサーフェススキャッタリング"}, + {"OcclusionQeuery", "occlusion_query", false, false, false, "遮蔽されているモデルをカリング"}, + {"DeferredShading", "deferred_opa_alphamask", false, false, false, + "【モデル】不透明と抜き(デファード)"}, + {"Opaque + AlphaMask", "opa_alphamask", true, true, true, "【モデル】不透明と抜き"}, + {"OutlineSilhouette", "outline_silhouette", false, false, false, + "【モデル】輪郭に沿ってアウトラインを描画"}, + {"DepthSilhouette", "depth_silhouette", true, true, true, + "【モデル】遮蔽されたときのシルエット表示"}, + {"Xlu(Seal)", "xlu_seal", true, true, true, "【モデル】半透明(シールポリゴン)"}, + {"Cloud", "cloud", false, false, false, "プロシージャル雲"}, + {"VolumeMask", "volume_mask", false, false, false, "空間マスク"}, + {"Xlu(Water)", "xlu_water", true, true, true, "【モデル】半透明(水)"}, + {"Xlu", "xlu", true, true, true, "【モデル】半透明"}, + {"Xlu(Indirect)", "xlu_indirect", true, true, true, "【モデル】半透明(インダイレクト)"}, + {"Xlu(Fx)", "xlu_fx", true, true, true, "【モデル】半透明(特殊効果)"}, + {"ReducedBuffer", "reduced_buffer", true, true, true, "縮小バッファ"}, + {"ShadowMask", "shadow_mask", false, false, false, + "画面の見せたい部分を残して他の部分を黒く覆ってくれる"}, + {"RadialBlur", "radial_blur", false, false, false, "空間に放射状のブラーエフェクトをおける"}, + {"DOF", "dof", false, false, true, "被写界深度"}, + {"Xlu Z-PrePass", "xlu_z_pre_pass", false, false, true, "【モデル】半透明Zプリパス"}, + {"Bloom", "bloom", false, false, true, "ブルーム効果"}, + {"GlareFilter", "glare_filter", false, false, false, "グレアフィルタ"}, + {"FlareFilter", "flare_filter", false, false, false, + "フレアフィルタ(スクリーンスペースのレンズフレア)"}, + {"OccludedEffect", "occluded_effect", false, false, false, "遮蔽率をいい感じに使うエフェクト"}, + {"AutoExposure", "auto_exposure", false, false, false, "自動露出"}, + {"HDR", "hdr", false, false, true, "HDR解決(トーンマップ + sRGB変換)"}, + {"ColorCorrection", "color_correction", false, false, true, "カラーコレクション"}, + {"FilterAA", "filter_aa", false, false, true, "エイリアシングを除去"}, +}; + +// NON_MATCHING: various issues, notably iterator stuff(?) for mDeferredShadingModels +ModelSceneConfig::ModelSceneConfig() { + mEnvObjMgrInitArg.setContainMax(agl::env::AmbientLight::sTypeInfo->id, 5); + mEnvObjMgrInitArg.setContainMax(agl::env::HemisphereLight::sTypeInfo->id, 10); + mEnvObjMgrInitArg.setContainMax(agl::env::DirectionalLight::sTypeInfo->id, 30); + mEnvObjMgrInitArg.setContainMax(agl::env::Projector::sTypeInfo->id, 10); + mEnvObjMgrInitArg.setContainMax(agl::env::Fog::sTypeInfo->id, 10); + mEnvObjMgrInitArg.setContainMax(agl::pfx::BloomObj::sTypeInfo->id, 10); + mEnvObjMgrInitArg.setContainMax(agl::pfx::DepthOfFieldObj::sTypeInfo->id, 10); + mEnvObjMgrInitArg.setContainMax(MaskedSpotLight::sTypeInfo->id, 13); + mEnvObjBufferAllocateArg.setContainMax(agl::env::AmbientLight::sTypeInfo->id, 1); + mEnvObjBufferAllocateArg.setContainMax(agl::env::HemisphereLight::sTypeInfo->id, 1); + mEnvObjBufferAllocateArg.setContainMax(agl::env::DirectionalLight::sTypeInfo->id, 4); + + for (int i = 0; i < NumFeatures; ++i) { + const FeatureDescription& info = sModelSceneFeatures[i]; + + if (info._11) + mEnabledFeatures[i].init(true, info.parameter_name, info.description, &_c0); + else if (!info._10) + mEnabledFeatures[i].init(false, info.parameter_name, info.description, &_c0); + else + mEnabledFeatures[i].init(false, info.parameter_name, info.description, this); + + if (info._10) { + *mShouldCreateFeatures[i] = true; + } else { + mShouldCreateFeatures[i].init( + info.should_create_by_default, + sead::FormatFixedSafeString<64>("create_%s", info.parameter_name), info.description, + this); + } + } + + mOpaPolygonOffset.init(-1.0, "opa_polygon_offset", "Opaポリゴンオフセット", this); + mOpaPolygonScale.init(-1.0, "opa_polygon_scale", "Opaポリゴンスケール", this); + + mXluPolygonOffset.init(-2.5, "xlu_polygon_offset", "Xluポリゴンオフセット", this); + mXluPolygonScale.init(-2.5, "xlu_polygon_scale", "Xluポリゴンスケール", this); + + mRevPolygonOffset.init(0.0, "rev_polygon_offset", "逆ポリゴンオフセット", this); + mRevPolygonScale.init(0.0, "rev_polygon_scale", "逆ポリゴンスケール", this); + + { + static constexpr sead::SafeArray names = { + "lm_max_front_only", + "lm_max_front_and_back", + "lm_max_cube_map", + }; + static constexpr sead::SafeArray labels = { + "SphereFrontOnly", + "SphereFrontAndBack", + "CubeMap", + }; + for (int i = 0; i < mLmMax.size(); ++i) + mLmMax[i].init(i == 1 ? 12 : 0, names[i], labels[i], this); + } + + mLightMapSizeSphere.init(0x30, "LightMapSizeSphere", "light_map_size_sphere", this); + mLightMapCube.init(0x20, "LightMapCube", "light_map_size_cube", this); + mLightMapAmbientLight.init(1, "LightMapAmbientLight", "アンビエントライト数", this); + mLightMapHemiSphereLight.init(1, "LightMapHemiSphereLight", "半球ライト数", this); + mLightMapDirectionalLight.init(4, "LightMapDirectionalLight", "ディレクショナルライト数", this); + + { + static constexpr sead::SafeArray names = { + "cube_map_max_tex_num", + "cube_map_max_tex_width", + }; + static constexpr sead::SafeArray labels = { + "MaxTexNum", + "CMaxTexWidth", + }; + for (int i = 0; i < mCubeMapMaxTex.size(); ++i) + mCubeMapMaxTex[i].init(i == 0 ? 10 : 256, names[i], labels[i], this); + } + + mLightPrepassTextureHalf.init(false, "light_prepass_texture_half", + "ライトプリパスの解像度を下げる", this); + + mUseDecalAo.init(false, "use_decal_ao", "デカールAO使用", this); + mDecalAoObjectMax.init(0x20, "decal_ao_object_max", "デカールAOオブジェクト最大数", this); + mDecalAoTextureMax.init(0x20, "decal_ao_texture_max", "デカールAOテクスチャ最大数", this); + mDecalAoTextureWidth.init(0x100, "decal_ao_texture_width", "デカールAOテクスチャ幅", this); + mDecalAoTextureHeight.init(0x100, "decal_ao_texture_height", "デカールAOテクスチャ高さ", this); + mDecalAoTextureCannelNum.init(4, "decal_ao_texture_cannel_num", + "デカールAOテクスチャチャンネル数", this); + + mUseDecalBuffer.init(false, "use_decal_buffer", "デカールバッファ使用", this); + mUseDecalTrail.init(false, "use_decal_trail", "デカール軌跡使用", this); + + mBloomCorrectDepth.init(false, "bloom_correct_depth", "ブルームで正しいデプスを使う", this); + + mMaskedLightShadowOnly.init(false, "masked_light_shadow_only", "MaskedLightShadowのみをつかう", + this); + + mDepthShadowTexWidth.init(0x400, "depth_shadow_tex_width", "シャドウマップ幅", this); + mDepthShadowTexHeight.init(-1, "depth_shadow_tex_height", "シャドウマップ高さ", this); + mDepthShadowEnableBbClip.init(false, "depth_shadow_enable_bb_clip", "BoundingによるClip", this); + mDepthShadowCheckOnly.init(false, "depth_shadow_check_only", "(初期化のみ使用)CheckOnly", + this); + mDepthShadowMatrixViewCoordinate.init(false, "depth_shadow_matrix_view_coordinate", + "ビュー座標系をシェーダに送る", this); + mDepthShadowEnableHiZ.init(false, "depth_shadow_enable_hiz", "Hi-Z", this); + mDepthShadowForceArray.init(false, "depth_shadow_force_array", + "(初期化のみ使用)強制でArrayにする", this); + mDepthShadowNearFarMargin.init(0.0, "depth_shadow_near_far_margin", + "(初期化のみ使用)撮影範囲マージン", this); + mDepthShadowPolygonOffset.init(0.2, "depth_shadow_polygon_offset", "ポリゴンオフセット", this); + mDepthShadowPolygonScale.init(2.7, "depth_shadow_polygon_scale", "ポリゴンスケール", this); + + mDepthShadowClipPlaneEnable.init(0, "depth_shadow_clip_plane_enable", "クリップ有効", this); + for (int i = 0; i < mDepthShadowClipPlanes.size(); ++i) { + mDepthShadowClipPlanes[i].init( + sead::Vector4f::ey, sead::FormatFixedSafeString<64>("depth_shadow_clip_plane_%d", i), + "clip_plane", this); + } + + mDepthShadowExClipPlaneNum.init(0, "depth_shadow_ex_clip_plane_num", "拡張クリップ面の数", + this); + + mDepthShadowPcfOffset.init(0.5, "depth_shadow_pcf_offset", "pcf_offset", this); + + for (int i = 0; i < mDepthShadowRefValueThresholds.size(); ++i) { + mDepthShadowRefValueThresholds[i].init( + -1.0, sead::FormatFixedSafeString<64>("depth_shadow_refvalue_threshold_%d", i), "", + this); + } + + mDepthShadowReleaseGbuffer.init(false, "depth_shadow_release_gbuffer", + "G-Bufferを描き終えたら捨てる", this); + + for (int i = 0; i < mDepthShadowParams.size(); ++i) { + auto& param = mDepthShadowParams[i]; + + param.use_uniform_mtx.init( + false, sead::FormatFixedSafeString<32>("depth_shadow_use_uniform_mtx_%d", i), + "UniformMtx", this); + + param.cascade_num.init(1, sead::FormatFixedSafeString<32>("depth_shadow_cascade_num_%d", i), + "(初期化のみ使用)カスケード数", i == 0 ? this : &_c0); + + for (int j = 0; j < param.near.size(); ++j) { + param.near[j].init(float(20 << j), + sead::FormatFixedSafeString<32>("depth_shadow_near_%d_%d", i, j), "", + this); + } + + param.far.init(2000.0, sead::FormatFixedSafeString<32>("depth_shadow_far_%d", i), + "FrustumのFar", "Min=0", this); + param.offset_near.init(0.0, + sead::FormatFixedSafeString<32>("depth_shadow_offset_near_%d", i), + "OptimaizeOffsetNear", "Min=0", this); + param.offset_far.init(0.0, sead::FormatFixedSafeString<32>("depth_shadow_offset_far_%d", i), + "OptimizeOffsetFar", "Min=0", this); + } + + mStaticSdwWidth.init(0x100, "static_sdw_width", "シャドウマップの幅", this); + mStaticSdwDepthFormatName.init(sDepthFormat32Str, "static_sdw_depth_format_name", + "デプスフォーマット", this); + mStaticSdwShadowMapFormatName.init(sDepthShadowMapFormat_R32_G32_float_Str, + "static_sdw_shadow_map_format_name", + "シャドウマップフォーマット", this); + + mProjectionShadowNum.init(1, "projection_shadow_num", "投影影の数", this); + mProjShadowMatrixViewCoordinate.init(false, "proj_shadow_matrix_view_coordinate", + "ビュー座標系をシェーダに送る", this); + + mSsaoWidthScale.init(0.5, "ssao_width_scale", "SSAOバッファのスケール", this); + mSsaoIsDepthFull.init(false, "ssao_is_depth_full", "SSAOのデプスをフル解像度", this); + mLinearLightingEnable.init(false, "linear_lighting_enable", "リニアライティング有効", this); + mHizExpandEnable.init(true, "hiz_expand_enable", "Hi-Z Expand有効", this); + mNldEnable.init(true, "nld_enable", "NormalizedLinearDepth生成", this); + mNld32Bit.init(false, "nld_32bit", "NormalizedLinearDepthを32bit", this); + mNldHalf32Bit.init(false, "nld_half_32bit", "NormalizedLinearDepth(Half)を32bit", this); + mDepthReduce.init(false, "depth_reduce", "デプスの縮小をmaxで計算", this); + mZPrePassSelectable.init(false, "z_pre_pass_selectable", "Zプリパスを選択式にする", this); + mDepthClear.init(true, "depth_clear", "Depth Clear有効", this); + mIndirectBufferLDR.init(false, "indirect_buffer_LDR", "インダイレクトバッファLDR", this); + + mReducedBuffer16Bit.init(false, "reduced_buffer_16bit", "縮小バッファ16bit", this); + mReducedBufferEdgeAdjustBake.init(false, "reduced_buffer_edge_adjust_bake", + "縮小バッファエッジ補正をテクスチャ焼付け", this); + mReducedBufferBlurAdjustBake.init(false, "reduced_buffer_blur_adjust_bake", + "縮小バッファブラー補正をテクスチャ焼付け", this); + mReducedBufferEdgeAdjust.init(false, "reduced_buffer_edge_adjust", "縮小バッファエッジ補正有効", + this); + mReducedBufferEdgeAdjustCoeff.init(2.0, "reduced_buffer_edge_adjust_coeff", + "縮小バッファエッジ補正係数", this); + + mBaseResoWidth.init(0x500, "base_reso_width", "基準解像度の幅", this); + mBaseResoHeight.init(0x2D0, "base_reso_height", "基準解像度の高さ", this); + + mGBufferAlbedoSrgb.init(false, "g_buffer_albedo_srgb", "GBufferのアルベドsRGB", this); + mGBufferAlbedoReduceNearest.init(false, "g_buffer_albedo_reduce_nearest", + "GBufferのアルベド縮小をポイントサンプル", this); + + mGBufferNormal8Bit.init(false, "g_buffer_normal_8bit", "GBufferのノーマル8bit", this); + mGBufferNormalDisableReduce.init(false, "g_buffer_normal_disable_reduce", "GBufferの縮小停止", + this); + mGBufferNormalZSignW.init(false, "g_buffer_normal_z_sign_w", + "GBufferのノーマルのZを符号だけWに格納", this); + mGBufferNormalReduceNearest.init(false, "g_buffer_normal_reduce_nearest", + "GBufferのノーマル縮小をポイントサンプル", this); + + mGBufferDepth.init(false, "g_buffer_depth", "GBufferでマテリアルIDを使用", this); + mGBufferMaterialIdFormat.init(0, "g_buffer_material_id_format", "マテリアルIDフォーマット", + this); + + mGpuStressAnalyzerEnable.init(false, "gpu_stress_analyzer_enable", "GPU Stress Analyzer有効", + this); + mGpuStressAnalyzerReduceBufferenable.init( + true, "gpu_stress_analyzer_reduce_bufferenable", + "GPU Stress Analyzerでレンダーバッファのサイズを変える", this); + + mEnableDrcFilterAa.init(true, "enable_drc_filter_aa", "FilterAAが有効の時DRCも有効にする", + this); + mInitFilterAaSmaaResTextures.init(false, "init_filter_aa_smaa_res_textures", + "FilterAAの初期化時にSMAAのリソーステクスチャを生成する", + this); + + mCubemapArray.init(true, "cubemap_array", "キューブマップを配列で扱う", this); + mCubemapDynamicRange.init(1024.0, "cubemap_dynamic_range", "キューブマップのダイナミックレンジ", + this); + mCubemapHdrComposePower.init(4.0, "cubemap_hdr_compose_power", "キューブマップの圧縮乗数", + this); + mCubemapMaxModelUnitNum.init(0x400, "cubemap_max_model_unit_num", + "キューブマップの最大モデルユニット数", this); + mCubemapMaxShapeNum.init(0x1000, "cubemap_max_shape_num", "キューブマップの最大シェイプ数", + this); + mCubemapDisableEncode.init(false, "cubemap_disable_encode", "キューブマップを圧縮しない", this); + + mModelSceneEnvDataSetNum.init(1, "model_scene_env_data_set_num", + "シーン環境で管理する genv の数", "Min=1, Max=4, Mode=MinMaxLock", + this); + + mEnvObjPointLightNum.init(0x400, "env_obj_point_light_num", "ポイントライト数", + "Min=0 ,Max=1024", this); + mEnvObjPointLightRigNum.init(0x80, "env_obj_point_light_rig_num", "ポイントライトリグ数", + "Min=0 ,Max=1024", this); + mEnvObjSpotLightNum.init(0x200, "env_obj_spot_light_num", "スポットライト数", "Min=0 ,Max=1024", + this); + mEnvObjSpotLightRigNum.init(0x20, "env_obj_spot_light_rig_num", "スポットライトリグ数", + "Min=0 ,Max=1024", this); + mEnvObjMaskedSpotLightNum.init(50, "env_obj_masked_spot_light_num", "マスクドライト数", + "Min=0 ,Max=1024", this); + mEnvObjMaskedSpotLightRigNum.init(5, "env_obj_masked_spot_light_rig_num", + "マスクドライトリグ数", "Min=0 ,Max=1024", this); + mEnvObjMaskedProjLightNum.init(3, "env_obj_masked_proj_light_num", + "マスクドプロジェクションライト数", "Min=0 ,Max=1024", this); + + mOfxNumLensFlare.init(10, "ofx_num_lens_flare", "レンズフレア数", "Min=0,Max=32", this); + mOfxNumLensFlarePreset.init(5, "ofx_num_lens_flare_preset", "レンズフレアPreset数", + "Min=0,Max=32", this); + mOfxNumLensFlareDynamic.init(10, "ofx_num_lens_flare_dynamic", "プログラム用レンズフレア数", + "Min=0,Max=32", this); + mOfxNumLensFlareDynamicPreset.init(5, "ofx_num_lens_flare_dynamic_preset", + "プログラム用レンズフレアPreset数", "Min=0,Max=32", this); + mOfxNumLensFlareRig.init(8, "ofx_num_lens_flare_rig", "レンズフレアRig数", "Min=0,Max=32", + this); + mOfxNumLensFlareRigObj.init(0x18, "ofx_num_lens_flare_rig_obj", "Rig用レンズフレア数", + "Min=0,Max=32", this); + mOfxNumLensFlareRigPreset.init(5, "ofx_num_lens_flare_rig_preset", "Rig用レンズフレアPreset数", + "Min=0,Max=32", this); + mOfxNumLargeLensFlareRig.init(2, "ofx_num_large_lens_flare_rig", "LargeレンズフレアRig数", + "Min=0,Max=16", this); + mOfxNumLargeLensFlareRigObj.init(2, "ofx_num_large_lens_flare_rig_obj", + "Rig用Largeレンズフレア数", "Min=0,Max=16", this); + mOfxNumLargeLensFlareRigPreset.init(10, "ofx_num_large_lens_flare_rig_preset", + "Rig用LargeレンズフレアPreset数", "Min=0,Max=16", this); + + mModelNum.init(0x2000, "model_num", "エントリーモデル数", "Min=0 ,Max=16000", this); + mModelUnitNum.init(0x4000, "model_unit_num", "エントリーモデルユニット数", "Min=0 ,Max=16000", + this); + mShapeNum.init(0x1000, "shape_num", "キューイングシェイプ数", "Min=0 ,Max=16000", this); + mOcclusionQueryNum.init(0x100, "occlusion_query_num", "オクルージョンクエリ最大数", + "Min=0 ,Max=16000", this); + + for (int i = 0; i < mUserVisualizeClrNames.size(); ++i) { + static constexpr sead::SafeArray names = { + "user_visualize_clr_name_0", "user_visualize_clr_name_1", "user_visualize_clr_name_2", + "user_visualize_clr_name_3", "user_visualize_clr_name_4", "user_visualize_clr_name_5", + "user_visualize_clr_name_6", "user_visualize_clr_name_7", + }; + static constexpr sead::SafeArray labels = { + "ユーザーカラー可視化[0]", "ユーザーカラー可視化[1]", "ユーザーカラー可視化[2]", + "ユーザーカラー可視化[3]", "ユーザーカラー可視化[4]", "ユーザーカラー可視化[5]", + "ユーザーカラー可視化[6]", "ユーザーカラー可視化[7]", + }; + mUserVisualizeClrNames[i].init(sead::SafeString::cEmptyString, names[i], labels[i], + "AcceptReturn=true", this); + } + + for (int i = 0; i < mUserVisualizeTexNames.size(); ++i) { + static constexpr sead::SafeArray names = { + "user_visualize_tex_name_0", "user_visualize_tex_name_1", "user_visualize_tex_name_2", + "user_visualize_tex_name_3", "user_visualize_tex_name_4", "user_visualize_tex_name_5", + "user_visualize_tex_name_6", "user_visualize_tex_name_7", + }; + static constexpr sead::SafeArray labels = { + "ユーザーテクスチャ可視化[0]", "ユーザーテクスチャ可視化[1]", + "ユーザーテクスチャ可視化[2]", "ユーザーテクスチャ可視化[3]", + "ユーザーテクスチャ可視化[4]", "ユーザーテクスチャ可視化[5]", + "ユーザーテクスチャ可視化[6]", "ユーザーテクスチャ可視化[7]", + }; + mUserVisualizeTexNames[i].init(sead::SafeString::cEmptyString, names[i], labels[i], + "AcceptReturn=true", this); + } + + for (auto it = mDeferredShadingModels.begin(), end = mDeferredShadingModels.end(); it != end; + ++it) { + auto i = int(-(&*mDeferredShadingModels.begin() - &*it)); + + static constexpr sead::SafeArray labels = { + "デファードシェーディング用モデル0", "デファードシェーディング用モデル1", + "デファードシェーディング用モデル2", "デファードシェーディング用モデル3", + "デファードシェーディング用モデル4", "デファードシェーディング用モデル5", + "デファードシェーディング用モデル6", "デファードシェーディング用モデル7", + }; + it->init(sead::SafeString::cEmptyString, + i == 0 ? sead::FormatFixedSafeString<256>("deferred_shading_model") : + sead::FormatFixedSafeString<256>("deferred_shading_model%d", i), + labels(i), "AcceptReturn=false", this); + } + + mSceneMaterialModel.init(sead::SafeString::cEmptyString, "scene_material_model", + "シーンマテリアルモデル名", "AcceptReturn=false", this); + +#ifdef SEAD_DEBUG + setNodeName("コンフィグ"); +#endif + + ORUtil::setNodeMetaIcon(this, ORUtil::Icon::_b, + agl::detail::PrivateResource::instance()->getDebugHeap()); +} + +int ModelSceneConfig::getStaticDepthShadowDepthFormat() const { + return mStaticSdwDepthFormat; +} + +int ModelSceneConfig::getStaticDepthShadowDepthShadowMapFormat() const { + return mStaticSdwShadowMapFormat; +} + +bool ModelSceneConfig::preRead_() { + return !_1798 && !_1799; +} + +bool ModelSceneConfig::preWrite_() const { + mStaticSdwDepthFormatName->copy(DepthFormat(mStaticSdwDepthFormat).text()); + mStaticSdwShadowMapFormatName->copy(DepthShadowMapFormat(mStaticSdwShadowMapFormat).text()); + return true; +} + +template +static T convertToEnum(const sead::SafeString& str_value, T default_value) { + T value; + return value.fromText(str_value) ? value : default_value; +} + +void ModelSceneConfig::postRead_() { + _1799 = true; + + for (int i = 0; i < NumFeatures; ++i) { + if (!sModelSceneFeatures[i]._10) + *mEnabledFeatures[i] = *mShouldCreateFeatures[i]; + } + + mEnvObjMgrInitArg.setContainMax(LightRigObj::sTypeInfo, *mEnvObjPointLightNum); + mEnvObjMgrInitArg.setContainMax(PointLightRig::sTypeInfo, *mEnvObjPointLightRigNum); + + mEnvObjMgrInitArg.setContainMax(LightRigObj::sTypeInfo, *mEnvObjSpotLightNum); + mEnvObjMgrInitArg.setContainMax(SpotLightRig::sTypeInfo, *mEnvObjSpotLightRigNum); + + mEnvObjMgrInitArg.setContainMax(LightRigObj::sTypeInfo, + *mEnvObjMaskedSpotLightNum); + mEnvObjMgrInitArg.setContainMax(MaskedSpotLightRig::sTypeInfo, *mEnvObjMaskedSpotLightRigNum); + + mEnvObjMgrInitArg.setContainMax(MaskedProjLight::sTypeInfo, *mEnvObjMaskedProjLightNum); + + mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlare::sTypeInfo, *mOfxNumLensFlare); + mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlare::Preset::sTypeInfo, + *mOfxNumLensFlarePreset); + + mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlareDynamic::sTypeInfo, + *mOfxNumLensFlareDynamic); + mEnvObjMgrInitArg.setContainMax(agl::fx::OfxLensFlareDynamic::Preset::sTypeInfo, + *mOfxNumLensFlareDynamicPreset); + + mEnvObjMgrInitArg.setContainMax(OfxLensFlareRig::sTypeInfo, *mOfxNumLensFlareRig); + mEnvObjMgrInitArg.setContainMax(OfxLensFlareImpl::sTypeInfo, *mOfxNumLensFlareRigObj); + mEnvObjMgrInitArg.setContainMax(OfxLensFlareImpl::Preset::sTypeInfo, + *mOfxNumLensFlareRigPreset); + + mEnvObjMgrInitArg.setContainMax(OfxLargeLensFlareRig::sTypeInfo, *mOfxNumLargeLensFlareRig); + mEnvObjMgrInitArg.setContainMax(OfxLargeLensFlareImpl::sTypeInfo, *mOfxNumLargeLensFlareRigObj); + mEnvObjMgrInitArg.setContainMax(OfxLargeLensFlareImpl::Preset::sTypeInfo, + *mOfxNumLargeLensFlareRigPreset); + + mEnvObjBufferAllocateArg.setContainMax(agl::env::AmbientLight::sTypeInfo, + *mLightMapAmbientLight); + mEnvObjBufferAllocateArg.setContainMax(agl::env::HemisphereLight::sTypeInfo, + *mLightMapHemiSphereLight); + mEnvObjBufferAllocateArg.setContainMax(agl::env::DirectionalLight::sTypeInfo, + *mLightMapDirectionalLight); + + if (*mDepthShadowTexHeight < 1) + *mDepthShadowTexHeight = *mDepthShadowTexWidth; + + mStaticSdwDepthFormat = convertToEnum(*mStaticSdwDepthFormatName, 60); + mStaticSdwShadowMapFormat = + convertToEnum(*mStaticSdwShadowMapFormatName, 38); + + IParameterObj::postRead_(); +} + +ModelSceneConfig::EnvObjSetTemplate& ModelSceneConfig::getEnvObjSetTemplate_(int index) const { + SEAD_ASSERT(mpConfigList != nullptr); + return mpConfigList->mEnvObjSetTemplates[index]; +} + +ModelSceneConfig::EnvObjSetTemplate::EnvObjSetTemplate() + : enable(false, "enable", "有効", this), num(8, "num", "Num", "Min=0,Max=16", this), + ambient_light_num(1, "ambient_light_num", "Ambient Light Num", "Min=0,Max=8", this), + directional_light_num(1, "directional_light_num", "Directional Light Num", "Min=0,Max=8", + this), + hemisphere_light_num(1, "hemisphere_light_num", "Hemisphere Light Num", "Min=0,Max=8", this), + fog_num(1, "fog_num", "Fog Num", "Min=0,Max=8", this), + light_map_obj_num(1, "light_map_obj_num", "Light Map Obj Num", "Min=0,Max=8", this), + template_name({"Tepmlate Name"} /* sic */, "template_name", "Template Name", + "Mode=TextBoxOnly, Comment=template_name, AcceptReturn=False", this) {} + +ModelSceneConfigList::ModelSceneConfigList() : agl::utl::IParameterIO("gmsconf", 0) { +#ifdef SEAD_DEBUG + setNodeName("シーンコンフィグ"); +#endif + ORUtil::setNodeMeta(this, ORUtil::Category::_0, ORUtil::Attribute::_2, + agl::detail::PrivateResource::instance()->getDebugHeap()); + + addObj(&mNameArrayObj, "name_array"); + + addList(&mEnvObjSetTemplateList, "env_obj_set_template"); + for (int i = 0; i < mEnvObjSetTemplates.size(); ++i) { + mEnvObjSetTemplateList.addObj(&mEnvObjSetTemplates[i], sead::FormatFixedSafeString<32>( + "env_obj_set_template_%02d", i)); + } + *mEnvObjSetTemplates[0].enable = true; + + for (int i = 0; i < mConfigNames.size(); ++i) { + const auto param = sead::FormatFixedSafeString<32>("config_%02d", i); + const auto default_name = sead::FixedSafeString<32>(""); + mConfigNames[i].init(default_name, param, "コンフィグ名", &mNameArrayObj); + mConfigs[i].mpConfigList = this; + } +} + +void ModelSceneConfigList::applyResouce(const void* resource) { + mResource = resource; + applyResParameterArchive(agl::utl::ResParameterArchive(resource)); +} + +const ModelSceneConfig& ModelSceneConfigList::setup(const sead::SafeString& config_name) { + sead::SafeString name = &sead::SafeString::cNullChar; + int index = 0; + if (mCurrentConfigIndex != -1) { + name = *mConfigNames[mCurrentConfigIndex]; // NOLINT(cppcoreguidelines-slicing) + index = mCurrentConfigIndex; + } else { + for (int i = 0; i < mConfigs.size(); ++i) { + if (*mConfigNames[i] == config_name) { + name = *mConfigNames[i]; // NOLINT(cppcoreguidelines-slicing) + index = i; + } + } + } + + if (name.isEmpty()) { + name = *mConfigNames[0]; // NOLINT(cppcoreguidelines-slicing) + index = 0; + } + + reload(name); + return mConfigs[index]; +} + +void ModelSceneConfigList::reload(const sead::SafeString& config_name) { + for (int i = 0; i < mConfigs.size(); ++i) { + if (*mConfigNames[i] != "" && *mConfigNames[i] == config_name) { + mConfigs[i]._1799 = false; + } + } + + applyResouce(mResource); +} + +bool ModelSceneConfigList::preWrite_() const { + // eww + auto* mutable_this = const_cast(this); + + mutable_this->clearObj(); + mutable_this->addObj(&mutable_this->mNameArrayObj, "name_array"); + +#ifdef SEAD_DEBUG + for (int i = 0; i < mConfigs.size(); ++i) { + if (!mConfigs[i].isAppended()) + mutable_this->addObj(&mutable_this->mConfigs[i], *mConfigNames[i]); + } +#endif + + return true; +} + +bool ModelSceneConfigList::preRead_() { + if (_821e4) { + clearObj(); + addObj(&mNameArrayObj, "name_array"); + } + return true; +} + +// NON_MATCHING: reordering fest +void ModelSceneConfigList::postRead_() { + if (!_821e4) { + _821e4 = true; + // TODO: debug stuff + // sead::hostio::InvalidateNode(this, true); + return; + } + + for (int i = 0; i < mConfigs.size(); ++i) { + const auto& name = *mConfigNames[i]; + if (name == "") + continue; + + addObj(&mConfigs[i], name); + mConfigs[i].mIndex1 = i; + mConfigs[i].mIndex2 = i; + mConfigs[i].mConfigName = &name; + } + + _821e4 = false; + applyResouce(mResource); +} + +ModelSceneConfigList::EnvObjSetTemplateList::EnvObjSetTemplateList() = default; + +bool ModelSceneConfigList::EnvObjSetTemplateList::preRead_() { + return !unk; +} + +} // namespace gsys diff --git a/lib/sead b/lib/sead index b8c69e3e..06a028cb 160000 --- a/lib/sead +++ b/lib/sead @@ -1 +1 @@ -Subproject commit b8c69e3e04aff4295416a4c61b6f749f4e4cb51c +Subproject commit 06a028cbf382e5b997d17d3a8147dbdbb7f66109