From 318a99d5ca132a800c9a42cc66c718543f98c0f2 Mon Sep 17 00:00:00 2001 From: Alexis Maiquez Date: Tue, 10 Sep 2019 15:01:59 +0200 Subject: [PATCH] + added vector3 support for shader constants (looks like strings were vector3 after all) Signed-off-by: Alexis Maiquez --- CMakeLists.txt | 2 ++ src/WallpaperEngine/Core/Objects/CEffect.cpp | 5 ++++- .../Effects/CShaderConstantVector3.cpp | 17 +++++++++++++++ .../Objects/Effects/CShaderConstantVector3.h | 21 +++++++++++++++++++ src/WallpaperEngine/Render/Objects/CImage.cpp | 9 ++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.cpp create mode 100644 src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1381320..41446e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,8 @@ add_executable( src/WallpaperEngine/Core/Objects/Effects/CShaderConstant.cpp src/WallpaperEngine/Core/Objects/Effects/CShaderConstantFloat.h src/WallpaperEngine/Core/Objects/Effects/CShaderConstantFloat.cpp + src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h + src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.cpp src/WallpaperEngine/Core/Objects/Effects/CShaderConstantInteger.h src/WallpaperEngine/Core/Objects/Effects/CShaderConstantInteger.cpp diff --git a/src/WallpaperEngine/Core/Objects/CEffect.cpp b/src/WallpaperEngine/Core/Objects/CEffect.cpp index 74703b6..553f240 100644 --- a/src/WallpaperEngine/Core/Objects/CEffect.cpp +++ b/src/WallpaperEngine/Core/Objects/CEffect.cpp @@ -2,10 +2,13 @@ #include +#include "WallpaperEngine/Core/Core.h" #include "WallpaperEngine/Core/Objects/CImage.h" #include "WallpaperEngine/Core/Objects/Effects/CShaderConstant.h" #include "WallpaperEngine/Core/Objects/Effects/CShaderConstantFloat.h" +#include "WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h" #include "WallpaperEngine/Core/Objects/Effects/CShaderConstantInteger.h" + #include "WallpaperEngine/FileSystem/FileSystem.h" using namespace WallpaperEngine; @@ -136,7 +139,7 @@ CEffect* CEffect::fromJSON (json data, Core::CObject* object) } else if ((*constantCur).is_string () == true) { - throw std::runtime_error ("String constants not supported yet"); + constant = new Effects::CShaderConstantVector3 (WallpaperEngine::Core::ato3vf (*constantCur)); } else { diff --git a/src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.cpp b/src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.cpp new file mode 100644 index 0000000..d1fd1cb --- /dev/null +++ b/src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.cpp @@ -0,0 +1,17 @@ +#include "CShaderConstantVector3.h" + +using namespace WallpaperEngine::Core::Objects::Effects; + + +CShaderConstantVector3::CShaderConstantVector3 (irr::core::vector3df value) : + CShaderConstant (Type), + m_value (value) +{ +} + +irr::core::vector3df* CShaderConstantVector3::getValue () +{ + return &this->m_value; +} + +const std::string CShaderConstantVector3::Type = "vector3"; \ No newline at end of file diff --git a/src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h b/src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h new file mode 100644 index 0000000..faf1bdc --- /dev/null +++ b/src/WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h @@ -0,0 +1,21 @@ +#pragma once + +#include "CShaderConstant.h" + +#include +#include + +namespace WallpaperEngine::Core::Objects::Effects +{ + class CShaderConstantVector3 : public CShaderConstant + { + public: + CShaderConstantVector3 (irr::core::vector3df value); + + irr::core::vector3df* getValue (); + + static const std::string Type; + protected: + irr::core::vector3df m_value; + }; +} diff --git a/src/WallpaperEngine/Render/Objects/CImage.cpp b/src/WallpaperEngine/Render/Objects/CImage.cpp index f500000..0647482 100644 --- a/src/WallpaperEngine/Render/Objects/CImage.cpp +++ b/src/WallpaperEngine/Render/Objects/CImage.cpp @@ -13,6 +13,7 @@ #include "WallpaperEngine/Core/Objects/Effects/CShaderConstant.h" #include "WallpaperEngine/Core/Objects/Effects/CShaderConstantFloat.h" #include "WallpaperEngine/Core/Objects/Effects/CShaderConstantInteger.h" +#include "WallpaperEngine/Core/Objects/Effects/CShaderConstantVector3.h" using namespace WallpaperEngine; @@ -194,6 +195,10 @@ void CImage::generatePass (Core::Objects::Images::Materials::CPassess* pass, Cor { pixelVar->as ()->setValue (*(*cur).second->as ()->getValue ()); } + else if (pixelVar->is () && (*cur).second->is ()) + { + pixelVar->as ()->setValue (*(*cur).second->as ()->getValue ()); + } } if (vertexVar) @@ -206,6 +211,10 @@ void CImage::generatePass (Core::Objects::Images::Materials::CPassess* pass, Cor { vertexVar->as ()->setValue (*(*cur).second->as ()->getValue ()); } + else if (vertexVar->is () && (*cur).second->is ()) + { + vertexVar->as ()->setValue (*(*cur).second->as ()->getValue ()); + } } } }