JUCE  v5.4.1-191-g0ab5e696f
JUCE API
Looking for a senior C++ dev?
I'm looking for work. Hire me!
juce::OpenGLShaderProgram Class Reference

Manages an OpenGL shader program. More...

#include <juce_OpenGLShaderProgram.h>

Collaboration diagram for juce::OpenGLShaderProgram:

Classes

struct  Attribute
 Represents an openGL vertex attribute value. More...
 
struct  Uniform
 Represents an openGL uniform value. More...
 

Public Member Functions

 OpenGLShaderProgram (const OpenGLContext &) noexcept
 Creates a shader for use in a particular GL context. More...
 
 ~OpenGLShaderProgram () noexcept
 Destructor. More...
 
bool addFragmentShader (const String &shaderSourceCode)
 Compiles and adds a fragment shader to this program. More...
 
bool addShader (const String &shaderSourceCode, GLenum shaderType)
 Compiles and adds a shader to this program. More...
 
bool addVertexShader (const String &shaderSourceCode)
 Compiles and adds a fragment shader to this program. More...
 
const StringgetLastError () const noexcept
 Get the output for the last shader compilation or link that failed. More...
 
GLuint getProgramID () const noexcept
 The ID number of the compiled program. More...
 
GLint getUniformIDFromName (const char *uniformName) const noexcept
 Get the uniform ID from the variable name. More...
 
bool link () noexcept
 Links all the compiled shaders into a usable program. More...
 
void release () noexcept
 Deletes the program. More...
 
void setUniform (const char *uniformName, GLfloat value) noexcept
 Sets a float uniform. More...
 
void setUniform (const char *uniformName, GLint value) noexcept
 Sets an int uniform. More...
 
void setUniform (const char *uniformName, GLfloat x, GLfloat y) noexcept
 Sets a vec2 uniform. More...
 
void setUniform (const char *uniformName, GLfloat x, GLfloat y, GLfloat z) noexcept
 Sets a vec3 uniform. More...
 
void setUniform (const char *uniformName, GLfloat x, GLfloat y, GLfloat z, GLfloat w) noexcept
 Sets a vec4 uniform. More...
 
void setUniform (const char *uniformName, GLint x, GLint y, GLint z, GLint w) noexcept
 Sets a vec4 uniform. More...
 
void setUniform (const char *uniformName, const GLfloat *values, GLsizei numValues) noexcept
 Sets a vector float uniform. More...
 
void setUniformMat2 (const char *uniformName, const GLfloat *values, GLint count, GLboolean transpose) noexcept
 Sets a 2x2 matrix float uniform. More...
 
void setUniformMat3 (const char *uniformName, const GLfloat *values, GLint count, GLboolean transpose) noexcept
 Sets a 3x3 matrix float uniform. More...
 
void setUniformMat4 (const char *uniformName, const GLfloat *values, GLint count, GLboolean transpose) noexcept
 Sets a 4x4 matrix float uniform. More...
 
void use () const noexcept
 Selects this program into the current context. More...
 

Static Public Member Functions

static double getLanguageVersion ()
 Returns the version of GLSL that the current context supports. More...
 

Private Attributes

const OpenGLContextcontext
 
String errorLog
 
GLuint programID = 0
 

Detailed Description

Manages an OpenGL shader program.

{OpenGL}

Constructor & Destructor Documentation

◆ OpenGLShaderProgram()

juce::OpenGLShaderProgram::OpenGLShaderProgram ( const OpenGLContext )
noexcept

Creates a shader for use in a particular GL context.

◆ ~OpenGLShaderProgram()

juce::OpenGLShaderProgram::~OpenGLShaderProgram ( )
noexcept

Destructor.

Member Function Documentation

◆ addFragmentShader()

bool juce::OpenGLShaderProgram::addFragmentShader ( const String shaderSourceCode)

Compiles and adds a fragment shader to this program.

This is equivalent to calling addShader() with a type of GL_FRAGMENT_SHADER.

◆ addShader()

bool juce::OpenGLShaderProgram::addShader ( const String shaderSourceCode,
GLenum  shaderType 
)

