瀏覽代碼

Fix for #161, texture priorities were not being properly taken into account

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
Alexis Maiquez 3 年之前
父節點
當前提交
181dd1eef8
共有 2 個文件被更改,包括 9 次插入 和 5 次删除
  1. 1 1
      src/WallpaperEngine/Core/Objects/CEffect.cpp
  2. 8 4
      src/WallpaperEngine/Render/Objects/Effects/CPass.cpp

+ 1 - 1
src/WallpaperEngine/Core/Objects/CEffect.cpp

@@ -110,7 +110,7 @@ CEffect* CEffect::fromJSON (json data, CUserSettingBoolean* visible, CObject* ob
                             texture = texturesCur;
                         }
 
-                        std::vector<std::string> passTextures = passCur->getTextures ();
+                        const auto& passTextures = passCur->getTextures ();
 
                         if (textureNumber < passTextures.size ())
                             passCur->setTexture (textureNumber, texture);

+ 8 - 4
src/WallpaperEngine/Render/Objects/Effects/CPass.cpp

@@ -511,14 +511,14 @@ void CPass::setupUniforms ()
         {
             if (bindCur != bindEnd)
             {
-                this->m_finalTextures.insert (std::make_pair ((*bindCur).first, nullptr));
+                this->m_finalTextures [(*bindCur).first] = nullptr;
                 bindCur ++;
             }
 
             if (cur != end)
             {
                 if ((*cur) != nullptr)
-                    this->m_finalTextures.insert (std::make_pair (index, *cur));
+                    this->m_finalTextures [index] = *cur;
 
                 index ++;
                 cur ++;
@@ -543,7 +543,9 @@ void CPass::setupUniforms ()
                     else
                         textureRef = this->getContext ().resolveTexture (textureName);
 
-                    this->m_finalTextures.insert (std::make_pair ((*fragCur).first, textureRef));
+                    // ensure there's no texture in that slot already, shader textures are defaults in case nothing is there
+                    if (this->m_finalTextures.find ((*fragCur).first) == this->m_finalTextures.end ())
+                        this->m_finalTextures [(*fragCur).first] = textureRef;
                 }
                 catch (std::runtime_error& ex)
                 {
@@ -572,7 +574,9 @@ void CPass::setupUniforms ()
                     else
                         textureRef = this->getContext ().resolveTexture (textureName);
 
-                    this->m_finalTextures.insert (std::make_pair ((*vertCur).first, textureRef));
+                    // ensure there's no texture in that slot already, shader textures are defaults in case nothing is there
+                    if (this->m_finalTextures.find ((*vertCur).first) == this->m_finalTextures.end ())
+                        this->m_finalTextures [(*vertCur).first] = textureRef;
                 }
                 catch (std::runtime_error& ex)
                 {