Public Member Functions | |
| ShaderSource () | |
| ~ShaderSource () override | |
| u32 | getShaderIdDirect (const std::string &name, const ShaderConstants &input_const, video::E_MATERIAL_TYPE base_mat, IShaderUniformSetterRC *setter_cb) |
| u32 | getShader (const std::string &name, const ShaderConstants &input_const, video::E_MATERIAL_TYPE base_mat, IShaderUniformSetterRC *setter_cb=nullptr) override |
| Generates or gets a shader. | |
| const ShaderInfo & | getShaderInfo (u32 id) override |
| returns information about an existing shader | |
| void | processQueue () override |
| void | insertSourceShader (const std::string &name_of_shader, const std::string &filename, const std::string &program) override |
| void | rebuildShaders () override |
| void | addShaderConstantSetter (std::unique_ptr< IShaderConstantSetter > setter) override |
| void | addShaderUniformSetterFactory (std::unique_ptr< IShaderUniformSetterFactory > setter) override |
| bool | supportsSampler2DArray () const override |
| Returns true if 'sampler2DArray' is supported in GLSL. | |
| Public Member Functions inherited from IWritableShaderSource | |
| IWritableShaderSource ()=default | |
| virtual | ~IWritableShaderSource ()=default |
| Public Member Functions inherited from IShaderSource | |
| IShaderSource ()=default | |
| virtual | ~IShaderSource ()=default |
| u32 | getShader (const std::string &name, MaterialType material_type, NodeDrawType drawtype=NDT_NORMAL, bool array_texture=false, bool skinning=false) |
| Helper: Generates or gets a shader suitable for nodes and entities. | |
| u32 | getShaderRaw (const std::string &name, bool blendAlpha=false) |
| Helper: Generates or gets a shader for common, general use. | |
Private Member Functions | |
| void | generateShader (ShaderInfo &info) |
| void | putConstant (std::ostream &os, const ShaderConstants::mapped_type &it) |
| outputs a constant to an ostream | |
Private Attributes | |
| std::thread::id | m_main_thread |
| bool | m_fully_programmable = false |
| bool | m_have_glsl3 = false |
| SourceShaderCache | m_sourcecache |
| std::vector< ShaderInfo > | m_shaderinfo_cache |
| std::mutex | m_shaderinfo_cache_mutex |
| std::vector< std::unique_ptr< IShaderConstantSetter > > | m_constant_setters |
| std::vector< std::unique_ptr< IShaderUniformSetterFactory > > | m_uniform_factories |
| ShaderSource::ShaderSource | ( | ) |
References addShaderConstantSetter(), addShaderUniformSetterFactory(), RenderingEngine::get_video_driver(), infostream, m_fully_programmable, m_have_glsl3, m_main_thread, and m_shaderinfo_cache.
|
override |
References RenderingEngine::get_video_driver(), infostream, m_shaderinfo_cache, and m_shaderinfo_cache_mutex.
|
inlineoverridevirtual |
setter. Implements IWritableShaderSource.
References m_constant_setters.
Referenced by ShaderSource().
|
inlineoverridevirtual |
setter. Implements IWritableShaderSource.
References m_uniform_factories.
Referenced by ShaderSource().
|
private |
Unique name of this shader, for debug/logging
References ShaderInfo::base_material, RenderingEngine::get_video_driver(), ShaderInfo::input_constants, m_constant_setters, m_fully_programmable, m_have_glsl3, m_sourcecache, ShaderInfo::material, ShaderInfo::name, putConstant(), and trim().
Referenced by getShaderIdDirect(), and rebuildShaders().
|
overridevirtual |
Generates or gets a shader.
Note that the input constants are not for passing the entire world into the shader. Use IShaderConstantSetter to handle user settings.
| name | name of the shader (directory on disk) |
| input_const | primary key constants for this shader |
| base_mat | base material to use |
| setter_cb | additional uniform setter to use |
Implements IShaderSource.
References errorstream, getShaderIdDirect(), infostream, GetResult< Key, T, Caller, CallerData >::item, GetResult< Key, T, Caller, CallerData >::key, m_main_thread, and MutexedQueue< T >::pop_frontNoEx().
| u32 ShaderSource::getShaderIdDirect | ( | const std::string & | name, |
| const ShaderConstants & | input_const, | ||
| video::E_MATERIAL_TYPE | base_mat, | ||
| IShaderUniformSetterRC * | setter_cb ) |
References ShaderInfo::base_material, generateShader(), infostream, ShaderInfo::input_constants, m_main_thread, m_shaderinfo_cache, m_shaderinfo_cache_mutex, ShaderInfo::name, sanity_check, and ShaderInfo::setter_cb.
Referenced by getShader().
|
overridevirtual |
returns information about an existing shader
Use this to get the material ID to plug into video::SMaterial.
Implements IShaderSource.
References m_shaderinfo_cache, and m_shaderinfo_cache_mutex.
|
overridevirtual |
Implements IWritableShaderSource.
References m_main_thread, m_sourcecache, and sanity_check.
|
overridevirtual |
Implements IWritableShaderSource.
|
inlineprivate |
outputs a constant to an ostream
Referenced by generateShader().
|
overridevirtual |
Implements IWritableShaderSource.
References generateShader(), RenderingEngine::get_video_driver(), infostream, m_shaderinfo_cache, and m_shaderinfo_cache_mutex.
|
inlineoverridevirtual |
Returns true if 'sampler2DArray' is supported in GLSL.
Implements IShaderSource.
References RenderingEngine::get_video_driver(), m_fully_programmable, and m_have_glsl3.
|
private |
Referenced by addShaderConstantSetter(), and generateShader().
|
private |
Referenced by ShaderSource(), generateShader(), and supportsSampler2DArray().
|
private |
Referenced by ShaderSource(), generateShader(), and supportsSampler2DArray().
|
private |
Referenced by ShaderSource(), getShader(), getShaderIdDirect(), and insertSourceShader().
|
private |
Referenced by ShaderSource(), ~ShaderSource(), getShaderIdDirect(), getShaderInfo(), and rebuildShaders().
|
private |
Referenced by ~ShaderSource(), getShaderIdDirect(), getShaderInfo(), and rebuildShaders().
|
private |
Referenced by generateShader(), and insertSourceShader().
|
private |
Referenced by addShaderUniformSetterFactory().