package hunternif.mc.atlas.util; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; public class AtlasRenderHelper { public static void drawTexturedRect(ResourceLocation texture, double x, double y, double u, double v, int width, int height, int imageWidth, int imageHeight, double scaleX, double scaleY) { Minecraft.getMinecraft().renderEngine.bindTexture(texture); double minU = u / imageWidth; double maxU = (u + width) / imageWidth; double minV = v / imageHeight; double maxV = (v + height) / imageHeight; // After testing, there is no noticeable time difference between raw OpenGL rendering, // and using the WorldRenderere Tessellator tessellator = Tessellator.getInstance(); VertexBuffer renderer = tessellator.getBuffer(); renderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); renderer.pos((int)(x + scaleX*width), (int)(y + scaleY*height), 0).tex(maxU, maxV).endVertex(); renderer.pos((int)(x + scaleX*width), (int)y, 0).tex(maxU, minV).endVertex(); renderer.pos((int)x, (int)y, 0).tex(minU, minV).endVertex(); renderer.pos((int)x, (int)(y + scaleY*height), 0).tex(minU, maxV).endVertex(); tessellator.draw(); } public static void drawTexturedRect(ResourceLocation texture, double x, double y, int u, int v, int width, int height, int imageWidth, int imageHeight) { drawTexturedRect(texture, x, y, u, v, width, height, imageWidth, imageHeight, 1, 1); } private static void drawFullTexture(ResourceLocation texture, double x, double y, int width, int height, double scaleX, double scaleY) { drawTexturedRect(texture, x, y, 0, 0, width, height, width, height, scaleX, scaleY); } public static void drawFullTexture(ResourceLocation texture, double x, double y, int width, int height) { drawFullTexture(texture, x, y, width, height, 1, 1); } public static void drawAutotileCorner(ResourceLocation texture, int x, int y, double u, double v, int tileHalfSize) { Minecraft.getMinecraft().renderEngine.bindTexture(texture); double minU = u / 4; double maxU = (u + 1) / 4; double minV = v / 6; double maxV = (v + 1) / 6; Tessellator tessellator = Tessellator.getInstance(); VertexBuffer renderer = tessellator.getBuffer(); renderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); renderer.pos((x + tileHalfSize), (y + tileHalfSize), 0).tex(maxU, maxV).endVertex(); renderer.pos((x + tileHalfSize), y, 0).tex(maxU, minV).endVertex(); renderer.pos( x, y, 0).tex(minU, minV).endVertex(); renderer.pos( x, (y + tileHalfSize), 0).tex(minU, maxV).endVertex(); tessellator.draw(); } public static void setGLColor(int color, float alpha) { float r = (float)(color >> 16 & 0xff)/256f; float g = (float)(color >> 8 & 0xff)/256f; float b = (float)(color & 0xff)/256f; GlStateManager.color(r, g, b, alpha); } }