From 142177b927df3eca428fc5f3274af7eed1b25bcc Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Thu, 26 May 2016 18:41:36 +0300
Subject: Move shader load function from resourcemanager into separate file.

---
 src/CMakeLists.txt                                |  4 ++
 src/Makefile.am                                   |  2 +
 src/render/shaders/shadersmanager.cpp             |  6 +-
 src/resources/loaders/shaderloader.cpp            | 67 +++++++++++++++++++++++
 src/resources/loaders/shaderloader.h              | 41 ++++++++++++++
 src/resources/resourcemanager/resourcemanager.cpp | 26 ---------
 src/resources/resourcemanager/resourcemanager.h   |  3 -
 7 files changed, 118 insertions(+), 31 deletions(-)
 create mode 100644 src/resources/loaders/shaderloader.cpp
 create mode 100644 src/resources/loaders/shaderloader.h

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8b0c0f4ce..a5a374254 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -727,6 +727,8 @@ SET(SRCS
     resources/loaders/imagesetloader.h
     resources/loaders/musicloader.cpp
     resources/loaders/musicloader.h
+    resources/loaders/shaderloader.cpp
+    resources/loaders/shaderloader.h
     resources/loaders/subimageloader.cpp
     resources/loaders/subimageloader.h
     resources/loaders/subimagesetloader.cpp
@@ -1429,6 +1431,8 @@ SET(DYE_CMD_SRCS
     resources/loaders/imagesetloader.h
     resources/loaders/musicloader.cpp
     resources/loaders/musicloader.h
+    resources/loaders/shaderloader.cpp
+    resources/loaders/shaderloader.h
     resources/loaders/subimageloader.cpp
     resources/loaders/subimageloader.h
     resources/loaders/subimagesetloader.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 687137dfe..c32f79ec0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -398,6 +398,8 @@ SRC += events/actionevent.h \
 	      resources/loaders/imagesetloader.h \
 	      resources/loaders/musicloader.cpp \
 	      resources/loaders/musicloader.h \
+	      resources/loaders/shaderloader.cpp \
+	      resources/loaders/shaderloader.h \
 	      resources/loaders/subimageloader.cpp \
 	      resources/loaders/subimageloader.h \
 	      resources/loaders/subimagesetloader.cpp \
diff --git a/src/render/shaders/shadersmanager.cpp b/src/render/shaders/shadersmanager.cpp
index 2138df1f5..f40e570a2 100644
--- a/src/render/shaders/shadersmanager.cpp
+++ b/src/render/shaders/shadersmanager.cpp
@@ -33,6 +33,8 @@
 #include "render/shaders/shader.h"
 #include "render/shaders/shaderprogram.h"
 
+#include "resources/loaders/shaderloader.h"
+
 #include "resources/resourcemanager/resourcemanager.h"
 
 #include "utils/files.h"
@@ -70,12 +72,12 @@ ShaderProgram *ShadersManager::createProgram(const std::string &vertex,
                                              const bool isNewShader)
 {
     Shader *const vertexShader = static_cast<Shader*>(
-        resourceManager->getShader(GL_VERTEX_SHADER, vertex));
+        Loader::getShader(GL_VERTEX_SHADER, vertex));
     if (!vertexShader)
         return nullptr;
 
     Shader *const fragmentShader = static_cast<Shader*>(
-        resourceManager->getShader(GL_FRAGMENT_SHADER, fragment));
+        Loader::getShader(GL_FRAGMENT_SHADER, fragment));
 
     if (!fragmentShader)
     {
diff --git a/src/resources/loaders/shaderloader.cpp b/src/resources/loaders/shaderloader.cpp
new file mode 100644
index 000000000..683e4206d
--- /dev/null
+++ b/src/resources/loaders/shaderloader.cpp
@@ -0,0 +1,67 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2004-2009  The Mana World Development Team
+ *  Copyright (C) 2009-2010  The Mana Developers
+ *  Copyright (C) 2011-2016  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef USE_OPENGL
+
+#include "logger.h"
+
+#include "utils/checkutils.h"
+
+#include "render/shaders/shader.h"
+#include "render/shaders/shadersmanager.h"
+
+#include "resources/loaders/shaderloader.h"
+
+#include "resources/resourcemanager/resourcemanager.h"
+
+#include "debug.h"
+
+namespace
+{
+    struct ShaderLoader final
+    {
+        const std::string name;
+        const unsigned int type;
+
+        static Resource *load(const void *const v)
+        {
+            if (!v)
+                return nullptr;
+
+            const ShaderLoader *const rl
+                = static_cast<const ShaderLoader *const>(v);
+            Shader *const resource = shaders.createShader(rl->type, rl->name);
+            if (!resource)
+                reportAlways("Shader creation error: %s", rl->name.c_str());
+            return resource;
+        }
+    };
+}
+
+Resource *Loader::getShader(const unsigned int type,
+                            const std::string &name)
+{
+    ShaderLoader rl = { name, type };
+    return resourceManager->get("shader_" + name, ShaderLoader::load, &rl);
+}
+
+#endif  // USE_OPENGL
diff --git a/src/resources/loaders/shaderloader.h b/src/resources/loaders/shaderloader.h
new file mode 100644
index 000000000..1b7372d7e
--- /dev/null
+++ b/src/resources/loaders/shaderloader.h
@@ -0,0 +1,41 @@
+/*
+ *  The ManaPlus Client
+ *  Copyright (C) 2004-2009  The Mana World Development Team
+ *  Copyright (C) 2009-2010  The Mana Developers
+ *  Copyright (C) 2011-2016  The ManaPlus Developers
+ *
+ *  This file is part of The ManaPlus Client.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef RESOURCES_LOADERS_SHADERLOADER_H
+#define RESOURCES_LOADERS_SHADERLOADER_H
+
+#ifdef USE_OPENGL
+
+#include <string>
+
+#include "localconsts.h"
+
+class Resource;
+
+namespace Loader
+{
+    Resource *getShader(const unsigned int type,
+                        const std::string &name) A_WARN_UNUSED;
+}  // namespace Loader
+
+#endif  // USE_OPENGL
+#endif  // RESOURCES_LOADERS_SHADERLOADER_H
diff --git a/src/resources/resourcemanager/resourcemanager.cpp b/src/resources/resourcemanager/resourcemanager.cpp
index 3bde069e5..8ec6c9c59 100644
--- a/src/resources/resourcemanager/resourcemanager.cpp
+++ b/src/resources/resourcemanager/resourcemanager.cpp
@@ -528,32 +528,6 @@ Resource *ResourceManager::get(const std::string &idPath,
 }
 
 #ifdef USE_OPENGL
-struct ShaderLoader final
-{
-    const std::string name;
-    const unsigned int type;
-
-    static Resource *load(const void *const v)
-    {
-        if (!v)
-            return nullptr;
-
-        const ShaderLoader *const rl
-            = static_cast<const ShaderLoader *const>(v);
-        Shader *const resource = shaders.createShader(rl->type, rl->name);
-        if (!resource)
-            reportAlways("Shader creation error: %s", rl->name.c_str());
-        return resource;
-    }
-};
-
-Resource *ResourceManager::getShader(const unsigned int type,
-                                     const std::string &name)
-{
-    ShaderLoader rl = { name, type };
-    return get("shader_" + name, ShaderLoader::load, &rl);
-}
-
 struct ShaderProgramLoader final
 {
     const std::string vertex;
diff --git a/src/resources/resourcemanager/resourcemanager.h b/src/resources/resourcemanager/resourcemanager.h
index cadc437d5..b2e86fc8c 100644
--- a/src/resources/resourcemanager/resourcemanager.h
+++ b/src/resources/resourcemanager/resourcemanager.h
@@ -134,9 +134,6 @@ class ResourceManager final : public MemoryCounter
         bool addResource(const std::string &idPath, Resource *const resource);
 
 #ifdef USE_OPENGL
-        Resource *getShader(const unsigned int type,
-                            const std::string &name) A_WARN_UNUSED;
-
         Resource *getShaderProgram(const std::string &vertex,
                                    const std::string &fragment,
                                    const bool isNewShader) A_WARN_UNUSED;
-- 
cgit v1.2.3-70-g09d2