Browse Source

Don't use a member function.

Sam Jaffe 6 years ago
parent
commit
3a84d1dde7
2 changed files with 22 additions and 13 deletions
  1. 3 2
      graphics/include/game/graphics/object.hpp
  2. 19 11
      graphics/src/object.cpp

+ 3 - 2
graphics/include/game/graphics/object.hpp

@@ -19,11 +19,12 @@ namespace graphics {
   struct vertex;
 
   struct object {
-    std::vector<vertex> vertices() const;
-
     math::dim2::rectangle location;
     math::dim2::quad points;
     flyweight<material> material;
     math::dim2::rectangle frame;
   }; // size:56, align:4
+
+  void vertices(std::vector<vertex> & out, object const & obj);
+  void vertices(std::vector<vertex> & out, std::vector<object> const & obj);
 }

+ 19 - 11
graphics/src/object.cpp

@@ -11,19 +11,27 @@
 
 using namespace graphics;
 
-std::vector<vertex> object::vertices() const {
+void vertices(std::vector<vertex> & out, object const & obj) {
   static const math::rgba CLEAR{{255, 255, 255, 255}};
-  std::vector<vertex> rval;
-  rval.reserve(6);
+  math::dim2::quad frame_quad = obj.frame;
 
-  math::dim2::quad frame_quad = frame;
+  out.emplace_back(vertex{obj.points.ll, frame_quad.ll, CLEAR});
+  out.emplace_back(vertex{obj.points.lr, frame_quad.lr, CLEAR});
+  out.emplace_back(vertex{obj.points.ur, frame_quad.ur, CLEAR});
+  out.emplace_back(vertex{obj.points.ll, frame_quad.ll, CLEAR});
+  out.emplace_back(vertex{obj.points.ur, frame_quad.ur, CLEAR});
+  out.emplace_back(vertex{obj.points.ul, frame_quad.ul, CLEAR});
+}
 
-  rval.emplace_back(vertex{points.ll, frame_quad.ll, CLEAR});
-  rval.emplace_back(vertex{points.lr, frame_quad.lr, CLEAR});
-  rval.emplace_back(vertex{points.ur, frame_quad.ur, CLEAR});
-  rval.emplace_back(vertex{points.ll, frame_quad.ll, CLEAR});
-  rval.emplace_back(vertex{points.ur, frame_quad.ur, CLEAR});
-  rval.emplace_back(vertex{points.ul, frame_quad.ul, CLEAR});
+void graphics::vertices(std::vector<vertex> & out, object const & obj) {
+  out.reserve(out.size() + 6);
+  ::vertices(out, obj);
+}
 
-  return rval;
+void graphics::vertices(std::vector<vertex> & out,
+                        std::vector<object> const & objs) {
+  out.reserve(out.size() + 6 * objs.size());
+  for (object const & obj : objs) {
+    ::vertices(out, obj);
+  }
 }