8 #include <unordered_map>
10 #include <glm/fwd.hpp>
14 #include <globjects/globjects_api.h>
41 SeparateShaderObjectsARB
45 static void hintBindlessImplementation(
const BindlessImplementation impl);
51 const std::string & name()
const;
52 gl::GLint location()
const;
65 template<
typename T>
const Uniform<T> * as()
const;
70 void registerProgram(
Program * program);
71 void deregisterProgram(
Program * program);
80 void update(
const Program * program,
bool invalidateLocation)
const;
84 virtual void updateAt(
const Program * program, gl::GLint location)
const = 0;
86 gl::GLint locationFor(
const Program * program)
const;
89 void setValue(
const Program * program, gl::GLint location,
const float & value)
const;
90 void setValue(
const Program * program, gl::GLint location,
const int & value)
const;
91 void setValue(
const Program * program, gl::GLint location,
const unsigned int & value)
const;
92 void setValue(
const Program * program, gl::GLint location,
const bool & value)
const;
94 void setValue(
const Program * program, gl::GLint location,
const glm::vec2 & value)
const;
95 void setValue(
const Program * program, gl::GLint location,
const glm::vec3 & value)
const;
96 void setValue(
const Program * program, gl::GLint location,
const glm::vec4 & value)
const;
98 void setValue(
const Program * program, gl::GLint location,
const glm::ivec2 & value)
const;
99 void setValue(
const Program * program, gl::GLint location,
const glm::ivec3 & value)
const;
100 void setValue(
const Program * program, gl::GLint location,
const glm::ivec4 & value)
const;
102 void setValue(
const Program * program, gl::GLint location,
const glm::uvec2 & value)
const;
103 void setValue(
const Program * program, gl::GLint location,
const glm::uvec3 & value)
const;
104 void setValue(
const Program * program, gl::GLint location,
const glm::uvec4 & value)
const;
106 void setValue(
const Program * program, gl::GLint location,
const glm::mat2 & value)
const;
107 void setValue(
const Program * program, gl::GLint location,
const glm::mat3 & value)
const;
108 void setValue(
const Program * program, gl::GLint location,
const glm::mat4 & value)
const;
110 void setValue(
const Program * program, gl::GLint location,
const glm::mat2x3 & value)
const;
111 void setValue(
const Program * program, gl::GLint location,
const glm::mat3x2 & value)
const;
112 void setValue(
const Program * program, gl::GLint location,
const glm::mat2x4 & value)
const;
113 void setValue(
const Program * program, gl::GLint location,
const glm::mat4x2 & value)
const;
114 void setValue(
const Program * program, gl::GLint location,
const glm::mat3x4 & value)
const;
115 void setValue(
const Program * program, gl::GLint location,
const glm::mat4x3 & value)
const;
117 void setValue(
const Program * program, gl::GLint location,
const gl::GLuint64 & value)
const;
120 void setValue(
const Program * program, gl::GLint location,
const std::vector<float> & value)
const;
121 void setValue(
const Program * program, gl::GLint location,
const std::vector<int> & value)
const;
122 void setValue(
const Program * program, gl::GLint location,
const std::vector<unsigned int> & value)
const;
123 void setValue(
const Program * program, gl::GLint location,
const std::vector<bool> & value)
const;
125 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::vec2> & value)
const;
126 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::vec3> & value)
const;
127 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::vec4> & value)
const;
129 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::ivec2> & value)
const;
130 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::ivec3> & value)
const;
131 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::ivec4> & value)
const;
133 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::uvec2> & value)
const;
134 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::uvec3> & value)
const;
135 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::uvec4> & value)
const;
137 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat2> & value)
const;
138 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat3> & value)
const;
139 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat4> & value)
const;
141 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat2x3> & value)
const;
142 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat3x2> & value)
const;
143 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat2x4> & value)
const;
144 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat4x2> & value)
const;
145 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat3x4> & value)
const;
146 void setValue(
const Program * program, gl::GLint location,
const std::vector<glm::mat4x3> & value)
const;
148 void setValue(
const Program * program, gl::GLint location,
const std::vector<gl::GLuint64> & value)
const;
149 void setValue(
const Program * program, gl::GLint location,
const std::vector<TextureHandle> & value)
const;
151 template <
typename T, std::
size_t Count>
152 void setValue(
const Program * program, gl::GLint location,
const std::array<T, Count> & value)
const;
157 mutable std::unordered_map<const Program *, gl::GLint>
m_locations;
164 #include <globjects/AbstractUniform.inl>