Bladeren bron

- removed useless variable types that are not being used anymore
~ updated some strings to ensure the type-checking matches
+ added support for integer <-> float casting on constants
+ added support for vec2 variables

Signed-off-by: Alexis Maiquez <almamu@almamu.com>

Alexis Maiquez 5 jaren geleden
bovenliggende
commit
b152913d90

+ 0 - 5
CMakeLists.txt

@@ -66,11 +66,6 @@ add_executable(
         src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector4.h
         src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector4.cpp
 
-        src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableFloatPointer.h
-        src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableFloatPointer.cpp
-        src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector2Pointer.h
-        src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector2Pointer.cpp
-
         src/WallpaperEngine/Render/Shaders/Compiler.h
         src/WallpaperEngine/Render/Shaders/Compiler.cpp
 

+ 1 - 1
src/WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstantInteger.cpp

@@ -14,4 +14,4 @@ int32_t* CShaderConstantInteger::getValue ()
     return &this->m_value;
 }
 
-const std::string CShaderConstantInteger::Type = "integer";
+const std::string CShaderConstantInteger::Type = "int";

+ 1 - 1
src/WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstantVector3.cpp

@@ -14,4 +14,4 @@ glm::vec3* CShaderConstantVector3::getValue ()
     return &this->m_value;
 }
 
-const std::string CShaderConstantVector3::Type = "vector3";
+const std::string CShaderConstantVector3::Type = "vec3";

+ 36 - 12
src/WallpaperEngine/Render/Objects/Effects/CPass.cpp

@@ -7,8 +7,6 @@
 #include "WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector2.h"
 #include "WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector3.h"
 #include "WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector4.h"
-#include "WallpaperEngine/Render/Shaders/Variables/CShaderVariableFloatPointer.h"
-#include "WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector2Pointer.h"
 
 #include "WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstant.h"
 #include "WallpaperEngine/Core/Objects/Effects/Constants/CShaderConstantFloat.h"
@@ -488,16 +486,38 @@ void CPass::setupShaderVariables ()
 
             // ensure the shader's and the constant are of the same type
             // TODO: CHECK THIS, THERE'S SOME BACKGROUNDS WHERE THIS HAPPENS :/
-            /*if ((*cur).second->getType () != var->getType ())
-                throw std::runtime_error ("Constant and pixel/vertex variable are not of the same type");*/
-
-            // now determine the constant's type and register the correct uniform for it
-            if ((*cur).second->is <CShaderConstantFloat> ())
-                this->addUniform (var->getName (), (*cur).second->as <CShaderConstantFloat> ()->getValue ());
-            else if ((*cur).second->is <CShaderConstantInteger> ())
-                this->addUniform (var->getName (), (*cur).second->as <CShaderConstantInteger> ()->getValue ());
-            else if ((*cur).second->is <CShaderConstantVector3> ())
-                this->addUniform (var->getName (), (*cur).second->as <CShaderConstantVector3> ()->getValue ());
+            if ((*cur).second->getType () != var->getType ())
+            {
+                // there's situations where this type mismatch is actually expected
+                // integers and floats are equivalent, this could be detected at load time
+                // but that'd mean to compile the shader in the load, and not on the render stage
+                // so take into account these conversions here
+
+                if ((*cur).second->is <CShaderConstantFloat> () == true && var->is <CShaderVariableInteger> () == true)
+                {
+                    // create an integer value from a float
+                    this->addUniform (var->getName (), static_cast <int> (*(*cur).second->as <CShaderConstantFloat> ()->getValue ()));
+                }
+                else if ((*cur).second->is <CShaderConstantInteger> () == true && var->is <CShaderVariableFloat> () == true)
+                {
+                    // create a float value from an integer
+                    this->addUniform (var->getName (), static_cast <float> (*(*cur).second->as <CShaderConstantInteger> ()->getValue ()));
+                }
+                else
+                {
+                    throw std::runtime_error ("Constant and pixel/vertex variable are not of the same type");
+                }
+            }
+            else
+            {
+                // now determine the constant's type and register the correct uniform for it
+                if ((*cur).second->is <CShaderConstantFloat> ())
+                    this->addUniform (var->getName (), (*cur).second->as <CShaderConstantFloat> ()->getValue ());
+                else if ((*cur).second->is <CShaderConstantInteger> ())
+                    this->addUniform (var->getName (), (*cur).second->as <CShaderConstantInteger> ()->getValue ());
+                else if ((*cur).second->is <CShaderConstantVector3> ())
+                    this->addUniform (var->getName (), (*cur).second->as <CShaderConstantVector3> ()->getValue ());
+            }
         }
     }
 
