globjects  2.0.0.630135941c42
Strict OpenGL objects wrapper.
Loading...
Searching...
No Matches
Shader.h
Go to the documentation of this file.
1
2#pragma once
3
4
5#include <string>
6#include <vector>
7#include <map>
8#include <set>
9
10#include <glbinding/gl/types.h>
11
12#include <globjects/globjects_api.h>
13
14#include <globjects/Object.h>
16
17
18namespace globjects
19{
20
21
22class AbstractStringSource;
23class StaticStringSource;
24class File;
25class Program;
26
27
43class GLOBJECTS_API Shader : public Object, public Instantiator<Shader>
44{
45 friend class Program;
46
47
48public:
49 using IncludePaths = std::vector<std::string>;
50
51
52public:
54 {
55 Fallback,
56 ShadingLanguageIncludeARB
57 };
58
60
61
62public:
63 Shader(const gl::GLenum type, AbstractStringSource * source, const IncludePaths & includePaths = IncludePaths());
64
65 static void globalReplace(const std::string & search, const std::string & replacement);
66 static void globalReplace(const std::string & search, int i);
68
69 static std::unique_ptr<StaticStringSource> sourceFromString(const std::string & sourceString);
70 static std::unique_ptr<File> sourceFromFile(const std::string & filename);
71 static std::unique_ptr<AbstractStringSource> applyGlobalReplacements(AbstractStringSource * source);
72
73
74public:
75 Shader(const gl::GLenum type);
76
77 virtual ~Shader();
78
79 gl::GLenum type() const;
80
84
85 const IncludePaths & includePaths() const;
86 void setIncludePaths(const IncludePaths & includePaths);
87
88 bool compile() const;
89 bool isCompiled() const;
90 void invalidate();
91
92 gl::GLint get(gl::GLenum pname) const;
93 std::string getSource() const;
94 bool checkCompileStatus() const;
95 std::string infoLog() const;
96
97 std::string typeString() const;
98
99 virtual gl::GLenum objectType() const override;
100
101 static std::string typeString(gl::GLenum type);
102
104 virtual void removeSubject(AbstractStringSource * subject);
105
106 virtual void notifyChanged(const AbstractStringSource * changeable);
107
108 void changed() const;
109
110 void registerListener(Program * listener);
111 void deregisterListener(Program * listener);
112
113
114protected:
115 std::string shaderString() const;
116
117
118protected:
119 std::set<Program *> m_programListeners;
120 std::set<AbstractStringSource*> m_sourceSubjects;
121 gl::GLenum m_type;
124 std::set<Program *> m_programs;
125
126 mutable bool m_compiled;
128
129 static std::map<std::string, std::string> s_globalReplacements;
130};
131
132
133} // namespace globjects
Superclass for all types of static and dynamic strings, e.g. for the use as Shader code.
Definition AbstractStringSource.h:27
CRTP for creating objects similar to std::make_unique.
Definition Instantiator.h:22
Superclass of all wrapped OpenGL objects.
Definition Object.h:28
Wraps an OpenGL program.
Definition Program.h:82
Encapsulates OpenGL shaders.
Definition Shader.h:44
bool m_compiled
Definition Shader.h:126
static std::string typeString(gl::GLenum type)
const AbstractStringSource * source() const
std::string getSource() const
static void clearGlobalReplacements()
void setSource(AbstractStringSource *source)
std::string typeString() const
bool checkCompileStatus() const
gl::GLenum type() const
static std::unique_ptr< StaticStringSource > sourceFromString(const std::string &sourceString)
virtual gl::GLenum objectType() const override
IncludePaths m_includePaths
Definition Shader.h:123
bool m_compilationFailed
Definition Shader.h:127
AbstractStringSource * m_source
Definition Shader.h:122
static std::map< std::string, std::string > s_globalReplacements
Definition Shader.h:129
static void globalReplace(const std::string &search, int i)
static std::unique_ptr< AbstractStringSource > applyGlobalReplacements(AbstractStringSource *source)
static std::unique_ptr< File > sourceFromFile(const std::string &filename)
std::set< Program * > m_programs
Definition Shader.h:124
bool compile() const
static void globalReplace(const std::string &search, const std::string &replacement)
Shader(const gl::GLenum type)
void deregisterListener(Program *listener)
void registerListener(Program *listener)
const IncludePaths & includePaths() const
bool isCompiled() const
void changed() const
std::string infoLog() const
static void hintIncludeImplementation(IncludeImplementation impl)
gl::GLint get(gl::GLenum pname) const
gl::GLenum m_type
Definition Shader.h:121
virtual void notifyChanged(const AbstractStringSource *changeable)
void addSubject(AbstractStringSource *subject)
virtual void removeSubject(AbstractStringSource *subject)
std::vector< std::string > IncludePaths
Definition Shader.h:49
std::string shaderString() const
Shader(const gl::GLenum type, AbstractStringSource *source, const IncludePaths &includePaths=IncludePaths())
void setIncludePaths(const IncludePaths &includePaths)
IncludeImplementation
Definition Shader.h:54
std::set< AbstractStringSource * > m_sourceSubjects
Definition Shader.h:120
std::set< Program * > m_programListeners
Definition Shader.h:119
Contains all the classes that wrap OpenGL functionality.