    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 j = GL11.glGenLists(par0);
    029        field_74531_a.put(Integer.valueOf(j), Integer.valueOf(par0));
    030        return j;
    031    }
    032
    033    /**
    034     * Generates texture names and stores them in the specified buffer.
    035     */
    036    public static synchronized int generateTextureNames()
    037    {
    038        int i = GL11.glGenTextures();
    039        field_74530_b.add(Integer.valueOf(i));
    040        return i;
    041    }
    042
    043    public static synchronized void deleteDisplayLists(int par0)
    044    {
    045        GL11.glDeleteLists(par0, ((Integer)field_74531_a.remove(Integer.valueOf(par0))).intValue());
    046    }
    047
    048    public static synchronized void func_98302_b()
    049    {
    050        for (int i = 0; i < field_74530_b.size(); ++i)
    051        {
    052            GL11.glDeleteTextures(((Integer)field_74530_b.get(i)).intValue());
    053        }
    054
    055        field_74530_b.clear();
    056    }
    057
    058    /**
    059     * Deletes all textures and display lists. Called when Minecraft is shutdown to free up resources.
    060     */
    061    public static synchronized void deleteTexturesAndDisplayLists()
    062    {
    063        Iterator iterator = field_74531_a.entrySet().iterator();
    064
    065        while (iterator.hasNext())
    066        {
    067            Entry entry = (Entry)iterator.next();
    068            GL11.glDeleteLists(((Integer)entry.getKey()).intValue(), ((Integer)entry.getValue()).intValue());
    069        }
    070
    071        field_74531_a.clear();
    072        func_98302_b();
    073    }
    074
    075    /**
    076     * Creates and returns a direct byte buffer with the specified capacity. Applies native ordering to speed up access.
    077     */
    078    public static synchronized ByteBuffer createDirectByteBuffer(int par0)
    079    {
    080        return ByteBuffer.allocateDirect(par0).order(ByteOrder.nativeOrder());
    081    }
    082
    083    /**
    084     * Creates and returns a direct int buffer with the specified capacity. Applies native ordering to speed up access.
    085     */
    086    public static IntBuffer createDirectIntBuffer(int par0)
    087    {
    088        return createDirectByteBuffer(par0 << 2).asIntBuffer();
    089    }
    090
    091    /**
    092     * Creates and returns a direct float buffer with the specified capacity. Applies native ordering to speed up
    093     * access.
    094     */
    095    public static FloatBuffer createDirectFloatBuffer(int par0)
    096    {
    097        return createDirectByteBuffer(par0 << 2).asFloatBuffer();
    098    }
    099}