class ffw::GLProgram

Class List > ffw :: GLProgram

An OpenGL shader program. More...

Public Functions

Type Name
GLProgram ()
GLProgram (const std::initializer_list< GLShader *> & shaders)
GLProgram (const GLProgram & other) = delete
GLProgram (GLProgram && other)
virtual ~GLProgram ()
GLProgram & operator= (const GLProgram & other) = delete
GLProgram & operator= (GLProgram && other)
void swap (GLProgram & other)
void attachShader (const GLShader & shader)
void linkProgram ()
void destroy ()
GLint getHandle () const
bool isCreated () const
void enableVertexAttribArray (GLint location) const
Enables a vertex attrib array at a specific location.
void disableVertexAttribArray (GLint location) const
Disables a vertex attrib array at a specific location.
void setAttributePointerf (GLint location, GLint size, GLsizei stride, const GLvoid * offset) const
Specify the location and data format of the array of generic vertex attributes at a specific index.
void setAttributeDivisor (GLuint index, GLuint divisor) const
Modify the rate at which generic vertex attributes advance during instanced rendering.
void drawArrays (unsigned int mode, int first, int count) const
void drawArraysInstanced (unsigned int mode, int first, int count, int instancecount) const
void drawElements (unsigned int mode, int count, unsigned int type, const void * indices) const
void drawElementsRange (unsigned int mode, unsigned int start, unsigned int end, int count, unsigned int type, const void * indices) const
void drawElementsInstanced (unsigned int mode, int count, unsigned int type, const void * indices, int instancecount) const
void bind () const
void unbind () const
int getUniformLocation (const char * name) const
int getAttributeLocation (const char * name) const
void setUniform1f (int location, float value) const
void setUniform1fv (int location, const float * array, int length) const
void setUniform1i (int location, int value) const
void setUniform1iv (int location, const int * array, int length) const
void setUniform2f (int location, float x, float y) const
void setUniform2fv (int location, const float * array, int length) const
void setUniform2i (int location, int x, int y) const
void setUniform2iv (int location, const int * array, int length) const
void setUniform3f (int location, float x, float y, float z) const
void setUniform3fv (int location, const float * array, int length) const
void setUniform3i (int location, int x, int y, int z) const
void setUniform3iv (int location, const int * array, int length) const
void setUniform4f (int location, float x, float y, float z, float w) const
void setUniform4fv (int location, const float * array, int length) const
void setUniform4i (int location, int x, int y, int z, int w) const
void setUniform4iv (int location, const int * array, int length) const
void setUniformMatrix2fv (int location, const float * mat, int length) const
void setUniformMatrix3fv (int location, const float * mat, int length) const
void setUniformMatrix4fv (int location, const float * mat, int length) const
void setUniform2f (int location, const ffw::Vec2f & vec) const
void setUniform2fv (int location, const ffw::Vec2f * array, int length) const
void setUniform2i (int location, const ffw::Vec2i & vec) const
void setUniform2iv (int location, const ffw::Vec2i * array, int length) const
void setUniform3f (int location, const ffw::Vec3f & vec) const
void setUniform3fv (int location, const ffw::Vec3f * array, int length) const
void setUniform3i (int location, const ffw::Vec3i & vec) const
void setUniform3iv (int location, const ffw::Vec3i * array, int length) const
void setUniform4f (int location, const ffw::Vec4f & vec) const
void setUniform4fv (int location, const ffw::Vec4f * array, int length) const
void setUniform4i (int location, const ffw::Vec4i & vec) const
void setUniform4iv (int location, const ffw::Vec4i * array, int length) const
void setUniform4f (int location, const Color & color) const
void setUniform4fv (int location, const Color * colors, int length) const
void setUniformMatrix3fv (int location, const Mat3x3f * mat, int length) const
void setUniformMatrix4fv (int location, const Mat4x4f * mat, int length) const

Detailed Description

This does not create the shaders. You will have to create the shaders using ffw::GLShader and then add them to this ffw::GLProgram! An example code below:

// Somewhere in your chode
ffw::GLProgram program;
ffw::GLShader vertShader;
ffw::GLShader fragShader;

// Initialization (run this only once)
try {
    // Compiles the shaders
    vertShader = ffw::GLShader(GL_VERTEX_SHADER, ...shader code here as string...);
    fragShader = ffw::GLShader(GL_FRAGMENT_SHADER, ...shader code here as string...);

    // Links the two shaders into one program
    program = ffw::GLProgram({ &vertShader, &fragShader });
} catch (ffw::GLException& e) {
    std::cerr << "Something went wrong: " << e.what() << std::endl;
}

