rt4-client/client/src/main/java/GlRenderer.java

812 lines
26 KiB
Java

import java.awt.Canvas;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import java.nio.charset.StandardCharsets;
import com.jogamp.nativewindow.awt.AWTGraphicsConfiguration;
import com.jogamp.nativewindow.awt.JAWTWindow;
import com.jogamp.opengl.*;
import jogamp.newt.awt.NewtFactoryAWT;
import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;
public final class GlRenderer {
@OriginalMember(owner = "client!tf", name = "a", descriptor = "Ljava/lang/String;")
private static String vendor;
@OriginalMember(owner = "client!tf", name = "b", descriptor = "Ljava/lang/String;")
private static String renderer;
@OriginalMember(owner = "client!tf", name = "c", descriptor = "F")
private static float aFloat30;
@OriginalMember(owner = "client!tf", name = "e", descriptor = "I")
public static int maxTextureUnits;
@OriginalMember(owner = "client!tf", name = "f", descriptor = "Z")
public static boolean bigEndian;
@OriginalMember(owner = "client!tf", name = "k", descriptor = "F")
private static float aFloat32;
@OriginalMember(owner = "client!tf", name = "p", descriptor = "Lgl!javax/media/opengl/GLContext;")
private static GLContext context;
@OriginalMember(owner = "client!tf", name = "r", descriptor = "Z")
public static boolean extTexture3dSupported;
@OriginalMember(owner = "client!tf", name = "t", descriptor = "Lgl!javax/media/opengl/GL;")
public static GL2 gl;
@OriginalMember(owner = "client!tf", name = "v", descriptor = "I")
private static int maxTextureImageUnits;
@OriginalMember(owner = "client!tf", name = "y", descriptor = "Z")
public static boolean arbMultisampleSupported;
@OriginalMember(owner = "client!tf", name = "z", descriptor = "I")
public static int anInt5328;
@OriginalMember(owner = "client!tf", name = "A", descriptor = "I")
public static int canvasHeight;
@OriginalMember(owner = "client!tf", name = "B", descriptor = "I")
private static int version;
@OriginalMember(owner = "client!tf", name = "C", descriptor = "Z")
public static boolean arbVboSupported;
@OriginalMember(owner = "client!tf", name = "D", descriptor = "I")
private static int maxTextureCoords;
@OriginalMember(owner = "client!tf", name = "E", descriptor = "Lgl!javax/media/opengl/GLDrawable;")
private static GLDrawable drawable;
@OriginalMember(owner = "client!tf", name = "H", descriptor = "Z")
public static boolean arbVertexProgramSupported;
@OriginalMember(owner = "client!tf", name = "J", descriptor = "I")
public static int canvasWidth;
@OriginalMember(owner = "client!tf", name = "K", descriptor = "Z")
public static boolean arbTextureCubeMapSupported;
@OriginalMember(owner = "client!tf", name = "d", descriptor = "Z")
private static boolean textureMatrixModified = false;
@OriginalMember(owner = "client!tf", name = "g", descriptor = "I")
public static int anInt5323 = 0;
@OriginalMember(owner = "client!tf", name = "h", descriptor = "I")
private static int textureCombineAlphaMode = 0;
@OriginalMember(owner = "client!tf", name = "i", descriptor = "I")
private static int textureCombineRgbMode = 0;
@OriginalMember(owner = "client!tf", name = "j", descriptor = "F")
private static float aFloat31 = 0.0F;
@OriginalMember(owner = "client!tf", name = "l", descriptor = "Z")
private static boolean lightingEnabled = true;
@OriginalMember(owner = "client!tf", name = "m", descriptor = "F")
private static float aFloat33 = 0.0F;
@OriginalMember(owner = "client!tf", name = "n", descriptor = "Z")
public static boolean normalArrayEnabled = true;
@OriginalMember(owner = "client!tf", name = "o", descriptor = "Z")
private static boolean aBoolean266 = false;
@OriginalMember(owner = "client!tf", name = "q", descriptor = "F")
private static final float aFloat34 = 0.09765625F;
@OriginalMember(owner = "client!tf", name = "s", descriptor = "I")
private static int textureId = -1;
@OriginalMember(owner = "client!tf", name = "u", descriptor = "Z")
private static boolean depthTestEnabled = true;
@OriginalMember(owner = "client!tf", name = "w", descriptor = "Z")
public static boolean enabled = false;
@OriginalMember(owner = "client!tf", name = "x", descriptor = "[F")
private static final float[] matrix = new float[16];
@OriginalMember(owner = "client!tf", name = "F", descriptor = "Z")
private static boolean fogEnabled = true;
@OriginalMember(owner = "client!tf", name = "I", descriptor = "Lclient!na;")
private static final JagString RADEON = JagString.parse("radeon");
private static JAWTWindow window;
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(Ljava/lang/String;)Lclient!na;")
private static JagString method4147(@OriginalArg(0) String arg0) {
@Pc(3) byte[] local3;
local3 = arg0.getBytes(StandardCharsets.ISO_8859_1);
return Static10.decodeString(local3, local3.length, 0);
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIII)V")
public static void method4148(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3) {
method4171(0, 0, canvasWidth, canvasHeight, arg0, arg1, 0.0F, 0.0F, arg2, arg3);
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "()V")
public static void method4149() {
Static27.setMaterial(0, 0);
method4163();
setTextureCombineRgbMode(1);
setTextureCombineAlphaMode(1);
setLightingEnabled(false);
setDepthTestEnabled(false);
setFogEnabled(false);
resetTextureMatrix();
}
@OriginalMember(owner = "client!tf", name = "b", descriptor = "()V")
public static void resetTextureMatrix() {
if (textureMatrixModified) {
gl.glMatrixMode(GL2.GL_TEXTURE);
gl.glLoadIdentity();
gl.glMatrixMode(GL2.GL_MODELVIEW);
textureMatrixModified = false;
}
}
@OriginalMember(owner = "client!tf", name = "c", descriptor = "()V")
public static void method4151() {
Static27.setMaterial(0, 0); // MaterialManager
method4163();
setTextureCombineRgbMode(0);
setTextureCombineAlphaMode(0);
setLightingEnabled(false);
setDepthTestEnabled(false);
setFogEnabled(false);
resetTextureMatrix();
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(FF)V")
public static void method4152(@OriginalArg(0) float arg0, @OriginalArg(1) float arg1) {
if (aBoolean266 || arg0 == aFloat33 && arg1 == aFloat31) {
return;
}
aFloat33 = arg0;
aFloat31 = arg1;
if (arg1 == 0.0F) {
matrix[10] = aFloat30;
matrix[14] = aFloat32;
} else {
@Pc(25) float local25 = arg0 / (arg1 + arg0);
@Pc(29) float local29 = local25 * local25;
@Pc(42) float local42 = -aFloat32 * (1.0F - local25) * (1.0F - local25) / arg1;
matrix[10] = aFloat30 + local42;
matrix[14] = aFloat32 * local29;
}
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadMatrixf(matrix, 0);
gl.glMatrixMode(GL2.GL_MODELVIEW);
}
@OriginalMember(owner = "client!tf", name = "d", descriptor = "()V")
public static void swapBuffers() {
try {
drawable.swapBuffers();
} catch (@Pc(3) Exception local3) {
}
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(Z)V")
public static void setFogEnabled(@OriginalArg(0) boolean enabled) {
if (enabled == fogEnabled) {
return;
}
if (enabled) {
gl.glEnable(GL2.GL_FOG);
} else {
gl.glDisable(GL2.GL_FOG);
}
fogEnabled = enabled;
}
@OriginalMember(owner = "client!tf", name = "e", descriptor = "()V")
public static void method4155() {
Static27.setMaterial(0, 0);
method4163();
setTextureCombineRgbMode(0);
setTextureCombineAlphaMode(0);
setLightingEnabled(false);
setDepthTestEnabled(false);
setFogEnabled(false);
resetTextureMatrix();
}
@OriginalMember(owner = "client!tf", name = "f", descriptor = "()V")
private static void method4156() {
aBoolean266 = false;
gl.glDisable(GL2.GL_TEXTURE_2D);
textureId = -1;
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE);
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE);
textureCombineRgbMode = 0;
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE);
textureCombineAlphaMode = 0;
gl.glEnable(GL2.GL_LIGHTING);
gl.glEnable(GL2.GL_FOG);
gl.glEnable(GL2.GL_DEPTH_TEST);
lightingEnabled = true;
depthTestEnabled = true;
fogEnabled = true;
Static83.method440();
gl.glActiveTexture(GL2.GL_TEXTURE1);
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE);
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE);
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE);
gl.glActiveTexture(GL2.GL_TEXTURE0);
gl.setSwapInterval(0);
gl.glClearColor(0.0F, 0.0F, 0.0F, 0.0F);
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearDepth(1.0D);
gl.glDepthFunc(GL2.GL_LEQUAL);
enableDepthMask();
gl.glMatrixMode(GL2.GL_TEXTURE);
gl.glLoadIdentity();
gl.glPolygonMode(GL2.GL_FRONT, GL2.GL_FILL);
gl.glEnable(GL2.GL_CULL_FACE);
gl.glCullFace(GL2.GL_BACK);
gl.glEnable(GL2.GL_BLEND);
gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL2.GL_ALPHA_TEST);
gl.glAlphaFunc(GL2.GL_GREATER, 0.0F);
gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL2.GL_NORMAL_ARRAY);
normalArrayEnabled = true;
gl.glEnableClientState(GL2.GL_COLOR_ARRAY);
gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
Static161.method3065();
Static120.method2400(); // LightingManager
}
@OriginalMember(owner = "client!tf", name = "g", descriptor = "()V")
public static void enableDepthMask() {
gl.glDepthMask(true);
}
@OriginalMember(owner = "client!tf", name = "b", descriptor = "(Z)V")
public static void setDepthTestEnabled(@OriginalArg(0) boolean enabled) {
if (enabled == depthTestEnabled) {
return;
}
if (enabled) {
gl.glEnable(GL2.GL_DEPTH_TEST);
} else {
gl.glDisable(GL2.GL_DEPTH_TEST);
}
depthTestEnabled = enabled;
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(F)V")
public static void method4159(@OriginalArg(0) float arg0) {
method4152(3000.0F, arg0 * 1.5F);
}
@OriginalMember(owner = "client!tf", name = "h", descriptor = "()V")
public static void method4160() {
@Pc(2) int[] local2 = new int[2];
gl.glGetIntegerv(GL2.GL_DRAW_BUFFER, local2, 0);
gl.glGetIntegerv(GL2.GL_READ_BUFFER, local2, 1);
gl.glDrawBuffer(GL2.GL_BACK_LEFT);
gl.glReadBuffer(GL2.GL_FRONT_LEFT);
setTextureId(-1);
gl.glPushAttrib(GL2.GL_ENABLE_BIT);
gl.glDisable(GL2.GL_FOG);
gl.glDisable(GL2.GL_BLEND);
gl.glDisable(GL2.GL_DEPTH_TEST);
gl.glDisable(GL2.GL_ALPHA_TEST);
gl.glRasterPos2i(0, 0);
gl.glCopyPixels(0, 0, canvasWidth, canvasHeight, GL2.GL_COLOR);
gl.glPopAttrib();
gl.glDrawBuffer(local2[0]);
gl.glReadBuffer(local2[1]);
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(Ljava/awt/Canvas;)V")
public static void createAndDestroyContext(@OriginalArg(0) Canvas canvas) {
try {
if (!canvas.isDisplayable()) {
return;
}
GLProfile profile = GLProfile.getDefault();
GLCapabilities glCaps = new GLCapabilities(profile);
AWTGraphicsConfiguration config = AWTGraphicsConfiguration.create(canvas.getGraphicsConfiguration(), glCaps, glCaps);
JAWTWindow jawtWindow = NewtFactoryAWT.getNativeWindow(canvas, config);
@Pc(5) GLDrawableFactory glDrawableFactory = GLDrawableFactory.getFactory(profile);
@Pc(11) GLDrawable glDrawable = glDrawableFactory.createGLDrawable(jawtWindow);
glDrawable.setRealized(true);
@Pc(18) GLContext glContext = glDrawable.createContext(null);
glContext.makeCurrent();
glContext.release();
glContext.destroy();
glDrawable.setRealized(false);
} catch (@Pc(30) Throwable ex) {
}
}
@OriginalMember(owner = "client!tf", name = "i", descriptor = "()V")
public static void method4162() {
Static27.setMaterial(0, 0);
method4163();
setTextureId(-1);
setLightingEnabled(false);
setDepthTestEnabled(false);
setFogEnabled(false);
resetTextureMatrix();
}
@OriginalMember(owner = "client!tf", name = "j", descriptor = "()V")
private static void method4163() {
if (aBoolean266) {
return;
}
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(0, canvasWidth, 0, canvasHeight, -1.0D, 1.0D);
setViewportBounds(0, 0, canvasWidth, canvasHeight);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
aBoolean266 = true;
}
@OriginalMember(owner = "client!tf", name = "c", descriptor = "(Z)V")
public static void setLightingEnabled(@OriginalArg(0) boolean enabled) {
if (enabled == lightingEnabled) {
return;
}
if (enabled) {
gl.glEnable(GL2.GL_LIGHTING);
} else {
gl.glDisable(GL2.GL_LIGHTING);
}
lightingEnabled = enabled;
}
@OriginalMember(owner = "client!tf", name = "l", descriptor = "()F")
public static float method4166() {
return aFloat31;
}
@OriginalMember(owner = "client!tf", name = "m", descriptor = "()I")
private static int checkContext() {
@Pc(1) int result = 0;
vendor = gl.glGetString(GL2.GL_VENDOR);
renderer = gl.glGetString(GL2.GL_RENDERER);
@Pc(12) String vendor = GlRenderer.vendor.toLowerCase();
if (vendor.contains("microsoft")) {
result = 1;
}
if (vendor.contains("brian paul") || vendor.contains("mesa")) {
result |= 0x1;
}
@Pc(39) String version = gl.glGetString(GL2.GL_VERSION);
@Pc(43) String[] versionParts = version.split("[. ]");
if (versionParts.length >= 2) {
try {
@Pc(52) int major = Integer.parseInt(versionParts[0]);
@Pc(57) int minor = Integer.parseInt(versionParts[1]);
GlRenderer.version = major * 10 + minor;
} catch (@Pc(65) NumberFormatException ex) {
result |= 0x4;
}
} else {
result |= 0x4;
}
if (GlRenderer.version < 12) {
result |= 0x2;
}
if (!gl.isExtensionAvailable("GL_ARB_multitexture")) {
result |= 0x8;
}
if (!gl.isExtensionAvailable("GL_ARB_texture_env_combine")) {
result |= 0x20;
}
@Pc(100) int[] data = new int[1];
gl.glGetIntegerv(GL2.GL_MAX_TEXTURE_UNITS, data, 0);
maxTextureUnits = data[0];
gl.glGetIntegerv(GL2.GL_MAX_TEXTURE_COORDS, data, 0);
maxTextureCoords = data[0];
gl.glGetIntegerv(GL2.GL_MAX_TEXTURE_IMAGE_UNITS, data, 0);
maxTextureImageUnits = data[0];
if (maxTextureUnits < 2 || maxTextureCoords < 2 || maxTextureImageUnits < 2) {
result |= 0x10;
}
if (result != 0) {
return result;
}
bigEndian = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN;
arbVboSupported = gl.isExtensionAvailable("GL_ARB_vertex_buffer_object");
arbMultisampleSupported = gl.isExtensionAvailable("GL_ARB_multisample");
arbTextureCubeMapSupported = gl.isExtensionAvailable("GL_ARB_texture_cube_map");
arbVertexProgramSupported = gl.isExtensionAvailable("GL_ARB_vertex_program");
extTexture3dSupported = gl.isExtensionAvailable("GL_EXT_texture3D");
@Pc(176) JagString renderer = method4147(GlRenderer.renderer).toLowerCase();
if (renderer.indexOf(RADEON) != -1) {
@Pc(184) int v = 0;
@Pc(193) JagString[] rendererParts = renderer.replaceSlashWithSpace().split(32);
for (@Pc(195) int i = 0; i < rendererParts.length; i++) {
@Pc(203) JagString part = rendererParts[i];
if (part.length() >= 4 && part.substring(4, 0).isInt()) {
v = part.substring(4, 0).parseInt();
break;
}
}
if (v >= 7000 && v <= 7999) {
arbVboSupported = false;
}
if (v >= 7000 && v <= 9250) {
extTexture3dSupported = false;
}
GlModel.arbVboSupported = arbVboSupported;
}
if (arbVboSupported) {
try {
@Pc(250) int[] temp = new int[1];
gl.glGenBuffers(1, temp, 0);
} catch (@Pc(257) Throwable ex) {
return -4;
}
}
return 0;
}
@OriginalMember(owner = "client!tf", name = "n", descriptor = "()V")
public static void clearDepthBuffer() {
gl.glClear(GL2.GL_DEPTH_BUFFER_BIT);
}
@OriginalMember(owner = "client!tf", name = "o", descriptor = "()V")
public static void quit() {
if (gl != null) {
try {
Static172.quit(); // MaterialManager
} catch (@Pc(5) Throwable local5) {
}
}
if (window != null) {
if (!window.getLock().isLocked()) {
window.lockSurface();
}
if (context != null) {
GlCleaner.clear(); // GlCleaner
try {
if (GLContext.getCurrent() == context) {
context.release();
}
} catch (@Pc(17) Throwable ex) {
}
try {
context.destroy();
} catch (@Pc(21) Throwable ex) {
}
}
}
if (drawable != null) {
try {
drawable.setRealized(false);
} catch (@Pc(30) Throwable ex) {
}
}
window = null;
gl = null;
context = null;
drawable = null;
Static120.method2398(); // LightingManager
enabled = false;
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(FFF)V")
public static void translateTextureMatrix(@OriginalArg(0) float x, @OriginalArg(1) float y, @OriginalArg(2) float z) {
gl.glMatrixMode(GL2.GL_TEXTURE);
if (textureMatrixModified) {
gl.glLoadIdentity();
}
gl.glTranslatef(x, y, z);
gl.glMatrixMode(GL2.GL_MODELVIEW);
textureMatrixModified = true;
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIIIIIFFII)V")
public static void method4171(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5, @OriginalArg(6) float arg6, @OriginalArg(7) float arg7, @OriginalArg(8) int arg8, @OriginalArg(9) int arg9) {
@Pc(7) int local7 = (arg0 - arg4 << 8) / arg8;
@Pc(17) int local17 = (arg0 + arg2 - arg4 << 8) / arg8;
@Pc(25) int local25 = (arg1 - arg5 << 8) / arg9;
@Pc(35) int local35 = (arg1 + arg3 - arg5 << 8) / arg9;
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
method4175((float) local7 * aFloat34, (float) local17 * aFloat34, (float) -local35 * aFloat34, (float) -local25 * aFloat34, 50.0F, 3584.0F);
setViewportBounds(arg0, canvasHeight - arg1 - arg3, arg2, arg3);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
if (arg6 != 0.0F) {
gl.glRotatef(arg6, 1.0F, 0.0F, 0.0F);
}
if (arg7 != 0.0F) {
gl.glRotatef(arg7, 0.0F, 1.0F, 0.0F);
}
aBoolean266 = false;
Static240.screenLowerX = local7;
Static247.screenUpperX = local17;
Static1.screenLowerY = local25;
Static148.screenUpperY = local35;
}
@OriginalMember(owner = "client!tf", name = "d", descriptor = "(Z)V")
private static void setNormalArrayEnabled(@OriginalArg(0) boolean enabled) {
if (enabled == normalArrayEnabled) {
return;
}
if (enabled) {
gl.glEnableClientState(GL2.GL_NORMAL_ARRAY);
} else {
gl.glDisableClientState(GL2.GL_NORMAL_ARRAY);
}
normalArrayEnabled = enabled;
}
@OriginalMember(owner = "client!tf", name = "p", descriptor = "()V")
public static void method4173() {
if (Preferences.highDetailLighting) {
setLightingEnabled(true);
setNormalArrayEnabled(true);
} else {
setLightingEnabled(false);
setNormalArrayEnabled(false);
}
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(I)V")
public static void setTextureCombineAlphaMode(@OriginalArg(0) int mode) {
if (mode == textureCombineAlphaMode) {
return;
}
if (mode == 0) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE);
}
if (mode == 1) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE);
}
if (mode == 2) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_ADD);
}
textureCombineAlphaMode = mode;
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(FFFFFF)V")
private static void method4175(@OriginalArg(0) float arg0, @OriginalArg(1) float arg1, @OriginalArg(2) float arg2, @OriginalArg(3) float arg3, @OriginalArg(4) float arg4, @OriginalArg(5) float arg5) {
@Pc(3) float local3 = arg4 * 2.0F;
matrix[0] = local3 / (arg1 - arg0);
matrix[1] = 0.0F;
matrix[2] = 0.0F;
matrix[3] = 0.0F;
matrix[4] = 0.0F;
matrix[5] = local3 / (arg3 - arg2);
matrix[6] = 0.0F;
matrix[7] = 0.0F;
matrix[8] = (arg1 + arg0) / (arg1 - arg0);
matrix[9] = (arg3 + arg2) / (arg3 - arg2);
matrix[10] = aFloat30 = -(arg5 + arg4) / (arg5 - arg4);
matrix[11] = -1.0F;
matrix[12] = 0.0F;
matrix[13] = 0.0F;
matrix[14] = aFloat32 = -(local3 * arg5) / (arg5 - arg4);
matrix[15] = 0.0F;
gl.glLoadMatrixf(matrix, 0);
aFloat33 = 0.0F;
aFloat31 = 0.0F;
}
@OriginalMember(owner = "client!tf", name = "b", descriptor = "(I)V")
public static void clearColorAndDepthBuffers(@OriginalArg(0) int rgb) {
gl.glClearColor((float) (rgb >> 16 & 0xFF) / 255.0F, (float) (rgb >> 8 & 0xFF) / 255.0F, (float) (rgb & 0xFF) / 255.0F, 0.0F);
gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT);
gl.glClearColor(0.0F, 0.0F, 0.0F, 0.0F);
}
@OriginalMember(owner = "client!tf", name = "c", descriptor = "(I)V")
public static void setTextureId(@OriginalArg(0) int id) {
if (id == textureId) {
return;
}
if (id == -1) {
gl.glDisable(GL2.GL_TEXTURE_2D);
} else {
if (textureId == -1) {
gl.glEnable(GL2.GL_TEXTURE_2D);
}
gl.glBindTexture(GL2.GL_TEXTURE_2D, id);
}
textureId = id;
}
@OriginalMember(owner = "client!tf", name = "q", descriptor = "()V")
public static void disableDepthMask() {
gl.glDepthMask(false);
}
@OriginalMember(owner = "client!tf", name = "r", descriptor = "()F")
public static float method4179() {
return aFloat33;
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(Ljava/awt/Canvas;I)I")
public static int init(@OriginalArg(0) Canvas canvas, @OriginalArg(1) int numSamples) {
try {
if (!canvas.isDisplayable()) {
return -1;
}
GLProfile profile = GLProfile.get(GLProfile.GL3bc);
@Pc(8) GLCapabilities capabilities = new GLCapabilities(profile);
if (numSamples > 0) {
capabilities.setSampleBuffers(true);
capabilities.setNumSamples(numSamples * 4);
}
@Pc(18) GLDrawableFactory factory = GLDrawableFactory.getFactory(profile);
AWTGraphicsConfiguration config = AWTGraphicsConfiguration.create(canvas.getGraphicsConfiguration(), capabilities, capabilities);
window = NewtFactoryAWT.getNativeWindow(canvas, config);
if (!window.getLock().isLocked()) {
window.lockSurface();
}
try {
drawable = factory.createGLDrawable(window);
drawable.setRealized(true);
} finally {
window.unlockSurface();
}
@Pc(29) int swapBuffersAttempts = 0;
@Pc(36) int result;
while (true) {
context = drawable.createContext(null);
try {
result = context.makeCurrent();
if (result != 0) {
break;
}
} catch (@Pc(41) Exception local41) {
}
if (swapBuffersAttempts++ > 5) {
return -2;
}
ThreadUtils.sleep(1000L);
}
if (window.getLock().isLocked()) {
window.unlockSurface();
}
gl = GLContext.getCurrentGL().getGL2();
gl.glLineWidth((float) GameShell.canvasScale);
enabled = true;
canvasWidth = canvas.getSize().width;
canvasHeight = canvas.getSize().height;
result = checkContext();
if (result != 0) {
quit();
return result;
}
method4184();
method4156();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
swapBuffersAttempts = 0;
while (true) {
try {
drawable.swapBuffers();
break;
} catch (@Pc(86) Exception ex) {
if (swapBuffersAttempts++ > 5) {
quit();
return -3;
}
ThreadUtils.sleep(100L);
}
}
gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
return 0;
} catch (@Pc(103) Throwable ex) {
quit();
return -5;
}
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(II)V")
public static void setCanvasSize(@OriginalArg(0) int width, @OriginalArg(1) int height) {
canvasWidth = width;
canvasHeight = height;
aBoolean266 = false;
}
public static int leftMargin;
public static int topMargin;
public static int viewportWidth;
public static int viewportHeight;
public static void setViewportBounds(@OriginalArg(0) int x, @OriginalArg(1) int y, @OriginalArg(2) int width, @OriginalArg(3) int height) {
leftMargin = x;
topMargin = y;
viewportWidth = width;
viewportHeight = height;
resizeViewport();
}
@OriginalMember(owner = "client!gi", name = "b", descriptor = "()V")
private static void resizeViewport() {
gl.glViewport((int) (leftMargin * GameShell.canvasScale + GameShell.subpixelX), (int) (topMargin * GameShell.canvasScale + GameShell.subpixelY),
(int) (viewportWidth * GameShell.canvasScale + GameShell.subpixelX), (int) (viewportHeight * GameShell.canvasScale + GameShell.subpixelY));
}
@OriginalMember(owner = "client!tf", name = "a", descriptor = "(IIIIII)V")
public static void method4182(@OriginalArg(0) int arg0, @OriginalArg(1) int arg1, @OriginalArg(2) int arg2, @OriginalArg(3) int arg3, @OriginalArg(4) int arg4, @OriginalArg(5) int arg5) {
@Pc(2) int local2 = -arg0;
@Pc(6) int local6 = canvasWidth - arg0;
@Pc(9) int local9 = -arg1;
@Pc(13) int local13 = canvasHeight - arg1;
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
@Pc(23) float local23 = (float) arg2 / 512.0F;
@Pc(30) float local30 = local23 * (256.0F / (float) arg4);
@Pc(37) float local37 = local23 * (256.0F / (float) arg5);
gl.glOrtho((double) ((float) local2 * local30), (double) ((float) local6 * local30), (double) ((float) -local13 * local37), (double) ((float) -local9 * local37), (double) (50 - arg3), (double) (3584 - arg3));
setViewportBounds(0, 0, canvasWidth, canvasHeight);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
aBoolean266 = false;
}
@OriginalMember(owner = "client!tf", name = "d", descriptor = "(I)V")
public static void setTextureCombineRgbMode(@OriginalArg(0) int mode) {
if (mode == textureCombineRgbMode) {
return;
}
if (mode == 0) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE);
}
if (mode == 1) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_REPLACE);
}
if (mode == 2) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD);
}
if (mode == 3) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_SUBTRACT);
}
if (mode == 4) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD_SIGNED);
}
if (mode == 5) {
gl.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_INTERPOLATE);
}
textureCombineRgbMode = mode;
}
@OriginalMember(owner = "client!tf", name = "s", descriptor = "()V")
private static void method4184() {
@Pc(2) int[] local2 = new int[1];
gl.glGenTextures(1, local2, 0);
anInt5328 = local2[0];
gl.glBindTexture(GL2.GL_TEXTURE_2D, anInt5328);
gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, 4, 1, 1, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, IntBuffer.wrap(new int[] { -1 }));
Static120.method2401();
Static238.method4145();
}
}