From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/MemoryTracker.cpp | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Minecraft.Client/MemoryTracker.cpp (limited to 'Minecraft.Client/MemoryTracker.cpp') diff --git a/Minecraft.Client/MemoryTracker.cpp b/Minecraft.Client/MemoryTracker.cpp new file mode 100644 index 00000000..c1652d3b --- /dev/null +++ b/Minecraft.Client/MemoryTracker.cpp @@ -0,0 +1,70 @@ +#include "stdafx.h" +#include "MemoryTracker.h" +#include "..\Minecraft.World\IntBuffer.h" +#include "..\Minecraft.World\ByteBuffer.h" +#include "..\Minecraft.World\FloatBuffer.h" + +unordered_map MemoryTracker::GL_LIST_IDS; +vector MemoryTracker::TEXTURE_IDS; + +int MemoryTracker::genLists(int count) +{ + int id = glGenLists(count); + GL_LIST_IDS.insert( pair(id,count) ); + return id; +} + +int MemoryTracker::genTextures() +{ + int id = glGenTextures(); + TEXTURE_IDS.push_back(id); + return id; +} + +void MemoryTracker::releaseLists(int id) +{ + AUTO_VAR(it, GL_LIST_IDS.find(id)); + if( it != GL_LIST_IDS.end() ) + { + glDeleteLists(id, it->second); + GL_LIST_IDS.erase(it); + } +} + +void MemoryTracker::releaseTextures() +{ + for (int i = 0; i < TEXTURE_IDS.size(); i++) + { + glDeleteTextures(TEXTURE_IDS.at(i)); + } + TEXTURE_IDS.clear(); +} + +void MemoryTracker::release() +{ + //for (Map.Entry entry : GL_LIST_IDS.entrySet()) + for(AUTO_VAR(it, GL_LIST_IDS.begin()); it != GL_LIST_IDS.end(); ++it) + { + glDeleteLists(it->first, it->second); + } + GL_LIST_IDS.clear(); + + releaseTextures(); +} + +ByteBuffer *MemoryTracker::createByteBuffer(int size) +{ + // 4J - was ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()) + ByteBuffer *bb = ByteBuffer::allocate(size); + return bb; +} + +IntBuffer *MemoryTracker::createIntBuffer(int size) +{ + return createByteBuffer(size << 2)->asIntBuffer(); +} + +FloatBuffer *MemoryTracker::createFloatBuffer(int size) +{ + return createByteBuffer(size << 2)->asFloatBuffer(); +} \ No newline at end of file -- cgit v1.2.3