1 #include <Engine/Data/RawShaderMaterial.hpp>
3 #include <Engine/Data/MaterialConverters.hpp>
4 #include <Engine/Data/ShaderConfigFactory.hpp>
5 #include <Engine/Rendering/RenderTechnique.hpp>
12 const std::string& instanceName,
13 const std::vector<std::pair<Data::ShaderType, std::string>>& shaders,
14 std::shared_ptr<Data::ShaderParameterProvider> paramProvider ) :
16 m_shaders { shaders },
17 m_paramProvider { std::move( paramProvider ) } {
18 m_materialKey = computeKey();
24 Rendering::EngineRenderTechniques::removeDefaultTechnique( m_materialKey );
27 std::string RawShaderMaterial::computeKey() {
29 auto content = std::to_string( std::size_t(
this ) );
30 for (
const auto& p : m_shaders ) {
32 content += std::to_string( std::size_t(
this ) );
34 return std::to_string( std::hash<std::string> {}( content ) );
42 for (
const auto& p : m_shaders ) {
43 myConfig.addShaderSource( p.first, p.second );
49 auto materialKey { m_materialKey };
51 Rendering::EngineRenderTechniques::registerDefaultTechnique(
56 rt.
setConfiguration( *pass, Rendering::DefaultRenderingPasses::LIGHTING_OPAQUE );
74 m_paramProvider->updateGL();
78 const std::vector<std::pair<Data::ShaderType, std::string>>& shaders,
79 std::shared_ptr<Data::ShaderParameterProvider> paramProvider ) {
81 Rendering::EngineRenderTechniques::removeDefaultTechnique( m_materialKey );
83 if ( paramProvider ) { m_paramProvider = std::move( paramProvider ); }
84 m_materialKey = computeKey();
void setMaterialName(std::string newName)
void updateGL() override final
void updateShaders(const std::vector< std::pair< Data::ShaderType, std::string >> &shaders, std::shared_ptr< Data::ShaderParameterProvider > paramProvider=nullptr)
static void unregisterMaterial()
void registerDefaultTechnique()
~RawShaderMaterial() override
static void registerMaterial()
RawShaderMaterial(const std::string &instanceName, const std::vector< std::pair< Data::ShaderType, std::string >> &shaders, std::shared_ptr< Data::ShaderParameterProvider > paramProvider)
void setConfiguration(const Data::ShaderConfiguration &newConfig, Core::Utils::Index pass=DefaultRenderingPasses::LIGHTING_OPAQUE)
bool removeMaterialConverter(const std::string &name)
bool registerMaterialConverter(const std::string &name, ConverterFunction converter)
void addConfiguration(const ShaderConfiguration &config)
Core::Utils::optional< ShaderConfiguration > getConfiguration(const std::string &name)
bool removeConfiguration(const std::string &configName)