package game; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import org.lwjgl.opengl.GL11; public class QuadQueue { private static HashMap<String, ArrayList<Vector3f[]>> quadQueues = new HashMap<String, ArrayList<Vector3f[]>>(); public QuadQueue() { } public static void add(int textureId, Vector3f[] v) { if (!quadQueues.containsKey(String.valueOf(textureId))) { quadQueues.put(String.valueOf(textureId), new ArrayList<Vector3f[]>()); } quadQueues.get(String.valueOf(textureId)).add(v); } public static void renderAll() { for (Iterator<String> tids = quadQueues.keySet().iterator(); tids.hasNext();) { String tid = tids.next(); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); GL11.glBindTexture(GL11.GL_TEXTURE_2D, Integer.parseInt(tid)); GL11.glBegin(GL11.GL_QUADS); GL11.glColor4f(0f, 0f, 0f, .5f); while (!quadQueues.get(tid).isEmpty()) { Vector3f v[] = quadQueues.get(tid).remove(0); GL11.glNormal3f(1.0f, -1.0f, 1.0f); GL11.glTexCoord2f(1.0f, 0.0f); GL11.glVertex3f(v[0].x, v[0].y, v[0].z); GL11.glNormal3f(-1.0f, -1.0f, 1.0f); GL11.glTexCoord2f(0.0f, 0.0f); GL11.glVertex3f(v[1].x, v[1].y, v[1].z); GL11.glNormal3f(-1.0f, -1.0f, -1.0f); GL11.glTexCoord2f(0.0f, 1.0f); GL11.glVertex3f(v[2].x, v[2].y, v[2].z); GL11.glNormal3f(1.0f, -1.0f, -1.0f); GL11.glTexCoord2f(1.0f, 1.0f); GL11.glVertex3f(v[3].x, v[3].y, v[3].z); } GL11.glEnd(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_COLOR_MATERIAL); } } }