#ifndef __URDE_CELEMENTGENSHADERS_HPP__ #define __URDE_CELEMENTGENSHADERS_HPP__ #include "TShader.hpp" #include "Graphics/CGraphics.hpp" #include "boo/graphicsdev/GL.hpp" #include "boo/graphicsdev/D3D.hpp" #include "boo/graphicsdev/Metal.hpp" #include "boo/graphicsdev/Vulkan.hpp" namespace urde { class CElementGen; class CElementGenShaders { friend struct OGLElementDataBindingFactory; friend struct VulkanElementDataBindingFactory; friend struct D3DElementDataBindingFactory; friend struct MetalElementDataBindingFactory; public: enum class EShaderClass { Tex, IndTex, NoTex }; private: static boo::ObjToken m_texZTestZWrite; static boo::ObjToken m_texNoZTestZWrite; static boo::ObjToken m_texZTestNoZWrite; static boo::ObjToken m_texNoZTestNoZWrite; static boo::ObjToken m_texAdditiveZTest; static boo::ObjToken m_texAdditiveNoZTest; static boo::ObjToken m_texRedToAlphaZTest; static boo::ObjToken m_texRedToAlphaNoZTest; static boo::ObjToken m_texZTestNoZWriteSub; static boo::ObjToken m_texNoZTestNoZWriteSub; static boo::ObjToken m_texRedToAlphaZTestSub; static boo::ObjToken m_texRedToAlphaNoZTestSub; static boo::ObjToken m_indTexZWrite; static boo::ObjToken m_indTexNoZWrite; static boo::ObjToken m_indTexAdditive; static boo::ObjToken m_cindTexZWrite; static boo::ObjToken m_cindTexNoZWrite; static boo::ObjToken m_cindTexAdditive; static boo::ObjToken m_noTexZTestZWrite; static boo::ObjToken m_noTexNoZTestZWrite; static boo::ObjToken m_noTexZTestNoZWrite; static boo::ObjToken m_noTexNoZTestNoZWrite; static boo::ObjToken m_noTexAdditiveZTest; static boo::ObjToken m_noTexAdditiveNoZTest; static boo::ObjToken m_vtxFormatTex; /* No OpenGL */ static boo::ObjToken m_vtxFormatIndTex; /* No OpenGL */ static boo::ObjToken m_vtxFormatNoTex; /* No OpenGL */ CElementGen& m_gen; boo::ObjToken m_regPipeline; boo::ObjToken m_regPipelineSub; boo::ObjToken m_redToAlphaPipeline; boo::ObjToken m_redToAlphaPipelineSub; boo::ObjToken m_regPipelinePmus; boo::ObjToken m_redToAlphaPipelinePmus; CElementGenShaders(CElementGen& gen, const boo::ObjToken& regPipeline, const boo::ObjToken& regPipelineSub, const boo::ObjToken& redToAlphaPipeline, const boo::ObjToken& redToAlphaPipelineSub, const boo::ObjToken& regPipelinePmus, const boo::ObjToken& redToAlphaPipelinePmus) : m_gen(gen), m_regPipeline(regPipeline), m_regPipelineSub(regPipelineSub), m_redToAlphaPipeline(redToAlphaPipeline), m_redToAlphaPipelineSub(redToAlphaPipelineSub), m_regPipelinePmus(regPipelinePmus), m_redToAlphaPipelinePmus(redToAlphaPipelinePmus) {} public: static EShaderClass GetShaderClass(CElementGen& gen); static void BuildShaderDataBinding(boo::IGraphicsDataFactory::Context& ctx, CElementGen& gen); using _CLS = CElementGenShaders; #include "TShaderDecl.hpp" }; } #endif // __URDE_CELEMENTGENSHADERS_HPP__