Compiles and adds a shader to this program.

After adding all your shaders, remember to call link() to link them into a usable program.

If your app is built in debug mode, this method will assert if the program fails to compile correctly.

The shaderType parameter could be GL_VERTEX_SHADER, GL_FRAGMENT_SHADER, etc.

Returns
true if the shader compiled successfully. If not, you can call getLastError() to find out what happened.

◆ addVertexShader()

bool juce::OpenGLShaderProgram::addVertexShader ( const String shaderSourceCode)

Compiles and adds a fragment shader to this program.

This is equivalent to calling addShader() with a type of GL_VERTEX_SHADER.

◆ getLanguageVersion()

static double juce::OpenGLShaderProgram::getLanguageVersion ( )
static

Returns the version of GLSL that the current context supports.

E.g.

{
// ..do something that requires GLSL 1.2 or above..
}

◆ getLastError()

const String& juce::OpenGLShaderProgram::getLastError ( ) const
inlinenoexcept

Get the output for the last shader compilation or link that failed.

References juce::BlocksProtocol::transpose.

◆ getProgramID()

GLuint juce::OpenGLShaderProgram::getProgramID ( ) const
noexcept

The ID number of the compiled program.

◆ getUniformIDFromName()

GLint juce::OpenGLShaderProgram::getUniformIDFromName ( const char *  uniformName) const
noexcept

Get the uniform ID from the variable name.

◆ link()

bool juce::OpenGLShaderProgram::link ( )
noexcept

Links all the compiled shaders into a usable program.

If your app is built in debug mode, this method will assert if the program fails to link correctly.

Returns
true if the program linked successfully. If not, you can call getLastError() to find out what happened.

◆ release()

void juce::OpenGLShaderProgram::release ( )
noexcept

Deletes the program.

◆ setUniform() [1/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
GLfloat  value 
)
noexcept

Sets a float uniform.

◆ setUniform() [2/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
GLint  value 
)
noexcept

Sets an int uniform.

◆ setUniform() [3/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
GLfloat  x,
GLfloat  y 
)
noexcept

Sets a vec2 uniform.

◆ setUniform() [4/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
GLfloat  x,
GLfloat  y,
GLfloat  z 
)
noexcept

Sets a vec3 uniform.

◆ setUniform() [5/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
GLfloat  x,
GLfloat  y,
GLfloat  z,
GLfloat  w 
)
noexcept

Sets a vec4 uniform.

◆ setUniform() [6/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
GLint  x,
GLint  y,
GLint  z,
GLint  w 
)
noexcept

Sets a vec4 uniform.

◆ setUniform() [7/7]

void juce::OpenGLShaderProgram::setUniform ( const char *  uniformName,
const GLfloat *  values,
GLsizei  numValues 
)
noexcept

Sets a vector float uniform.

◆ setUniformMat2()

void juce::OpenGLShaderProgram::setUniformMat2 ( const char *  uniformName,
const GLfloat *  values,
GLint  count,
GLboolean  transpose 
)
noexcept

Sets a 2x2 matrix float uniform.

◆ setUniformMat3()

void juce::OpenGLShaderProgram::setUniformMat3 ( const char *  uniformName,
const GLfloat *  values,
GLint  count,
GLboolean  transpose 
)
noexcept

Sets a 3x3 matrix float uniform.

◆ setUniformMat4()

void juce::OpenGLShaderProgram::setUniformMat4 ( const char *  uniformName,
const GLfloat *  values,
GLint  count,
GLboolean  transpose 
)
noexcept

Sets a 4x4 matrix float uniform.

◆ use()

void juce::OpenGLShaderProgram::use ( ) const
noexcept

Selects this program into the current context.

Member Data Documentation

◆ context

const OpenGLContext& juce::OpenGLShaderProgram::context
private

◆ errorLog

String juce::OpenGLShaderProgram::errorLog
private

◆ programID

GLuint juce::OpenGLShaderProgram::programID = 0
mutableprivate

The documentation for this class was generated from the following file: