36#ifndef EASY3D_RENDERER_SHADER_PROGRAM_H
37#define EASY3D_RENDERER_SHADER_PROGRAM_H
39#include <unordered_map>
85 typedef std::pair<AttribType, std::string>
Attribute;
122 const std::string&
name()
const {
return name_; }
175 void set_attrib_names(
const std::vector<ShaderProgram::Attribute>& attributes)
const;
398 static std::string
load_shader_source(
const std::string& file_name,
const std::string& inc_id =
"#include");
414 struct BlockUniform {
419 unsigned int arrayStride;
425 struct UniformBlock {
432 unsigned int bindingIndex;
436 std::unordered_map<std::string, BlockUniform> uniformOffsets;
442 static int spBlockCount;
447 static std::unordered_map<std::string, UniformBlock> spBlocks;
456 unsigned int program_;
461 std::unordered_map<std::string, Uniform> pUniforms;
466 void _add_uniforms();
469 void _add_uniform(
const std::string&
name,
unsigned int type,
unsigned int size);
475 int _type_size(
unsigned int type)
const;
477 std::string _type_string(
unsigned int type)
const;
480 std::string _read_linked_program(
const std::string& file);
491 friend class ShaderManager;
OpenGL Shader Compilation.
Definition shader_program.h:75
bool program_info_log(std::string &log) const
Get the program info log.
Definition shader_program.cpp:294
bool load_shader_from_file(ShaderType st, const std::string &file_name, const std::string &inc_id="#include")
Load the text in the file to the source of the specified shader.
Definition shader_program.cpp:199
void print_active_uniform_blocks()
Print active uniform blocks.
Definition shader_program.cpp:803
bool load_shader_from_code(ShaderType st, const std::string &code)
Load the code to the source of the specified shader.
Definition shader_program.cpp:209
~ShaderProgram()
Destructor.
Definition shader_program.cpp:108
void bind() const
Start using the program.
Definition shader_program.cpp:678
bool is_program_valid() const
Check if the program is valid.
Definition shader_program.cpp:639
const std::string & name() const
Get the name of the shader program.
Definition shader_program.h:122
unsigned int get_program() const
Get the program index.
Definition shader_program.cpp:337
ShaderProgram * set_uniform(const std::string &name, const void *value)
Set the uniform to value.
Definition shader_program.cpp:436
void set_program_output(int index, const std::string &name) const
Bind a user-defined varying out variable to a fragment shader color number.
Definition shader_program.cpp:311
void set_attrib_name(ShaderProgram::AttribType at, const std::string &name) const
Define semantics for the input vertex attributes. This is required for other libraries to know how to...
Definition shader_program.cpp:321
bool is_program_linked() const
Check if the program is linked.
Definition shader_program.cpp:669
void release() const
End using the program.
Definition shader_program.cpp:689
int get_attribute_location(const std::string &name) const
Get the location of an attribute.
Definition shader_program.cpp:332
ShaderType
Types of Shaders.
Definition shader_program.h:88
@ VERTEX
Vertex shader.
Definition shader_program.h:89
@ COMPUTE
Compute shader.
Definition shader_program.h:94
@ TESS_EVALUATION
Tessellation evaluation shader.
Definition shader_program.h:93
@ NUM_SHADER_TYPES
Number of shader types.
Definition shader_program.h:95
@ GEOMETRY
Geometry shader.
Definition shader_program.h:91
@ TESS_CONTROL
Tessellation control shader.
Definition shader_program.h:92
@ FRAGMENT
Fragment shader.
Definition shader_program.h:90
void print_active_uniforms()
Print active uniforms.
Definition shader_program.cpp:772
static bool is_supported()
Is shader program supported?
Definition shader_program.cpp:78
bool shader_info_log(std::string &log, unsigned int shader) const
Get the shader info log.
Definition shader_program.cpp:276
bool link_program()
Prepare program for usage. Links it and collects information about uniform variables and uniform bloc...
Definition shader_program.cpp:247
ShaderProgram(const std::string &name="unknown")
Definition shader_program.cpp:91
void set_attrib_names(const std::vector< ShaderProgram::Attribute > &attributes) const
Define semantics for multiple input vertex attributes.
Definition shader_program.cpp:326
void set_verbose(bool v)
Set verbose mode.
Definition shader_program.h:128
void print_active_attributes()
Print active attributes.
Definition shader_program.cpp:742
AttribType
Types of vertex attributes.
Definition shader_program.h:78
@ TEXCOORD
Texture coordinates.
Definition shader_program.h:82
@ NORMAL
Normal.
Definition shader_program.h:81
@ COLOR
Color.
Definition shader_program.h:80
@ POSITION
Position.
Definition shader_program.h:79
ShaderProgram * set_block(const std::string &name, const void *value)
Set a uniform block as a whole.
Definition shader_program.cpp:342
static std::string load_shader_source(const std::string &file_name, const std::string &inc_id="#include")
Auxiliary function that loads the shader source code from a file.
Definition shader_program.cpp:124
ShaderProgram * set_block_uniform_array_element(const std::string &blockName, const std::string &uniformName, int arrayIndex, const void *value)
Set an element of an array of uniforms inside a block.
Definition shader_program.cpp:376
bool is_attribute_used(const std::string &name)
Check if an attribute is used by the shader.
Definition shader_program.cpp:710
ShaderProgram * release_texture(unsigned int tex_target=0x0DE1)
Release a texture from the shader program.
Definition shader_program.cpp:703
int program_output(const std::string &name) const
Get the fragment shader color number bound to a user-defined varying out variable.
Definition shader_program.cpp:316
bool load_binary(const std::string &file_name)
Load a binary (i.e., compiled and linked) program.
Definition shader_program.cpp:1399
bool save_binary(const std::string &file_name)
Save the program to a binary file.
Definition shader_program.cpp:1447
void clear()
Remove (delete) all shaders.
Definition shader_program.cpp:113
ShaderProgram * bind_texture(const std::string &name, unsigned int tex_id, int unit, unsigned int tex_target=0x0DE1)
Bind a texture to the shader program.
Definition shader_program.cpp:694
void set_name(const std::string &name)
Set the name of the shader program.
Definition shader_program.h:117
std::pair< AttribType, std::string > Attribute
Attribute: a pair of attribute type and attribute name.
Definition shader_program.h:85
bool is_uniform_used(const std::string &name)
Check if a uniform is used by the shader.
Definition shader_program.cpp:726
bool is_bound() const
Check if the program is bound.
Definition shader_program.cpp:662
ShaderProgram * set_block_uniform(const std::string &blockName, const std::string &uniformName, const void *value)
Set a uniform inside a named block.
Definition shader_program.cpp:355
Definition collider.cpp:182