Gorgon Game Engine
Shader.h
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <string>
7 #include <map>
8 #include "Simple.h"
9 #include "../Graphics/Color.h"
10 
11 namespace Gorgon {
12  namespace GL {
13 
14  namespace UBOBindingPoint { enum Type { Resolution, }; }
15  namespace TextureUnit { enum Type { Diffuse, Normal, Specular, Depth, AlphaMask }; }
16 
17  unsigned int SetupUBO(int size, int binding_point);
18  void UpdateUBO(unsigned int ubo, int size, void const * const data);
19 
20  class Shader
21  {
22  protected:
23  ~Shader();
24 
25  Shader(const std::string &name) : name(name), program(0), vertexshader(0), geometryshader(0), fragmentshader(0) {}
26 
27  Shader(const Shader&) = delete;
28 
29  Shader&operator=(const Shader&) = delete;
30 
31  void Use();
32  bool IsInitialized();
33  int LocateUniform(const std::string& name);
34  int BindTexture(const std::string &name, int location);
35  void UpdateUniform(int name, float value);
36  void UpdateUniform(int name, int value);
37  void UpdateUniform(int name, const Geometry::Point3D &value);
38  void UpdateUniform(int name, const QuadVertices &value);
39  void UpdateUniform(int name, const QuadTextureCoords &value);
40  void UpdateUniform(int name, const Graphics::RGBAf &value);
41  void BindUBO(const std::string& name, UBOBindingPoint::Type bindingPoint);
42 
43  void InitializeWithSource(std::string vertexsrc, std::string fragmentsrc,
44  std::string geometrysrc = "", std::map<std::string, std::string> defines={});
45 
46  void InitializeWithSource(std::string vertexsrc, std::string fragmentsrc,
47  std::map<std::string, std::string> defines) {
48  InitializeWithSource(vertexsrc, fragmentsrc, "", defines);
49  }
50 
51  void InitializeFromFiles(const std::string& vertexfile, const std::string& fragmentfile,
52  const std::string& geometryfile = "", std::map<std::string, std::string> defines={});
53 
54  void InitializeFromFiles(const std::string& vertexfile, const std::string& fragmentfile,
55  std::map<std::string, std::string> defines) {
56  InitializeFromFiles(vertexfile, fragmentfile, "", defines);
57  }
58 
59  std::string name;
60 
61  private:
62  unsigned int program;
63  unsigned int vertexshader;
64  unsigned int geometryshader;
65  unsigned int fragmentshader;
66  };
67 
68  }
69 }
Gorgon::GL::Shader::InitializeWithSource
void InitializeWithSource(std::string vertexsrc, std::string fragmentsrc, std::string geometrysrc="", std::map< std::string, std::string > defines={})
Definition: Shader.cpp:225
Gorgon::Geometry::basic_Point3D::Vector
T_ Vector[3]
Definition: Point3D.h:71
glDeleteShader
PFNGLDELETESHADERPROC glDeleteShader
Definition: OpenGL.cpp:38
Simple.h
glBindBuffer
PFNGLBINDBUFFERPROC glBindBuffer
Definition: OpenGL.cpp:27
Gorgon::GL::Shader::name
std::string name
Definition: Shader.h:59
Gorgon::GL::Shader::UpdateUniform
void UpdateUniform(int name, float value)
Definition: Shader.cpp:120
Gorgon::GL::Shader::InitializeWithSource
void InitializeWithSource(std::string vertexsrc, std::string fragmentsrc, std::map< std::string, std::string > defines)
Definition: Shader.h:46
Gorgon::GL::QuadTextureCoords::Data
float Data[8]
Definition: Simple.h:72
glCreateProgram
PFNGLCREATEPROGRAMPROC glCreateProgram
Definition: OpenGL.cpp:33
Gorgon::GL::Shader::InitializeFromFiles
void InitializeFromFiles(const std::string &vertexfile, const std::string &fragmentfile, std::map< std::string, std::string > defines)
Definition: Shader.h:54
Gorgon::GL::Shader::Shader
Shader(const Shader &)=delete
glAttachShader
PFNGLATTACHSHADERPROC glAttachShader
Definition: OpenGL.cpp:26
Gorgon::GL::SetupUBO
unsigned int SetupUBO(int size, int binding_point)
Definition: Shader.cpp:94
Gorgon::GL::UBOBindingPoint::Resolution
@ Resolution
Definition: Shader.h:14
glUniformBlockBinding
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding
Definition: OpenGL.cpp:59
OpenGL.h
glBufferSubData
PFNGLBUFFERSUBDATAPROC glBufferSubData
Definition: OpenGL.cpp:31
Gorgon::GL::activeprogram
GLuint activeprogram
Definition: Shader.cpp:18
Gorgon::GL::Shader::IsInitialized
bool IsInitialized()
Gorgon::Graphics::RGBAf::Vector
float Vector[4]
Representation of this class as a float vector.
Definition: Color.h:601
Gorgon::Geometry::basic_Point3D
Definition: Point3D.h:12
glDetachShader
PFNGLDETACHSHADERPROC glDetachShader
Definition: OpenGL.cpp:39
Gorgon::Graphics::RGBAf
Represents a four channel 32 bit float per channel color information.
Definition: Color.h:373
Gorgon::GL::Shader::LocateUniform
int LocateUniform(const std::string &name)
Definition: Shader.cpp:108
glGetUniformBlockIndex
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex
Definition: OpenGL.cpp:48
Gorgon::GL::TextureUnit::Specular
@ Specular
Definition: Shader.h:15
Gorgon::GL::UpdateUBO
void UpdateUBO(unsigned int ubo, int size, void const *const data)
Definition: Shader.cpp:103
glUniform1f
PFNGLUNIFORM1FPROC glUniform1f
Definition: OpenGL.cpp:54
glShaderSource
PFNGLSHADERSOURCEPROC glShaderSource
Definition: OpenGL.cpp:53
glGenBuffers
PFNGLGENBUFFERSPROC glGenBuffers
Definition: OpenGL.cpp:41
Gorgon
Root namespace for Gorgon Game Engine.
Definition: Any.h:19
Gorgon::GL::TextureUnit::Diffuse
@ Diffuse
Definition: Shader.h:15
Gorgon::GL::TextureUnit::Depth
@ Depth
Definition: Shader.h:15
Gorgon::GL::CreateShader
GLuint CreateShader(GLenum type, const std::string &code, const std::string &name)
Definition: Shader.cpp:22
Shader.h
glGetProgramInfoLog
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog
Definition: OpenGL.cpp:44
Gorgon::GL::Shader
Definition: Shader.h:21
glGetProgramiv
PFNGLGETPROGRAMIVPROC glGetProgramiv
Definition: OpenGL.cpp:45
glCompileShader
PFNGLCOMPILESHADERPROC glCompileShader
Definition: OpenGL.cpp:32
Gorgon::GL::QuadVertices::Data
float Data[12]
Definition: Simple.h:31
Gorgon::Utils::Logger
Eases logging procedure by appending necessary information to the given data and streams to a standar...
Definition: Logging.h:19
Gorgon::GL::Shader::BindTexture
int BindTexture(const std::string &name, int location)
Definition: Shader.cpp:113
Gorgon::GL::Shader::Shader
Shader(const std::string &name)
Definition: Shader.h:25
Gorgon::GL::Shader::Use
void Use()
Definition: Shader.cpp:87
glUniform1i
PFNGLUNIFORM1IPROC glUniform1i
Definition: OpenGL.cpp:55
glUniform4fv
PFNGLUNIFORM4FVPROC glUniform4fv
Definition: OpenGL.cpp:58
glGetShaderInfoLog
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog
Definition: OpenGL.cpp:46
glLinkProgram
PFNGLLINKPROGRAMPROC glLinkProgram
Definition: OpenGL.cpp:50
glBindBufferBase
PFNGLBINDBUFFERBASEPROC glBindBufferBase
Definition: OpenGL.cpp:28
Gorgon::GL::UBOBindingPoint::Type
Type
Definition: Shader.h:14
glUniform2fv
PFNGLUNIFORM2FVPROC glUniform2fv
Definition: OpenGL.cpp:56
glUseProgram
PFNGLUSEPROGRAMPROC glUseProgram
Definition: OpenGL.cpp:66
Gorgon::GL::TextureUnit::AlphaMask
@ AlphaMask
Definition: Shader.h:15
Gorgon::GL::Shader::operator=
Shader & operator=(const Shader &)=delete
glBufferData
PFNGLBUFFERDATAPROC glBufferData
Definition: OpenGL.cpp:30
Gorgon::GL::Shader::BindUBO
void BindUBO(const std::string &name, UBOBindingPoint::Type bindingPoint)
Definition: Shader.cpp:174
glCreateShader
PFNGLCREATESHADERPROC glCreateShader
Definition: OpenGL.cpp:34
glGetUniformLocation
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation
Definition: OpenGL.cpp:49
Gorgon::GL::QuadTextureCoords
Definition: Simple.h:44
Gorgon::GL::Shader::~Shader
~Shader()
Definition: Shader.cpp:66
Gorgon::GL::TextureUnit::Type
Type
Definition: Shader.h:15
glDeleteProgram
PFNGLDELETEPROGRAMPROC glDeleteProgram
Definition: OpenGL.cpp:37
glUniform3fv
PFNGLUNIFORM3FVPROC glUniform3fv
Definition: OpenGL.cpp:57
Gorgon::GL::log
Gorgon::Utils::Logger log
The logger that is used for GL operations. Default is unset and will not log anything....
Definition: Shader.cpp:19
glGetShaderiv
PFNGLGETSHADERIVPROC glGetShaderiv
Definition: OpenGL.cpp:47
Gorgon::GL::InsertDefines
void InsertDefines(std::string &code, const std::string &shader_defines)
Definition: Shader.cpp:43
Gorgon::GL::Shader::InitializeFromFiles
void InitializeFromFiles(const std::string &vertexfile, const std::string &fragmentfile, const std::string &geometryfile="", std::map< std::string, std::string > defines={})
Definition: Shader.cpp:184
Gorgon::GL::TextureUnit::Normal
@ Normal
Definition: Shader.h:15
Gorgon::GL::QuadVertices
Definition: Simple.h:10