001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.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 var0 = field_74530_b.iterator();
066
067 while (var0.hasNext())
068 {
069 int var2 = ((Integer)var0.next()).intValue();
070 GL11.glDeleteTextures(var2);
071 }
072
073 field_74530_b.clear();
074 }
075
076 /**
077 * Creates and returns a direct byte buffer with the specified capacity. Applies native ordering to speed up access.
078 */
079 public static synchronized ByteBuffer createDirectByteBuffer(int par0)
080 {
081 return ByteBuffer.allocateDirect(par0).order(ByteOrder.nativeOrder());
082 }
083
084 /**
085 * Creates and returns a direct int buffer with the specified capacity. Applies native ordering to speed up access.
086 */
087 public static IntBuffer createDirectIntBuffer(int par0)
088 {
089 return createDirectByteBuffer(par0 << 2).asIntBuffer();
090 }
091
092 /**
093 * Creates and returns a direct float buffer with the specified capacity. Applies native ordering to speed up
094 * access.
095 */
096 public static FloatBuffer createDirectFloatBuffer(int par0)
097 {
098 return createDirectByteBuffer(par0 << 2).asFloatBuffer();
099 }
100 }