mirror of
https://github.com/Eaglercraft-Archive/Eaglercraftx-1.8.8-src.git
synced 2025-07-16 20:29:57 -05:00
Update #53 - Improved FPS, reduced WebGL context loss crashes
This commit is contained in:
@ -22,6 +22,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.teavm.interop.Address;
|
||||
import org.teavm.interop.Import;
|
||||
import org.teavm.jso.JSBody;
|
||||
import org.teavm.jso.JSObject;
|
||||
@ -41,6 +42,7 @@ import org.teavm.jso.webaudio.PannerNode;
|
||||
import net.lax1dude.eaglercraft.v1_8.EagRuntime;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.MemoryStack;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayCopy;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.BetterJSStringConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.JOrbisAudioBufferDecoder;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.WASMGCClientConfigAdapter;
|
||||
@ -100,7 +102,10 @@ public class PlatformAudio {
|
||||
if (silenceFile != null) {
|
||||
MemoryStack.push();
|
||||
try {
|
||||
initKeepAliveHack(WASMGCDirectArrayConverter.byteArrayToStackU8Array(silenceFile));
|
||||
int len = silenceFile.length;
|
||||
Address addr = MemoryStack.malloc(len);
|
||||
WASMGCDirectArrayCopy.memcpy(addr, silenceFile, 0, len);
|
||||
initKeepAliveHack(addr, len);
|
||||
}finally {
|
||||
MemoryStack.pop();
|
||||
}
|
||||
@ -112,7 +117,7 @@ public class PlatformAudio {
|
||||
private static native AudioContext getContext();
|
||||
|
||||
@Import(module = "platformAudio", name = "initKeepAliveHack")
|
||||
private static native void initKeepAliveHack(Uint8Array array);
|
||||
private static native void initKeepAliveHack(Address addr, int length);
|
||||
|
||||
protected static class BrowserAudioResource implements IAudioResource {
|
||||
|
||||
|
@ -199,7 +199,7 @@ public class PlatformOpenGL {
|
||||
@Import(module = "platformOpenGL", name = "glReadPixels")
|
||||
static native void _wglReadPixelsN(int x, int y, int width, int height, int format, int type, ArrayBufferView array);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glReadPixels0")
|
||||
@Import(module = "platformOpenGL", name = "glReadPixels")
|
||||
static native void _wglReadPixelsN(int x, int y, int width, int height, int format, int type, ArrayBufferView array, int offset);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glPolygonOffset")
|
||||
@ -367,7 +367,7 @@ public class PlatformOpenGL {
|
||||
@Import(module = "platformOpenGL", name = "glBufferData")
|
||||
static native void _wglBufferDataN(int target, ArrayBufferView typedArray, int usage);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glBufferData0")
|
||||
@Import(module = "platformOpenGL", name = "glBufferData")
|
||||
static native void _wglBufferDataN(int target, ArrayBufferView typedArray, int usage, int srcOffset, int length);
|
||||
|
||||
public static void _wglBufferSubData(int target, int dstOffset, ByteBuffer buffer) {
|
||||
@ -397,7 +397,7 @@ public class PlatformOpenGL {
|
||||
@Import(module = "platformOpenGL", name = "glBufferSubData")
|
||||
static native void _wglBufferSubDataN(int target, int dstOffset, ArrayBufferView typedArray);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glBufferSubData0")
|
||||
@Import(module = "platformOpenGL", name = "glBufferSubData")
|
||||
static native void _wglBufferSubDataN(int target, int dstOffset, ArrayBufferView typedArray, int srcOffset, int length);
|
||||
|
||||
public static void _wglBindVertexArray(IVertexArrayGL objId) {
|
||||
@ -450,7 +450,7 @@ public class PlatformOpenGL {
|
||||
static native void _wglTexImage3DN(int target, int level, int internalFormat, int width, int height, int depth,
|
||||
int border, int format, int type, ArrayBufferView typedArray);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glTexImage3D0")
|
||||
@Import(module = "platformOpenGL", name = "glTexImage3D")
|
||||
static native void _wglTexImage3DN(int target, int level, int internalFormat, int width, int height, int depth,
|
||||
int border, int format, int type, ArrayBufferView typedArray, int offset);
|
||||
|
||||
@ -513,7 +513,7 @@ public class PlatformOpenGL {
|
||||
static native void _wglTexImage2DN(int target, int level, int internalFormat, int width, int height, int border,
|
||||
int format, int type, ArrayBufferView typedArray);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glTexImage2D0")
|
||||
@Import(module = "platformOpenGL", name = "glTexImage2D")
|
||||
static native void _wglTexImage2DN(int target, int level, int internalFormat, int width, int height, int border,
|
||||
int format, int type, ArrayBufferView typedArray, int offset);
|
||||
|
||||
@ -565,7 +565,7 @@ public class PlatformOpenGL {
|
||||
static native void _wglTexSubImage2D(int target, int level, int offsetx, int offsety, int width, int height,
|
||||
int format, int type, ArrayBufferView typedArray);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glTexSubImage2D0")
|
||||
@Import(module = "platformOpenGL", name = "glTexSubImage2D")
|
||||
static native void _wglTexSubImage2D(int target, int level, int offsetx, int offsety, int width, int height,
|
||||
int format, int type, ArrayBufferView typedArray, int offset);
|
||||
|
||||
@ -658,6 +658,9 @@ public class PlatformOpenGL {
|
||||
@Import(module = "platformOpenGL", name = "glDrawElements")
|
||||
public static native void _wglDrawElements(int mode, int count, int type, int offset);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glDrawRangeElements")
|
||||
public static native void _wglDrawRangeElements(int mode, int start, int end, int count, int type, int offset);
|
||||
|
||||
@Import(module = "platformOpenGL", name = "glDrawArraysInstanced")
|
||||
public static native void _wglDrawArraysInstanced(int mode, int first, int count, int instanced);
|
||||
|
||||
|
@ -21,6 +21,7 @@ import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.teavm.interop.Address;
|
||||
import org.teavm.interop.Import;
|
||||
import org.teavm.jso.JSBody;
|
||||
import org.teavm.jso.JSObject;
|
||||
@ -32,6 +33,7 @@ import org.teavm.jso.typedarrays.Uint8Array;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime.JSEagRuntimeEvent;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.MemoryStack;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayCopy;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.BetterJSStringConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
|
||||
import net.lax1dude.eaglercraft.v1_8.log4j.Logger;
|
||||
@ -226,8 +228,10 @@ public class PlatformWebView {
|
||||
}else if(packet.type == SPacketWebViewMessageV4EAG.TYPE_BINARY) {
|
||||
MemoryStack.push();
|
||||
try {
|
||||
sendBinaryMessage(BetterJSStringConverter.stringToJS(currentMessageChannelName),
|
||||
WASMGCDirectArrayConverter.byteArrayToStackU8Array(packet.data));
|
||||
int len = packet.data.length;
|
||||
Address addr = MemoryStack.malloc(len);
|
||||
WASMGCDirectArrayCopy.memcpy(addr, packet.data, 0, len);
|
||||
sendBinaryMessage(BetterJSStringConverter.stringToJS(currentMessageChannelName), addr, len);
|
||||
}finally {
|
||||
MemoryStack.pop();
|
||||
}
|
||||
@ -241,7 +245,7 @@ public class PlatformWebView {
|
||||
private static native void sendStringMessage(JSString ch, JSString str);
|
||||
|
||||
@Import(module = "platformWebView", name = "sendBinaryMessage")
|
||||
private static native void sendBinaryMessage(JSString ch, Uint8Array bin);
|
||||
private static native void sendBinaryMessage(JSString ch, Address addr, int length);
|
||||
|
||||
private static void sendMessageToServer(String channelName, int type, byte[] data) {
|
||||
if(channelName.length() > 255) {
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm;
|
||||
|
||||
import org.teavm.interop.Address;
|
||||
import org.teavm.interop.Import;
|
||||
import org.teavm.jso.JSObject;
|
||||
import org.teavm.jso.JSProperty;
|
||||
@ -124,16 +125,14 @@ public class IndexedDBFilesystem implements IEaglerFilesystem {
|
||||
|
||||
@Override
|
||||
public void eaglerWrite(String pathName, ByteBuffer data) {
|
||||
int len = data.remaining();
|
||||
Uint8Array arr = new Uint8Array(len);
|
||||
arr.set(WASMGCBufferAllocator.getByteBufferView(data));
|
||||
if(!eaglerWrite(database, BetterJSStringConverter.stringToJS(pathName), arr.getBuffer())) {
|
||||
throw new EaglerFileSystemException("Failed to write " + len + " byte file to indexeddb table: " + pathName);
|
||||
if(!eaglerWrite(database, BetterJSStringConverter.stringToJS(pathName),
|
||||
WASMGCBufferAllocator.getByteBufferAddress(data), data.remaining())) {
|
||||
throw new EaglerFileSystemException("Failed to write " + data.remaining() + " byte file to indexeddb table: " + pathName);
|
||||
}
|
||||
}
|
||||
|
||||
@Import(module = "platformFilesystem", name = "eaglerWrite")
|
||||
private static native boolean eaglerWrite(IDBDatabase database, JSString pathName, ArrayBuffer arr);
|
||||
private static native boolean eaglerWrite(IDBDatabase database, JSString pathName, Address addr, int length);
|
||||
|
||||
@Override
|
||||
public boolean eaglerExists(String pathName) {
|
||||
|
@ -21,7 +21,6 @@ import java.util.List;
|
||||
|
||||
import org.teavm.jso.JSObject;
|
||||
import org.teavm.jso.JSProperty;
|
||||
import org.teavm.jso.core.JSString;
|
||||
import org.teavm.jso.typedarrays.Uint8Array;
|
||||
|
||||
import net.lax1dude.eaglercraft.v1_8.EagUtils;
|
||||
|
@ -21,14 +21,14 @@ import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.teavm.interop.Address;
|
||||
import org.teavm.interop.Import;
|
||||
import org.teavm.jso.core.JSString;
|
||||
import org.teavm.jso.typedarrays.Uint8Array;
|
||||
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.MemoryStack;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayCopy;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.BetterJSStringConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.WASMGCClientConfigAdapter;
|
||||
import net.lax1dude.eaglercraft.v1_8.log4j.LogManager;
|
||||
@ -71,8 +71,10 @@ public class ClientPlatformSingleplayer {
|
||||
}else {
|
||||
MemoryStack.push();
|
||||
try {
|
||||
sendPacket0(BetterJSStringConverter.stringToJS(packet.channel),
|
||||
WASMGCDirectArrayConverter.byteArrayToStackU8Array(packet.contents));
|
||||
int len = packet.contents.length;
|
||||
Address addr = MemoryStack.malloc(len);
|
||||
WASMGCDirectArrayCopy.memcpy(addr, packet.contents, 0, len);
|
||||
sendPacket0(BetterJSStringConverter.stringToJS(packet.channel), addr, len);
|
||||
} finally {
|
||||
MemoryStack.pop();
|
||||
}
|
||||
@ -80,7 +82,7 @@ public class ClientPlatformSingleplayer {
|
||||
}
|
||||
|
||||
@Import(module = "clientPlatformSingleplayer", name = "sendPacket")
|
||||
private static native void sendPacket0(JSString channel, Uint8Array arr);
|
||||
private static native void sendPacket0(JSString channel, Address addr, int length);
|
||||
|
||||
public static List<IPCPacketData> recieveAllPacket() {
|
||||
if(isSingleThreadMode) {
|
||||
|
@ -22,11 +22,11 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.teavm.interop.Address;
|
||||
import org.teavm.interop.Import;
|
||||
import org.teavm.jso.JSFunctor;
|
||||
import org.teavm.jso.JSObject;
|
||||
import org.teavm.jso.core.JSString;
|
||||
import org.teavm.jso.typedarrays.Uint8Array;
|
||||
|
||||
import net.lax1dude.eaglercraft.v1_8.Filesystem;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.IClientConfigAdapter;
|
||||
@ -34,7 +34,7 @@ import net.lax1dude.eaglercraft.v1_8.internal.IEaglerFilesystem;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.IPCPacketData;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.PlatformRuntime;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.MemoryStack;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.buffer.WASMGCDirectArrayCopy;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.vfs2.VFile2;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.BetterJSStringConverter;
|
||||
import net.lax1dude.eaglercraft.v1_8.internal.wasm_gc_teavm.WASMGCClientConfigAdapter;
|
||||
@ -74,8 +74,10 @@ public class ServerPlatformSingleplayer {
|
||||
}else {
|
||||
MemoryStack.push();
|
||||
try {
|
||||
sendPacket0(BetterJSStringConverter.stringToJS(packet.channel),
|
||||
WASMGCDirectArrayConverter.byteArrayToStackU8Array(packet.contents));
|
||||
int len = packet.contents.length;
|
||||
Address addr = MemoryStack.malloc(len);
|
||||
WASMGCDirectArrayCopy.memcpy(addr, packet.contents, 0, len);
|
||||
sendPacket0(BetterJSStringConverter.stringToJS(packet.channel), addr, len);
|
||||
} finally {
|
||||
MemoryStack.pop();
|
||||
}
|
||||
@ -83,7 +85,7 @@ public class ServerPlatformSingleplayer {
|
||||
}
|
||||
|
||||
@Import(module = "serverPlatformSingleplayer", name = "sendPacket")
|
||||
private static native void sendPacket0(JSString channel, Uint8Array arr);
|
||||
private static native void sendPacket0(JSString channel, Address addr, int length);
|
||||
|
||||
public static List<IPCPacketData> recieveAllPacket() {
|
||||
if(singleThreadMode) {
|
||||
|
Reference in New Issue
Block a user