]> git.sesse.net Git - movit/blobdiff - effect_util.cpp
Use UBOs instead of glUniform. Work in progress; no clear wins seen yet.
[movit] / effect_util.cpp
index b671620388719b4e7943698124f3fe175c40ab01..4036caf6a49ecb684a4af50a509de1bb3413b674 100644 (file)
@@ -14,6 +14,24 @@ GLint get_uniform_location(GLuint glsl_program_num, const string &prefix, const
        return glGetUniformLocation(glsl_program_num, name.c_str());
 }
 
+void get_uniform_offset_and_size(GLuint glsl_program_num, const string &prefix, const string &key, GLint *offset, GLint *size)
+{
+       string name = prefix + "_" + key;
+       GLuint index;
+       const GLchar *name_cstr = name.c_str();
+       glGetUniformIndices(glsl_program_num, 1, &name_cstr, &index);
+       check_error();
+       if (index == GL_INVALID_INDEX) {
+               *offset = -1;
+               *size = 0;
+               return;
+       }
+       glGetActiveUniformsiv(glsl_program_num, 1, &index, GL_UNIFORM_OFFSET, offset);
+       check_error();
+       glGetActiveUniformsiv(glsl_program_num, 1, &index, GL_UNIFORM_SIZE, size);
+       check_error();
+}
+
 void set_uniform_int(GLuint glsl_program_num, const string &prefix, const string &key, int value)
 {
        GLint location = get_uniform_location(glsl_program_num, prefix, key);
@@ -69,6 +87,17 @@ void set_uniform_vec4(GLuint glsl_program_num, const string &prefix, const strin
        check_error();
 }
 
+void set_uniform_vec2_array(GLuint glsl_program_num, const string &prefix, const string &key, const float *values, size_t num_values)
+{
+       GLint location = get_uniform_location(glsl_program_num, prefix, key);
+       if (location == -1) {
+               return;
+       }
+       check_error();
+       glUniform2fv(location, num_values, values);
+       check_error();
+}
+
 void set_uniform_vec4_array(GLuint glsl_program_num, const string &prefix, const string &key, const float *values, size_t num_values)
 {
        GLint location = get_uniform_location(glsl_program_num, prefix, key);