瀏覽代碼

Step 2: Extract opengl_manager and opengl_renderer to a private header file.

Sam Jaffe 6 年之前
父節點
當前提交
470fd42268

+ 8 - 4
graphics/graphics.xcodeproj/project.pbxproj

@@ -21,12 +21,13 @@
 		CD62FD062291970F00376440 /* libgameutils.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD62FD052291970F00376440 /* libgameutils.dylib */; };
 		CD62FD1E2292412900376440 /* renderer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD62FD1C2292412900376440 /* renderer.cxx */; settings = {COMPILER_FLAGS = "-fvisibility=default"; }; };
 		CD62FD222292C76B00376440 /* renderer_impl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD62FD202292C76B00376440 /* renderer_impl.hpp */; };
-		CD62FD232292C76B00376440 /* renderer_impl.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD62FD212292C76B00376440 /* renderer_impl.cxx */; };
+		CD62FD232292C76B00376440 /* opengl_renderer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD62FD212292C76B00376440 /* opengl_renderer.cxx */; };
 		CDA34D9A22517A3D008036A7 /* libmath.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA34D9922517A3D008036A7 /* libmath.dylib */; };
 		CDED9C1922A2D6CE00AE5CE5 /* libgraphics.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD3AC6E21D2C0364002B4BB0 /* libgraphics.dylib */; };
 		CDED9C4322A2FACB00AE5CE5 /* renderer_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDED9C4222A2FACB00AE5CE5 /* renderer_test.cxx */; };
 		CDED9C4622A2FCA100AE5CE5 /* GoogleMock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD62FCDF22904AD100376440 /* GoogleMock.framework */; };
 		CDED9C4722A308AE00AE5CE5 /* libmath.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CDA34D9922517A3D008036A7 /* libmath.dylib */; };
+		CDED9C5422A465DB00AE5CE5 /* opengl_renderer.h in Headers */ = {isa = PBXBuildFile; fileRef = CDED9C5322A465DB00AE5CE5 /* opengl_renderer.h */; settings = {ATTRIBUTES = (Private, ); }; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -92,12 +93,13 @@
 		CD62FD052291970F00376440 /* libgameutils.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libgameutils.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		CD62FD1C2292412900376440 /* renderer.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = renderer.cxx; sourceTree = "<group>"; };
 		CD62FD202292C76B00376440 /* renderer_impl.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = renderer_impl.hpp; sourceTree = "<group>"; };
-		CD62FD212292C76B00376440 /* renderer_impl.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = renderer_impl.cxx; sourceTree = "<group>"; };
+		CD62FD212292C76B00376440 /* opengl_renderer.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opengl_renderer.cxx; sourceTree = "<group>"; };
 		CDA34D86225171AA008036A7 /* game */ = {isa = PBXFileReference; lastKnownFileType = folder; name = game; path = include/game; sourceTree = "<group>"; };
 		CDA34D9922517A3D008036A7 /* libmath.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; path = libmath.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDED9C1422A2D6CD00AE5CE5 /* graphics-test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "graphics-test.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDED9C1822A2D6CE00AE5CE5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		CDED9C4222A2FACB00AE5CE5 /* renderer_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = renderer_test.cxx; sourceTree = "<group>"; };
+		CDED9C5322A465DB00AE5CE5 /* opengl_renderer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = opengl_renderer.h; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -127,7 +129,8 @@
 		CD1C84052299B72C00825C4E /* openGL */ = {
 			isa = PBXGroup;
 			children = (
-				CD62FD212292C76B00376440 /* renderer_impl.cxx */,
+				CDED9C5322A465DB00AE5CE5 /* opengl_renderer.h */,
+				CD62FD212292C76B00376440 /* opengl_renderer.cxx */,
 				CD62FCF62290DC9000376440 /* helper.cxx */,
 				CD1C840D2299B81500825C4E /* error_formatter.cxx */,
 			);
@@ -236,6 +239,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				CD62FD222292C76B00376440 /* renderer_impl.hpp in Headers */,
+				CDED9C5422A465DB00AE5CE5 /* opengl_renderer.h in Headers */,
 				CD62FCF72290DC9000376440 /* helper.hpp in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -398,7 +402,7 @@
 				CD3AC7261D2C0C63002B4BB0 /* object.cpp in Sources */,
 				CD1C83E922998E2600825C4E /* manager.cxx in Sources */,
 				CD62FCF82290DC9000376440 /* helper.cxx in Sources */,
-				CD62FD232292C76B00376440 /* renderer_impl.cxx in Sources */,
+				CD62FD232292C76B00376440 /* opengl_renderer.cxx in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

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

@@ -6,7 +6,7 @@
 //  Copyright © 2019 Sam Jaffe. All rights reserved.
 //
 
-#include "renderer_impl.hpp"
+#include "opengl_renderer.h"
 
 #ifdef __APPLE__
 #include <OpenGL/gl3.h>
@@ -23,36 +23,6 @@
 
 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();
-  ~opengl_renderer();
-
-  void draw(identity<material>, math::matr4 const &,
-            std::vector<vertex> const &) override;
-  void clear() override;
-  void flush() override;
-
-  std::shared_ptr<class manager const> manager() const override { return mgr; }
-
-private:
-  const math::matr4 identity{math::matrix::identity<float, 4>()};
-
-  std::shared_ptr<class manager> mgr;
-  unsigned int active_material;
-
-  math::matr4 world_to_clip{identity};
-  double current_time{0.0};
-  unsigned int vertex_array_object{0}, vertex_buffer_object{0};
-};
-
 opengl_renderer::opengl_renderer()
     : mgr(new opengl_manager), active_material(0) {
   glGenVertexArrays(1, &vertex_array_object);

+ 49 - 0
graphics/src/openGL/opengl_renderer.h

@@ -0,0 +1,49 @@
+//
+//  opengl_renderer.h
+//  graphics
+//
+//  Created by Sam Jaffe on 6/2/19.
+//  Copyright © 2019 Sam Jaffe. All rights reserved.
+//
+
+#pragma once
+
+#include "game/graphics/manager.hpp"
+#include "renderer_impl.hpp"
+
+#include "matrix/matrix.hpp"
+#include "matrix/matrix_helpers.hpp"
+
+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();
+    ~opengl_renderer();
+
+    void draw(identity<material>, math::matr4 const &,
+              std::vector<vertex> const &) override;
+    void clear() override;
+    void flush() override;
+
+    std::shared_ptr<class manager const> manager() const override {
+      return mgr;
+    }
+
+  private:
+    const math::matr4 identity{math::matrix::identity<float, 4>()};
+
+    std::shared_ptr<class manager> mgr;
+    unsigned int active_material;
+
+    math::matr4 world_to_clip{identity};
+    double current_time{0.0};
+    unsigned int vertex_array_object{0}, vertex_buffer_object{0};
+  };
+}