#pragma once #include #include #include //#include "DataSpec/DNAMP1/CMDLMaterials.hpp" #include "Runtime/Graphics/CGraphics.hpp" #include #include #include #define URDE_MAX_LIGHTS 8 namespace hecl::Backend { class ShaderTag; } namespace metaforce { class CLight; enum class EExtendedShader : uint8_t { Flat, Lighting, ThermalModel, ThermalModelNoZTestNoZWrite, ThermalStatic, ThermalStaticNoZWrite, ForcedAlpha, ForcedAdditive, SolidColor, SolidColorAdditive, SolidColorFrontfaceCullLEqualAlphaOnly, SolidColorFrontfaceCullAlwaysAlphaOnly, // No Z-write or test SolidColorBackfaceCullLEqualAlphaOnly, SolidColorBackfaceCullGreaterAlphaOnly, // No Z-write MorphBallShadow, WorldShadow, ForcedAlphaNoCull, ForcedAdditiveNoCull, ForcedAlphaNoZWrite, ForcedAdditiveNoZWrite, ForcedAlphaNoCullNoZWrite, ForcedAdditiveNoCullNoZWrite, DepthGEqualNoZWrite, Disintegrate, ForcedAdditiveNoZWriteDepthGreater, ThermalCold, LightingAlphaWrite, LightingAlphaWriteNoZTestNoZWrite, LightingCubeReflection, LightingCubeReflectionWorldShadow, MAX }; class CModelShaders { friend class CModel; public: // struct Light { // zeus::CVector3f pos; // zeus::CVector3f dir; // zeus::CColor color = zeus::skClear; // std::array linAtt{1.f, 0.f, 0.f}; // std::array angAtt{1.f, 0.f, 0.f}; // }; // // struct LightingUniform { // std::array lights; // zeus::CColor ambient; // std::array colorRegs; // zeus::CColor mulColor; // zeus::CColor addColor; // CFogState fog; // // void ActivateLights(const std::vector& lts); // }; // // struct ThermalUniform { // zeus::CColor mulColor; // zeus::CColor addColor; // }; // // struct SolidUniform { // zeus::CColor solidColor; // }; // // struct MBShadowUniform { // zeus::CVector4f shadowUp; // float shadowId; // }; // // struct OneTextureUniform { // zeus::CColor addColor; // CFogState fog; // }; static void Initialize(); static void Shutdown(); // using ShaderPipelinesData = std::array, size_t(EExtendedShader::MAX)>; // using ShaderPipelines = std::shared_ptr; // using Material = DataSpec::DNAMP1::HMDLMaterialSet::Material; // static ShaderPipelines BuildExtendedShader(const hecl::Backend::ShaderTag& tag, const Material& material); private: // static std::unordered_map g_ShaderPipelines; }; } // namespace metaforce