package net.minecraft.client.renderer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class GLAllocation
{
private static final Map field_74531_a = new HashMap();
private static final List field_74530_b = new ArrayList();
/**
* Generates the specified number of display lists and returns the first index.
*/
public static synchronized int generateDisplayLists(int par0)
{
int var1 = GL11.glGenLists(par0);
field_74531_a.put(Integer.valueOf(var1), Integer.valueOf(par0));
return var1;
}
/**
* Generates texture names and stores them in the specified buffer.
*/
public static synchronized void generateTextureNames(IntBuffer par0IntBuffer)
{
GL11.glGenTextures(par0IntBuffer);
for (int var1 = par0IntBuffer.position(); var1 < par0IntBuffer.limit(); ++var1)
{
field_74530_b.add(Integer.valueOf(par0IntBuffer.get(var1)));
}
}
public static synchronized void deleteDisplayLists(int par0)
{
GL11.glDeleteLists(par0, ((Integer)field_74531_a.remove(Integer.valueOf(par0))).intValue());
}
/**
* Deletes all textures and display lists. Called when Minecraft is shutdown to free up resources.
*/
public static synchronized void deleteTexturesAndDisplayLists()
{
Iterator var0 = field_74531_a.entrySet().iterator();
while (var0.hasNext())
{
Entry var1 = (Entry)var0.next();
GL11.glDeleteLists(((Integer)var1.getKey()).intValue(), ((Integer)var1.getValue()).intValue());
}
field_74531_a.clear();
for (int var2 = 0; var2 < field_74530_b.size(); ++var2)
{
GL11.glDeleteTextures(((Integer)field_74530_b.get(var2)).intValue());
}
field_74530_b.clear();
}
/**
* Creates and returns a direct byte buffer with the specified capacity. Applies native ordering to speed up access.
*/
public static synchronized ByteBuffer createDirectByteBuffer(int par0)
{
return ByteBuffer.allocateDirect(par0).order(ByteOrder.nativeOrder());
}
/**
* Creates and returns a direct int buffer with the specified capacity. Applies native ordering to speed up access.
*/
public static IntBuffer createDirectIntBuffer(int par0)
{
return createDirectByteBuffer(par0 << 2).asIntBuffer();
}
/**
* Creates and returns a direct float buffer with the specified capacity. Applies native ordering to speed up
* access.
*/
public static FloatBuffer createDirectFloatBuffer(int par0)
{
return createDirectByteBuffer(par0 << 2).asFloatBuffer();
}
}