#pragma once //Input Layout Description enum class ILSemantic : UINT { NONE = 0, POSITION = (1 << 0), NORMAL = (1 << 1), COLOR = (1 << 2), TEXCOORD = (1 << 3), BINORMAL = (1 << 4), TANGENT = (1 << 5), BLENDINDICES = (1 << 6), BLENDWEIGHTS = (1 << 7) }; ENABLE_BITMASK_OPERATORS(ILSemantic) struct ILDescription { ILSemantic SemanticType; DXGI_FORMAT Format; UINT SemanticIndex; UINT Offset; }; struct MaterialTechniqueContext { ID3DX11EffectTechnique* pTechnique{}; ID3D11InputLayout* pInputLayout{}; std::vector pInputLayoutDescriptions{}; UINT inputLayoutSize{}; UINT inputLayoutID{}; }; class EffectHelper final { public: EffectHelper() = default; ~EffectHelper() = default; EffectHelper(const EffectHelper& other) = delete; EffectHelper(EffectHelper&& other) noexcept = delete; EffectHelper& operator=(const EffectHelper& other) = delete; EffectHelper& operator=(EffectHelper&& other) noexcept = delete; static bool BuildInputLayout(ID3D11Device* pDevice, ID3DX11EffectTechnique* pTechnique, ID3D11InputLayout** pInputLayout, std::vector& inputLayoutDescriptions, UINT& inputLayoutSize, UINT& inputLayoutID); static bool BuildInputLayout(ID3D11Device* pDevice, ID3DX11EffectTechnique* pTechnique, ID3D11InputLayout** pInputLayout, UINT& inputLayoutSize); static bool BuildInputLayout(ID3D11Device* pDevice, ID3DX11EffectTechnique* pTechnique, ID3D11InputLayout** pInputLayout); static const std::wstring& GetIlSemanticName(ILSemantic semantic); private: static std::map create_map() { std::map m; m.insert(std::pair(ILSemantic::POSITION, L"POSITION")); m.insert(std::pair(ILSemantic::NORMAL, L"NORMAL")); m.insert(std::pair(ILSemantic::COLOR, L"COLOR")); m.insert(std::pair(ILSemantic::TEXCOORD, L"TEXCOORD")); m.insert(std::pair(ILSemantic::BINORMAL, L"BINORMAL")); m.insert(std::pair(ILSemantic::TANGENT, L"TANGENT")); m.insert(std::pair(ILSemantic::BLENDINDICES, L"BLENDINDICES")); m.insert(std::pair(ILSemantic::BLENDWEIGHTS, L"BLENDWEIGHTS")); return m; } static std::map m_IlSemanticName; static const std::wstring m_empty; };