Loading [MathJax]/jax/output/HTML-CSS/config.js
Radium Engine  1.6.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RawShaderMaterial.hpp
1#pragma once
2
3#include <Core/Asset/MaterialData.hpp>
4#include <Engine/Data/Material.hpp>
5#include <Engine/Data/RenderParameters.hpp>
6#include <Engine/Data/ShaderConfiguration.hpp>
7#include <Engine/RaEngine.hpp>
8#include <memory>
9#include <string>
10#include <utility>
11#include <vector>
12
13namespace Ra {
14namespace Engine {
15namespace Data {
16// Predeclare the External/Internal material representation converter
17class RawShaderMaterialConverter;
18} // namespace Data
19} // namespace Engine
20
21namespace Core {
22namespace Asset {
23
27class RA_ENGINE_API RawShaderMaterialData : public MaterialData
28{
31
32 public:
41 const std::string& instanceName,
44 MaterialData( instanceName, "Ra::Engine::Data::RawShaderMaterial" ),
45 m_shaders { shaders },
46 m_paramProvider { std::move( paramProvider ) } {}
47 RawShaderMaterialData() = delete;
49 ~RawShaderMaterialData() = default;
50
51 private:
54};
55
56} // namespace Asset
57} // namespace Core
58
59namespace Engine {
60namespace Data {
66class RA_ENGINE_API RawShaderMaterialConverter final
67{
68 public:
71 inline Material* operator()( const Ra::Core::Asset::MaterialData* toconvert );
72};
73
78class RA_ENGINE_API RawShaderMaterial : public Material
79{
80 public:
88 explicit RawShaderMaterial(
89 const std::string& instanceName,
92
93 ~RawShaderMaterial() override;
94
99
104 inline Data::RenderParameters& getParameters() override;
105
110 inline const Data::RenderParameters& getParameters() const override;
111
115 void registerDefaultTechnique();
116
126 void updateShaders( const std::vector<std::pair<Data::ShaderType, std::string>>& shaders,
127 std::shared_ptr<Data::ShaderParameterProvider> paramProvider = nullptr );
128
133 void updateGL() override final;
134
140 static void registerMaterial();
141
146 static void unregisterMaterial();
147
148 private:
152 std::string computeKey();
153
154 std::vector<std::pair<Data::ShaderType, std::string>> m_shaders;
155 std::shared_ptr<Data::ShaderParameterProvider> m_paramProvider;
156 std::string m_materialKey {};
157};
158
159inline Material*
160RawShaderMaterialConverter::operator()( const Ra::Core::Asset::MaterialData* toconvert ) {
161 auto mat = static_cast<const Core::Asset::RawShaderMaterialData*>( toconvert );
162 return new RawShaderMaterial( mat->getName(), mat->m_shaders, mat->m_paramProvider );
163}
164
166 return m_paramProvider->getParameters();
167}
168
170 return m_paramProvider->getParameters();
171}
172
173} // namespace Data
174} // namespace Engine
175} // 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)
Base class for materials.
Definition Material.hpp:24
Data::RenderParameters & getParameters() override
RawShaderMaterial(const RawShaderMaterial &)=delete
Management of shader parameters with automatic binding of a named parameter to the corresponding glsl...
Shader program parameter provider.
hepler function to manage enum as underlying types in VariableSet
Definition Cage.cpp:4
STL namespace.