// Rendering
while(true) {
    // Begin our shader program
    program.bind();

    // Bind VBOs, VAos, etc...
    // Bind uniforms, attributes...
    program.setUniformMatrix4fv(
        boxProgram.getUniformLocation("model"), &matrix[0], 1);
    
    // Draw the vertices using VBO
    program.drawArrays(GL_TRIANGLES, 0, 24);

    // Stops the shader program
    program.unbind();
}

Public Functions Documentation

function GLProgram (1/4)

ffw::GLProgram::GLProgram ()

function GLProgram (2/4)

ffw::GLProgram::GLProgram (
    const std::initializer_list< GLShader *> & shaders
)

function GLProgram (3/4)

ffw::GLProgram::GLProgram (
    const GLProgram & other
) = delete

function GLProgram (4/4)

ffw::GLProgram::GLProgram (
    GLProgram && other
)

function ~GLProgram

virtual ffw::GLProgram::~GLProgram ()

function operator= (1/2)

GLProgram & ffw::GLProgram::operator= (
    const GLProgram & other
) = delete

function operator= (2/2)

GLProgram & ffw::GLProgram::operator= (
    GLProgram && other
)

function swap

void ffw::GLProgram::swap (
    GLProgram & other
)

function attachShader

void ffw::GLProgram::attachShader (
    const GLShader & shader
)

function linkProgram

void ffw::GLProgram::linkProgram ()

function destroy

void ffw::GLProgram::destroy ()

function getHandle

GLint ffw::GLProgram::getHandle () const

function isCreated

bool ffw::GLProgram::isCreated () const

function enableVertexAttribArray

void ffw::GLProgram::enableVertexAttribArray (
    GLint location
) const

Enables a vertex attrib array at a specific location.

Note:

This method is being called by setAttributePointerf

function disableVertexAttribArray

void ffw::GLProgram::disableVertexAttribArray (
    GLint location
) const

Disables a vertex attrib array at a specific location.

function setAttributePointerf

void ffw::GLProgram::setAttributePointerf (
    GLint location,
    GLint size,
    GLsizei stride,
    const GLvoid * offset
) const

Specify the location and data format of the array of generic vertex attributes at a specific index.

Note:

This automatically calls enableVertexAttribArray with the location

function setAttributeDivisor

void ffw::GLProgram::setAttributeDivisor (
    GLuint index,
    GLuint divisor
) const

Modify the rate at which generic vertex attributes advance during instanced rendering.

function drawArrays

void ffw::GLProgram::drawArrays (
    unsigned int mode,
    int first,
    int count
) const

function drawArraysInstanced

void ffw::GLProgram::drawArraysInstanced (
    unsigned int mode,
    int first,
    int count,
    int instancecount
) const

function drawElements

void ffw::GLProgram::drawElements (
    unsigned int mode,
    int count,
    unsigned int type,
    const void * indices
) const

function drawElementsRange

void ffw::GLProgram::drawElementsRange (
    unsigned int mode,
    unsigned int start,
    unsigned int end,
    int count,
    unsigned int type,
    const void * indices
) const

function drawElementsInstanced

void ffw::GLProgram::drawElementsInstanced (
    unsigned int mode,
    int count,
    unsigned int type,
    const void * indices,
    int instancecount
) const

function bind

void ffw::GLProgram::bind () const

function unbind

void ffw::GLProgram::unbind () const

function getUniformLocation

int ffw::GLProgram::getUniformLocation (
    const char * name
) const

function getAttributeLocation

int ffw::GLProgram::getAttributeLocation (
    const char * name
) const

function setUniform1f

void ffw::GLProgram::setUniform1f (
    int location,
    float value
) const

function setUniform1fv

void ffw::GLProgram::setUniform1fv (
    int location,
    const float * array,
    int length
) const

function setUniform1i

void ffw::GLProgram::setUniform1i (
    int location,
    int value
) const

function setUniform1iv

void ffw::GLProgram::setUniform1iv (
    int location,
    const int * array,
    int length
) const

function setUniform2f (1/2)

void ffw::GLProgram::setUniform2f (
    int location,
    float x,
    float y
) const

