Removed unused macro invocation from shader
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / public-api / loader / shader-definition.cpp
index e9975f4..5aba19e 100644 (file)
 #include <dali-scene3d/internal/graphics/builtin-shader-extern-gen.h>
 #include <dali-scene3d/public-api/loader/utils.h>
 
+#include <dali/integration-api/debug.h>
+
+namespace
+{
+#if defined(DEBUG_ENABLED)
+Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_MODEL_SHADER_DEFINITION");
+#endif
+} // namespace
+
 namespace Dali::Scene3D::Loader
 {
 namespace
@@ -82,20 +91,33 @@ void ApplyDefine(std::string& shaderCode, const std::string& definevar)
 
 void RedefineMacro(std::string& shaderCode, const std::string& macro, const std::string& value)
 {
-  std::string definition = "#define " + macro;
-  std::size_t found      = shaderCode.find(definition);
-  if(found != std::string::npos)
+  if(!value.empty())
   {
-    std::size_t insertionPoint = found + definition.length();
+    std::string definition = "#define " + macro;
+    std::size_t found      = shaderCode.find(definition);
+    if(found != std::string::npos)
+    {
+      std::size_t insertionPoint = found + definition.length();
 
-    // Automatically insert line-continuation character into value
-    std::regex                 re("\n");
-    std::sregex_token_iterator first{value.begin(), value.end(), re, -1}, last;
-    for(auto i = first; i != last; ++i)
+      // Automatically insert line-continuation character into value
+      std::regex                 re("\n");
+      std::sregex_token_iterator first{value.begin(), value.end(), re, -1}, last;
+      for(auto i = first; i != last; ++i)
+      {
+        std::string line = std::string(" \\\n") + (*i).str();
+        shaderCode.insert(insertionPoint, line);
+        insertionPoint += line.length();
+      }
+    }
+  }
+  else
+  {
+    std::size_t invocation = shaderCode.rfind(macro);
+    if(invocation != std::string::npos)
     {
-      std::string line = std::string("\\\n") + (*i).str();
-      shaderCode.insert(insertionPoint, line);
-      insertionPoint += line.length();
+      std::size_t start = shaderCode.rfind("\n", invocation);
+      std::size_t end   = shaderCode.find("\n", invocation);
+      shaderCode.erase(start, end - start);
     }
   }
 }
@@ -178,6 +200,7 @@ Shader ShaderDefinition::Load(RawData&& raw) const
   array.PushBack(map[0]);
   array.PushBack(map[1]);
 
+  DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Vert Shader src: \n%s\n", raw.mVertexShaderSource.c_str());
   Shader shader = Shader::New(array);
   for(Property::Map::SizeType i0 = 0, i1 = mUniforms.Count(); i0 != i1; ++i0)
   {