Pārlūkot izejas kodu

Sprint: Extract manager "create texture/shader/program" code.
Step 1: Create interface and OpenGL override class.

Sam Jaffe 6 gadi atpakaļ
vecāks
revīzija
3f30da2e21

+ 6 - 0
graphics/include/game/graphics/manager.hpp

@@ -77,6 +77,12 @@ namespace graphics {
     identity<texture> texture_or_uniform(std::string const & path,
                                          std::string const & uniform) const;
 
+    virtual shader compile(shaders::type type,
+                           std::string const & path) const = 0;
+    virtual shader_program compile(identity<shader> fragment,
+                                   identity<shader> vertex) const = 0;
+    virtual texture compile(std::string const & path) const = 0;
+
     std::unique_ptr<struct manager_cache> pcache_;
   };
 }

+ 3 - 3
graphics/src/manager.cxx

@@ -77,7 +77,7 @@ identity<shader> manager::get(shaders::type type,
   auto & cache = pcache_->shaders;
   auto found = cache.values.find(key);
   if (found != cache.values.end()) { return found->second; }
-  return cache.emplace(key, shader(type, path));
+  return cache.emplace(key, compile(type, path));
 }
 
 identity<shader_program> manager::get(std::string const & fragment,
@@ -89,14 +89,14 @@ identity<shader_program> manager::get(std::string const & fragment,
   auto fragment_shader = get(shaders::type::FRAGMENT, fragment);
   auto vertex_shader = get(shaders::type::VERTEX, vertex);
 
-  return cache.emplace(key, shader_program(fragment_shader, vertex_shader));
+  return cache.emplace(key, compile(fragment_shader, vertex_shader));
 }
 
 identity<texture> manager::get(std::string const & path) const {
   auto & cache = pcache_->textures;
   auto found = cache.values.find(path);
   if (found != cache.values.end()) { return found->second; }
-  return cache.emplace(path, texture(path));
+  return cache.emplace(path, compile(path));
 }
 
 object manager::create_object(identity<material> fromMaterial,

+ 8 - 1
graphics/src/openGL/renderer_impl.cxx

@@ -23,6 +23,13 @@
 
 using namespace graphics;
 
+class opengl_manager : public manager {
+  shader compile(shaders::type type, std::string const & path) const override;
+  shader_program compile(identity<shader> fragment,
+                         identity<shader> vertex) const override;
+  texture compile(std::string const & path) const override;
+};
+
 class opengl_renderer : public renderer_impl {
 public:
   opengl_renderer();
@@ -47,7 +54,7 @@ private:
 };
 
 opengl_renderer::opengl_renderer()
-    : mgr(new class manager), active_material(0) {
+    : mgr(new opengl_manager), active_material(0) {
   glGenVertexArrays(1, &vertex_array_object);
   glBindVertexArray(vertex_array_object);
   glGenBuffers(1, &vertex_buffer_object);