]> code.bitgloo.com Git - clyne/gamedev.git/commitdiff
mem fix; manager
authorClyne Sullivan <tullivan99@gmail.com>
Fri, 28 Apr 2017 18:05:44 +0000 (14:05 -0400)
committerClyne Sullivan <tullivan99@gmail.com>
Fri, 28 Apr 2017 18:05:44 +0000 (14:05 -0400)
main.cpp
src/render.cpp
src/world.cpp

index a934b4041aa623a8d9d6f5248c88b4fd01133e76..429bc7f177d585d7a36dd586671dfb24f62b9483 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -193,3 +193,72 @@ int main(int argc, char *argv[])
 
     return 0; // Calls everything passed to atexit
 }
+
+constexpr int memEntries = 2048;
+
+static void* mems[memEntries];
+static std::size_t sizs[memEntries];
+
+int balance = 0;
+
+std::size_t getUsedMem(void)
+{
+       std::size_t total = 0;
+       for (int i = 0; i < memEntries; i++)
+               total += sizs[i];
+
+       return total;
+}
+
+void *operator new(std::size_t n) throw (std::bad_alloc)
+{
+       auto buf = std::malloc(n);
+       balance++;
+
+       if (buf == nullptr)
+               throw std::bad_alloc();
+
+       for (int i = 0; i < memEntries; i++) {
+               if (mems[i] == nullptr) {
+                       mems[i] = buf;
+                       sizs[i] = n;
+                       break;
+               }
+       }
+
+       return buf;
+}
+
+void operator delete(void* p) throw ()
+{
+       if (p != nullptr) {
+               std::free(p);
+               balance--;
+
+               for (int i = 0; i < memEntries; i++) {
+                       if (mems[i] == p) {
+                               mems[i] = nullptr;
+                               sizs[i] = 0;
+                               break;
+                       }
+               }
+       }
+}
+
+void operator delete(void* p, std::size_t n) throw ()
+{
+       (void)n;
+
+       if (p != nullptr) {
+               std::free(p);
+               balance--;
+
+               for (int i = 0; i < memEntries; i++) {
+                       if (mems[i] == p) {
+                               mems[i] = nullptr;
+                               sizs[i] = 0;
+                               break;
+                       }
+               }
+       }
+}
index 8c2f50d7249de5df7164492e0558a5d132d5a192..8b9984798d1afc6e138fa7f9c7e9e65525605562 100644 (file)
@@ -171,6 +171,8 @@ void preRender(void)
        Render::textShader.unuse();
 }
 
+extern std::size_t getUsedMem(void);
+extern int balance;
 void render(const int& fps)
 {
        preRender();
@@ -187,10 +189,10 @@ void render(const int& fps)
        if (ui::debug) {
                auto pos = game::engine.getSystem<PlayerSystem>()->getPosition();
                UISystem::putText(vec2(offset.x - game::SCREEN_WIDTH / 2, (offset.y + game::SCREEN_HEIGHT / 2) - FontSystem::getSize()),
-                   "loc: %s\noffset: %s\nfps: %d\nticks: %d\npcount: %d\nxml: %s",
+                   "loc: %s\noffset: %s\nfps: %d\nticks: %d\npcount: %d\nxml: %s\nmem: %llukb (%d)",
                        pos.toString().c_str(), offset.toString().c_str(), fps,
                        game::time::getTickCount(), game::engine.getSystem<ParticleSystem>()->getCount(),
-                       WorldSystem::getXMLFile().c_str()
+                       WorldSystem::getXMLFile().c_str(), getUsedMem() / 1024, balance
                        );
        }
 
index e25170670177d777591db25a39a487ee205c446b..e87d6d0807df27265858a9c26024b63748dde2c3 100644 (file)
@@ -700,6 +700,8 @@ void WorldSystem::render(void)
                glDrawArrays(GL_TRIANGLES, 0, stars.size() * 6);
        }
 
+       delete[] star_coord;
+
        Render::worldShader.disable();
 
        glUniform4f(Render::worldShader.uniform[WU_tex_color], 1.0, 1.0, 1.0, 1.0);