OGLShader::OGLShader(const string& sName, const string& sProgram, const string& sDefines) : m_sName(sName), m_sProgram(sProgram) { m_hFragmentShader = glproc::CreateShaderObject(GL_FRAGMENT_SHADER); const char * pProgramStrs[2]; pProgramStrs[0] = sDefines.c_str(); pProgramStrs[1] = m_sProgram.c_str(); glproc::ShaderSource(m_hFragmentShader, 2, pProgramStrs, 0); glproc::CompileShader(m_hFragmentShader); GLContext::getCurrent()->checkError("OGLShader::OGLShader: glCompileShader()"); dumpInfoLog(m_hFragmentShader); m_hProgram = glproc::CreateProgramObject(); glproc::AttachObject(m_hProgram, m_hFragmentShader); glproc::LinkProgram(m_hProgram); GLContext::getCurrent()->checkError("OGLShader::OGLShader: glLinkProgram()"); GLint bLinked; glproc::GetObjectParameteriv(m_hProgram, GL_OBJECT_LINK_STATUS_ARB, &bLinked); dumpInfoLog(m_hProgram); if (!bLinked) { AVG_TRACE(Logger::ERROR, "Linking shader program '"+sName+"' failed. Aborting."); exit(-1); } }
OGLShader::OGLShader(const string& sName, const string& sVertProgram, const string& sFragProgram, const string& sVertPrefix, const string& sFragPrefix) : m_sName(sName), m_sVertProgram(sVertProgram), m_sFragProgram(sFragProgram) { m_hProgram = glproc::CreateProgram(); glproc::BindAttribLocation(m_hProgram, VertexArray::TEX_INDEX, "a_TexCoord"); glproc::BindAttribLocation(m_hProgram, VertexArray::COLOR_INDEX, "a_Color"); glproc::BindAttribLocation(m_hProgram, VertexArray::POS_INDEX, "a_Pos"); m_hVertexShader = compileShader(GL_VERTEX_SHADER, sVertProgram, sVertPrefix); glproc::AttachShader(m_hProgram, m_hVertexShader); m_hFragmentShader = compileShader(GL_FRAGMENT_SHADER, sFragProgram, sFragPrefix); glproc::AttachShader(m_hProgram, m_hFragmentShader); glproc::LinkProgram(m_hProgram); GLContext::checkError("OGLShader::OGLShader: glLinkProgram()"); GLint bLinked; glproc::GetProgramiv(m_hProgram, GL_LINK_STATUS, &bLinked); if (!bLinked) { AVG_LOG_ERROR("Linking shader program '"+sName+"' failed. Aborting."); dumpInfoLog(m_hVertexShader, Logger::severity::ERROR); dumpInfoLog(m_hFragmentShader, Logger::severity::ERROR); dumpInfoLog(m_hProgram, Logger::severity::ERROR, true); exit(-1); } else { AVG_TRACE(Logger::category::SHADER, Logger::severity::INFO, "Linking shader program '"+sName+"'."); dumpInfoLog(m_hVertexShader, Logger::severity::INFO); dumpInfoLog(m_hFragmentShader, Logger::severity::INFO); dumpInfoLog(m_hProgram, Logger::severity::INFO, true); } m_pShaderRegistry = &*ShaderRegistry::get(); m_TransformParam = *getParam<glm::mat4>("transform"); }