Inviwo 0.9.12-pre
Inviwo documentation
|
#include <shaderobject.h>
Classes | |
struct | InDeclaration |
struct | OutDeclaration |
Public Types | |
enum class | ExtensionBehavior { Enable , Require , Warn , Disable } |
using | Callback = std::function<void(ShaderObject*)> |
using | ShaderDefines = std::map<std::string, std::string, std::less<>> |
Public Member Functions | |
ShaderObject (ShaderType shaderType, std::shared_ptr< const ShaderResource > resource) | |
ShaderObject (std::shared_ptr< const ShaderResource > resource) | |
ShaderObject (ShaderType shaderType, std::string_view fileName) | |
ShaderObject (std::string_view fileName) | |
ShaderObject (GLenum shaderType, std::string_view fileName) | |
ShaderObject (const ShaderObject &rhs)=delete | |
ShaderObject (ShaderObject &&rhs) noexcept | |
ShaderObject & | operator= (const ShaderObject &that)=delete |
ShaderObject & | operator= (ShaderObject &&that) noexcept |
GLuint | getID () const |
std::string | getFileName () const |
void | setResource (std::shared_ptr< const ShaderResource >) |
std::shared_ptr< const ShaderResource > | getResource () const |
const std::vector< std::shared_ptr< const ShaderResource > > & | getResources () const |
ShaderType | getShaderType () const |
void | create () |
void | preprocess () |
void | upload () |
void | compile () |
void | build () |
bool | isReady () const |
void | addShaderDefine (std::string_view name, std::string_view value="") |
void | removeShaderDefine (std::string_view name) |
const ShaderDefines & | getShaderDefines () const |
void | setShaderDefine (std::string_view name, bool shouldAdd, std::string_view value="") |
void | setShaderDefines (ShaderDefines shaderDefines) |
bool | hasShaderDefine (std::string_view name) const |
void | clearShaderDefines () |
void | addShaderExtension (std::string_view extName, bool enabled) |
void | addShaderExtension (std::string_view extName, ExtensionBehavior behavior) |
void | setShaderExtension (std::string_view extName, ExtensionBehavior behavior, bool shouldAdd) |
void | removeShaderExtension (std::string_view extName) |
bool | hasShaderExtension (std::string_view extName) const |
void | clearShaderExtensions () |
void | addSegment (ShaderSegment segment) |
void | removeSegments (std::string_view segementName) |
void | clearSegments () |
void | addOutDeclaration (std::string_view name, int location=-1, std::string_view type="vec4") |
adds an additional output specifier to the shader The given name will be added as | |
void | addOutDeclaration (const OutDeclaration &decl) |
void | clearOutDeclarations () |
const std::vector< OutDeclaration > & | getOutDeclarations () const |
void | addInDeclaration (std::string_view name, int location=-1, std::string_view type="vec4") |
adds an additional input specifier to the shader The given name will be added as | |
void | addInDeclaration (const InDeclaration &decl) |
void | clearInDeclarations () |
const std::vector< InDeclaration > & | getInDeclarations () const |
void | addStandardFragmentOutDeclarations () |
void | addStandardVertexInDeclarations () |
std::pair< std::string, size_t > | resolveLine (size_t line) const |
std::string | print (bool showSource=false, bool preprocess=true) |
template<typename T > | |
std::shared_ptr< Callback > | onChange (T &&callback) |
A wrapper for an OpenGL shader object. Handles loading sources from shader resources, either files or stings. Pre-processes the sources resolving all include with help of the shader manager. Keeps a lookup table of from which include each line originates. Handles a list of defines, that can be added or removed
A fragment shader will by default have the following out declarations: out vec4 FragData0; (location 0) out vec4 PickingData; (location 1) and a vertex shader will by default have the following in declarations: in vec4 in_Vertex; (location 0) in vec3 in_Normal; (location 1) in vec4 in_Color; (location 2) in vec3 in_TexCoord; (location 3) The defaults can be removed by calling clearOutDeclarations or clearInDeclarations respectively.
void inviwo::ShaderObject::addInDeclaration | ( | std::string_view | name, |
int | location = -1, | ||
std::string_view | type = "vec4" ) |
adds an additional input specifier to the shader The given name will be added as
in __type__ __name__;
The shader will call glBindAttribLocation for each of the input declarations before linking the shader
name | identifier of the output specifier |
location | index location of the output (< MAX_RENDER_TARGETS) |
type | type used for the output specifier |
void inviwo::ShaderObject::addOutDeclaration | ( | std::string_view | name, |
int | location = -1, | ||
std::string_view | type = "vec4" ) |
adds an additional output specifier to the shader The given name will be added as
out __type__ __name__;
The shader will call glBindFragDataLocation for each of the output declarations before linking the shader
name | identifier of the output specifier |
location | index location of the output (< MAX_RENDER_TARGETS) |
type | type used for the output specifier |
void inviwo::ShaderObject::addSegment | ( | ShaderSegment | segment | ) |
Add a ShaderSegement to be inserted into the shader
void inviwo::ShaderObject::addShaderDefine | ( | std::string_view | name, |
std::string_view | value = "" ) |
Add a define to the shader as #define name value
void inviwo::ShaderObject::addStandardFragmentOutDeclarations | ( | ) |
Adds the default fragment out declarations to the list of out declarations. This function is automatically called in the constructor for a fragment shader. If clearOutDeclarations is called then they will be removed and one would have to manually call this function to re-add them if needed. The defaults are: out vec4 FragData0; (location 0) out vec4 PickingData; (location 1)
void inviwo::ShaderObject::addStandardVertexInDeclarations | ( | ) |
Adds the default vertex in declarations to the list of in declarations. This function is automatically called in the constructor for a vertex shader. If clearInDeclarations is called then they will be removed and one would have to manually call this function to re-add them if needed. The defaults are: in vec4 in_Vertex; (location 0) in vec3 in_Normal; (location 1) in vec4 in_Color; (location 2) in vec3 in_TexCoord; (location 3)
void inviwo::ShaderObject::clearSegments | ( | ) |
Clear all added ShaderSegment
void inviwo::ShaderObject::removeSegments | ( | std::string_view | segementName | ) |
Remove a ShaderSegement with name 'segementName'
void inviwo::ShaderObject::removeShaderDefine | ( | std::string_view | name | ) |
Remove a previously added define
void inviwo::ShaderObject::setShaderDefine | ( | std::string_view | name, |
bool | shouldAdd, | ||
std::string_view | value = "" ) |
Adds or removed a define with name 'name'
name | Name of the definition. |
shouldAdd | If true the define is added with name and value, otherwise the define is removed |
value | Value of definition. |