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 }