    001package net.minecraft.client.renderer;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.nio.ByteBuffer;
    006import java.nio.ByteOrder;
    007import java.nio.FloatBuffer;
    008import java.nio.IntBuffer;
    009import java.util.ArrayList;
    010import java.util.HashMap;
    011import java.util.Iterator;
    012import java.util.List;
    013import java.util.Map;
    014import java.util.Map.Entry;
    015import org.lwjgl.opengl.GL11;
    016
    017@SideOnly(Side.CLIENT)
    018public class GLAllocation
    019{
    020    private static final Map field_74531_a = new HashMap();
    021    private static final List field_74530_b = new ArrayList();
    022
    023    /**
    024     * Generates the specified number of display lists and returns the first index.
    025     */
    026    public static synchronized int generateDisplayLists(int par0)
    027    {
    028        int var1 = GL11.glGenLists(par0);
    029        field_74531_a.put(Integer.valueOf(var1), Integer.valueOf(par0));
    030        return var1;
    031    }
    032
    033    /**
    034     * Generates texture names and stores them in the specified buffer.
    035     */
    036    public static synchronized void generateTextureNames(IntBuffer par0IntBuffer)
    037    {
    038        GL11.glGenTextures(par0IntBuffer);
    039
    040        for (int var1 = par0IntBuffer.position(); var1 < par0IntBuffer.limit(); ++var1)
    041        {
    042            field_74530_b.add(Integer.valueOf(par0IntBuffer.get(var1)));
    043        }
    044    }
    045
    046    public static synchronized void deleteDisplayLists(int par0)
    047    {
    048        GL11.glDeleteLists(par0, ((Integer)field_74531_a.remove(Integer.valueOf(par0))).intValue());
    049    }
    050
    051    /**
    052     * Deletes all textures and display lists. Called when Minecraft is shutdown to free up resources.
    053     */
    054    public static synchronized void deleteTexturesAndDisplayLists()
    055    {
    056        Iterator var0 = field_74531_a.entrySet().iterator();
    057
    058        while (var0.hasNext())
    059        {
    060            Entry var1 = (Entry)var0.next();
    061            GL11.glDeleteLists(((Integer)var1.getKey()).intValue(), ((Integer)var1.getValue()).intValue());
    062        }
    063
    064        field_74531_a.clear();
    065
    066        for (int var2 = 0; var2 < field_74530_b.size(); ++var2)
    067        {
    068            GL11.glDeleteTextures(((Integer)field_74530_b.get(var2)).intValue());
    069        }
    070
    071        field_74530_b.clear();
    072    }
    073
    074    /**
    075     * Creates and returns a direct byte buffer with the specified capacity. Applies native ordering to speed up access.
    076     */
    077    public static synchronized ByteBuffer createDirectByteBuffer(int par0)
    078    {
    079        return ByteBuffer.allocateDirect(par0).order(ByteOrder.nativeOrder());
    080    }
    081
    082    /**
    083     * Creates and returns a direct int buffer with the specified capacity. Applies native ordering to speed up access.
    084     */
    085    public static IntBuffer createDirectIntBuffer(int par0)
    086    {
    087        return createDirectByteBuffer(par0 << 2).asIntBuffer();
    088    }
    089
    090    /**
    091     * Creates and returns a direct float buffer with the specified capacity. Applies native ordering to speed up
    092     * access.
    093     */
    094    public static FloatBuffer createDirectFloatBuffer(int par0)
    095    {
    096        return createDirectByteBuffer(par0 << 2).asFloatBuffer();
    097    }
    098}