All Classes Files Functions Variables Typedefs Pages
UniformSet.hpp
1 #pragma once
2 
3 #include "GLException.hpp"
4 #include "GLTools.hpp"
5 #include "HotProgram.fpp"
6 #include "UniformSlot.hpp"
7 #include "../config/BaseProxy.hpp"
8 #include "../util/NotCloneable.hpp"
9 #include <GL/glew.h>
10 #include <string>
11 
12 namespace lumina {
13 namespace internal {
14 
15 struct UniformSet : public NotCopyable, public config::CommonBase {
16 public:
17  UniformSlot operator[](std::string at) {
18  auto index = glGetUniformLocation(m_program, at.c_str());
19 
20  // check for error
21  auto err = glGetError();
22  if(err != GL_NO_ERROR) {
23  logError("[UniformSet] Error while obtaining uniform offset <",
24  translateGLError(err),
25  ">!");
26  throw GLException("[UniformSet] Error while obtaining uniform offset");
27  }
28 
29  // check if name lookup was successful
30  if(index == -1) {
31  logWarning("[UniformSet] Uniform with name <", at, "> does not exists!");
32  }
33 
34  return UniformSlot(index);
35  }
36 
37 private:
38  GLuint m_program;
39 
40  UniformSet(GLuint prog) : m_program(prog) {}
41 
42  friend ::lumina::HotProgram;
43 };
44 
45 }
46 }
Definition: UniformSet.hpp:15
Definition: SingleBase.hpp:19
Definition: NotCloneable.hpp:5
Definition: GLException.hpp:7
Definition: UniformSlot.hpp:12