@@ -514,6 +534,8 @@ void CPass::setupShaderVariables ()
                 this->addUniform ((*cur)->getName (), const_cast <float*> (reinterpret_cast <const float*> ((*cur)->as <CShaderVariableFloat> ()->getValue ())));
             else if ((*cur)->is <CShaderVariableInteger> ())
                 this->addUniform ((*cur)->getName (), const_cast <int*> (reinterpret_cast <const int*> ((*cur)->as <CShaderVariableInteger> ()->getValue ())));
+            else if ((*cur)->is <CShaderVariableVector2> ())
+                this->addUniform ((*cur)->getName (), const_cast <glm::vec2*> (reinterpret_cast <const glm::vec2*> ((*cur)->as <CShaderVariableVector2> ()->getValue ())));
             else if ((*cur)->is <CShaderVariableVector3> ())
                 this->addUniform ((*cur)->getName (), const_cast <glm::vec3*> (reinterpret_cast <const glm::vec3*> ((*cur)->as <CShaderVariableVector3> ()->getValue ())));
             else if ((*cur)->is <CShaderVariableVector4> ())
@@ -534,6 +556,8 @@ void CPass::setupShaderVariables ()
                 this->addUniform ((*cur)->getName (), const_cast <float*> (reinterpret_cast <const float*> ((*cur)->as <CShaderVariableFloat> ()->getValue ())));
             else if ((*cur)->is <CShaderVariableInteger> ())
                 this->addUniform ((*cur)->getName (), const_cast <int*> (reinterpret_cast <const int*> ((*cur)->as <CShaderVariableInteger> ()->getValue ())));
+            else if ((*cur)->is <CShaderVariableVector2> ())
+                this->addUniform ((*cur)->getName (), const_cast <glm::vec2*> (reinterpret_cast <const glm::vec2*> ((*cur)->as <CShaderVariableVector2> ()->getValue ())));
             else if ((*cur)->is <CShaderVariableVector3> ())
                 this->addUniform ((*cur)->getName (), const_cast <glm::vec3*> (reinterpret_cast <const glm::vec3*> ((*cur)->as <CShaderVariableVector3> ()->getValue ())));
             else if ((*cur)->is <CShaderVariableVector4> ())

+ 0 - 24
src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableFloatPointer.cpp

@@ -1,24 +0,0 @@
-#include "CShaderVariableFloatPointer.h"
-
-#include <utility>
-
-using namespace WallpaperEngine::Render::Shaders::Variables;
-
-
-CShaderVariableFloatPointer::CShaderVariableFloatPointer(float* value) :
-    CShaderVariable (value, nullptr, Type)
-{
-}
-
-CShaderVariableFloatPointer::CShaderVariableFloatPointer(float* value, std::string name) :
-    CShaderVariable (value, nullptr, Type)
-{
-    this->setName (std::move(name));
-}
-
-const int CShaderVariableFloatPointer::getSize () const
-{
-    return 1;
-}
-
-const std::string CShaderVariableFloatPointer::Type = "pointer_float";

+ 0 - 18
src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableFloatPointer.h

@@ -1,18 +0,0 @@
-#pragma once
-
-#include "CShaderVariable.h"
-
-namespace WallpaperEngine::Render::Shaders::Variables
-{
-    class CShaderVariableFloatPointer : public CShaderVariable
-    {
-    public:
-        explicit CShaderVariableFloatPointer (float* value);
-        CShaderVariableFloatPointer (float* value, std::string name);
-
-        const int getSize () const override;
-
-        static const std::string Type;
-    private:
-    };
-}

+ 0 - 24
src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector2Pointer.cpp

@@ -1,24 +0,0 @@
-#include "CShaderVariableVector2Pointer.h"
-
-#include <utility>
-
-using namespace WallpaperEngine::Render::Shaders::Variables;
-
-
-CShaderVariableVector2Pointer::CShaderVariableVector2Pointer(glm::vec2* value) :
-    CShaderVariable (value, nullptr, Type)
-{
-}
-
-CShaderVariableVector2Pointer::CShaderVariableVector2Pointer(glm::vec2* value, std::string name) :
-    CShaderVariable (value, nullptr, Type)
-{
-    this->setName (std::move(name));
-}
-
-const int CShaderVariableVector2Pointer::getSize () const
-{
-    return 2;
-}
-
-const std::string CShaderVariableVector2Pointer::Type = "pointer_vector2";

+ 0 - 18
src/WallpaperEngine/Render/Shaders/Variables/CShaderVariableVector2Pointer.h

@@ -1,18 +0,0 @@
-#pragma once
-
-#include <glm/vec2.hpp>
-#include "CShaderVariable.h"
-
-namespace WallpaperEngine::Render::Shaders::Variables
-{
-    class CShaderVariableVector2Pointer : public CShaderVariable
-    {
-    public:
-        CShaderVariableVector2Pointer (glm::vec2* value);
-        CShaderVariableVector2Pointer (glm::vec2* value, std::string name);
-
-        const int getSize () const override;
-
-        static const std::string Type;
-    };
-}