4jcraft/targets/minecraft/client/MemoryTracker.cpp
2026-04-09 15:24:13 +10:00

62 lines
1.6 KiB
C++

#include "MemoryTracker.h"
#include <utility>
#include <vector>
#include "java/ByteBuffer.h"
#include "platform/renderer/renderer.h"
#include "platform/stubs.h"
std::unordered_map<int, int> MemoryTracker::GL_LIST_IDS;
std::vector<int> MemoryTracker::TEXTURE_IDS;
int MemoryTracker::genLists(int count) {
int id = glGenLists(count);
GL_LIST_IDS.insert(std::pair<int, int>(id, count));
return id;
}
int MemoryTracker::genTextures() {
int id = glGenTextures();
TEXTURE_IDS.push_back(id);
return id;
}
void MemoryTracker::releaseLists(int id) {
auto 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<Integer, Integer> entry : GL_LIST_IDS.entrySet())
for (auto 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(std::endian.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();
}