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

223 lines
9.7 KiB
Java

package rt4;
import java.nio.ByteBuffer;
import com.jogamp.opengl.*;
import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalClass;
import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;
@OriginalClass("client!wg")
public final class UnderwaterMaterialRenderer implements MaterialRenderer {
@OriginalMember(owner = "client!wg", name = "b", descriptor = "Z")
public static boolean aBoolean308 = false;
@OriginalMember(owner = "client!wg", name = "c", descriptor = "I")
private int anInt5805 = -1;
@OriginalMember(owner = "client!wg", name = "a", descriptor = "[F")
private final float[] aFloatArray29 = new float[4];
@OriginalMember(owner = "client!wg", name = "d", descriptor = "I")
private int anInt5806 = -1;
@OriginalMember(owner = "client!wg", name = "<init>", descriptor = "()V")
public UnderwaterMaterialRenderer() {
if (GlRenderer.maxTextureUnits >= 2) {
@Pc(17) int[] local17 = new int[1];
@Pc(20) byte[] local20 = new byte[8];
@Pc(22) int local22 = 0;
while (local22 < 8) {
local20[local22++] = (byte) (local22 * 159 / 8 + 96);
}
@Pc(40) GL2 local40 = GlRenderer.gl;
local40.glGenTextures(1, local17, 0);
local40.glBindTexture(GL2.GL_TEXTURE_1D, local17[0]);
local40.glTexImage1D(GL2.GL_TEXTURE_1D, 0, GL2.GL_ALPHA, 8, 0, GL2.GL_ALPHA, GL2.GL_UNSIGNED_BYTE, ByteBuffer.wrap(local20));
local40.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
local40.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
local40.glTexParameteri(GL2.GL_TEXTURE_1D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE);
this.anInt5805 = local17[0];
aBoolean308 = GlRenderer.maxTextureUnits > 2 && GlRenderer.extTexture3dSupported;
this.method4606();
}
}
@OriginalMember(owner = "client!wg", name = "e", descriptor = "()I")
public static int method4607() {
return aBoolean308 ? 33986 : 33985;
}
@OriginalMember(owner = "client!wg", name = "f", descriptor = "()V")
public static void method4608() {
@Pc(1) GL2 local1 = GlRenderer.gl;
local1.glClientActiveTexture(method4607());
local1.glDisableClientState(GL2.GL_TEXTURE_COORD_ARRAY);
local1.glClientActiveTexture(GL2.GL_TEXTURE0);
}
@OriginalMember(owner = "client!wg", name = "g", descriptor = "()V")
public static void method4609() {
@Pc(1) GL2 local1 = GlRenderer.gl;
local1.glClientActiveTexture(method4607());
local1.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY);
local1.glClientActiveTexture(GL2.GL_TEXTURE0);
}
@OriginalMember(owner = "client!mf", name = "a", descriptor = "()V")
public static void applyFogFade() {
@Pc(1) GL2 gl = GlRenderer.gl;
gl.glDisableClientState(GL2.GL_COLOR_ARRAY);
GlRenderer.setLightingEnabled(false);
gl.glDisable(GL2.GL_DEPTH_TEST);
gl.glPushAttrib(GL2.GL_FOG_BIT);
gl.glFogf(GL2.GL_FOG_START, (float) GlobalConfig.VIEW_DISTANCE - (GlobalConfig.VIEW_FADE_DISTANCE * 2.0f));
GlRenderer.disableDepthMask();
try {
for (@Pc(19) int i = 0; i < SceneGraph.surfaceHdTiles[0].length; i++) {
@Pc(31) GlTile tile = SceneGraph.surfaceHdTiles[0][i];
if (tile.texture >= 0 && Rasteriser.textureProvider.getMaterialType(tile.texture) == MaterialManager.WATER) {
gl.glColor4fv(ColorUtils.getRgbFloat(tile.underwaterColor), 0);
@Pc(57) float f = 201.5F - (tile.blend ? 1.0F : 0.5F);
tile.method1944(SceneGraph.tiles, f, true);
}
}
} catch (Exception ignored) {}
gl.glEnableClientState(GL2.GL_COLOR_ARRAY);
GlRenderer.restoreLighting();
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glPopAttrib();
GlRenderer.enableDepthMask();
}
@OriginalMember(owner = "client!wg", name = "d", descriptor = "()V")
private void method4606() {
@Pc(1) GL2 local1 = GlRenderer.gl;
this.anInt5806 = local1.glGenLists(2);
local1.glNewList(this.anInt5806, GL2.GL_COMPILE);
local1.glActiveTexture(GL2.GL_TEXTURE1);
if (aBoolean308) {
local1.glBindTexture(GL2.GL_TEXTURE_3D, Static151.anInt3587);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_ADD);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PREVIOUS);
local1.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR);
local1.glTexGeni(GL2.GL_R, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR);
local1.glTexGeni(GL2.GL_T, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR);
local1.glTexGeni(GL2.GL_Q, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_OBJECT_LINEAR);
local1.glTexGenfv(GL2.GL_Q, GL2.GL_OBJECT_PLANE, new float[] { 0.0F, 0.0F, 0.0F, 1.0F }, 0);
local1.glEnable(GL2.GL_TEXTURE_GEN_S);
local1.glEnable(GL2.GL_TEXTURE_GEN_T);
local1.glEnable(GL2.GL_TEXTURE_GEN_R);
local1.glEnable(GL2.GL_TEXTURE_GEN_Q);
local1.glEnable(GL2.GL_TEXTURE_3D);
local1.glActiveTexture(GL2.GL_TEXTURE2);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_COMBINE);
}
local1.glBindTexture(GL2.GL_TEXTURE_1D, this.anInt5805);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_INTERPOLATE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_CONSTANT);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_RGB, GL2.GL_TEXTURE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_REPLACE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_PREVIOUS);
local1.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_EYE_LINEAR);
local1.glEnable(GL2.GL_TEXTURE_1D);
local1.glEnable(GL2.GL_TEXTURE_GEN_S);
local1.glActiveTexture(GL2.GL_TEXTURE0);
local1.glEndList();
local1.glNewList(this.anInt5806 + 1, GL2.GL_COMPILE);
local1.glActiveTexture(GL2.GL_TEXTURE1);
if (aBoolean308) {
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_OPERAND0_RGB, GL2.GL_SRC_COLOR);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE);
local1.glDisable(GL2.GL_TEXTURE_GEN_S);
local1.glDisable(GL2.GL_TEXTURE_GEN_T);
local1.glDisable(GL2.GL_TEXTURE_GEN_R);
local1.glDisable(GL2.GL_TEXTURE_GEN_Q);
local1.glDisable(GL2.GL_TEXTURE_3D);
local1.glActiveTexture(GL2.GL_TEXTURE2);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE);
}
local1.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, new float[] { 0.0F, 1.0F, 0.0F, 1.0F }, 0);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_RGB, GL2.GL_MODULATE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_RGB, GL2.GL_TEXTURE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC2_RGB, GL2.GL_CONSTANT);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_COMBINE_ALPHA, GL2.GL_MODULATE);
local1.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_SRC0_ALPHA, GL2.GL_TEXTURE);
local1.glDisable(GL2.GL_TEXTURE_1D);
local1.glDisable(GL2.GL_TEXTURE_GEN_S);
local1.glActiveTexture(GL2.GL_TEXTURE0);
local1.glEndList();
}
@OriginalMember(owner = "client!wg", name = "b", descriptor = "()V")
@Override
public final void bind() {
@Pc(1) GL2 local1 = GlRenderer.gl;
local1.glCallList(this.anInt5806);
}
@OriginalMember(owner = "client!wg", name = "c", descriptor = "()I")
@Override
public final int getFlags() {
return 0;
}
@OriginalMember(owner = "client!wg", name = "a", descriptor = "()V")
@Override
public final void unbind() {
@Pc(1) GL2 local1 = GlRenderer.gl;
local1.glCallList(this.anInt5806 + 1);
}
@OriginalMember(owner = "client!wg", name = "a", descriptor = "(I)V")
@Override
public final void setArgument(@OriginalArg(0) int arg0) {
@Pc(1) GL2 local1 = GlRenderer.gl;
local1.glActiveTexture(GL2.GL_TEXTURE1);
if (aBoolean308 || arg0 >= 0) {
local1.glPushMatrix();
local1.glLoadIdentity();
local1.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
local1.glRotatef((float) Static254.anInt5559 * 360.0F / 2048.0F, 1.0F, 0.0F, 0.0F);
local1.glRotatef((float) Static59.anInt1815 * 360.0F / 2048.0F, 0.0F, 1.0F, 0.0F);
local1.glTranslatef((float) -Static12.anInt406, (float) -Static199.anInt4675, (float) -Static230.anInt5158);
if (aBoolean308) {
this.aFloatArray29[0] = 0.001F;
this.aFloatArray29[1] = 9.0E-4F;
this.aFloatArray29[2] = 0.0F;
this.aFloatArray29[3] = 0.0F;
local1.glTexGenfv(GL2.GL_S, GL2.GL_EYE_PLANE, this.aFloatArray29, 0);
this.aFloatArray29[0] = 0.0F;
this.aFloatArray29[1] = 9.0E-4F;
this.aFloatArray29[2] = 0.001F;
this.aFloatArray29[3] = 0.0F;
local1.glTexGenfv(GL2.GL_T, GL2.GL_EYE_PLANE, this.aFloatArray29, 0);
this.aFloatArray29[0] = 0.0F;
this.aFloatArray29[1] = 0.0F;
this.aFloatArray29[2] = 0.0F;
this.aFloatArray29[3] = (float) GlRenderer.anInt5323 * 0.005F;
local1.glTexGenfv(GL2.GL_R, GL2.GL_EYE_PLANE, this.aFloatArray29, 0);
local1.glActiveTexture(GL2.GL_TEXTURE2);
}
local1.glTexEnvfv(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_COLOR, WaterMaterialRenderer.method2422(), 0);
if (arg0 >= 0) {
this.aFloatArray29[0] = 0.0F;
this.aFloatArray29[1] = 1.0F / (float) Static170.anInt3241;
this.aFloatArray29[2] = 0.0F;
this.aFloatArray29[3] = (float) arg0 * 1.0F / (float) Static170.anInt3241;
local1.glTexGenfv(GL2.GL_S, GL2.GL_EYE_PLANE, this.aFloatArray29, 0);
local1.glEnable(GL2.GL_TEXTURE_GEN_S);
} else {
local1.glDisable(GL2.GL_TEXTURE_GEN_S);
}
local1.glPopMatrix();
} else {
local1.glDisable(GL2.GL_TEXTURE_GEN_S);
}
local1.glActiveTexture(GL2.GL_TEXTURE0);
}
}