Loading [MathJax]/extensions/TeX/AMSmath.js
Radium Engine  1.5.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
RawShaderMaterial.hpp
1 #pragma once
2 
3 #include <Engine/RaEngine.hpp>
4 
5 #include <Core/Asset/MaterialData.hpp>
6 #include <Engine/Data/Material.hpp>
7 
8 namespace Ra {
9 namespace Engine {
10 namespace Data {
11 // Predeclare the External/Internal material representation converter
12 class RawShaderMaterialConverter;
13 } // namespace Data
14 } // namespace Engine
15 
16 namespace Core {
17 namespace Asset {
18 
22 class RA_ENGINE_API RawShaderMaterialData : public MaterialData
23 {
26 
27  public:
36  const std::string& instanceName,
37  const std::vector<std::pair<Ra::Engine::Data::ShaderType, std::string>>& shaders,
38  std::shared_ptr<Ra::Engine::Data::ShaderParameterProvider> paramProvider ) :
39  MaterialData( instanceName, "Ra::Engine::Data::RawShaderMaterial" ),
40  m_shaders { shaders },
41  m_paramProvider { std::move( paramProvider ) } {}
42  RawShaderMaterialData() = delete;
44  ~RawShaderMaterialData() = default;
45 
46  private:
47  std::vector<std::pair<Ra::Engine::Data::ShaderType, std::string>> m_shaders;
48  std::shared_ptr<Ra::Engine::Data::ShaderParameterProvider> m_paramProvider;
49 };
50 
51 } // namespace Asset
52 } // namespace Core
53 
54 namespace Engine {
55 namespace Data {
61 class RA_ENGINE_API RawShaderMaterialConverter final
62 {
63  public:
64  RawShaderMaterialConverter() = default;
65  ~RawShaderMaterialConverter() = default;
66  inline Material* operator()( const Ra::Core::Asset::MaterialData* toconvert );
67 };
68 
73 class RA_ENGINE_API RawShaderMaterial : public Material
74 {
75  public:
83  explicit RawShaderMaterial(
84  const std::string& instanceName,
85  const std::vector<std::pair<Data::ShaderType, std::string>>& shaders,
86  std::shared_ptr<Data::ShaderParameterProvider> paramProvider );
87 
91  ~RawShaderMaterial() override;
92 
97 
102  inline Data::RenderParameters& getParameters() override;
103 
108  inline const Data::RenderParameters& getParameters() const override;
109 
113  void registerDefaultTechnique();
114 
124  void updateShaders( const std::vector<std::pair<Data::ShaderType, std::string>>& shaders,
125  std::shared_ptr<Data::ShaderParameterProvider> paramProvider = nullptr );
126 
131  void updateGL() override final;
132 
138  static void registerMaterial();
139 
144  static void unregisterMaterial();
145 
146  private:
151  std::string computeKey();
152 
153  std::vector<std::pair<Data::ShaderType, std::string>> m_shaders;
154  std::shared_ptr<Data::ShaderParameterProvider> m_paramProvider;
155  std::string m_materialKey {};
156 };
157 
158 inline Material*
159 RawShaderMaterialConverter::operator()( const Ra::Core::Asset::MaterialData* toconvert ) {
160  auto mat = static_cast<const Core::Asset::RawShaderMaterialData*>( toconvert );
161  return new RawShaderMaterial( mat->getName(), mat->m_shaders, mat->m_paramProvider );
162 }
163 
165  return m_paramProvider->getParameters();
166 }
167 
169  return m_paramProvider->getParameters();
170 }
171 
172 } // namespace Data
173 } // namespace Engine
174 } // namespace Ra
represent material data loaded by a file loader. Material data must be identified by a unique name....
RawShaderMaterialData(const std::string &instanceName, const std::vector< std::pair< Ra::Engine::Data::ShaderType, std::string >> &shaders, std::shared_ptr< Ra::Engine::Data::ShaderParameterProvider > paramProvider)
Data::RenderParameters & getParameters() override
RawShaderMaterial(const RawShaderMaterial &)=delete
Definition: Cage.cpp:3