63 lines
2.5 KiB
Java
63 lines
2.5 KiB
Java
package eu.crushedpixel.replaymod.utils;
|
|
|
|
import net.minecraft.client.renderer.GlStateManager;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.WorldRenderer;
|
|
import org.lwjgl.BufferUtils;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.IntBuffer;
|
|
|
|
public class OpenGLUtils {
|
|
public static final int VIEWPORT_MAX_WIDTH;
|
|
public static final int VIEWPORT_MAX_HEIGHT;
|
|
|
|
static {
|
|
IntBuffer buffer = BufferUtils.createIntBuffer(16);
|
|
GL11.glGetInteger(GL11.GL_MAX_VIEWPORT_DIMS, buffer);
|
|
VIEWPORT_MAX_WIDTH = buffer.get();
|
|
VIEWPORT_MAX_HEIGHT = buffer.get();
|
|
}
|
|
|
|
/**
|
|
* Magic init method which has to be called from the OpenGL thread so the variables in this class
|
|
* can be initialized successfully.
|
|
* Does not perform any work on its own.
|
|
*/
|
|
public static void init() {
|
|
}
|
|
|
|
public static void openGlBytesToRBG(ByteBuffer buffer, int bufferWidth, int xOffset, int yOffset, ByteBuffer to, int width) {
|
|
byte[] rowBuf = new byte[bufferWidth * 3];
|
|
// Copy image flipped vertically to target buffer
|
|
int rows = buffer.remaining() / 3 / bufferWidth;
|
|
for (int i = 0; i < rows; i++) {
|
|
buffer.get(rowBuf);
|
|
to.position(((yOffset + rows - i - 1) * width + xOffset) * 3);
|
|
to.put(rowBuf);
|
|
}
|
|
to.rewind();
|
|
}
|
|
|
|
public static void drawRotatedRectWithCustomSizedTexture(int x, int y, float rotation, float u, float v, int width, int height, float textureWidth, float textureHeight) {
|
|
GlStateManager.pushMatrix();
|
|
|
|
float f4 = 1.0F / textureWidth;
|
|
float f5 = 1.0F / textureHeight;
|
|
|
|
Tessellator tessellator = Tessellator.getInstance();
|
|
WorldRenderer worldrenderer = tessellator.getWorldRenderer();
|
|
GlStateManager.translate(x+(width/2), y+(width/2), 0);
|
|
GlStateManager.rotate(rotation, 0, 0, 1);
|
|
worldrenderer.startDrawingQuads();
|
|
worldrenderer.addVertexWithUV(-width / 2, height / 2, 0.0D, (double) (u * f4), (double) ((v + (float) height) * f5));
|
|
worldrenderer.addVertexWithUV(width/2, height/2, 0.0D, (double)((u + (float)width) * f4), (double)((v + (float)height) * f5));
|
|
worldrenderer.addVertexWithUV(width/2, -height/2, 0.0D, (double)((u + (float)width) * f4), (double)(v * f5));
|
|
worldrenderer.addVertexWithUV(-width/2, -height/2, 0.0D, (double)(u * f4), (double)(v * f5));
|
|
tessellator.draw();
|
|
|
|
GlStateManager.popMatrix();
|
|
}
|
|
}
|