Did some things

This commit is contained in:
PeytonPlayz595 2024-03-18 01:26:45 -04:00
parent 0c9cf255cf
commit a4c4ca9652
27 changed files with 7423 additions and 7684 deletions

View File

@ -1,2 +1,2 @@
@echo off
java -jar desktopRuntime/eclipseProject/jars/CompilePackage.jar "desktopRuntime/resources/" "js/resources.mc"
@echo off
java -jar desktopRuntime/eclipseProject/jars/CompilePackage.jar "desktopRuntime/resources/" "web/resources.mc"

View File

@ -1,2 +1,2 @@
#!/bin/sh
java -jar desktopRuntime/eclipseProject/jars/CompilePackage.jar "desktopRuntime/resources/" "js/resources.mc"
java -jar desktopRuntime/eclipseProject/jars/CompilePackage.jar "desktopRuntime/resources/" "web/resources.mc"

View File

@ -1,9 +1,7 @@
// eaglercraft opengl 1.3 emulation
// copyright (c) 2020 calder young
// creative commons BY-NC 4.0
// copyright (c) 2020-2023 lax1dude
#line 7
#line 4
precision highp int;
precision highp sampler2D;
@ -99,6 +97,8 @@ in vec2 v_texture0;
out vec4 fragColor;
#define TEX_MAT3x2(mat4In) mat3x2(mat4In[0].xy,mat4In[1].xy,mat4In[3].xy)
void main(){
#ifdef CC_a_color
vec4 color = colorUniform * v_color;
@ -108,9 +108,9 @@ void main(){
#ifdef CC_unit0
#ifdef CC_a_texture0
color *= texture(tex0, (matrix_t * vec4(v_texture0, 0.0, 1.0)).xy).rgba;
color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)).xy).rgba;
#else
color *= texture(tex0, (matrix_t * vec4(texCoordV0, 0.0, 1.0)).xy).rgba;
color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)).xy).rgba;
#endif
#endif
@ -133,7 +133,7 @@ void main(){
#ifdef CC_fog
float dist = sqrt(dot(v_position, v_position));
float i = (fogMode == 1) ? clamp((dist - fogStart) / (fogEnd - fogStart), 0.0, 1.0) : clamp(1.0 - pow(2.718, -(fogDensity * dist)), 0.0, 1.0);
float i = (fogMode == 1) ? clamp((dist - fogStart) / (fogEnd - fogStart), 0.0, 1.0) : clamp(1.0 - exp(-(fogDensity * dist)), 0.0, 1.0);
color.rgb = mix(color.rgb, fogColor.xyz, i * fogColor.a);
#endif
@ -141,4 +141,3 @@ void main(){
}
#endif

View File

@ -1,9 +1,7 @@
// eaglercraft opengl 1.3 emulation
// copyright (c) 2020 calder young
// creative commons BY-NC 4.0
// copyright (c) 2020-2023 lax1dude
#line 7
#line 4
precision highp int;
precision highp sampler2D;
@ -99,6 +97,8 @@ in vec2 v_texture0;
out vec4 fragColor;
#define TEX_MAT3x2(mat4In) mat3x2(mat4In[0].xy,mat4In[1].xy,mat4In[3].xy)
void main(){
#ifdef CC_a_color
vec4 color = colorUniform * v_color;
@ -108,9 +108,9 @@ void main(){
#ifdef CC_unit0
#ifdef CC_a_texture0
color *= texture(tex0, (matrix_t * vec4(v_texture0, 0.0, 1.0)).xy).rgba;
color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)).xy).rgba;
#else
color *= texture(tex0, (matrix_t * vec4(texCoordV0, 0.0, 1.0)).xy).rgba;
color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)).xy).rgba;
#endif
#endif
@ -133,7 +133,7 @@ void main(){
#ifdef CC_fog
float dist = sqrt(dot(v_position, v_position));
float i = (fogMode == 1) ? clamp((dist - fogStart) / (fogEnd - fogStart), 0.0, 1.0) : clamp(1.0 - pow(2.718, -(fogDensity * dist)), 0.0, 1.0);
float i = (fogMode == 1) ? clamp((dist - fogStart) / (fogEnd - fogStart), 0.0, 1.0) : clamp(1.0 - exp(-(fogDensity * dist)), 0.0, 1.0);
color.rgb = mix(color.rgb, fogColor.xyz, i * fogColor.a);
#endif
@ -141,4 +141,3 @@ void main(){
}
#endif

View File

@ -210,6 +210,7 @@ public class EaglerAdapterImpl2 {
public static final int _wGL_ELEMENT_ARRAY_BUFFER = GL15.GL_ELEMENT_ARRAY_BUFFER;
public static final int _wGL_STATIC_DRAW = GL15.GL_STATIC_DRAW;
public static final int _wGL_DYNAMIC_DRAW = GL15.GL_DYNAMIC_DRAW;
public static final int _wGL_STREAM_DRAW = GL15.GL_STREAM_DRAW;
public static final int _wGL_INVALID_ENUM = GL11.GL_INVALID_ENUM;
public static final int _wGL_INVALID_VALUE = GL11.GL_INVALID_VALUE;
public static final int _wGL_INVALID_OPERATION = GL11.GL_INVALID_OPERATION;
@ -529,6 +530,10 @@ public class EaglerAdapterImpl2 {
public static final void _wglBufferData0(int p1, IntBuffer p2, int p3) {
GL15.glBufferData(p1, p2, p3);
}
public static final void _wglBufferData00(int p1, long len, int p3) {
GL15.glBufferData(p1, len, p3);
}
public static final void _wglBufferSubData0(int p1, int p2, IntBuffer p3) {
GL15.glBufferSubData(p1, p2, p3);
@ -674,6 +679,10 @@ public class EaglerAdapterImpl2 {
GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, p1, GL11.GL_TEXTURE_2D, p2.obj, 0);
}
public static final void _wglFramebufferTexture2D(int p1, TextureGL p2, int lvl) {
GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, p1, GL11.GL_TEXTURE_2D, p2.obj, lvl);
}
public static final RenderbufferGL _wglCreateRenderBuffer() {
return new RenderbufferGL(GL30.glGenRenderbuffers());
}
@ -746,7 +755,8 @@ public class EaglerAdapterImpl2 {
try {
BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));
int[] pxls = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth());
return new EaglerImage(pxls, img.getWidth(), img.getHeight(), true);
IntBuffer buffer = IntBuffer.wrap(pxls);
return new EaglerImage(buffer, img.getWidth(), img.getHeight(), true);
} catch (IOException e) {
System.err.println("Could not load PNG file:");
e.printStackTrace();

View File

@ -2,11 +2,15 @@ package net.PeytonPlayz585.glemu;
import static net.PeytonPlayz585.opengl.GL11.*;
import java.util.ArrayList;
import java.util.List;
import net.PeytonPlayz585.glemu.vector.*;
public class FixedFunctionShader {
private static final FixedFunctionShader[] instances = new FixedFunctionShader[128];
private static final List<FixedFunctionShader> instanceList = new ArrayList();
public static void refreshCoreGL() {
for (int i = 0; i < instances.length; ++i) {
@ -15,6 +19,7 @@ public class FixedFunctionShader {
instances[i] = null;
}
}
instanceList.clear();
shaderSource = null;
}
@ -59,6 +64,7 @@ public class FixedFunctionShader {
}
s = new FixedFunctionShader(i, CC_a_color, CC_a_normal, CC_a_texture0, CC_lighting, CC_fog, CC_alphatest, CC_unit0);
instances[i] = s;
instanceList.add(s);
}
return s;
}
@ -102,8 +108,7 @@ public class FixedFunctionShader {
private final int attributeIndexesToEnable;
public final BufferArrayGL genericArray;
public final BufferGL genericBuffer;
public final StreamBuffer streamBuffer;
public boolean bufferIsInitialized = false;
private FixedFunctionShader(int j, boolean CC_a_color, boolean CC_a_normal, boolean CC_a_texture0,
@ -226,11 +231,11 @@ public class FixedFunctionShader {
_wglUniform1i(_wglGetUniformLocation(globject, "tex0"), 0);
u_texCoordV0 = _wglGetUniformLocation(globject, "texCoordV0");
genericArray = _wglCreateVertexArray();
genericBuffer = _wglCreateBuffer();
_wglBindVertexArray(genericArray);
_wglBindBuffer(_wGL_ARRAY_BUFFER, genericBuffer);
setupArrayForProgram();
streamBuffer = new StreamBuffer(0x8000, 3, 8, (vertexArray, vertexBuffer) -> {
_wglBindVertexArray0(vertexArray);
_wglBindBuffer(_wGL_ARRAY_BUFFER, vertexBuffer);
setupArrayForProgram();
});
}
@ -258,6 +263,13 @@ public class FixedFunctionShader {
public void unuseProgram() {
}
public static void optimize() {
FixedFunctionShader pp;
for(int i = 0, l = instanceList.size(); i < l; ++i) {
instanceList.get(i).streamBuffer.optimize();
}
}
private float[] modelBuffer = new float[16];
private float[] projectionBuffer = new float[16];

View File

@ -0,0 +1,72 @@
package net.PeytonPlayz585.glemu;
import static net.PeytonPlayz585.opengl.GL11.*;
import java.nio.ByteBuffer;
public class GameOverlayFramebuffer {
private long age = -1l;
private int currentWidth = -1;
private int currentHeight = -1;
private FramebufferGL framebuffer = null;
private TextureGL framebufferColor = null;
private RenderbufferGL depthBuffer = null;
public void beginRender(int width, int height) {
if(framebuffer == null) {
framebuffer = _wglCreateFramebuffer();
depthBuffer = _wglCreateRenderBuffer();
framebufferColor = _wglGenTextures();
_wglBindFramebuffer(_wGL_FRAMEBUFFER, framebuffer);
glBindTexture(_wGL_TEXTURE_2D, framebufferColor);
_wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
_wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
_wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
_wglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
_wglFramebufferTexture2D(_wGL_COLOR_ATTACHMENT0, framebufferColor, 0);
_wglBindRenderbuffer(depthBuffer);
_wglFramebufferRenderbuffer(_wGL_DEPTH_ATTACHMENT, depthBuffer);
}
if(currentWidth != width || currentHeight != height) {
currentWidth = width;
currentHeight = height;
glBindTexture(_wGL_TEXTURE_2D, framebufferColor);
_wglTexImage2D(_wGL_TEXTURE_2D, 0, _wGL_RGBA8, width, height, 0, _wGL_RGBA, _wGL_UNSIGNED_BYTE, (ByteBuffer)null);
_wglBindRenderbuffer(depthBuffer);
_wglRenderbufferStorage(0x81A5, width, height);
}
_wglBindFramebuffer(_wGL_FRAMEBUFFER, framebuffer);
}
public void endRender() {
_wglBindFramebuffer(_wGL_FRAMEBUFFER, null);
age = System.currentTimeMillis();
}
public long getAge() {
return age == -1l ? -1l : (System.currentTimeMillis() - age);
}
public void bindTexture() {
glBindTexture(_wGL_TEXTURE_2D, framebufferColor);
}
public void destroy() {
if(framebuffer != null) {
_wglDeleteFramebuffer(framebuffer);
_wglDeleteRenderbuffer(depthBuffer);
_wglDeleteTextures(framebufferColor);
framebuffer = null;
depthBuffer = null;
framebufferColor = null;
age = -1l;
_wglBindFramebuffer(_wGL_FRAMEBUFFER, null);
}
}
}

View File

@ -0,0 +1,130 @@
package net.PeytonPlayz585.glemu;
import static net.PeytonPlayz585.opengl.GL11.*;
public class StreamBuffer {
public final int initialSize;
public final int initialCount;
public final int maxCount;
protected StreamBufferInstance[] buffers;
protected int currentBufferId = 0;
protected int overflowCounter = 0;
protected final IStreamBufferInitializer initializer;
public static class StreamBufferInstance {
public BufferArrayGL vertexArray = null;
public BufferGL vertexBuffer = null;
protected int vertexBufferSize = 0;
public boolean bindQuad16 = false;
public boolean bindQuad32 = false;
public BufferArrayGL getVertexArray() {
return vertexArray;
}
public BufferGL getVertexBuffer() {
return vertexBuffer;
}
}
public static interface IStreamBufferInitializer {
void initialize(BufferArrayGL vertexArray, BufferGL vertexBuffer);
}
public StreamBuffer(int initialSize, int initialCount, int maxCount, IStreamBufferInitializer initializer) {
this.buffers = new StreamBufferInstance[initialCount];
for(int i = 0; i < this.buffers.length; ++i) {
this.buffers[i] = new StreamBufferInstance();
}
this.initialSize = initialSize;
this.initialCount = initialCount;
this.maxCount = maxCount;
this.initializer = initializer;
}
public StreamBufferInstance getBuffer(int requiredMemory) {
StreamBufferInstance next = buffers[(currentBufferId++) % buffers.length];
if(next.vertexBuffer == null) {
next.vertexBuffer = _wglCreateBuffer();
}
if(next.vertexArray == null) {
next.vertexArray = _wglCreateVertexArray();
initializer.initialize(next.vertexArray, next.vertexBuffer);
}
if(next.vertexBufferSize < requiredMemory) {
int newSize = (requiredMemory & 0xFFFFF000) + 0x2000;
_wglBindBuffer(_wGL_ARRAY_BUFFER, next.vertexBuffer);
_wglBufferData00(_wGL_ARRAY_BUFFER, newSize, _wGL_STREAM_DRAW);
next.vertexBufferSize = newSize;
}
return next;
}
public void optimize() {
overflowCounter += currentBufferId - buffers.length;
if(overflowCounter < -25) {
int newCount = buffers.length - 1 + ((overflowCounter + 25) / 5);
if(newCount < initialCount) {
newCount = initialCount;
}
if(newCount < buffers.length) {
StreamBufferInstance[] newArray = new StreamBufferInstance[newCount];
for(int i = 0; i < buffers.length; ++i) {
if(i < newArray.length) {
newArray[i] = buffers[i];
}else {
if(buffers[i].vertexArray != null) {
_wglDeleteVertexArray(buffers[i].vertexArray);
}
if(buffers[i].vertexBuffer != null) {
_wglDeleteBuffer(buffers[i].vertexBuffer);
}
}
}
buffers = newArray;
}
overflowCounter = 0;
}else if(overflowCounter > 15) {
int newCount = buffers.length + 1 + ((overflowCounter - 15) / 5);
if(newCount > maxCount) {
newCount = maxCount;
}
if(newCount > buffers.length) {
StreamBufferInstance[] newArray = new StreamBufferInstance[newCount];
for(int i = 0; i < newArray.length; ++i) {
if(i < buffers.length) {
newArray[i] = buffers[i];
}else {
newArray[i] = new StreamBufferInstance();
}
}
buffers = newArray;
}
overflowCounter = 0;
}
currentBufferId = 0;
}
public void destroy() {
for(int i = 0; i < buffers.length; ++i) {
StreamBufferInstance next = buffers[i];
if(next.vertexArray != null) {
_wglDeleteVertexArray(next.vertexArray);
}
if(next.vertexBuffer != null) {
_wglDeleteBuffer(next.vertexBuffer);
}
}
buffers = new StreamBufferInstance[initialCount];
for(int i = 0; i < buffers.length; ++i) {
buffers[i] = new StreamBufferInstance();
}
}
}

View File

@ -15,6 +15,8 @@ import net.minecraft.src.GLAllocation;
import net.minecraft.src.Vec3D;
import net.PeytonPlayz585.glemu.vector.*;
import static net.PeytonPlayz585.glemu.StreamBuffer.StreamBufferInstance;
public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
public static final int GL_ZERO = RealOpenGLEnums.GL_ZERO;
@ -547,7 +549,17 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
public static final void glBlendFunc(int p1, int p2) {
fogPremultiply = (p1 == GL_ONE && p2 == GL_ONE_MINUS_SRC_ALPHA);
_wglBlendFunc(p1, p2);
if(overlayFBOBlending) {
_wglBlendFuncSeparate(p1, p2, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
}else {
_wglBlendFunc(p1, p2);
}
}
private static boolean overlayFBOBlending = false;
public static final void enableOverlayFramebufferBlending(boolean en) {
overlayFBOBlending = en;
}
public static final void glBlendFuncSeparate(int p1, int p2, int p3, int p4) {
@ -567,6 +579,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
TextureGL t = texObjects.get(p2);
_wglBindTexture(_wGL_TEXTURE_2D, t);
}
public static final void glBindTexture(int p1, TextureGL p2) {
_wglBindTexture(_wGL_TEXTURE_2D, p2);
}
public static final void glCopyTexSubImage2D(int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8) {
_wglCopyTexSubImage2D(_wGL_TEXTURE_2D, p2, p3, p4, p5, p6, p7, p8);
@ -671,6 +687,18 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
}
}
}
public static final void flushDisplayList(int p1) {
DisplayList d = displayListsInitialized.get(p1);
if (d != null) {
if (d.glbuffer != null) {
_wglDeleteBuffer(d.glbuffer);
_wglDeleteVertexArray(d.glarray);
d.glbuffer = null;
d.glarray = null;
}
}
}
public static final void glColor3f(float p1, float p2, float p3) {
colorR = p1;
@ -836,13 +864,15 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
System.err.println("only GL_QUADS supported in a display list");
}
} else {
bytesUploaded += _wArrayByteLength(buffer);
int bl = _wArrayByteLength(buffer);
bytesUploaded += bl;
vertexDrawn += p3;
bindTheShader();
_wglBindVertexArray0(shader.genericArray);
_wglBindBuffer(_wGL_ARRAY_BUFFER, shader.genericBuffer);
StreamBufferInstance sb = shader.streamBuffer.getBuffer(bl);
_wglBindVertexArray0(sb.vertexArray);
_wglBindBuffer(_wGL_ARRAY_BUFFER, sb.vertexBuffer);
if (!shader.bufferIsInitialized) {
shader.bufferIsInitialized = true;
_wglBufferData(_wGL_ARRAY_BUFFER, blankUploadArray, _wGL_DYNAMIC_DRAW);
@ -1178,6 +1208,10 @@ public class EaglerAdapterGL30 extends EaglerAdapterImpl2 {
return "Unknown Error";
}
}
public static final void optimize() {
FixedFunctionShader.optimize();
}
private static long lastBandwidthReset = 0l;
private static int lastBandwidth = 0;

View File

@ -1,43 +1,55 @@
package net.lax1dude.eaglercraft;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.IntBuffer;
public class EaglerImage {
public final int[] data;
public final int w;
public final int h;
public final boolean alpha;
public final IntBuffer data;
public final int w;
public final int h;
public final boolean alpha;
private final int wh;
public EaglerImage(int pw, int ph, boolean palpha) {
this.w = pw;
this.h = ph;
this.alpha = palpha;
this.data = new int[pw * ph];
}
public EaglerImage(int pw, int ph, boolean palpha) {
this.w = pw;
this.h = ph;
this.alpha = palpha;
this.data = IntBuffer.allocate(pw * ph);
this.wh = pw * ph;
}
public EaglerImage(int[] pdata, int pw, int ph, boolean palpha) {
if (pdata.length != pw * ph) {
throw new IllegalArgumentException("array size does not equal image size");
}
this.w = pw;
this.h = ph;
this.alpha = palpha;
if (!palpha) {
for (int i = 0; i < pdata.length; ++i) {
pdata[i] = pdata[i] | 0xFF000000;
}
}
this.data = pdata;
}
public EaglerImage(IntBuffer pdata, int pw, int ph, boolean palpha) {
if (pdata.capacity() != pw * ph) {
throw new IllegalArgumentException("buffer capacity does not equal image size");
}
w = pw;
h = ph;
alpha = palpha;
wh = pw * ph;
if (!alpha) {
for (int i = 0; i < wh; ++i) {
pdata.put(i, pdata.get(i) | 0xFF000000);
}
pdata.rewind();
}
data = pdata;
}
public EaglerImage getSubImage(int x, int y, int pw, int ph) {
int[] img = new int[pw * ph];
for (int i = 0; i < ph; ++i) {
System.arraycopy(data, (i + y) * this.w + x, img, i * pw, pw);
}
return new EaglerImage(img, pw, ph, alpha);
}
public EaglerImage getSubImage(int x, int y, int pw, int ph) {
int start = y * w + x;
IntBuffer subBuffer = data.slice();
subBuffer.position(start);
subBuffer.limit(start + pw * ph);
int[] temp = new int[pw * ph];
subBuffer.get(temp);
IntBuffer newBuffer = IntBuffer.wrap(temp);
return new EaglerImage(newBuffer, pw, ph, alpha);
}
public int[] data() {
int[] array = new int[wh];
data.rewind();
data.get(array);
return array;
}
}

View File

@ -106,6 +106,8 @@ public class Minecraft implements Runnable {
long field_6287_N = System.currentTimeMillis();
private int field_6300_ab = 0;
private static Minecraft mc;
public static int debugFPS;
public Minecraft() {
new ThreadSleepForever(this, "Timer hack thread");
@ -190,6 +192,7 @@ public class Minecraft implements Runnable {
GL11.glAlphaFunc(516, 0.1F);
GL11.glFlush();
GL11.updateDisplay();
GL11.optimize();
}
public void func_6274_a(int var1, int var2, int var3, int var4, int var5, int var6) {
@ -345,11 +348,14 @@ public class Minecraft implements Runnable {
}
this.checkGLError("Post render");
GL11.optimize();
++var3;
for(this.field_6316_m = true && this.currentScreen != null && this.currentScreen.doesGuiPauseGame(); System.currentTimeMillis() >= var1 + 1000L; var3 = 0) {
for(this.field_6316_m = true && this.currentScreen != null && this.currentScreen.doesGuiPauseGame(); System.currentTimeMillis() >= var1 + 1000L;) {
this.field_6292_I = var3 + " fps, " + WorldRenderer.field_1762_b + " chunk updates";
WorldRenderer.field_1762_b = 0;
debugFPS = var3;
var3 = 0;
var1 += 1000L;
}
}

View File

@ -7,7 +7,7 @@ public class ColorizerFoliage {
public static int func_4146_a(double var0, double var2) {
if(field_6529_a == null) {
field_6529_a = GL11.loadPNG(GL11.loadResourceBytes("/misc/foliagecolor.png")).data;
field_6529_a = GL11.loadPNG(GL11.loadResourceBytes("/misc/foliagecolor.png")).data();
}
var2 *= var0;
int var4 = (int)((1.0D - var0) * 255.0D);

View File

@ -7,7 +7,7 @@ public class ColorizerGrass {
public static int func_4147_a(double var0, double var2) {
if(field_6540_a == null) {
field_6540_a = GL11.loadPNG(GL11.loadResourceBytes("/misc/grasscolor.png")).data;
field_6540_a = GL11.loadPNG(GL11.loadResourceBytes("/misc/grasscolor.png")).data();
}
var2 *= var0;
int var4 = (int)((1.0D - var0) * 255.0D);

View File

@ -4,6 +4,7 @@ import java.nio.FloatBuffer;
import java.util.List;
import java.util.Random;
import net.PeytonPlayz585.glemu.GameOverlayFramebuffer;
import net.PeytonPlayz585.input.Keyboard;
import net.PeytonPlayz585.input.Mouse;
import net.PeytonPlayz585.opengl.GL11;
@ -26,9 +27,12 @@ public class EntityRenderer {
float field_4268_g;
private float field_1382_n;
private float field_1381_o;
private GameOverlayFramebuffer overlayFramebuffer;
public EntityRenderer(Minecraft var1) {
this.mc = var1;
this.overlayFramebuffer = new GameOverlayFramebuffer();
this.field_1395_a = new ItemRenderer(var1);
}
@ -293,7 +297,43 @@ public class EntityRenderer {
if(this.mc.theWorld != null) {
this.func_4134_c(var1);
if(!(Keyboard.getEventKey() == 33 && Keyboard.isKeyDown(2))) {
this.mc.ingameGUI.renderGameOverlay(var1, this.mc.currentScreen != null, var10, var11);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
long framebufferAge = this.overlayFramebuffer.getAge();
if(framebufferAge == -1l || framebufferAge > (Minecraft.debugFPS < 25 ? 125l : 75l)) {
this.overlayFramebuffer.beginRender(mc.displayWidth, mc.displayHeight);
GL11.glColorMask(true, true, true, true);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.enableOverlayFramebufferBlending(true);
this.mc.ingameGUI.renderGameOverlay(var1, this.mc.currentScreen != null, var10, var11);
GL11.enableOverlayFramebufferBlending(false);
this.overlayFramebuffer.endRender();
GL11.glClearColor(this.field_4270_e, this.field_4269_f, this.field_4268_g, 0.0F);
}
this.func_905_b();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
if (Minecraft.getMinecraft().gameSettings.fancyGraphics) {
this.mc.ingameGUI.func_4064_a(this.mc.thePlayer.getEntityBrightness(var1), var8, var9);
}
this.mc.ingameGUI.renderCrossHairs(var8, var9);
this.overlayFramebuffer.bindTexture();
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, (double) var9, -90.0D, 0.0D, 0.0D);
tessellator.addVertexWithUV((double) var8, (double) var9, -90.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV((double) var8, 0.0D, -90.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 1.0D);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_BLEND);
}
} else {
GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);

View File

@ -16,7 +16,7 @@ public class FontRenderer {
EaglerImage bufferedimage = GL11.loadPNG(GL11.loadResourceBytes(s));
int i = bufferedimage.w;
int j = bufferedimage.h;
int ai[] = bufferedimage.data;
int ai[] = bufferedimage.data();
for (int k = 0; k < 256; k++) {
int l = k % 16;
int k1 = k / 16;

View File

@ -32,9 +32,6 @@ public class GuiIngame extends Gui {
FontRenderer var8 = this.mc.fontRenderer;
this.mc.field_9243_r.func_905_b();
GL11.glEnable(GL11.GL_BLEND);
if(this.mc.gameSettings.fancyGraphics) {
this.func_4064_a(this.mc.thePlayer.getEntityBrightness(var1), var6, var7);
}
ItemStack var9 = this.mc.thePlayer.inventory.armorItemInSlot(3);
if(!this.mc.gameSettings.thirdPersonView && var9 != null && var9.itemID == Block.pumpkin.blockID) {
@ -54,9 +51,6 @@ public class GuiIngame extends Gui {
this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var11.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/icons.png"));
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR);
this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16);
GL11.glDisable(GL11.GL_BLEND);
boolean var12 = this.mc.thePlayer.field_9306_bj / 3 % 2 == 1;
if(this.mc.thePlayer.field_9306_bj < 10) {
var12 = false;
@ -236,7 +230,7 @@ public class GuiIngame extends Gui {
GL11.glDisable(GL11.GL_BLEND);
}
private void func_4063_a(int var1, int var2) {
public void func_4063_a(int var1, int var2) {
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
@ -256,17 +250,18 @@ public class GuiIngame extends Gui {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
private void func_4064_a(float var1, int var2, int var3) {
var1 = 1.0F - var1;
if(var1 < 0.0F) {
public void func_4064_a(float var1, int var2, int var3) {
var1 = 1.0F - var1 * 0.5f;
if (var1 < 0.0F) {
var1 = 0.0F;
}
if(var1 > 1.0F) {
if (var1 > 1.0F) {
var1 = 1.0F;
}
this.field_931_c = (float)((double)this.field_931_c + (double)(var1 - this.field_931_c) * 0.01D);
this.field_931_c = (float) ((double) this.field_931_c + (double) (var1 - this.field_931_c) * 0.01D);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE_MINUS_SRC_COLOR);
@ -274,9 +269,9 @@ public class GuiIngame extends Gui {
GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("%blur%/misc/vignette.png"));
Tessellator var4 = Tessellator.instance;
var4.startDrawingQuads();
var4.addVertexWithUV(0.0D, (double)var3, -90.0D, 0.0D, 1.0D);
var4.addVertexWithUV((double)var2, (double)var3, -90.0D, 1.0D, 1.0D);
var4.addVertexWithUV((double)var2, 0.0D, -90.0D, 1.0D, 0.0D);
var4.addVertexWithUV(0.0D, (double) var3, -90.0D, 0.0D, 1.0D);
var4.addVertexWithUV((double) var2, (double) var3, -90.0D, 1.0D, 1.0D);
var4.addVertexWithUV((double) var2, 0.0D, -90.0D, 1.0D, 0.0D);
var4.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D);
var4.draw();
GL11.glDepthMask(true);
@ -410,4 +405,13 @@ public class GuiIngame extends Gui {
return (red << 16) | (green << 8) | blue;
}
public void renderCrossHairs(int w, int h) {
GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/icons.png"));
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR);
this.drawTexturedModalRect(w / 2 - 7, h / 2 - 7, 0, 0, 16, 16);
}
}

View File

@ -18,6 +18,7 @@ public class RenderEngine {
textureNameToImageMap = new HashMap<Integer, EaglerImage>();
singleIntBuffer = GLAllocation.createDirectIntBuffer(1);
imageDataB1 = GLAllocation.createDirectByteBuffer(0x100000);
imageDataB2 = GLAllocation.createDirectByteBuffer(0x100000);
textureList = new ArrayList<TextureFX>();
clampTexture = false;
blurTexture = false;
@ -80,8 +81,9 @@ public class RenderEngine {
public void setupTexture(EaglerImage bufferedimage, int i) {
bindTexture(i);
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, 10241 /* GL_TEXTURE_MIN_FILTER */, 9728 /* GL_NEAREST */);
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, 10240 /* GL_TEXTURE_MAG_FILTER */, 9728 /* GL_NEAREST */);
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, 10241 /* GL_TEXTURE_MIN_FILTER */, GL11.GL_NEAREST_MIPMAP_LINEAR);
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, 10240 /* GL_TEXTURE_MAG_FILTER */, GL11.GL_NEAREST /* GL_LINEAR */);
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, GL11.GL_TEXTURE_MAX_LEVEL, 4);
if (blurTexture) {
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, 10241 /* GL_TEXTURE_MIN_FILTER */, 9729 /* GL_LINEAR */);
GL11.glTexParameteri(3553 /* GL_TEXTURE_2D */, 10240 /* GL_TEXTURE_MAG_FILTER */, 9729 /* GL_LINEAR */);
@ -95,7 +97,7 @@ public class RenderEngine {
}
int j = bufferedimage.w;
int k = bufferedimage.h;
int ai[] = bufferedimage.data;
int ai[] = bufferedimage.data();
byte abyte0[] = new byte[j * k * 4];
for (int l = 0; l < ai.length; l++) {
int j1 = ai[l] >> 24 & 0xff;
@ -120,12 +122,40 @@ public class RenderEngine {
imageDataB1.position(0).limit(abyte0.length);
GL11.glTexImage2D(3553 /* GL_TEXTURE_2D */, 0, 6408 /* GL_RGBA */, j, k, 0, 6408 /* GL_RGBA */,
5121 /* GL_UNSIGNED_BYTE */, imageDataB1);
for (int i1 = 1; i1 <= 4; i1++) {
int k1 = j >> i1 - 1;
int i2 = j >> i1;
int k2 = k >> i1;
imageDataB2.clear();
for (int i3 = 0; i3 < i2; i3++) {
for (int k3 = 0; k3 < k2; k3++) {
int i4 = imageDataB1.getInt((i3 * 2 + 0 + (k3 * 2 + 0) * k1) * 4);
int k4 = imageDataB1.getInt((i3 * 2 + 1 + (k3 * 2 + 0) * k1) * 4);
int l4 = imageDataB1.getInt((i3 * 2 + 1 + (k3 * 2 + 1) * k1) * 4);
int i5 = imageDataB1.getInt((i3 * 2 + 0 + (k3 * 2 + 1) * k1) * 4);
int j5 = averageColor(averageColor(i4, k4), averageColor(l4, i5));
imageDataB2.putInt((i3 + k3 * i2) * 4, j5);
}
}
GL11.glTexImage2D(3553 /* GL_TEXTURE_2D */, i1, 6408 /* GL_RGBA */, i2, k2, 0, 6408 /* GL_RGBA */,
5121 /* GL_UNSIGNED_BYTE */, imageDataB2);
ByteBuffer tmp = imageDataB1;
imageDataB1 = imageDataB2;
imageDataB2 = tmp;
}
}
public void deleteTexture(int i) {
GL11.glDeleteTextures(i);
}
private int averageColor(int i, int j) {
int k = (i & 0xff000000) >> 24 & 0xff;
int l = (j & 0xff000000) >> 24 & 0xff;
return ((k + l >> 1) << 24) + ((i & 0xfefefe) + (j & 0xfefefe) >> 1);
}
public void registerTextureFX(TextureFX texturefx) {
textureList.add(texturefx);
texturefx.func_783_a();
@ -209,6 +239,7 @@ public class RenderEngine {
private HashMap<Integer, EaglerImage> textureNameToImageMap;
public IntBuffer singleIntBuffer;
private ByteBuffer imageDataB1;
private ByteBuffer imageDataB2;
private java.util.List<TextureFX> textureList;
private GameSettings options;
private boolean clampTexture;

View File

@ -492,7 +492,7 @@ public class RenderGlobal implements IWorldAccess {
var11 = (float)var10 * (float)Math.PI * 2.0F / (float)var9;
float var12 = MathHelper.sin(var11);
float var13 = MathHelper.cos(var11);
var14.addVertex((double)(var12 * 120.0F), (double)(var13 * 120.0F), (double)(-var13 * 40.0F * var15[3]));
var14.addVertex((double)(var12 * 120.0F), (double)(var13 * 120.0F), (double)(var13 * 40.0F * var15[3]));
}
var14.draw();
@ -781,7 +781,7 @@ public class RenderGlobal implements IWorldAccess {
var8 = this.worldObj.getBlockId(var2.blockX, var2.blockY, var2.blockZ);
Block var9 = var8 > 0 ? Block.blocksList[var8] : null;
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glPolygonOffset(-3.0F, -3.0F);
GL11.glPolygonOffset(3.0F, 3.0F);
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
var6.startDrawingQuads();
double var10 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var5;

View File

@ -157,7 +157,7 @@ public class TextureCompassFX extends TextureFX {
public TextureCompassFX(Minecraft var1) {
super(Item.compass.getIconIndex(null));
field_1128_f = 1;
this.compassSpriteSheet = GL11.loadPNG(GL11.loadResourceBytes("/gui/items.png")).data;
this.compassSpriteSheet = GL11.loadPNG(GL11.loadResourceBytes("/gui/items.png")).data();
this.compassSpriteSheetLength = compassSpriteSheet.length / 256;
}

View File

@ -15,8 +15,8 @@ public class TextureWatchFX extends TextureFX {
EaglerImage bufferedimage = GL11.loadPNG(GL11.loadResourceBytes("/gui/items.png"));
int i = (field_1126_b % 16) * 16;
int j = (field_1126_b / 16) * 16;
field_4224_h = bufferedimage.getSubImage(i, j, 16, 16).data;
field_4223_i = GL11.loadPNG(GL11.loadResourceBytes("/misc/dial.png")).data;
field_4224_h = bufferedimage.getSubImage(i, j, 16, 16).data();
field_4223_i = GL11.loadPNG(GL11.loadResourceBytes("/misc/dial.png")).data();
}
public void func_783_a() {

View File

@ -158,6 +158,13 @@ public class WorldRenderer {
this.field_1737_F.removeAll(var21);
this.field_1747_A = Chunk.field_1540_a;
this.field_1739_E = true;
if(field_1748_p[0]) {
GL11.flushDisplayList(field_1744_C);
}
if(field_1748_p[1]) {
GL11.flushDisplayList(field_1744_C + 1);
}
}
}
@ -171,6 +178,8 @@ public class WorldRenderer {
public void func_1195_b() {
for(int var1 = 0; var1 < 2; ++var1) {
this.field_1748_p[var1] = true;
GL11.flushDisplayList(field_1744_C);
GL11.flushDisplayList(field_1744_C + 1);
}
this.field_1749_o = false;

View File

@ -52,7 +52,6 @@ public class Client {
private static void run1() {
GL11.canvas.focus();
GL11.canvasBack.focus();
instance.run();
}

View File

@ -26,6 +26,7 @@ import org.teavm.jso.browser.TimerHandler;
import org.teavm.jso.browser.Window;
import org.teavm.jso.canvas.CanvasRenderingContext2D;
import org.teavm.jso.canvas.ImageData;
import org.teavm.jso.dom.css.CSSStyleDeclaration;
import org.teavm.jso.dom.events.Event;
import org.teavm.jso.dom.events.EventListener;
import org.teavm.jso.dom.events.KeyboardEvent;
@ -38,6 +39,7 @@ import org.teavm.jso.dom.html.HTMLElement;
import org.teavm.jso.dom.html.HTMLImageElement;
import org.teavm.jso.dom.html.HTMLInputElement;
import org.teavm.jso.typedarrays.ArrayBuffer;
import org.teavm.jso.typedarrays.DataView;
import org.teavm.jso.typedarrays.Float32Array;
import org.teavm.jso.typedarrays.Int32Array;
import org.teavm.jso.typedarrays.Int8Array;
@ -165,9 +167,10 @@ public class EaglerAdapterImpl2 {
public static HTMLDocument doc = null;
public static HTMLElement parent = null;
public static HTMLCanvasElement canvas = null;
public static CanvasRenderingContext2D canvasContext = null;
public static HTMLCanvasElement canvasBack = null;
public static WebGL2RenderingContext webgl = null;
public static FramebufferGL backBuffer = null;
public static RenderbufferGL backBufferColor = null;
public static RenderbufferGL backBufferDepth = null;
public static Window win = null;
private static byte[] loadedPackage = null;
private static EventListener contextmenu = null;
@ -206,21 +209,24 @@ public class EaglerAdapterImpl2 {
win = Window.current();
doc = win.getDocument();
canvas = (HTMLCanvasElement)doc.createElement("canvas");
width = rootElement.getClientWidth();
height = rootElement.getClientHeight();
double r = win.getDevicePixelRatio();
width = (int)(rootElement.getClientWidth() * r);
height = (int)(rootElement.getClientHeight() * r);
canvas.setWidth(width);
canvas.setHeight(height);
canvasContext = (CanvasRenderingContext2D) canvas.getContext("2d");
canvas.setAttribute("id", "deevis589723589");
rootElement.appendChild(canvas);
canvasBack = (HTMLCanvasElement)doc.createElement("canvas");
canvasBack.setWidth(width);
canvasBack.setHeight(height);
webgl = (WebGL2RenderingContext) canvasBack.getContext("webgl2", youEagler());
CSSStyleDeclaration canvasStyle = canvas.getStyle();
canvasStyle.setProperty("width", "100%");
canvasStyle.setProperty("height", "100%");
canvasStyle.setProperty("image-rendering", "pixelated");
webgl = (WebGL2RenderingContext) canvas.getContext("webgl2", youEagler());
if(webgl == null) {
throw new RuntimeException("WebGL 2.0 is not supported in your browser ("+getUA()+")");
}
setContextVar(webgl);
setupBackBuffer();
resizeBackBuffer(width, height);
webgl.getExtension("EXT_texture_filter_anisotropic");
@ -251,8 +257,9 @@ public class EaglerAdapterImpl2 {
});
canvas.addEventListener("mousemove", mousemove = new EventListener<MouseEvent>() {
public void handleEvent(MouseEvent evt) {
mouseX = getOffsetX(evt);
mouseY = canvas.getClientHeight() - getOffsetY(evt);
double r = win.getDevicePixelRatio();
mouseX = (int)(getOffsetX(evt) * r);
mouseY = (int)((canvas.getClientHeight() - getOffsetY(evt)) * r);
mouseDX += evt.getMovementX();
mouseDY += -evt.getMovementY();
evt.preventDefault();
@ -356,7 +363,7 @@ public class EaglerAdapterImpl2 {
private static boolean enableRepeatEvents = false;
private static boolean isWindowFocused = true;
@JSBody(params = { }, script = "return {antialias: false, depth: true, powerPreference: \"high-performance\", desynchronized: false, preserveDrawingBuffer: false, premultipliedAlpha: false, alpha: false};")
@JSBody(params = { }, script = "return {antialias: false, depth: true, powerPreference: \"high-performance\", desynchronized: true, preserveDrawingBuffer: false, premultipliedAlpha: false, alpha: false};")
public static native JSObject youEagler();
public static final int _wGL_TEXTURE_2D = TEXTURE_2D;
@ -416,6 +423,7 @@ public class EaglerAdapterImpl2 {
public static final int _wGL_ELEMENT_ARRAY_BUFFER = ELEMENT_ARRAY_BUFFER;
public static final int _wGL_STATIC_DRAW = STATIC_DRAW;
public static final int _wGL_DYNAMIC_DRAW = DYNAMIC_DRAW;
public static final int _wGL_STREAM_DRAW = STREAM_DRAW;
public static final int _wGL_INVALID_ENUM = INVALID_ENUM;
public static final int _wGL_INVALID_VALUE= INVALID_VALUE;
public static final int _wGL_INVALID_OPERATION = INVALID_OPERATION;
@ -681,6 +689,9 @@ public class EaglerAdapterImpl2 {
Uint8Array data = Uint8Array.create(uploadBuffer.getBuffer(), 0, len*4);
webgl.bufferData(p1, data, p3);
}
public static final void _wglBufferData00(int p1, long len, int p3) {
webgl.bufferData(p1, (int)len, p3);
}
public static final void _wglBufferSubData0(int p1, int p2, IntBuffer p3) {
int len = p3.remaining();
Int32Array deevis = Int32Array.create(uploadBuffer.getBuffer());
@ -773,7 +784,7 @@ public class EaglerAdapterImpl2 {
webgl.vertexAttribPointer(p1, p2, p3, p4, p5, p6);
}
public static final void _wglBindFramebuffer(int p1, FramebufferGL p2) {
webgl.bindFramebuffer(p1, p2 == null ? null : p2.obj);
webgl.bindFramebuffer(p1, p2 == null ? backBuffer.obj : p2.obj);
}
public static final FramebufferGL _wglCreateFramebuffer() {
return new FramebufferGL(webgl.createFramebuffer());
@ -784,6 +795,9 @@ public class EaglerAdapterImpl2 {
public static final void _wglFramebufferTexture2D(int p1, TextureGL p2) {
webgl.framebufferTexture2D(FRAMEBUFFER, p1, TEXTURE_2D, p2 == null ? null : p2.obj, 0);
}
public static final void _wglFramebufferTexture2D(int p1, TextureGL p2, int p3) {
webgl.framebufferTexture2D(FRAMEBUFFER, p1, TEXTURE_2D, p2 == null ? null : p2.obj, p3);
}
public static final QueryGL _wglCreateQuery() {
return new QueryGL(webgl.createQuery());
}
@ -866,6 +880,9 @@ public class EaglerAdapterImpl2 {
Uint8Array.create(arr).set(data);
return loadPNG0(arr);
}
@JSBody(params = { "cccc", "ennn" }, script = "cccc.imageSmoothingEnabled = ennn;")
private static native void setImageSmoothingMode(CanvasRenderingContext2D cc, boolean en);
@Async
private static native EaglerImage loadPNG0(ArrayBuffer data);
@ -885,6 +902,7 @@ public class EaglerAdapterImpl2 {
}
if(imageLoadContext == null) {
imageLoadContext = (CanvasRenderingContext2D) imageLoadCanvas.getContext("2d");
setImageSmoothingMode(imageLoadContext, false);
}
imageLoadContext.clearRect(0, 0, toLoad.getWidth(), toLoad.getHeight());
imageLoadContext.drawImage(toLoad, 0, 0, toLoad.getWidth(), toLoad.getHeight());
@ -896,11 +914,14 @@ public class EaglerAdapterImpl2 {
ret.complete(null);
return;
}
DataView dv = DataView.create(pxls.getBuffer());
int[] pixels = new int[totalPixels];
for(int i = 0; i < pixels.length; ++i) {
pixels[i] = (pxls.get(i * 4) << 16) | (pxls.get(i * 4 + 1) << 8) | pxls.get(i * 4 + 2) | (pxls.get(i * 4 + 3) << 24);
for(int i = 0, j; i < pixels.length; ++i) {
j = dv.getUint32(i << 2, false);
pixels[i] = ((j >> 8) & 0xFFFFFF) | ((j & 0xFF) << 24);
}
ret.complete(new EaglerImage(pixels, pxlsDat.getWidth(), pxlsDat.getHeight(), true));
IntBuffer buffer = IntBuffer.wrap(pixels);
ret.complete(new EaglerImage(buffer, pxlsDat.getWidth(), pxlsDat.getHeight(), true));
}
});
toLoad.addEventListener("error", new EventListener<Event>() {
@ -1001,10 +1022,10 @@ public class EaglerAdapterImpl2 {
return mouseY;
}
public static final int mouseGetEventX() {
return currentEvent == null ? -1 : currentEvent.getClientX();
return currentEvent == null ? -1 : (int)(currentEvent.getClientX() * win.getDevicePixelRatio());
}
public static final int mouseGetEventY() {
return currentEvent == null ? -1 : canvas.getClientHeight() - currentEvent.getClientY();
return currentEvent == null ? -1 : (int)((canvas.getClientHeight() - currentEvent.getClientY()) * win.getDevicePixelRatio());
}
public static final boolean keysNext() {
if(unpressCTRL) { //un-press ctrl after copy/paste permission
@ -1072,28 +1093,51 @@ public class EaglerAdapterImpl2 {
return isKeyDown(mod) && p1 >= 59 && p1 <= 67 & isKeyDown(2 + (p1 - 59));
}
@JSBody(params = { "obj" }, script = "if(obj.commit) obj.commit();")
private static native int commitContext(JSObject obj);
public static final void updateDisplay() {
commitContext(webgl);
canvasContext.drawImage(canvasBack, 0d, 0d, canvas.getWidth(), canvas.getHeight());
int ww = canvas.getClientWidth();
int hh = canvas.getClientHeight();
if(ww != width || hh != height) {
width = ww;
height = hh;
canvasBack.setWidth(ww);
canvasBack.setHeight(hh);
double r = win.getDevicePixelRatio();
int w = (int)(canvas.getClientWidth() * r);
int h = (int)(canvas.getClientHeight() * r);
if(canvas.getWidth() != w) {
canvas.setWidth(w);
}
if(canvas.getHeight() != h) {
canvas.setHeight(h);
}
webgl.bindFramebuffer(FRAMEBUFFER, null);
webgl.bindFramebuffer(READ_FRAMEBUFFER, backBuffer.obj);
webgl.bindFramebuffer(DRAW_FRAMEBUFFER, null);
webgl.blitFramebuffer(0, 0, backBufferWidth, backBufferHeight, 0, 0, w, h, COLOR_BUFFER_BIT, NEAREST);
webgl.bindFramebuffer(FRAMEBUFFER, backBuffer.obj);
resizeBackBuffer(w, h);
try {
Thread.sleep(1l);
} catch (InterruptedException e) {
;
}
}
public static final void setupBackBuffer() {
backBuffer = _wglCreateFramebuffer();
_wglBindFramebuffer(_wGL_FRAMEBUFFER, null);
backBufferColor = _wglCreateRenderBuffer();
_wglBindRenderbuffer(backBufferColor);
_wglFramebufferRenderbuffer(_wGL_COLOR_ATTACHMENT0, backBufferColor);
backBufferDepth = _wglCreateRenderBuffer();
_wglBindRenderbuffer(backBufferDepth);
_wglFramebufferRenderbuffer(_wGL_DEPTH_ATTACHMENT, backBufferDepth);
}
private static int backBufferWidth = -1;
private static int backBufferHeight = -1;
public static final void resizeBackBuffer(int w, int h) {
if(w != backBufferWidth || h != backBufferHeight) {
_wglBindRenderbuffer(backBufferColor);
_wglRenderbufferStorage(_wGL_RGBA8, w, h);
_wglBindRenderbuffer(backBufferDepth);
_wglRenderbufferStorage(_wGL_DEPTH_COMPONENT32F, w, h);
backBufferWidth = w;
backBufferHeight = h;
}
}
public static final void setVSyncEnabled(boolean p1) {
}
@ -1127,22 +1171,10 @@ public class EaglerAdapterImpl2 {
return win.getScreen().getAvailHeight();
}
public static final int getCanvasWidth() {
int w = parent.getClientWidth();
if(w != width) {
canvas.setWidth(w);
canvasBack.setWidth(w);
width = w;
}
return w;
return (int)(parent.getClientWidth() * win.getDevicePixelRatio());
}
public static final int getCanvasHeight() {
int h = parent.getClientHeight();
if(h != height) {
canvas.setHeight(h);
canvasBack.setHeight(h);
height = h;
}
return h;
return (int)(parent.getClientHeight() * win.getDevicePixelRatio());
}
public static final void setDisplaySize(int x, int y) {

View File

@ -233,8 +233,8 @@ public class Tessellator {
* integer).
*/
public void setColorOpaque_I(int par1) {
int var2 = par1 >> 16 & 255;
int var3 = par1 >> 8 & 255;
int var2 = par1 >>> 16 & 255;
int var3 = par1 >>> 8 & 255;
int var4 = par1 & 255;
this.setColorOpaque(var2, var3, var4);
}
@ -244,8 +244,8 @@ public class Tessellator {
* values.
*/
public void setColorRGBA_I(int par1, int par2) {
int var3 = par1 >> 16 & 255;
int var4 = par1 >> 8 & 255;
int var3 = par1 >>> 16 & 255;
int var4 = par1 >>> 8 & 255;
int var5 = par1 & 255;
this.setColorRGBA(var3, var4, var5, par2);
}
@ -262,10 +262,10 @@ public class Tessellator {
*/
public void setNormal(float par1, float par2, float par3) {
this.hasNormals = true;
float len = (float) Math.sqrt(par1 * par1 + par2 * par2 + par3 * par3);
int var4 = (int)((par1 / len) * 127.0F) + 127;
int var5 = (int)((par2 / len) * 127.0F) + 127;
int var6 = (int)((par3 / len) * 127.0F) + 127;
//float len = (float) Math.sqrt(par1 * par1 + par2 * par2 + par3 * par3);
int var4 = (int)((par1) * 127.0F) + 127;
int var5 = (int)((par2) * 127.0F) + 127;
int var6 = (int)((par3) * 127.0F) + 127;
this.normal = var4 & 255 | (var5 & 255) << 8 | (var6 & 255) << 16;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.