function setUniform2fv (1/2)

void ffw::GLProgram::setUniform2fv (
    int location,
    const float * array,
    int length
) const

function setUniform2i (1/2)

void ffw::GLProgram::setUniform2i (
    int location,
    int x,
    int y
) const

function setUniform2iv (1/2)

void ffw::GLProgram::setUniform2iv (
    int location,
    const int * array,
    int length
) const

function setUniform3f (1/2)

void ffw::GLProgram::setUniform3f (
    int location,
    float x,
    float y,
    float z
) const

function setUniform3fv (1/2)

void ffw::GLProgram::setUniform3fv (
    int location,
    const float * array,
    int length
) const

function setUniform3i (1/2)

void ffw::GLProgram::setUniform3i (
    int location,
    int x,
    int y,
    int z
) const

function setUniform3iv (1/2)

void ffw::GLProgram::setUniform3iv (
    int location,
    const int * array,
    int length
) const

function setUniform4f (1/3)

void ffw::GLProgram::setUniform4f (
    int location,
    float x,
    float y,
    float z,
    float w
) const

function setUniform4fv (1/3)

void ffw::GLProgram::setUniform4fv (
    int location,
    const float * array,
    int length
) const

function setUniform4i (1/2)

void ffw::GLProgram::setUniform4i (
    int location,
    int x,
    int y,
    int z,
    int w
) const

function setUniform4iv (1/2)

void ffw::GLProgram::setUniform4iv (
    int location,
    const int * array,
    int length
) const

function setUniformMatrix2fv

void ffw::GLProgram::setUniformMatrix2fv (
    int location,
    const float * mat,
    int length
) const

function setUniformMatrix3fv (1/2)

void ffw::GLProgram::setUniformMatrix3fv (
    int location,
    const float * mat,
    int length
) const

function setUniformMatrix4fv (1/2)

void ffw::GLProgram::setUniformMatrix4fv (
    int location,
    const float * mat,
    int length
) const

function setUniform2f (2/2)

void ffw::GLProgram::setUniform2f (
    int location,
    const ffw::Vec2f & vec
) const

function setUniform2fv (2/2)

void ffw::GLProgram::setUniform2fv (
    int location,
    const ffw::Vec2f * array,
    int length
) const

function setUniform2i (2/2)

void ffw::GLProgram::setUniform2i (
    int location,
    const ffw::Vec2i & vec
) const

function setUniform2iv (2/2)

void ffw::GLProgram::setUniform2iv (
    int location,
    const ffw::Vec2i * array,
    int length
) const

function setUniform3f (2/2)

void ffw::GLProgram::setUniform3f (
    int location,
    const ffw::Vec3f & vec
) const

function setUniform3fv (2/2)

void ffw::GLProgram::setUniform3fv (
    int location,
    const ffw::Vec3f * array,
    int length
) const

function setUniform3i (2/2)

void ffw::GLProgram::setUniform3i (
    int location,
    const ffw::Vec3i & vec
) const

function setUniform3iv (2/2)

void ffw::GLProgram::setUniform3iv (
    int location,
    const ffw::Vec3i * array,
    int length
) const

function setUniform4f (2/3)

void ffw::GLProgram::setUniform4f (
    int location,
    const ffw::Vec4f & vec
) const

function setUniform4fv (2/3)

void ffw::GLProgram::setUniform4fv (
    int location,
    const ffw::Vec4f * array,
    int length
) const

function setUniform4i (2/2)

void ffw::GLProgram::setUniform4i (
    int location,
    const ffw::Vec4i & vec
) const

function setUniform4iv (2/2)

void ffw::GLProgram::setUniform4iv (
    int location,
    const ffw::Vec4i * array,
    int length
) const

function setUniform4f (3/3)

void ffw::GLProgram::setUniform4f (
    int location,
    const Color & color
) const

function setUniform4fv (3/3)

void ffw::GLProgram::setUniform4fv (
    int location,
    const Color * colors,
    int length
) const

function setUniformMatrix3fv (2/2)

void ffw::GLProgram::setUniformMatrix3fv (
    int location,
    const Mat3x3f * mat,
    int length
) const

function setUniformMatrix4fv (2/2)

void ffw::GLProgram::setUniformMatrix4fv (
    int location,
    const Mat4x4f * mat,
    int length
) const

The documentation for this class was generated from the following file: include/ffw/graphics/glprogram.h