コード例 #1
0
ファイル: OGLShader.cpp プロジェクト: cnxsoft/xibo4arm
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);
    }
    
}
コード例 #2
0
ファイル: OGLShader.cpp プロジェクト: libavg/libavg
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");
}