001    package net.minecraft.client.renderer;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.nio.ByteBuffer;
006    import java.nio.ByteOrder;
007    import java.nio.FloatBuffer;
008    import java.nio.IntBuffer;
009    import java.util.ArrayList;
010    import java.util.HashMap;
011    import java.util.Iterator;
012    import java.util.List;
013    import java.util.Map;
014    import java.util.Map.Entry;
015    import org.lwjgl.opengl.GL11;
016    
017    @SideOnly(Side.CLIENT)
018    public 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    }