diff options
author | Elias Fleckenstein <54945686+EliasFleckenstein03@users.noreply.github.com> | 2020-11-04 16:44:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-04 16:44:42 +0100 |
commit | 5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc (patch) | |
tree | c980d614fec4a5495798be3e79e033229062c3cd /src/client/shader.h | |
parent | 28f6a79706b088c37268a59d90878220dc4ef9c7 (diff) | |
parent | 3af10766fd2b58b068e970266724d7eb10e9316b (diff) | |
download | dragonfireclient-5d9ae5a91c544fc7fbd475decf47cef7e09ef8fc.tar.xz |
Merge branch 'master' into master
Diffstat (limited to 'src/client/shader.h')
-rw-r--r-- | src/client/shader.h | 107 |
1 files changed, 66 insertions, 41 deletions
diff --git a/src/client/shader.h b/src/client/shader.h index 109d39336..4d1578df0 100644 --- a/src/client/shader.h +++ b/src/client/shader.h @@ -39,10 +39,10 @@ class IGameDef; Utilizes a thread-safe cache. */ -std::string getShaderPath(const std::string &name_of_shader, - const std::string &filename); +std::string getShaderPath(const std::string &name_of_shader, const std::string &filename); -struct ShaderInfo { +struct ShaderInfo +{ std::string name = ""; video::E_MATERIAL_TYPE base_material = video::EMT_SOLID; video::E_MATERIAL_TYPE material = video::EMT_SOLID; @@ -57,38 +57,43 @@ struct ShaderInfo { Setter of constants for shaders */ -namespace irr { namespace video { - class IMaterialRendererServices; -} } +namespace irr +{ +namespace video +{ +class IMaterialRendererServices; +} +} - -class IShaderConstantSetter { +class IShaderConstantSetter +{ public: virtual ~IShaderConstantSetter() = default; virtual void onSetConstants(video::IMaterialRendererServices *services, bool is_highlevel) = 0; - virtual void onSetMaterial(const video::SMaterial& material) - { } + virtual void onSetMaterial(const video::SMaterial &material) {} }; - -class IShaderConstantSetterFactory { +class IShaderConstantSetterFactory +{ public: virtual ~IShaderConstantSetterFactory() = default; - virtual IShaderConstantSetter* create() = 0; + virtual IShaderConstantSetter *create() = 0; }; - -template <typename T, std::size_t count=1> -class CachedShaderSetting { +template <typename T, std::size_t count = 1> class CachedShaderSetting +{ const char *m_name; T m_sent[count]; bool has_been_set = false; bool is_pixel; + protected: CachedShaderSetting(const char *name, bool is_pixel) : - m_name(name), is_pixel(is_pixel) - {} + m_name(name), is_pixel(is_pixel) + { + } + public: void set(const T value[count], video::IMaterialRendererServices *services) { @@ -104,55 +109,75 @@ public: }; template <typename T, std::size_t count = 1> -class CachedPixelShaderSetting : public CachedShaderSetting<T, count> { +class CachedPixelShaderSetting : public CachedShaderSetting<T, count> +{ public: CachedPixelShaderSetting(const char *name) : - CachedShaderSetting<T, count>(name, true){} + CachedShaderSetting<T, count>(name, true) + { + } }; template <typename T, std::size_t count = 1> -class CachedVertexShaderSetting : public CachedShaderSetting<T, count> { +class CachedVertexShaderSetting : public CachedShaderSetting<T, count> +{ public: CachedVertexShaderSetting(const char *name) : - CachedShaderSetting<T, count>(name, false){} + CachedShaderSetting<T, count>(name, false) + { + } }; - /* ShaderSource creates and caches shaders. */ -class IShaderSource { +class IShaderSource +{ public: IShaderSource() = default; virtual ~IShaderSource() = default; - virtual u32 getShaderIdDirect(const std::string &name, - const u8 material_type, const u8 drawtype){return 0;} - virtual ShaderInfo getShaderInfo(u32 id){return ShaderInfo();} - virtual u32 getShader(const std::string &name, - const u8 material_type, const u8 drawtype){return 0;} + virtual u32 getShaderIdDirect(const std::string &name, const u8 material_type, + const u8 drawtype) + { + return 0; + } + virtual ShaderInfo getShaderInfo(u32 id) { return ShaderInfo(); } + virtual u32 getShader(const std::string &name, const u8 material_type, + const u8 drawtype) + { + return 0; + } }; -class IWritableShaderSource : public IShaderSource { +class IWritableShaderSource : public IShaderSource +{ public: IWritableShaderSource() = default; virtual ~IWritableShaderSource() = default; - virtual u32 getShaderIdDirect(const std::string &name, - const u8 material_type, const u8 drawtype){return 0;} - virtual ShaderInfo getShaderInfo(u32 id){return ShaderInfo();} - virtual u32 getShader(const std::string &name, - const u8 material_type, const u8 drawtype){return 0;} + virtual u32 getShaderIdDirect(const std::string &name, const u8 material_type, + const u8 drawtype) + { + return 0; + } + virtual ShaderInfo getShaderInfo(u32 id) { return ShaderInfo(); } + virtual u32 getShader(const std::string &name, const u8 material_type, + const u8 drawtype) + { + return 0; + } - virtual void processQueue()=0; + virtual void processQueue() = 0; virtual void insertSourceShader(const std::string &name_of_shader, - const std::string &filename, const std::string &program)=0; - virtual void rebuildShaders()=0; - virtual void addShaderConstantSetterFactory(IShaderConstantSetterFactory *setter) = 0; + const std::string &filename, const std::string &program) = 0; + virtual void rebuildShaders() = 0; + virtual void addShaderConstantSetterFactory( + IShaderConstantSetterFactory *setter) = 0; }; IWritableShaderSource *createShaderSource(); -void dumpShaderProgram(std::ostream &output_stream, - const std::string &program_type, const std::string &program); +void dumpShaderProgram(std::ostream &output_stream, const std::string &program_type, + const std::string &program); |