Loading [MathJax]/jax/input/TeX/config.js
Radium Engine  1.6.3
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ShaderConfiguration.hpp
1#pragma once
2
3#include <Core/CoreMacros.hpp>
4#include <Engine/RaEngine.hpp>
5#include <array>
6#include <iosfwd>
7#include <list>
8#include <set>
9#include <string>
10#include <utility>
11#include <vector>
12
13namespace glbinding {
14class Version;
15} // namespace glbinding
16
17namespace Ra {
18namespace Engine {
19namespace Data {
20
24enum ShaderType : uint {
25 ShaderType_VERTEX = 0,
26 ShaderType_FRAGMENT,
27 ShaderType_GEOMETRY,
28 ShaderType_TESS_CONTROL,
29 ShaderType_TESS_EVALUATION,
30 ShaderType_COMPUTE,
31 ShaderType_COUNT
32};
33
67class RA_ENGINE_API ShaderConfiguration final
68{
69 friend class ShaderProgram;
70
71 public:
72 ShaderConfiguration() = default;
78 explicit ShaderConfiguration( const std::string& name );
79
85 const std::string& vertexShader,
86 const std::string& fragmentShader );
87
93 void addShader( ShaderType type, const std::string& name );
94
102 void addShaderSource( ShaderType type, const std::string& source );
103
107 void addProperty( const std::string& prop );
108 void addProperties( const std::list<std::string>& props );
109 void removeProperty( const std::string& prop );
110
114 void addInclude( const std::string& incl, ShaderType type = ShaderType_FRAGMENT );
115 void addIncludes( const std::list<std::string>& incls, ShaderType type = ShaderType_FRAGMENT );
116 void removeInclude( const std::string& incl, ShaderType type = ShaderType_FRAGMENT );
117
119 void addNamedString( const std::string& includepath, const std::string& realfile );
120
124 bool isComplete() const;
125
126 bool operator<( const ShaderConfiguration& other ) const;
127
128 std::set<std::string> getProperties() const;
129
130 const std::vector<std::pair<std::string, ShaderType>>& getIncludes() const;
131
132 const std::vector<std::pair<std::string, std::string>>& getNamedStrings() const;
133
134 // get default shader configuration
135 static ShaderConfiguration getDefaultShaderConfig() { return m_defaultShaderConfig; }
136
137 void setVersion( const std::string& version ) { m_version = version; }
138 void setName( const std::string& name ) { m_name = name; }
139
140 const std::string& getName() const { return m_name; }
141 const std::string& getVersion() const { return m_version; }
142 friend std::ostream& operator<<( std::ostream& stream, const ShaderConfiguration& config );
143
144 private:
145 std::string m_name {};
146 std::string m_version {};
147
150 std::array<std::pair<std::string, bool>, ShaderType_COUNT> m_shaders;
151
152 std::set<std::string> m_properties;
153
155
157
158 static ShaderConfiguration m_defaultShaderConfig;
159
160 static std::string s_glslVersion;
161
162 public:
167 static void setOpenGLVersion( const glbinding::Version& version );
168
173 static std::string getGLSLVersion();
174};
175
176} // namespace Data
177} // namespace Engine
178} // namespace Ra
hepler function to manage enum as underlying types in VariableSet
Definition Cage.cpp:4