aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/MemoryTracker.cpp
blob: 9d0b29de93b6b77b0379e6e32b1a5584a2ff59d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "stdafx.h"
#include "MemoryTracker.h"
#include "..\Minecraft.World\IntBuffer.h"
#include "..\Minecraft.World\ByteBuffer.h"
#include "..\Minecraft.World\FloatBuffer.h"

unordered_map<int,int> MemoryTracker::GL_LIST_IDS;
vector<int> MemoryTracker::TEXTURE_IDS;

int MemoryTracker::genLists(int count)
{
	int id = glGenLists(count);
	GL_LIST_IDS.insert( 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)
	{
		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();
}