package org.darkstorm.minecraft.gui.util;
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.GL_CULL_FACE;
import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST;
import static org.lwjgl.opengl.GL11.GL_LIGHTING;
import static org.lwjgl.opengl.GL11.GL_LINES;
import static org.lwjgl.opengl.GL11.GL_LINE_SMOOTH;
import static org.lwjgl.opengl.GL11.GL_LINE_SMOOTH_HINT;
import static org.lwjgl.opengl.GL11.GL_NICEST;
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_SMOOTH;
import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
import static org.lwjgl.opengl.GL11.GL_TRIANGLES;
import static org.lwjgl.opengl.GL11.glBegin;
import static org.lwjgl.opengl.GL11.glBindTexture;
import static org.lwjgl.opengl.GL11.glBlendFunc;
import static org.lwjgl.opengl.GL11.glColor4b;
import static org.lwjgl.opengl.GL11.glColor4f;
import static org.lwjgl.opengl.GL11.glDisable;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glEnd;
import static org.lwjgl.opengl.GL11.glHint;
import static org.lwjgl.opengl.GL11.glLineWidth;
import static org.lwjgl.opengl.GL11.glNormal3f;
import static org.lwjgl.opengl.GL11.glPopMatrix;
import static org.lwjgl.opengl.GL11.glPushMatrix;
import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glScissor;
import static org.lwjgl.opengl.GL11.glShadeModel;
import static org.lwjgl.opengl.GL11.glTexCoord2f;
import static org.lwjgl.opengl.GL11.glTranslated;
import static org.lwjgl.opengl.GL11.glVertex2d;
import static org.lwjgl.opengl.GL11.glVertex3d;
import static org.lwjgl.opengl.GL13.GL_MULTISAMPLE;
import static org.lwjgl.opengl.GL13.GL_SAMPLE_ALPHA_TO_COVERAGE;
import java.awt.Color;
import java.awt.Point;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import org.lwjgl.input.Mouse;
public class RenderUtil {
public static void scissorBox(int x, int y, int xend, int yend) {
int width = xend - x;
int height = yend - y;
ScaledResolution sr = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);
int factor = sr.getScaleFactor();
int bottomY = Minecraft.getMinecraft().currentScreen.height - yend;
glScissor(x * factor, bottomY * factor, width * factor, height * factor);
}
public static void setupLineSmooth() {
glEnable(GL_BLEND);
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_LINE_SMOOTH);
glDisable(GL_TEXTURE_2D);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_MULTISAMPLE);
glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
glShadeModel(GL_SMOOTH);
}
public static void drawLine(double startX, double startY, double startZ, double endX, double endY, double endZ, float thickness) {
glPushMatrix();
setupLineSmooth();
glLineWidth(thickness);
glBegin(GL_LINES);
glVertex3d(startX, startY, startZ);
glVertex3d(endX, endY, endZ);
glEnd();
glDisable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glDisable(GL_LINE_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
glDisable(GL_MULTISAMPLE);
glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE);
glPopMatrix();
}
public static void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) {
float var7 = 0.00390625F;
float var8 = 0.00390625F;
Tessellator var9 = Tessellator.getInstance();
WorldRenderer var10 = var9.getWorldRenderer();
var10.startDrawingQuads();
var10.addVertexWithUV((par1 + 0), (par2 + par6), 0, ((par3 + 0) * var7), ((par4 + par6) * var8));
var10.addVertexWithUV((par1 + par5), (par2 + par6), 0, ((par3 + par5) * var7), ((par4 + par6) * var8));
var10.addVertexWithUV((par1 + par5), (par2 + 0), 0, ((par3 + par5) * var7), ((par4 + 0) * var8));
var10.addVertexWithUV((par1 + 0), (par2 + 0), 0, ((par3 + 0) * var7), ((par4 + 0) * var8));
var9.draw();
}
public static void drawTexturedModalRect(int textureId, int posX, int posY, int width, int height) {
double halfHeight = (height / 2);
double halfWidth = (width / 2);
glDisable(GL_CULL_FACE);
glBindTexture(GL_TEXTURE_2D, textureId);
glPushMatrix();
glTranslated(posX + halfWidth, posY + halfHeight, 0);
glScalef(width, height, 0.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1F, 1F, 1F, 1f);
glBegin(GL_TRIANGLES);
glNormal3f(0, 0, 1);
glTexCoord2f(1, 1);
glVertex2d(1, 1);
glTexCoord2f(0, 1);
glVertex2d(-1, 1);
glTexCoord2f(0, 0);
glVertex2d(-1, -1);
glTexCoord2f(0, 0);
glVertex2d(-1, -1);
glTexCoord2f(1, 0);
glVertex2d(1, -1);
glTexCoord2f(1, 1);
glVertex2d(1, 1);
glEnd();
glDisable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
}
public static int interpolateColor(int rgba1, int rgba2, float percent) {
int r1 = rgba1 & 0xFF, g1 = rgba1 >> 8 & 0xFF, b1 = rgba1 >> 16 & 0xFF, a1 = rgba1 >> 24 & 0xFF;
int r2 = rgba2 & 0xFF, g2 = rgba2 >> 8 & 0xFF, b2 = rgba2 >> 16 & 0xFF, a2 = rgba2 >> 24 & 0xFF;
int r = (int) (r1 < r2 ? r1 + (r2 - r1) * percent : r2 + (r1 - r2) * percent);
int g = (int) (g1 < g2 ? g1 + (g2 - g1) * percent : g2 + (g1 - g2) * percent);
int b = (int) (b1 < b2 ? b1 + (b2 - b1) * percent : b2 + (b1 - b2) * percent);
int a = (int) (a1 < a2 ? a1 + (a2 - a1) * percent : a2 + (a1 - a2) * percent);
return r | g << 8 | b << 16 | a << 24;
}
public static void setColor(Color c) {
glColor4f(c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, c.getAlpha() / 255f);
}
public static Color toColor(int rgba) {
int r = rgba & 0xFF, g = rgba >> 8 & 0xFF, b = rgba >> 16 & 0xFF, a = rgba >> 24 & 0xFF;
return new Color(r, g, b, a);
}
public static int toRGBA(Color c) {
return c.getRed() | c.getGreen() << 8 | c.getBlue() << 16 | c.getAlpha() << 24;
}
public static void setColor(int rgba) {
int r = rgba & 0xFF, g = rgba >> 8 & 0xFF, b = rgba >> 16 & 0xFF, a = rgba >> 24 & 0xFF;
glColor4b((byte) r, (byte) g, (byte) b, (byte) a);
}
public static Point calculateMouseLocation() {
Minecraft minecraft = Minecraft.getMinecraft();
int scale = minecraft.gameSettings.guiScale;
if(scale == 0)
scale = 1000;
int scaleFactor = 0;
while(scaleFactor < scale && minecraft.displayWidth / (scaleFactor + 1) >= 320 && minecraft.displayHeight / (scaleFactor + 1) >= 240)
scaleFactor++;
return new Point(Mouse.getX() / scaleFactor, minecraft.displayHeight / scaleFactor - Mouse.getY() / scaleFactor - 1);
}
}