metaforce/Runtime/Graphics/Shaders/CModelShaders.hpp

114 lines
2.6 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2016-04-04 02:32:57 +00:00
#include <array>
#include <cstdint>
#include <memory>
2022-02-01 00:06:54 +00:00
//#include "DataSpec/DNAMP1/CMDLMaterials.hpp"
#include "Runtime/Graphics/CGraphics.hpp"
#include <zeus/CColor.hpp>
#include <zeus/CVector3f.hpp>
#include <zeus/CVector4f.hpp>
2016-04-04 02:32:57 +00:00
2017-08-08 06:03:57 +00:00
#define URDE_MAX_LIGHTS 8
2016-04-04 02:32:57 +00:00
namespace hecl::Backend {
class ShaderTag;
}
2021-04-10 08:42:06 +00:00
namespace metaforce {
class CLight;
2018-12-08 05:30:43 +00:00
enum class EExtendedShader : uint8_t {
2018-12-08 05:30:43 +00:00
Flat,
Lighting,
ThermalModel,
ThermalModelNoZTestNoZWrite,
ThermalStatic,
ThermalStaticNoZWrite,
2018-12-08 05:30:43 +00:00
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,
2019-01-05 08:34:09 +00:00
ForcedAdditiveNoZWriteDepthGreater,
ThermalCold,
LightingAlphaWrite,
LightingAlphaWriteNoZTestNoZWrite,
2019-06-01 03:41:01 +00:00
LightingCubeReflection,
LightingCubeReflectionWorldShadow,
2018-12-08 05:30:43 +00:00
MAX
2017-03-10 20:52:53 +00:00
};
2018-12-08 05:30:43 +00:00
class CModelShaders {
friend class CModel;
2016-04-04 02:32:57 +00:00
public:
// struct Light {
// zeus::CVector3f pos;
// zeus::CVector3f dir;
// zeus::CColor color = zeus::skClear;
// std::array<float, 4> linAtt{1.f, 0.f, 0.f};
// std::array<float, 4> angAtt{1.f, 0.f, 0.f};
// };
//
// struct LightingUniform {
// std::array<Light, URDE_MAX_LIGHTS> lights;
// zeus::CColor ambient;
// std::array<zeus::CColor, 3> colorRegs;
// zeus::CColor mulColor;
// zeus::CColor addColor;
// CFogState fog;
//
// void ActivateLights(const std::vector<CLight>& 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;
// };
2018-12-08 05:30:43 +00:00
static void Initialize();
static void Shutdown();
2022-02-01 00:06:54 +00:00
// using ShaderPipelinesData = std::array<boo::ObjToken<boo::IShaderPipeline>, size_t(EExtendedShader::MAX)>;
// using ShaderPipelines = std::shared_ptr<ShaderPipelinesData>;
2018-12-08 05:30:43 +00:00
2022-02-01 00:06:54 +00:00
// using Material = DataSpec::DNAMP1::HMDLMaterialSet::Material;
// static ShaderPipelines BuildExtendedShader(const hecl::Backend::ShaderTag& tag, const Material& material);
2016-04-04 02:32:57 +00:00
2018-10-07 02:59:17 +00:00
private:
2022-02-01 00:06:54 +00:00
// static std::unordered_map<uint64_t, ShaderPipelines> g_ShaderPipelines;
2016-04-04 02:32:57 +00:00
};
2021-04-10 08:42:06 +00:00
} // namespace metaforce