Example #1
0
void djvOpenGlImageShader::init(
    const QString & vertex,
    const QString & fragment) throw (djvError)
{
    if (vertex == _vertex && fragment == _fragment)
        return;

    //DJV_DEBUG("djvOpenGlImageShader::init");
    //DJV_DEBUG_PRINT("fragment = " << fragment);

    del();

    _vertex   = vertex;
    _fragment = fragment;

    GLint error = GL_FALSE;

    _vertexId   = shaderCreate(GL_VERTEX_SHADER);
    _fragmentId = shaderCreate(GL_FRAGMENT_SHADER);

    shaderCompile(_vertexId,   _vertex);
    shaderCompile(_fragmentId, _fragment);

    DJV_DEBUG_OPEN_GL(_program = glCreateProgram());

    if (! _program)
    {
        throw djvError(
            "djvOpenGlImageShader",
            djvOpenGlImage::errorLabels()[djvOpenGlImage::ERROR_CREATE_PROGRAM]);
    }

    DJV_DEBUG_OPEN_GL(glAttachShader(_program, _vertexId));
    DJV_DEBUG_OPEN_GL(glAttachShader(_program, _fragmentId));
    DJV_DEBUG_OPEN_GL(glLinkProgram (_program));

    glGetProgramiv(_program, GL_LINK_STATUS, &error);

    char log [4096] = "";
    GLsizei logSize = 0;
    glGetProgramInfoLog(_program, 4096, &logSize, log);

    //DJV_DEBUG_PRINT("log = " << QString(log));

    if (error != GL_TRUE)
    {
        throw djvError(
            "djvOpenGlImageShader",
            djvOpenGlImage::errorLabels()[djvOpenGlImage::ERROR_CREATE_PROGRAM].
            arg(log));
    }
}
Example #2
0
GLuint shaderLoadAndCompile( ShaderSource *s )
{
    GLuint shader = 0;
    GLchar *text = loadText( s->fname );
    if( text )
    {
        shader = shaderCompile( s->type, s->fname, text );
        free( text );
    }
    return shader;
}