void ShaderLibrary::loadPreferences() { QString defaultShader(Preferences::DefaultShader()); if (defaultShader.isEmpty()) defaultShader = NoShader; QVariantMap defaultShaderParameters(Preferences::DefaultShaderParameters()); setUniformVariables(defaultShader, defaultShaderParameters); bindShader(defaultShader); }
char GLSLBase::initializeShaders(std::string& log) { log = ""; GLint vertex_compiled, fragment_compiled; GLint linked; // Delete any existing program object if (program_object) { glDeleteObjectARB(program_object); program_object = NULL; } vertex_shader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); const char* a = vertexProgramSource(); glShaderSourceARB(vertex_shader, 1, &a, NULL); glCompileShaderARB(vertex_shader); glGetObjectParameterivARB(vertex_shader, GL_OBJECT_COMPILE_STATUS_ARB, &vertex_compiled); fragment_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); const char* b = fragmentProgramSource(); glShaderSourceARB(fragment_shader, 1, &b, NULL); glCompileShaderARB(fragment_shader); glGetObjectParameterivARB(fragment_shader, GL_OBJECT_COMPILE_STATUS_ARB, &fragment_compiled); if (!vertex_compiled || !fragment_compiled) { if (vertex_shader) { glDeleteObjectARB(vertex_shader); vertex_shader = NULL; log += "\n Glsl error vertex shader not compiled \n"; } if (fragment_shader) { glDeleteObjectARB(fragment_shader); fragment_shader = NULL; log += "\n Glsl error fragment shader not compiled \n"; } return 0; } program_object = glCreateProgramObjectARB(); if (vertex_shader != NULL) { glAttachObjectARB(program_object, vertex_shader); glDeleteObjectARB(vertex_shader); } if (fragment_shader != NULL) { glAttachObjectARB(program_object, fragment_shader); glDeleteObjectARB(fragment_shader); } glLinkProgramARB(program_object); glGetObjectParameterivARB(program_object, GL_OBJECT_LINK_STATUS_ARB, &linked); if (!linked) { glDeleteObjectARB(program_object); program_object = NULL; log += "\n Glsl error shaders not linked"; return 0; } defaultShaderParameters(); log += "\n Glsl shaders compiled"; m_hasShaders = 1; return 1; }