From afe745234009beed9ecb9b84da6f66c18e7cc12b Mon Sep 17 00:00:00 2001 From: Alexis Maiquez Date: Sat, 4 Dec 2021 21:57:21 +0100 Subject: [PATCH] + added support for alpha and color loading for images Signed-off-by: Alexis Maiquez --- src/WallpaperEngine/Core/Objects/CImage.cpp | 23 ++++++++++++++++--- src/WallpaperEngine/Core/Objects/CImage.h | 8 ++++++- .../Render/Objects/Effects/CPass.cpp | 4 ++-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/WallpaperEngine/Core/Objects/CImage.cpp b/src/WallpaperEngine/Core/Objects/CImage.cpp index 4660c35..f462f40 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.cpp +++ b/src/WallpaperEngine/Core/Objects/CImage.cpp @@ -16,11 +16,15 @@ CImage::CImage ( const glm::vec3& scale, const glm::vec3& angles, const glm::vec2& size, - std::string alignment) : + std::string alignment, + const glm::vec3& color, + float alpha) : CObject (visible, id, std::move(name), Type, origin, scale, angles), m_size (size), m_material (material), - m_alignment (std::move(alignment)) + m_alignment (std::move(alignment)), + m_color (color), + m_alpha (alpha) { } @@ -37,6 +41,8 @@ WallpaperEngine::Core::CObject* CImage::fromJSON ( auto image_it = data.find ("image"); auto size_val = jsonFindDefault (data, "size", "0.0 0.0"); // this one might need some adjustment auto alignment = jsonFindDefault (data, "alignment", "center"); + auto alpha = jsonFindDefault (data, "alpha", 1.0); + auto color_val = jsonFindDefault (data, "color", "1.0 1.0 1.0"); json content = json::parse (WallpaperEngine::FileSystem::loadFullFile ((*image_it).get (), container)); @@ -51,7 +57,9 @@ WallpaperEngine::Core::CObject* CImage::fromJSON ( scale, angles, WallpaperEngine::Core::aToVector2 (size_val), - alignment + alignment, + WallpaperEngine::Core::aToVector3 (color_val), + alpha ); } @@ -70,5 +78,14 @@ const std::string& CImage::getAlignment () const return this->m_alignment; } +const float CImage::getAlpha () const +{ + return this->m_alpha; +} + +const glm::vec3& CImage::getColor () const +{ + return this->m_color; +} const std::string CImage::Type = "image"; \ No newline at end of file diff --git a/src/WallpaperEngine/Core/Objects/CImage.h b/src/WallpaperEngine/Core/Objects/CImage.h index 7b1a7f6..3adfec1 100644 --- a/src/WallpaperEngine/Core/Objects/CImage.h +++ b/src/WallpaperEngine/Core/Objects/CImage.h @@ -31,6 +31,8 @@ namespace WallpaperEngine::Core::Objects const Images::CMaterial* getMaterial () const; const glm::vec2& getSize () const; const std::string& getAlignment () const; + const float getAlpha () const; + const glm::vec3& getColor () const; protected: CImage ( @@ -42,7 +44,9 @@ namespace WallpaperEngine::Core::Objects const glm::vec3& scale, const glm::vec3& angles, const glm::vec2& size, - std::string alignment + std::string alignment, + const glm::vec3& color, + float alpha ); static const std::string Type; @@ -51,5 +55,7 @@ namespace WallpaperEngine::Core::Objects glm::vec2 m_size; Images::CMaterial* m_material; std::string m_alignment; + float m_alpha; + glm::vec3 m_color; }; }; diff --git a/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp b/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp index e53a186..e2703dd 100644 --- a/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp +++ b/src/WallpaperEngine/Render/Objects/Effects/CPass.cpp @@ -467,8 +467,8 @@ void CPass::setupUniforms () // register variables like brightness and alpha with some default value this->addUniform ("g_Brightness", 1.0f); // TODO: GET FROM THE IMAGE this->addUniform ("g_UserAlpha", 1.0f); - this->addUniform ("g_Alpha", 1.0f); // TODO: GET FROM THE IMAGE - this->addUniform ("g_Color", glm::vec3 {1.0f, 1.0f, 1.0f}); // TODO: GET FROM THE IMAGE + this->addUniform ("g_Alpha", this->m_material->getImage ()->getImage ()->getAlpha ()); + this->addUniform ("g_Color", this->m_material->getImage ()->getImage ()->getColor ()); // add some external variables this->addUniform ("g_Time", &g_Time); // add model-view-projection matrix