# class glw::Program

## Overview

Holds several compiled shaders which are used as a whole. More…

    #include <ShaderProgram.h>

    class Program {
    public:
        // construction

        Program();
        ~Program();

        // methods

        static PProgram Create();
        bool AttachShader(const PShader& shader_ptr);
        bool Link();
        bool IsLinked() const;
        gl::GLuint GetID() const;
        std::string GetLinkLog() const;
        void Use() const;
        gl::GLint GetUniformLocation(const std::string& name) const;
        gl::GLint GetUniformBlockLocation(const std::string& name) const;
    };

## Detailed Documentation

Holds several compiled shaders which are used as a whole.

### Construction

    Program()

Creates shader program.

    ~Program()

Destroy program object and remove OpenGL references.

### Methods

    static PProgram Create()

Crates a program object and returns reference.

    bool AttachShader(const PShader& shader_ptr)

Attaches a compiled shader to the program.

    bool Link()

Links all attached Shader files and returns whether linking finished successfully.

    bool IsLinked() const

Checks, whether last linking has finished successful.

    gl::GLuint GetID() const

Returns OpenGL reference index.

    std::string GetLinkLog() const

Returns log of last linking. When no errors nor warnings occurred, returned string is empty.

    void Use() const

Use this program as OpenGL current.

    gl::GLint GetUniformLocation(const std::string& name) const

Returns location of uniform variable with specified name.

    gl::GLint GetUniformBlockLocation(const std::string& name) const

Returns location of uniform block with specified name.