KiCad PCB EDA Suite
|
Provide the access to the OpenGL shaders. More...
#include <shader.h>
Public Member Functions | |
SHADER () | |
virtual | ~SHADER () |
template<typename... Args> | |
bool | LoadShaderFromStrings (SHADER_TYPE aShaderType, Args &&... aArgs) |
Add a shader and compile the shader sources. | |
bool | LoadShaderFromFile (SHADER_TYPE aShaderType, const std::string &aShaderSourceName) |
Load one of the built-in shaders and compiles it. | |
bool | Link () |
Link the shaders. | |
bool | IsLinked () const |
Return true if shaders are linked correctly. | |
void | Use () |
Use the shader. | |
void | Deactivate () |
Deactivate the shader and use the default OpenGL program. | |
bool | IsActive () const |
Return the current state of the shader. | |
void | ConfigureGeometryShader (GLuint maxVertices, GLuint geometryInputType, GLuint geometryOutputType) |
Configure the geometry shader - has to be done before linking! | |
int | AddParameter (const std::string &aParameterName) |
Add a parameter to the parameter queue. | |
void | SetParameter (int aParameterNumber, float aValue) const |
Set a parameter of the shader. | |
void | SetParameter (int aParameterNumber, int aValue) const |
void | SetParameter (int aParameterNumber, const VECTOR2D &aValue) const |
void | SetParameter (int aParameterNumber, float f0, float f1, float f2, float f3) const |
int | GetAttribute (const std::string &aAttributeName) const |
Get an attribute location. | |
Static Public Member Functions | |
static std::string | ReadSource (const std::string &aShaderSourceName) |
Read the shader source file. | |
Private Member Functions | |
bool | loadShaderFromStringArray (SHADER_TYPE aShaderType, const char **aArray, size_t aSize) |
Compile vertex of fragment shader source code into the program. | |
void | programInfo (GLuint aProgram) |
Get the shader program information. | |
void | shaderInfo (GLuint aShader) |
Get the shader information. | |
Private Attributes | |
std::deque< GLuint > | shaderNumbers |
Shader number list. | |
GLuint | programNumber |
Shader program number. | |
bool | isProgramCreated |
Flag for program creation. | |
bool | isShaderLinked |
Is the shader linked? | |
bool | active |
Is any of shaders used? | |
GLuint | maximumVertices |
The maximum of vertices to be generated. | |
GLuint | geomInputType |
Output type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]. | |
GLuint | geomOutputType |
std::deque< GLint > | parameterLocation |
Location of the parameter. | |
Provide the access to the OpenGL shaders.
The purpose of this class is advanced drawing with OpenGL. One example is using the pixel shader for drawing exact circles or for anti-aliasing. This class supports vertex, geometry and fragment shaders.
Make sure that the hardware supports these features. This can be identified with the "GLEW" library.
SHADER::SHADER | ( | ) |
Definition at line 41 of file shader.cpp.
References programNumber.
|
virtual |
Definition at line 55 of file shader.cpp.
References active, Deactivate(), isProgramCreated, programNumber, and shaderNumbers.
int SHADER::AddParameter | ( | const std::string & | aParameterName | ) |
Add a parameter to the parameter queue.
To communicate with the shader use this function to set up the names for the uniform variables. These are queued in a list and can be assigned with the SetParameter(..) method using the queue position.
aParameterName | is the name of the parameter. |
Definition at line 130 of file shader.cpp.
References parameterLocation, and programNumber.
Referenced by KIGFX::OPENGL_GAL::BeginDrawing().
void SHADER::ConfigureGeometryShader | ( | GLuint | maxVertices, |
GLuint | geometryInputType, | ||
GLuint | geometryOutputType | ||
) |
Configure the geometry shader - has to be done before linking!
maxVertices | is the maximum of vertices to be generated. |
geometryInputType | is the input type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.] |
geometryOutputType | is the output type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.] |
Definition at line 92 of file shader.cpp.
References geomInputType, geomOutputType, and maximumVertices.
|
inline |
Deactivate the shader and use the default OpenGL program.
Definition at line 135 of file shader.h.
References active.
Referenced by KIGFX::OPENGL_GAL::BeginDrawing(), KIGFX::GPU_CACHED_MANAGER::EndDrawing(), KIGFX::GPU_NONCACHED_MANAGER::EndDrawing(), and ~SHADER().
int SHADER::GetAttribute | ( | const std::string & | aAttributeName | ) | const |
Get an attribute location.
aAttributeName | is the name of the attribute. |
Definition at line 172 of file shader.cpp.
References programNumber.
Referenced by KIGFX::GPU_MANAGER::SetShader().
|
inline |
|
inline |
Return true if shaders are linked correctly.
Definition at line 118 of file shader.h.
References isShaderLinked.
Referenced by KIGFX::OPENGL_GAL::init().
bool SHADER::Link | ( | ) |
Link the shaders.
Definition at line 101 of file shader.cpp.
References isShaderLinked, programInfo(), and programNumber.
Referenced by KIGFX::OPENGL_GAL::init().
bool SHADER::LoadShaderFromFile | ( | SHADER_TYPE | aShaderType, |
const std::string & | aShaderSourceName | ||
) |
Load one of the built-in shaders and compiles it.
aShaderSourceName | is the shader source file name. |
aShaderType | is the type of the shader. |
Definition at line 83 of file shader.cpp.
References LoadShaderFromStrings(), and ReadSource().
|
private |
Compile vertex of fragment shader source code into the program.
Definition at line 238 of file shader.cpp.
References geomInputType, geomOutputType, isProgramCreated, isShaderLinked, maximumVertices, programInfo(), programNumber, KIGFX::SHADER_TYPE_GEOMETRY, shaderInfo(), and shaderNumbers.
Referenced by LoadShaderFromStrings().
|
inline |
Add a shader and compile the shader sources.
aArgs | is the list of strings (std::string or convertible to const char*) which are concatenated and compiled as a single shader source code. |
aShaderType | is the type of the shader. |
Definition at line 93 of file shader.h.
References loadShaderFromStringArray(), and KIGFX::DETAIL::translateStringArg().
Referenced by KIGFX::OPENGL_GAL::init(), and LoadShaderFromFile().
|
private |
Get the shader program information.
aProgram | is the program number. |
Definition at line 178 of file shader.cpp.
Referenced by Link(), and loadShaderFromStringArray().
|
static |
Read the shader source file.
aShaderSourceName | is the shader source file name. |
Definition at line 216 of file shader.cpp.
Referenced by LoadShaderFromFile().
void SHADER::SetParameter | ( | int | aParameterNumber, |
const VECTOR2D & | aValue | ||
) | const |
Definition at line 165 of file shader.cpp.
References parameterLocation, VECTOR2< T >::x, and VECTOR2< T >::y.
void SHADER::SetParameter | ( | int | aParameterNumber, |
float | aValue | ||
) | const |
Set a parameter of the shader.
aParameterNumber | is the number of the parameter. |
aValue | is the value of the parameter. |
Definition at line 143 of file shader.cpp.
References parameterLocation.
Referenced by KIGFX::OPENGL_GAL::BeginDrawing().
void SHADER::SetParameter | ( | int | aParameterNumber, |
float | f0, | ||
float | f1, | ||
float | f2, | ||
float | f3 | ||
) | const |
Definition at line 158 of file shader.cpp.
References parameterLocation.
void SHADER::SetParameter | ( | int | aParameterNumber, |
int | aValue | ||
) | const |
Definition at line 151 of file shader.cpp.
References parameterLocation.
|
private |
Get the shader information.
aShader | is the shader number. |
Definition at line 197 of file shader.cpp.
Referenced by loadShaderFromStringArray().
|
inline |
Use the shader.
Definition at line 126 of file shader.h.
References active, and programNumber.
Referenced by KIGFX::OPENGL_GAL::BeginDrawing(), KIGFX::GPU_CACHED_MANAGER::EndDrawing(), and KIGFX::GPU_NONCACHED_MANAGER::EndDrawing().
|
private |
Is any of shaders used?
Definition at line 224 of file shader.h.
Referenced by Deactivate(), IsActive(), Use(), and ~SHADER().
|
private |
Output type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.].
Definition at line 228 of file shader.h.
Referenced by ConfigureGeometryShader(), and loadShaderFromStringArray().
|
private |
Definition at line 231 of file shader.h.
Referenced by ConfigureGeometryShader(), and loadShaderFromStringArray().
|
private |
Flag for program creation.
Definition at line 222 of file shader.h.
Referenced by loadShaderFromStringArray(), and ~SHADER().
|
private |
Is the shader linked?
Definition at line 223 of file shader.h.
Referenced by IsLinked(), Link(), and loadShaderFromStringArray().
|
private |
The maximum of vertices to be generated.
Input type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]
Definition at line 225 of file shader.h.
Referenced by ConfigureGeometryShader(), and loadShaderFromStringArray().
|
private |
Location of the parameter.
Definition at line 232 of file shader.h.
Referenced by AddParameter(), and SetParameter().
|
private |
Shader program number.
Definition at line 221 of file shader.h.
Referenced by AddParameter(), GetAttribute(), Link(), loadShaderFromStringArray(), SHADER(), Use(), and ~SHADER().
|
private |
Shader number list.
Definition at line 220 of file shader.h.
Referenced by loadShaderFromStringArray(), and ~SHADER().