glSpecializeShader(stage_ids[i], j->name.c_str(), spec_id_array.size(), &spec_id_array[0], &spec_value_array[0]);
}
-void OpenGLProgram::finalize(const Module &mod)
+void OpenGLProgram::finalize(const Module &mod, TransientData &transient)
{
glLinkProgram(id);
int status = 0;
if(!info_log.empty())
IO::print("Program link info log:\n%s", info_log);
#endif
+
+ if(mod.get_format()==Module::GLSL)
+ {
+ query_uniforms();
+ query_attributes();
+ apply_bindings(transient);
+ }
}
void OpenGLProgram::query_uniforms()
func = &uniform_wrapper<int, glUniform3iv>;
else if(u.type==INT_VEC4)
func = &uniform_wrapper<int, glUniform4iv>;
+ else if(u.type==UNSIGNED_INT)
+ func = &uniform_wrapper<unsigned, glUniform1uiv>;
+ else if(u.type==UINT_VEC2)
+ func = &uniform_wrapper<unsigned, glUniform2uiv>;
+ else if(u.type==UINT_VEC3)
+ func = &uniform_wrapper<unsigned, glUniform3uiv>;
+ else if(u.type==UINT_VEC4)
+ func = &uniform_wrapper<unsigned, glUniform4uiv>;
else if(u.type==FLOAT_MAT2)
func = &uniform_matrix_wrapper<float, glUniformMatrix2fv>;
else if(u.type==FLOAT_MAT3)