45 #include "BasicTypes.h" 46 #include "DebugUtilities.h" 52 class ShaderMacroHelper
56 template<
typename Def
intionType>
57 void AddShaderMacro(
const Diligent::Char* Name, DefintionType Definition )
59 std::ostringstream ss;
61 AddShaderMacro<const Diligent::Char*>( Name, ss.str().c_str() );
68 m_Macros.emplace_back(
nullptr,
nullptr);
69 m_bIsFinalized =
true;
77 VERIFY_EXPR(m_Macros.size() > 0 && m_Macros.back().Name ==
nullptr && m_Macros.back().Definition ==
nullptr);
79 m_bIsFinalized =
false;
86 m_DefinitionsPool.clear();
87 m_bIsFinalized =
false;
90 operator const ShaderMacro* ()
92 if (m_Macros.size() > 0 && !m_bIsFinalized)
94 return m_Macros.size() ? m_Macros.data() :
nullptr;
99 std::vector< ShaderMacro > m_Macros;
100 std::set< std::string > m_DefinitionsPool;
101 bool m_bIsFinalized =
false;
105 inline void ShaderMacroHelper::AddShaderMacro(
const Diligent::Char* Name,
const Diligent::Char* Definition )
108 auto *PooledDefinition = m_DefinitionsPool.insert(Definition).first->c_str();
109 m_Macros.emplace_back(Name, PooledDefinition);
113 inline void ShaderMacroHelper::AddShaderMacro(
const Diligent::Char* Name,
bool Definition )
115 AddShaderMacro( Name, Definition ?
"1" :
"0");
119 inline void ShaderMacroHelper::AddShaderMacro(
const Diligent::Char* Name,
float Definition )
121 std::ostringstream ss;
126 if( Definition == static_cast<float>(static_cast<int>(Definition)) )
127 ss << std::fixed << std::setprecision( 1 );
130 AddShaderMacro<const Diligent::Char*>( Name, ss.str().c_str() );
Graphics engine namespace.
Definition: AdaptiveFixedBlockAllocator.h:30