diff --git a/CHANGES.md b/CHANGES.md index 2bc3db43..9c4b7ea6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,6 @@ [1.0.0-SNAPSHOT] +- Update teavm to 0.10.0 +- Pixmap now use Gdx2DPixmap [1.0.0-b9] - add TeaClassFilter printAllowedClasses() and printExcludedClasses() diff --git a/backends/backend-teavm/emu/com/badlogic/gdx/graphics/PixmapEmu.java b/backends/backend-teavm/emu/com/badlogic/gdx/graphics/PixmapEmu.java index 34b72912..5de572db 100644 --- a/backends/backend-teavm/emu/com/badlogic/gdx/graphics/PixmapEmu.java +++ b/backends/backend-teavm/emu/com/badlogic/gdx/graphics/PixmapEmu.java @@ -2,6 +2,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.g2d.Gdx2DPixmap; import com.badlogic.gdx.graphics.g2d.Gdx2DPixmapEmu; import com.badlogic.gdx.utils.BufferUtils; import com.badlogic.gdx.utils.Disposable; @@ -22,12 +23,14 @@ import com.github.xpenatan.gdx.backends.teavm.dom.impl.TeaWindow; import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.ArrayBufferViewWrapper; import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.Int8ArrayWrapper; +import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.TypedArrays; import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.Uint8ArrayWrapper; import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.Uint8ClampedArrayWrapper; import com.github.xpenatan.gdx.backends.teavm.gen.Emulate; import com.github.xpenatan.gdx.backends.teavm.preloader.AssetDownloader; import com.github.xpenatan.gdx.backends.teavm.preloader.AssetType; import com.github.xpenatan.gdx.backends.teavm.preloader.Blob; +import java.io.IOException; import java.nio.ByteBuffer; import org.teavm.classlib.java.nio.ArrayBufferUtil; import org.teavm.jso.JSBody; @@ -82,19 +85,10 @@ public static int toGlType (FormatEmu format) { int width; int height; - HTMLCanvasElementWrapper canvas; - CanvasRenderingContext2DWrapper context; int id; ByteBuffer buffer; - int r = 255, g = 255, b = 255; - float a; - String colorStr = make(r, g, b, a); - static String clearColor = make(255, 255, 255, 1.0f); BlendingEmu blending = PixmapEmu.BlendingEmu.SourceOver; FilterEmu filter = PixmapEmu.FilterEmu.BiLinear; - public Uint8ClampedArrayWrapper pixels; - private HTMLImageElementWrapper imageElement; - private HTMLVideoElementWrapper videoElement; private int color = 0; private Gdx2DPixmapEmu nativePixmap; @@ -123,91 +117,53 @@ public PixmapEmu(FileHandle file) { String path = webFileHandler.path(); Blob object = webFileHandler.preloader.images.get(path); - TeaApplication app = (TeaApplication)Gdx.app; - TeaApplicationConfiguration config = app.getConfig(); - if(config.useNativePixmap) { - Int8ArrayWrapper response = object.getData(); - byte[] bytes = Gdx2DPixmapEmu.get(response); - nativePixmap = new Gdx2DPixmapEmu(bytes, 0, bytes.length, 0); - initPixmapEmu(-1, -1, null, null); - } - else { - HTMLImageElementWrapper htmlImageElement = object.getImage(); - initPixmapEmu(-1, -1, htmlImageElement, null); - if(imageElement == null) - throw new GdxRuntimeException("Couldn't load image '" + file.path() + "', file does not exist"); - } + Int8ArrayWrapper response = object.getData(); + byte[] bytes = Gdx2DPixmapEmu.get(response); + nativePixmap = new Gdx2DPixmapEmu(bytes, 0, bytes.length, 0); + initPixmapEmu(-1, -1, null, null); } public PixmapEmu(HTMLImageElementWrapper img) { this(-1, -1, img); } - public PixmapEmu(HTMLVideoElementWrapper vid) { - this(-1, -1, vid); + public PixmapEmu(byte[] encodedData, int offset, int len) { + nativePixmap = new Gdx2DPixmapEmu(encodedData, offset, len, 0); + initPixmapEmu(-1, -1, null, null); } - public PixmapEmu(byte[] encodedData, int offset, int len) { - TeaApplication app = (TeaApplication)Gdx.app; - TeaApplicationConfiguration config = app.getConfig(); - if(config.useNativePixmap) { + public PixmapEmu(ByteBuffer encodedData, int offset, int len) { + if (!encodedData.isDirect()) throw new GdxRuntimeException("Couldn't load pixmap from non-direct ByteBuffer"); + try { nativePixmap = new Gdx2DPixmapEmu(encodedData, offset, len, 0); initPixmapEmu(-1, -1, null, null); + } catch (IOException e) { + throw new GdxRuntimeException("Couldn't load pixmap from image data", e); } } public PixmapEmu(int width, int height, FormatEmu format) { + nativePixmap = new Gdx2DPixmapEmu(width, height, PixmapEmu.FormatEmu.toGdx2DPixmapFormat(format)); initPixmapEmu(width, height, null, null); } + //TODO remove private PixmapEmu(int width, int height, HTMLImageElementWrapper imageElement) { initPixmapEmu(width, height, imageElement, null); } - private PixmapEmu(int width, int height, HTMLVideoElementWrapper videoElement) { - initPixmapEmu(width, height, null, videoElement); - } - private void initPixmapEmu(int width, int height, HTMLImageElementWrapper imageElement, HTMLVideoElementWrapper videoElement) { - if(videoElement != null) { - this.videoElement = videoElement; - this.width = videoElement.getWidth(); - this.height = videoElement.getHeight(); - } - else if(imageElement != null) { - this.imageElement = imageElement; - this.width = imageElement.getWidth(); - this.height = imageElement.getHeight(); + this.width = width; + this.height = height; + + if(nativePixmap != null) { + Uint8ArrayWrapper nativePixels = nativePixmap.getPixels(); + byte[] byteArray = TypedArrays.toByteArray(nativePixels); + buffer = ByteBuffer.wrap(byteArray); } else { - this.width = width; - this.height = height; + throw new GdxRuntimeException("NOT SUPPORTED PIXMAP"); } - - buffer = BufferUtils.newByteBuffer(4); - id = TeaGraphics.nextId++; - buffer.putInt(0, id); - TeaGraphics.pixmaps.put(id, this); - } - - private void create() { - TeaWindow window = TeaWindow.get(); - DocumentWrapper document = window.getDocument(); - ElementWrapper createElement = document.createElement("canvas"); - canvas = (HTMLCanvasElementWrapper)createElement; - canvas.setWidth(width); - canvas.setHeight(height); - context = (CanvasRenderingContext2DWrapper)canvas.getContext("2d"); - context.setGlobalCompositeOperation(getComposite().toString()); - } - - public CanvasRenderingContext2DWrapper getContext() { - ensureCanvasExists(); - return context; - } - - private static Composite getComposite() { - return Composite.SOURCE_OVER; } public static String make(int r2, int g2, int b2, float a2) { @@ -215,48 +171,8 @@ public static String make(int r2, int g2, int b2, float a2) { } public HTMLCanvasElementWrapper getCanvasElement() { - ensureCanvasExists(); - return canvas; - } - - private void ensureCanvasExists() { - if(canvas == null) { - create(); - if(imageElement != null) { - context.setGlobalCompositeOperation(Composite.COPY.getValue()); - context.drawImage(imageElement, 0, 0); - context.setGlobalCompositeOperation(getComposite().getValue()); - } - if(videoElement != null) { - context.setGlobalCompositeOperation(Composite.COPY.getValue()); - context.drawImage(videoElement, 0, 0); - context.setGlobalCompositeOperation(getComposite().getValue()); - } - } - } - - public boolean canUsePixmapData() { - return canvas == null && nativePixmap != null; - } - - public Uint8ArrayWrapper getPixmapData() { - return nativePixmap.getPixels(); - } - - public boolean canUseImageElement() { - return canvas == null && imageElement != null; - } - - public HTMLImageElementWrapper getImageElement() { - return imageElement; - } - - public boolean canUseVideoElement() { - return canvas == null && videoElement != null; - } - - public HTMLVideoElementWrapper getVideoElement() { - return videoElement; + //TODO remove + return null; } /** @@ -265,19 +181,7 @@ public HTMLVideoElementWrapper getVideoElement() { * @param color the color, encoded as RGBA8888 */ public void setColor(int color) { - if(nativePixmap != null) { - this.color = color; - } - else { - ensureCanvasExists(); - r = (color >>> 24) & 0xff; - g = (color >>> 16) & 0xff; - b = (color >>> 8) & 0xff; - a = (color & 0xff) / 255f; - this.colorStr = make(r, g, b, a); - context.setFillStyle(this.colorStr); - context.setStrokeStyle(this.colorStr); - } + this.color = color; } /** @@ -289,19 +193,7 @@ public void setColor(int color) { * @param a The alpha component. */ public void setColor(float r, float g, float b, float a) { - if(nativePixmap != null) { - this.color = Color.rgba8888(r, g, b, a); - } - else { - ensureCanvasExists(); - this.r = (int)(r * 255); - this.g = (int)(g * 255); - this.b = (int)(b * 255); - this.a = a; - colorStr = make(this.r, this.g, this.b, this.a); - context.setFillStyle(colorStr); - context.setStrokeStyle(this.colorStr); - } + this.color = Color.rgba8888(r, g, b, a); } /** @@ -317,14 +209,7 @@ public void setColor(Color color) { * Fills the complete bitmap with the currently set color. */ public void fill() { - if(nativePixmap != null) { - nativePixmap.clear(color); - } - else { - ensureCanvasExists(); - context.clearRect(0, 0, getWidth(), getHeight()); - rectangle(0, 0, getWidth(), getHeight(), DrawType.FILL); - } + nativePixmap.clear(color); } // /** @@ -343,12 +228,7 @@ public void fill() { * @param y2 The y-coordinate of the first point */ public void drawLine(int x, int y, int x2, int y2) { - if(nativePixmap != null) { - nativePixmap.drawLine(x, y, x2, y2, color); - } - else { - line(x, y, x2, y2, DrawType.STROKE); - } + nativePixmap.drawLine(x, y, x2, y2, color); } /** @@ -361,12 +241,7 @@ public void drawLine(int x, int y, int x2, int y2) { * @param height The height in pixels */ public void drawRectangle(int x, int y, int width, int height) { - if(nativePixmap != null) { - nativePixmap.drawRect(x, y, width, height, color); - } - else { - rectangle(x, y, width, height, DrawType.STROKE); - } + nativePixmap.drawRect(x, y, width, height, color); } /** @@ -377,111 +252,49 @@ public void drawRectangle(int x, int y, int width, int height) { * @param y The target y-coordinate (top left corner) */ public void drawPixmap(PixmapEmu pixmap, int x, int y) { - if(nativePixmap != null) { - drawPixmap(pixmap, x, y, 0, 0, pixmap.getWidth(), pixmap.getHeight()); - } - else { - HTMLCanvasElementWrapper image = pixmap.getCanvasElement(); - image(image, 0, 0, image.getWidth(), image.getHeight(), x, y, image.getWidth(), image.getHeight()); - } + drawPixmap(pixmap, x, y, 0, 0, pixmap.getWidth(), pixmap.getHeight()); } public void drawPixmap(PixmapEmu pixmap, int x, int y, int srcx, int srcy, int srcWidth, int srcHeight) { - if(nativePixmap != null) { - this.nativePixmap.drawPixmap(pixmap.nativePixmap, srcx, srcy, x, y, srcWidth, srcHeight); - } - else { - HTMLCanvasElementWrapper image = pixmap.getCanvasElement(); - image(image, srcx, srcy, srcWidth, srcHeight, x, y, srcWidth, srcHeight); - } + nativePixmap.drawPixmap(pixmap.nativePixmap, srcx, srcy, x, y, srcWidth, srcHeight); } public void drawPixmap(PixmapEmu pixmap, int srcx, int srcy, int srcWidth, int srcHeight, int dstx, int dsty, int dstWidth, int dstHeight) { - if(nativePixmap != null) { - this.nativePixmap.drawPixmap(pixmap.nativePixmap, srcx, srcy, srcWidth, srcHeight, dstx, dsty, dstWidth, dstHeight); - } - else { - image(pixmap.getCanvasElement(), srcx, srcy, srcWidth, srcHeight, dstx, dsty, dstWidth, dstHeight); - } + nativePixmap.drawPixmap(pixmap.nativePixmap, srcx, srcy, srcWidth, srcHeight, dstx, dsty, dstWidth, dstHeight); } public void fillRectangle(int x, int y, int width, int height) { - if(nativePixmap != null) { - nativePixmap.fillRect(x, y, width, height, color); - } - else { - rectangle(x, y, width, height, DrawType.FILL); - } + nativePixmap.fillRect(x, y, width, height, color); } public void drawCircle(int x, int y, int radius) { - if(nativePixmap != null) { - nativePixmap.drawCircle(x, y, radius, color); - } - else { - circle(x, y, radius, DrawType.STROKE); - } + nativePixmap.drawCircle(x, y, radius, color); } public void fillCircle(int x, int y, int radius) { - if(nativePixmap != null) { - nativePixmap.fillCircle(x, y, radius, color); - } - else { - circle(x, y, radius, DrawType.FILL); - } + nativePixmap.fillCircle(x, y, radius, color); } public void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3) { - if(nativePixmap != null) { - nativePixmap.fillTriangle(x1, y1, x2, y2, x3, y3, color); - } - else { - triangle(x1, y1, x2, y2, x3, y3, DrawType.FILL); - } + nativePixmap.fillTriangle(x1, y1, x2, y2, x3, y3, color); } public int getPixel(int x, int y) { - if(nativePixmap != null) { - return nativePixmap.getPixel(x, y); - } - else { - ensureCanvasExists(); - if(pixels == null) pixels = context.getImageData(0, 0, width, height).getData(); - int i = x * 4 + y * width * 4; - int r = pixels.get(i + 0) & 0xff; - int g = pixels.get(i + 1) & 0xff; - int b = pixels.get(i + 2) & 0xff; - int a = pixels.get(i + 3) & 0xff; - return (r << 24) | (g << 16) | (b << 8) | (a); - } + return nativePixmap.getPixel(x, y); } public int getWidth() { - if(nativePixmap != null) { - return nativePixmap.getWidth(); - } - else { - return width; - } + return nativePixmap.getWidth(); } public int getHeight() { - if(nativePixmap != null) { - return nativePixmap.getHeight(); - } - else { - return height; - } + return nativePixmap.getHeight(); } @Override public void dispose() { if (disposed) throw new GdxRuntimeException("Pixmap already disposed!"); - TeaGraphics.pixmaps.remove(id); - if(nativePixmap != null) { - nativePixmap.dispose(); - } + nativePixmap.dispose(); disposed = true; } @@ -490,73 +303,37 @@ public boolean isDisposed () { } public void drawPixel(int x, int y) { - if(nativePixmap != null) { - nativePixmap.setPixel(x, y, color); - } - else { - rectangle(x, y, 1, 1, DrawType.FILL); - } + nativePixmap.setPixel(x, y, color); } public void drawPixel(int x, int y, int color) { - if(nativePixmap != null) { - nativePixmap.setPixel(x, y, color); - } - else { - setColor(color); - drawPixel(x, y); - } + nativePixmap.setPixel(x, y, color); } public int getGLFormat () { - if(nativePixmap != null) { - return nativePixmap.getGLFormat(); - } - return GL20.GL_RGBA; + return nativePixmap.getGLFormat(); } public int getGLInternalFormat () { - if(nativePixmap != null) { - return nativePixmap.getGLInternalFormat(); - } - return GL20.GL_RGBA; + return nativePixmap.getGLInternalFormat(); } public int getGLType () { - if(nativePixmap != null) { - return nativePixmap.getGLType(); - } - return GL20.GL_UNSIGNED_BYTE; + return nativePixmap.getGLType(); } public ByteBuffer getPixels() { return buffer; } + public Uint8ArrayWrapper getPixmapData() { + return nativePixmap.getPixels(); + } + public void setPixels(ByteBuffer pixels) { - if(nativePixmap != null) { - if (!pixels.isDirect()) throw new GdxRuntimeException("Couldn't setPixels from non-direct ByteBuffer"); - Uint8ArrayWrapper dst = nativePixmap.getPixels(); - //TODO find a way to use byteBuffer -// BufferUtils.copy(pixels, dst, dst.limit()) - } - else { - if(width == 0 || height == 0) return; - if(TeaTool.useGLArrayBuffer()) { - Int8ArrayWrapper int8Array = ArrayBufferUtil.getInt8Array(pixels); - setImageData(int8Array, width, height, getContext()); - } - else { - CanvasRenderingContext2DWrapper context = getContext(); - ImageDataWrapper imgData = context.createImageData(width, height); - Uint8ClampedArrayWrapper data = imgData.getData(); - byte[] pixelsArray = pixels.array(); - for(int i = 0, len = width * height * 4; i < len; i++) { - data.set(i, (byte)(pixelsArray[i] & 0xff)); - } - context.putImageData(imgData, 0, 0); - } - } + if (!pixels.isDirect()) throw new GdxRuntimeException("Couldn't setPixels from non-direct ByteBuffer"); + //TODO Need testing + BufferUtils.copy(pixels, buffer, buffer.limit()); } @JSBody(params = { "pixels", "width", "height", "ctx" }, script = "" + @@ -569,17 +346,12 @@ public void setPixels(ByteBuffer pixels) { private static native void setImageData(ArrayBufferViewWrapper pixels, int width, int height, CanvasRenderingContext2DWrapper ctx); public FormatEmu getFormat () { - if(nativePixmap != null) { - return FormatEmu.fromGdx2DPixmapFormat(nativePixmap.getFormat()); - } - return FormatEmu.RGBA8888; + return FormatEmu.fromGdx2DPixmapFormat(nativePixmap.getFormat()); } public void setFilter(FilterEmu filter) { this.filter = filter; - if(nativePixmap != null) { - nativePixmap.setScale(filter == PixmapEmu.FilterEmu.NearestNeighbour ? Gdx2DPixmapEmu.GDX2D_SCALE_NEAREST : Gdx2DPixmapEmu.GDX2D_SCALE_LINEAR); - } + nativePixmap.setScale(filter == PixmapEmu.FilterEmu.NearestNeighbour ? Gdx2DPixmapEmu.GDX2D_SCALE_NEAREST : Gdx2DPixmapEmu.GDX2D_SCALE_LINEAR); } public FilterEmu getFilter() { @@ -588,143 +360,13 @@ public FilterEmu getFilter() { public void setBlending(BlendingEmu blending) { this.blending = blending; - if(nativePixmap != null) { - nativePixmap.setBlend(blending == PixmapEmu.BlendingEmu.None ? 0 : 1); - } - else { - this.ensureCanvasExists(); - this.context.setGlobalCompositeOperation(getComposite().toString()); - } + nativePixmap.setBlend(blending == PixmapEmu.BlendingEmu.None ? 0 : 1); } public BlendingEmu getBlending () { return blending; } - private void circle(int x, int y, int radius, DrawType drawType) { - ensureCanvasExists(); - if(blending == PixmapEmu.BlendingEmu.None) { - context.setFillStyle(clearColor); - context.setStrokeStyle(clearColor); - context.setGlobalCompositeOperation("destination-out"); - context.beginPath(); - context.arc(x, y, radius, 0, 2 * Math.PI, false); - fillOrStrokePath(drawType); - context.closePath(); - context.setFillStyle(colorStr); - context.setStrokeStyle(colorStr); - context.setGlobalCompositeOperation(Composite.SOURCE_OVER.getValue()); - } - context.beginPath(); - context.arc(x, y, radius, 0, 2 * Math.PI, false); - fillOrStrokePath(drawType); - context.closePath(); - pixels = null; - } - - private void line(int x, int y, int x2, int y2, DrawType drawType) { - ensureCanvasExists(); - if(blending == PixmapEmu.BlendingEmu.None) { - context.setFillStyle(clearColor); - context.setStrokeStyle(clearColor); - context.setGlobalCompositeOperation("destination-out"); - context.beginPath(); - context.moveTo(x, y); - context.lineTo(x2, y2); - fillOrStrokePath(drawType); - context.closePath(); - context.setFillStyle(colorStr); - context.setStrokeStyle(colorStr); - context.setGlobalCompositeOperation(Composite.SOURCE_OVER.getValue()); - } - context.beginPath(); - context.moveTo(x, y); - context.lineTo(x2, y2); - fillOrStrokePath(drawType); - context.closePath(); - pixels = null; - } - - private void rectangle(int x, int y, int width, int height, DrawType drawType) { - ensureCanvasExists(); - if(blending == PixmapEmu.BlendingEmu.None) { - context.setFillStyle(clearColor); - context.setStrokeStyle(clearColor); - context.setGlobalCompositeOperation("destination-out"); - context.beginPath(); - context.rect(x, y, width, height); - fillOrStrokePath(drawType); - context.closePath(); - context.setFillStyle(colorStr); - context.setStrokeStyle(colorStr); - context.setGlobalCompositeOperation(Composite.SOURCE_OVER.getValue()); - } - context.beginPath(); - context.rect(x, y, width, height); - fillOrStrokePath(drawType); - context.closePath(); - pixels = null; - } - - private void triangle(int x1, int y1, int x2, int y2, int x3, int y3, DrawType drawType) { - ensureCanvasExists(); - if(blending == PixmapEmu.BlendingEmu.None) { - context.setFillStyle(clearColor); - context.setStrokeStyle(clearColor); - context.setGlobalCompositeOperation("destination-out"); - context.beginPath(); - context.moveTo(x1, y1); - context.lineTo(x2, y2); - context.lineTo(x3, y3); - context.lineTo(x1, y1); - fillOrStrokePath(drawType); - context.closePath(); - context.setFillStyle(colorStr); - context.setStrokeStyle(colorStr); - context.setGlobalCompositeOperation(Composite.SOURCE_OVER.getValue()); - } - context.beginPath(); - context.moveTo(x1, y1); - context.lineTo(x2, y2); - context.lineTo(x3, y3); - context.lineTo(x1, y1); - fillOrStrokePath(drawType); - context.closePath(); - pixels = null; - } - - private void image(HTMLCanvasElementWrapper image, int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight) { - ensureCanvasExists(); - if(blending == PixmapEmu.BlendingEmu.None) { - context.setFillStyle(clearColor); - context.setStrokeStyle(clearColor); - context.setGlobalCompositeOperation("destination-out"); - context.beginPath(); - context.rect(dstX, dstY, dstWidth, dstHeight); - fillOrStrokePath(DrawType.FILL); - context.closePath(); - context.setFillStyle(colorStr); - context.setStrokeStyle(colorStr); - context.setGlobalCompositeOperation(Composite.SOURCE_OVER.getValue()); - } - if(srcWidth != 0 && srcHeight != 0 && dstWidth != 0 && dstHeight != 0) { - context.drawImage(image, srcX, srcY, srcWidth, srcHeight, dstX, dstY, dstWidth, dstHeight); - } - pixels = null; - } - - private void fillOrStrokePath(DrawType drawType) { - ensureCanvasExists(); - switch(drawType) { - case FILL: - context.fill(); - break; - case STROKE: - context.stroke(); - break; - } - } - private enum DrawType { FILL, STROKE } @@ -738,4 +380,4 @@ public enum BlendingEmu { public enum FilterEmu { NearestNeighbour, BiLinear } -} +} \ No newline at end of file diff --git a/backends/backend-teavm/jni/CMakeLists.txt b/backends/backend-teavm/jni/CMakeLists.txt index d43d2ee9..cfad89ed 100644 --- a/backends/backend-teavm/jni/CMakeLists.txt +++ b/backends/backend-teavm/jni/CMakeLists.txt @@ -58,6 +58,7 @@ set(EMCC_ARGS set(EMCC_WASM_ARGS ${EMCC_ARGS} -s BINARYEN_IGNORE_IMPLICIT_TRAPS=1 -s WASM=1 + -s SINGLE_FILE=1 ) set(EMCC_GLUE_ARGS diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplication.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplication.java index 3c8fde12..7d278430 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplication.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplication.java @@ -123,9 +123,7 @@ else if(agentInfo.isLinux()) logger = new TeaApplicationLogger(); clipboard = new TeaClipboard(); - if(config.useNativePixmap) { - initGdx(); - } + initGdx(); Gdx.app = this; Gdx.graphics = graphics; diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplicationConfiguration.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplicationConfiguration.java index eb69cc54..8fe84fbe 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplicationConfiguration.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaApplicationConfiguration.java @@ -19,11 +19,6 @@ public class TeaApplicationConfiguration { @Deprecated public boolean useGLArrayBuffer = true; - /** - * Experimental webassembly pixmap - */ - public boolean useNativePixmap = false; - /** Sets the {@link TeaWindowListener} which will be informed about teavm events. */ public TeaWindowListener windowListener; diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaCursor.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaCursor.java index 9d07c42d..d9d0ab1c 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaCursor.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaCursor.java @@ -2,13 +2,10 @@ import com.badlogic.gdx.graphics.Cursor; import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.PixmapEmu; import com.badlogic.gdx.utils.Base64Coder; import com.badlogic.gdx.utils.GdxRuntimeException; import com.github.xpenatan.gdx.backends.teavm.utils.PNG; -import java.nio.ByteBuffer; - /** * Cursor functionality ported for libGDX/GWT. This implementation also supports dynamically created cursor * images. @@ -47,43 +44,35 @@ public TeaCursor(Pixmap pixmap, int xHotspot, int yHotspot) { "yHotspot coordinate of " + yHotspot + " is not within image height bounds: [0, " + pixmap.getHeight() + ")."); } - int index = ((ByteBuffer)pixmap.getPixels()).getInt(0); - PixmapEmu pixmapEmu = (PixmapEmu)TeaGraphics.pixmaps.get(index); String url; - if (pixmapEmu != null) { - // referenced cursor image via URL - url = "'" + pixmapEmu.getCanvasElement().toDataURL("image/png") + "'"; - } - else { - // create custom cursor image from raw-data, e.g. when a cursor was created via Pixmap.drawPixels(...) or so - int w = pixmap.getWidth(); - int h = pixmap.getHeight(); - byte[] rawBytes = new byte[4 * w * h]; - for (int y = 0; y < h; y++) { - int offLine = 4 * y * w; - for (int x = 0; x < w; x++) { - int pixel = pixmap.getPixel(x, y); - int off = offLine + (4 * x); - rawBytes[off ] = (byte)((pixel >>> 24) & 0xff); - rawBytes[off + 1] = (byte)((pixel >>> 16) & 0xff); - rawBytes[off + 2] = (byte)((pixel >>> 8) & 0xff); - rawBytes[off + 3] = (byte)((pixel ) & 0xff); - } - } - - // convert to uncompressed PNG byte-array - byte[] pngBytes; - try { - pngBytes = PNG.encode(w, h, rawBytes); - } - catch (Exception e) { - throw new GdxRuntimeException("Error encoding bytes as PNG.", e); + // create custom cursor image from raw-data, e.g. when a cursor was created via Pixmap.drawPixels(...) or so + int w = pixmap.getWidth(); + int h = pixmap.getHeight(); + byte[] rawBytes = new byte[4 * w * h]; + for (int y = 0; y < h; y++) { + int offLine = 4 * y * w; + for (int x = 0; x < w; x++) { + int pixel = pixmap.getPixel(x, y); + int off = offLine + (4 * x); + rawBytes[off ] = (byte)((pixel >>> 24) & 0xff); + rawBytes[off + 1] = (byte)((pixel >>> 16) & 0xff); + rawBytes[off + 2] = (byte)((pixel >>> 8) & 0xff); + rawBytes[off + 3] = (byte)((pixel ) & 0xff); } + } - // we pass the images as base64 via CSS - String base64 = String.valueOf(Base64Coder.encode(pngBytes)); - url = "data:image/png;base64," + base64; + // convert to uncompressed PNG byte-array + byte[] pngBytes; + try { + pngBytes = PNG.encode(w, h, rawBytes); } + catch (Exception e) { + throw new GdxRuntimeException("Error encoding bytes as PNG.", e); + } + + // we pass the images as base64 via CSS + String base64 = String.valueOf(Base64Coder.encode(pngBytes)); + url = "data:image/png;base64," + base64; cssCursorProperty = "url("; cssCursorProperty += url; cssCursorProperty += ")"; diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL20.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL20.java index 2ebd349b..981006c6 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL20.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL20.java @@ -1030,52 +1030,33 @@ public void glTexImage2D(int target, int level, int internalformat, int width, i gl.texImage2D(target, level, internalformat, width, height, border, format, type, null); } else { - if(pixels.limit() > 4) { - //TODO not fully tested. Some conversion may be wrong. - ArrayBufferViewWrapper buffer; - if(TeaTool.useGLArrayBuffer()) { - Int8ArrayWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); - if(pixels instanceof FloatBuffer) { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } - else { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } + //TODO not fully tested. Some conversion may be wrong. + ArrayBufferViewWrapper buffer; + if(TeaTool.useGLArrayBuffer()) { + Int8ArrayWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); + if(pixels instanceof FloatBuffer) { + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } else { - if(pixels instanceof FloatBuffer) { - Float32ArrayWrapper arr = copy((FloatBuffer)pixels); - ArrayBufferViewWrapper webGLArray = arr; - buffer = webGLArray; - } - else { - Int8ArrayWrapper copy = copy((ByteBuffer)pixels); - buffer = ArrayBufferUtil.fromUI8(copy); - } + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } - gl.texImage2D(target, level, internalformat, width, height, border, format, type, buffer); } else { - int index = ((ByteBuffer)pixels).getInt(0); - PixmapEmu pixmap = (PixmapEmu)TeaGraphics.pixmaps.get(index); - // Prefer to use the HTMLImageElement when possible, since reading from the CanvasElement can be lossy. - if(pixmap.canUsePixmapData()) { - gl.texImage2D(target, level, internalformat, width, height, border, format, type, pixmap.getPixmapData()); - } - else if(pixmap.canUseImageElement()) { - gl.texImage2D(target, level, internalformat, format, type, pixmap.getImageElement()); - } - else if(pixmap.canUseVideoElement()) { - gl.texImage2D(target, level, internalformat, format, type, pixmap.getVideoElement()); + if(pixels instanceof FloatBuffer) { + Float32ArrayWrapper arr = copy((FloatBuffer)pixels); + ArrayBufferViewWrapper webGLArray = arr; + buffer = webGLArray; } else { - gl.texImage2D(target, level, internalformat, format, type, pixmap.getCanvasElement()); + Int8ArrayWrapper copy = copy((ByteBuffer)pixels); + buffer = ArrayBufferUtil.fromUI8(copy); } } + gl.texImage2D(target, level, internalformat, width, height, border, format, type, buffer); } } @@ -1101,45 +1082,33 @@ public void glTexParameteriv(int target, int pname, IntBuffer params) { @Override public void glTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels) { - if(pixels.limit() > 4) { - //TODO not fully tested. Some conversion may be wrong. - ArrayBufferViewWrapper buffer; - if(TeaTool.useGLArrayBuffer()) { - ArrayBufferViewWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); - if(pixels instanceof FloatBuffer) { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } - else { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } + //TODO not fully tested. Some conversion may be wrong. + ArrayBufferViewWrapper buffer; + if(TeaTool.useGLArrayBuffer()) { + ArrayBufferViewWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); + if(pixels instanceof FloatBuffer) { + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } else { - if(pixels instanceof FloatBuffer) { - Float32ArrayWrapper arr = copy((FloatBuffer)pixels); - ArrayBufferViewWrapper webGLArray = arr; - buffer = webGLArray; - } - else { - Int8ArrayWrapper copy = copy((ByteBuffer)pixels); - buffer = ArrayBufferUtil.fromUI8(copy); - } + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } - gl.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, buffer); } else { - int index = ((ByteBuffer)pixels).getInt(0); - PixmapEmu pixmap = (PixmapEmu)TeaGraphics.pixmaps.get(index); - if(pixmap.canUsePixmapData()) { - gl.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixmap.getPixmapData()); + if(pixels instanceof FloatBuffer) { + Float32ArrayWrapper arr = copy((FloatBuffer)pixels); + ArrayBufferViewWrapper webGLArray = arr; + buffer = webGLArray; } else { - gl.texSubImage2D(target, level, xoffset, yoffset, format, type, pixmap.getCanvasElement()); + Int8ArrayWrapper copy = copy((ByteBuffer)pixels); + buffer = ArrayBufferUtil.fromUI8(copy); } } + gl.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, buffer); } @Override diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL30.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL30.java index 4319feac..c79f2688 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL30.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGL30.java @@ -777,53 +777,33 @@ public void glTexImage3D(int target, int level, int internalformat, int width, i return; } - if(pixels.limit() > 4) { - //TODO not fully tested. Some conversion may be wrong. - ArrayBufferViewWrapper buffer; - if(TeaTool.useGLArrayBuffer()) { - ArrayBufferViewWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); - if(pixels instanceof FloatBuffer) { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } - else { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } + //TODO not fully tested. Some conversion may be wrong. + ArrayBufferViewWrapper buffer; + if(TeaTool.useGLArrayBuffer()) { + ArrayBufferViewWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); + if(pixels instanceof FloatBuffer) { + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } else { - if(pixels instanceof FloatBuffer) { - Float32ArrayWrapper arr = copy((FloatBuffer)pixels); - ArrayBufferViewWrapper webGLArray = arr; - buffer = webGLArray; - } - else { - Int8ArrayWrapper copy = copy((ByteBuffer)pixels); - buffer = ArrayBufferUtil.fromUI8(copy); - } + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } - gl.texImage3D(target, level, internalformat, width, height, depth, border, format, type, buffer); } else { - int index = ((ByteBuffer)pixels).getInt(0); - PixmapEmu pixmap = (PixmapEmu)TeaGraphics.pixmaps.get(index); - // Prefer to use the HTMLImageElement when possible, since reading from the CanvasElement can be lossy. - - if(pixmap.canUsePixmapData()) { - gl.texImage3D(target, level, internalformat, width, height, depth, border, format, type, pixmap.getPixmapData()); - } - else if(pixmap.canUseImageElement()) { - gl.texImage3D(target, level, internalformat, width, height, depth, border, format, type, pixmap.getImageElement()); - } - else if(pixmap.canUseVideoElement()) { - gl.texImage3D(target, level, internalformat, width, height, depth, border, format, type, pixmap.getVideoElement()); + if(pixels instanceof FloatBuffer) { + Float32ArrayWrapper arr = copy((FloatBuffer)pixels); + ArrayBufferViewWrapper webGLArray = arr; + buffer = webGLArray; } else { - gl.texImage3D(target, level, internalformat, width, height, depth, border, format, type, pixmap.getCanvasElement()); + Int8ArrayWrapper copy = copy((ByteBuffer)pixels); + buffer = ArrayBufferUtil.fromUI8(copy); } } + gl.texImage3D(target, level, internalformat, width, height, depth, border, format, type, buffer); } @Override @@ -841,46 +821,33 @@ public void glTexSubImage2D(int target, int level, int xoffset, int yoffset, int @Override public void glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, Buffer pixels) { // Taken from glTexSubImage2D - if(pixels.limit() > 4) { - //TODO not fully tested. Some conversion may be wrong. - ArrayBufferViewWrapper buffer; - if(TeaTool.useGLArrayBuffer()) { - ArrayBufferViewWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); - if (pixels instanceof FloatBuffer) { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } else { - int remainingBytes = pixels.remaining(); - int byteOffset = webGLArray.getByteOffset() + pixels.position(); - buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); - } - } - else { - if(pixels instanceof FloatBuffer) { - Float32ArrayWrapper arr = copy((FloatBuffer)pixels); - ArrayBufferViewWrapper webGLArray = arr; - buffer = webGLArray; - } - else { - Int8ArrayWrapper copy = copy((ByteBuffer)pixels); - buffer = ArrayBufferUtil.fromUI8(copy); -// buffer = copyUI8((ByteBuffer)pixels); - } + //TODO not fully tested. Some conversion may be wrong. + ArrayBufferViewWrapper buffer; + if(TeaTool.useGLArrayBuffer()) { + ArrayBufferViewWrapper webGLArray = ArrayBufferUtil.getInt8Array(pixels); + if (pixels instanceof FloatBuffer) { + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createFloat32Array(webGLArray.getBuffer(), byteOffset, remainingBytes); + } else { + int remainingBytes = pixels.remaining(); + int byteOffset = webGLArray.getByteOffset() + pixels.position(); + buffer = TypedArrays.createUint8Array(webGLArray.getBuffer(), byteOffset, remainingBytes); } - gl.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, buffer); } else { - int index = ((ByteBuffer)pixels).getInt(0); - PixmapEmu pixmap = (PixmapEmu)TeaGraphics.pixmaps.get(index); - - if(pixmap.canUsePixmapData()) { - gl.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixmap.getPixmapData()); + if(pixels instanceof FloatBuffer) { + Float32ArrayWrapper arr = copy((FloatBuffer)pixels); + ArrayBufferViewWrapper webGLArray = arr; + buffer = webGLArray; } else { - gl.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixmap.getCanvasElement()); + Int8ArrayWrapper copy = copy((ByteBuffer)pixels); + buffer = ArrayBufferUtil.fromUI8(copy); +// buffer = copyUI8((ByteBuffer)pixels); } } + gl.texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, buffer); } @Override diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGraphics.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGraphics.java index 1c3fc4c8..17ef3754 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGraphics.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/TeaGraphics.java @@ -29,9 +29,6 @@ * @author xpenatan */ public class TeaGraphics implements Graphics { - public static int nextId = 0; - public static IntMap pixmaps = new IntMap<>(); - private WebGLRenderingContextWrapper context; protected HTMLCanvasElementWrapper canvas; protected TeaApplicationConfiguration config; diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/typedarray/TypedArrays.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/typedarray/TypedArrays.java index 1ab07dd9..4808fd57 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/typedarray/TypedArrays.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/typedarray/TypedArrays.java @@ -1,6 +1,8 @@ package com.github.xpenatan.gdx.backends.teavm.dom.typedarray; +import org.teavm.jso.JSBody; import org.teavm.jso.typedarrays.ArrayBuffer; +import org.teavm.jso.typedarrays.ArrayBufferView; import org.teavm.jso.typedarrays.Float32Array; import org.teavm.jso.typedarrays.Float64Array; import org.teavm.jso.typedarrays.Int16Array; @@ -144,4 +146,14 @@ public static Uint32ArrayWrapper createUint32Array(ArrayBufferWrapper buffer, in ArrayBuffer arrayBuffer = (ArrayBuffer)buffer; return Uint32ArrayWrapper.create(arrayBuffer, offset, length); } + + @JSBody(params = { "array" }, script = "return new $rt_byteArrayCls(array);") + private static native Object toByteArrayInternal(ArrayBufferViewWrapper array); + + // Obtain the array reference from ArrayBufferView + public static byte[] toByteArray(ArrayBufferViewWrapper array) { + Object arrayObj = TypedArrays.toByteArrayInternal(array); + byte[] byteArray = (byte[])arrayObj; + return byteArray; + } } diff --git a/backends/backend-teavm/src/main/resources/gdx.wasm.js b/backends/backend-teavm/src/main/resources/gdx.wasm.js index 5a204a72..eabc84f2 100644 --- a/backends/backend-teavm/src/main/resources/gdx.wasm.js +++ b/backends/backend-teavm/src/main/resources/gdx.wasm.js @@ -3,58 +3,55 @@ var Gdx = (() => { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; return ( -function(Gdx = {}) { +function(moduleArg = {}) { -var b;b||(b=typeof Gdx !== 'undefined' ? Gdx : {});var h,k;b.ready=new Promise(function(a,c){h=a;k=c});var n=Object.assign({},b),p="object"==typeof window,q="function"==typeof importScripts,t="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,u="",v,w,x; -if(t){var fs=require("fs"),y=require("path");u=q?y.dirname(u)+"/":__dirname+"/";v=(a,c)=>{a=a.startsWith("file://")?new URL(a):y.normalize(a);return fs.readFileSync(a,c?void 0:"utf8")};x=a=>{a=v(a,!0);a.buffer||(a=new Uint8Array(a));return a};w=(a,c,d)=>{a=a.startsWith("file://")?new URL(a):y.normalize(a);fs.readFile(a,function(e,f){e?d(e):c(f.buffer)})};1process.version.match(/^v(\d+)\./)[1])process.on("unhandledRejection", -function(a){throw a;});b.inspect=function(){return"[Emscripten Module object]"}}else if(p||q)q?u=self.location.href:"undefined"!=typeof document&&document.currentScript&&(u=document.currentScript.src),_scriptDir&&(u=_scriptDir),0!==u.indexOf("blob:")?u=u.substr(0,u.replace(/[?#].*/,"").lastIndexOf("/")+1):u="",v=a=>{var c=new XMLHttpRequest;c.open("GET",a,!1);c.send(null);return c.responseText},q&&(x=a=>{var c=new XMLHttpRequest;c.open("GET",a,!1);c.responseType="arraybuffer";c.send(null);return new Uint8Array(c.response)}), -w=(a,c,d)=>{var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?c(e.response):d()};e.onerror=d;e.send(null)};b.print||console.log.bind(console);var z=b.printErr||console.warn.bind(console);Object.assign(b,n);n=null;var B;b.wasmBinary&&(B=b.wasmBinary);var noExitRuntime=b.noExitRuntime||!0;"object"!=typeof WebAssembly&&C("no native wasm support detected");var D,E=!1,F="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0; -function G(a,c){if(a){var d=H,e=a+c;for(c=a;d[c]&&!(c>=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}a=e}}else a="";return a}var I,H; -function J(){var a=D.buffer;b.HEAP8=I=new Int8Array(a);b.HEAP16=new Int16Array(a);b.HEAP32=new Int32Array(a);b.HEAPU8=H=new Uint8Array(a);b.HEAPU16=new Uint16Array(a);b.HEAPU32=new Uint32Array(a);b.HEAPF32=new Float32Array(a);b.HEAPF64=new Float64Array(a)}var K=[],L=[],M=[];function aa(){var a=b.preRun.shift();K.unshift(a)}var N=0,O=null,P=null; -function C(a){if(b.onAbort)b.onAbort(a);a="Aborted("+a+")";z(a);E=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");k(a);throw a;}function Q(){return R.startsWith("data:application/octet-stream;base64,")}var R;R="gdx.wasm.wasm";if(!Q()){var ba=R;R=b.locateFile?b.locateFile(ba,u):u+ba}function ca(){var a=R;try{if(a==R&&B)return new Uint8Array(B);if(x)return x(a);throw"both async and sync fetching of the wasm failed";}catch(c){C(c)}} -function da(){if(!B&&(p||q)){if("function"==typeof fetch&&!R.startsWith("file://"))return fetch(R,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+R+"'";return a.arrayBuffer()}).catch(function(){return ca()});if(w)return new Promise(function(a,c){w(R,function(d){a(new Uint8Array(d))},c)})}return Promise.resolve().then(function(){return ca()})}function S(a){for(;0>>=0;if(2147483648=d;d*=2){var e=c*(1+.2/d);e=Math.min(e,a+100663296);var f=Math,g=f.min;e=Math.max(a,e);e+=(65536-e%65536)%65536;a:{var l=D.buffer;try{D.grow(g.call(f,2147483648,e)-l.byteLength+65535>>>16);J();var m=1;break a}catch(r){}m=void 0}if(m)return!0}return!1}}; -(function(){function a(f){b.asm=f.exports;D=b.asm.c;J();L.unshift(b.asm.d);N--;b.monitorRunDependencies&&b.monitorRunDependencies(N);0==N&&(null!==O&&(clearInterval(O),O=null),P&&(f=P,P=null,f()))}function c(f){a(f.instance)}function d(f){return da().then(function(g){return WebAssembly.instantiate(g,e)}).then(function(g){return g}).then(f,function(g){z("failed to asynchronously prepare wasm: "+g);C(g)})}var e={a:ea};N++;b.monitorRunDependencies&&b.monitorRunDependencies(N);if(b.instantiateWasm)try{return b.instantiateWasm(e, -a)}catch(f){z("Module.instantiateWasm callback failed with error: "+f),k(f)}(function(){return B||"function"!=typeof WebAssembly.instantiateStreaming||Q()||R.startsWith("file://")||t||"function"!=typeof fetch?d(c):fetch(R,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(g){z("wasm streaming compile failed: "+g);z("falling back to ArrayBuffer instantiation");return d(c)})})})().catch(k);return{}})(); -var fa=b._emscripten_bind_VoidPtr___destroy___0=function(){return(fa=b._emscripten_bind_VoidPtr___destroy___0=b.asm.e).apply(null,arguments)},ha=b._emscripten_bind_gdx2d_pixmap_get_width_0=function(){return(ha=b._emscripten_bind_gdx2d_pixmap_get_width_0=b.asm.f).apply(null,arguments)},ia=b._emscripten_bind_gdx2d_pixmap_set_width_1=function(){return(ia=b._emscripten_bind_gdx2d_pixmap_set_width_1=b.asm.g).apply(null,arguments)},ja=b._emscripten_bind_gdx2d_pixmap_get_height_0=function(){return(ja=b._emscripten_bind_gdx2d_pixmap_get_height_0= -b.asm.h).apply(null,arguments)},ka=b._emscripten_bind_gdx2d_pixmap_set_height_1=function(){return(ka=b._emscripten_bind_gdx2d_pixmap_set_height_1=b.asm.i).apply(null,arguments)},la=b._emscripten_bind_gdx2d_pixmap_get_format_0=function(){return(la=b._emscripten_bind_gdx2d_pixmap_get_format_0=b.asm.j).apply(null,arguments)},ma=b._emscripten_bind_gdx2d_pixmap_set_format_1=function(){return(ma=b._emscripten_bind_gdx2d_pixmap_set_format_1=b.asm.k).apply(null,arguments)},na=b._emscripten_bind_gdx2d_pixmap_get_blend_0= -function(){return(na=b._emscripten_bind_gdx2d_pixmap_get_blend_0=b.asm.l).apply(null,arguments)},oa=b._emscripten_bind_gdx2d_pixmap_set_blend_1=function(){return(oa=b._emscripten_bind_gdx2d_pixmap_set_blend_1=b.asm.m).apply(null,arguments)},pa=b._emscripten_bind_gdx2d_pixmap_get_scale_0=function(){return(pa=b._emscripten_bind_gdx2d_pixmap_get_scale_0=b.asm.n).apply(null,arguments)},qa=b._emscripten_bind_gdx2d_pixmap_set_scale_1=function(){return(qa=b._emscripten_bind_gdx2d_pixmap_set_scale_1=b.asm.o).apply(null, -arguments)},ra=b._emscripten_bind_gdx2d_pixmap___destroy___0=function(){return(ra=b._emscripten_bind_gdx2d_pixmap___destroy___0=b.asm.p).apply(null,arguments)},sa=b._emscripten_bind_Gdx_g2d_get_pixels_1=function(){return(sa=b._emscripten_bind_Gdx_g2d_get_pixels_1=b.asm.q).apply(null,arguments)},ta=b._emscripten_bind_Gdx_g2d_load_3=function(){return(ta=b._emscripten_bind_Gdx_g2d_load_3=b.asm.r).apply(null,arguments)},ua=b._emscripten_bind_Gdx_g2d_new_3=function(){return(ua=b._emscripten_bind_Gdx_g2d_new_3= -b.asm.s).apply(null,arguments)},va=b._emscripten_bind_Gdx_g2d_free_1=function(){return(va=b._emscripten_bind_Gdx_g2d_free_1=b.asm.t).apply(null,arguments)},wa=b._emscripten_bind_Gdx_g2d_set_blend_2=function(){return(wa=b._emscripten_bind_Gdx_g2d_set_blend_2=b.asm.u).apply(null,arguments)},xa=b._emscripten_bind_Gdx_g2d_set_scale_2=function(){return(xa=b._emscripten_bind_Gdx_g2d_set_scale_2=b.asm.v).apply(null,arguments)},ya=b._emscripten_bind_Gdx_g2d_get_failure_reason_0=function(){return(ya=b._emscripten_bind_Gdx_g2d_get_failure_reason_0= -b.asm.w).apply(null,arguments)},za=b._emscripten_bind_Gdx_g2d_clear_2=function(){return(za=b._emscripten_bind_Gdx_g2d_clear_2=b.asm.x).apply(null,arguments)},Aa=b._emscripten_bind_Gdx_g2d_set_pixel_4=function(){return(Aa=b._emscripten_bind_Gdx_g2d_set_pixel_4=b.asm.y).apply(null,arguments)},Ba=b._emscripten_bind_Gdx_g2d_get_pixel_3=function(){return(Ba=b._emscripten_bind_Gdx_g2d_get_pixel_3=b.asm.z).apply(null,arguments)},Ca=b._emscripten_bind_Gdx_g2d_draw_line_6=function(){return(Ca=b._emscripten_bind_Gdx_g2d_draw_line_6= -b.asm.A).apply(null,arguments)},Da=b._emscripten_bind_Gdx_g2d_draw_rect_6=function(){return(Da=b._emscripten_bind_Gdx_g2d_draw_rect_6=b.asm.B).apply(null,arguments)},Ea=b._emscripten_bind_Gdx_g2d_draw_circle_5=function(){return(Ea=b._emscripten_bind_Gdx_g2d_draw_circle_5=b.asm.C).apply(null,arguments)},Fa=b._emscripten_bind_Gdx_g2d_fill_rect_6=function(){return(Fa=b._emscripten_bind_Gdx_g2d_fill_rect_6=b.asm.D).apply(null,arguments)},Ga=b._emscripten_bind_Gdx_g2d_fill_circle_5=function(){return(Ga= -b._emscripten_bind_Gdx_g2d_fill_circle_5=b.asm.E).apply(null,arguments)},Ha=b._emscripten_bind_Gdx_g2d_fill_triangle_8=function(){return(Ha=b._emscripten_bind_Gdx_g2d_fill_triangle_8=b.asm.F).apply(null,arguments)},Ia=b._emscripten_bind_Gdx_g2d_draw_pixmap_10=function(){return(Ia=b._emscripten_bind_Gdx_g2d_draw_pixmap_10=b.asm.G).apply(null,arguments)},Ja=b._emscripten_bind_Gdx_g2d_bytes_per_pixel_1=function(){return(Ja=b._emscripten_bind_Gdx_g2d_bytes_per_pixel_1=b.asm.H).apply(null,arguments)}, -Ka=b._emscripten_bind_Gdx___destroy___0=function(){return(Ka=b._emscripten_bind_Gdx___destroy___0=b.asm.I).apply(null,arguments)};b._free=function(){return(b._free=b.asm.K).apply(null,arguments)};b._malloc=function(){return(b._malloc=b.asm.L).apply(null,arguments)};b.___start_em_js=9976;b.___stop_em_js=10074;b.UTF8ToString=G;b.writeArrayToMemory=function(a,c){I.set(a,c)};var T;P=function La(){T||Ma();T||(P=La)}; -function Ma(){function a(){if(!T&&(T=!0,b.calledRun=!0,!E)){S(L);h(b);if(b.onRuntimeInitialized)b.onRuntimeInitialized();if(b.postRun)for("function"==typeof b.postRun&&(b.postRun=[b.postRun]);b.postRun.length;){var c=b.postRun.shift();M.unshift(c)}S(M)}}if(!(0{h=a;k=b});var m=Object.assign({},d),aa="object"==typeof window,p="function"==typeof importScripts,q="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,t="",u,w; +if(q){var fs=require("fs"),x=require("path");t=p?x.dirname(t)+"/":__dirname+"/";u=(a,b)=>{a=a.startsWith("file://")?new URL(a):x.normalize(a);return fs.readFileSync(a,b?void 0:"utf8")};w=a=>{a=u(a,!0);a.buffer||(a=new Uint8Array(a));return a};process.argv.slice(2);d.inspect=()=>"[Emscripten Module object]"}else if(aa||p)p?t=self.location.href:"undefined"!=typeof document&&document.currentScript&&(t=document.currentScript.src),_scriptDir&&(t=_scriptDir),0!==t.indexOf("blob:")?t=t.substr(0,t.replace(/[?#].*/, +"").lastIndexOf("/")+1):t="",u=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},p&&(w=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});d.print||console.log.bind(console);var y=d.printErr||console.error.bind(console);Object.assign(d,m);m=null;var z;d.wasmBinary&&(z=d.wasmBinary);var noExitRuntime=d.noExitRuntime||!0;"object"!=typeof WebAssembly&&A("no native wasm support detected"); +var B,C=!1,D,E;function F(){var a=B.buffer;d.HEAP8=D=new Int8Array(a);d.HEAP16=new Int16Array(a);d.HEAPU8=E=new Uint8Array(a);d.HEAPU16=new Uint16Array(a);d.HEAP32=new Int32Array(a);d.HEAPU32=new Uint32Array(a);d.HEAPF32=new Float32Array(a);d.HEAPF64=new Float64Array(a)}var G=[],H=[],I=[];function ba(){var a=d.preRun.shift();G.unshift(a)}var J=0,K=null,M=null; +function A(a){if(d.onAbort)d.onAbort(a);a="Aborted("+a+")";y(a);C=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");k(a);throw a;}function N(a){return a.startsWith("data:application/octet-stream;base64,")}var O;O="data:application/octet-stream;base64,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IARBA3EhHyAGQRBHISAgBEEESSElIAQhGANAIAkgCUH/AXFBjBRqLQAAIBMbIQkgAUEBaiEKIAAoAgwgF2ogIWoiDSAjaiEMQQAhAkEBIAsgGxsiC0EATCIPRQRAA0ACQCACIA1qAn8CQAJAAkACQAJAAkACQCAJQf8BcQ4HAAECAwQFBggLIAIgCmotAAAMBgsgAiAKai0AAAwFCyACIAxqLQAAIAIgCmotAABqDAQLIAIgCmotAAAgAiAMai0AAEEBdmoMAwsgAiAMai0AACACIApqLQAAagwCCyACIApqLQAADAELIAIgCmotAAALOgAACyACQQFqIgIgC0cNAAsLAn8gBkEIRgRAIBxFBEAgDSASakH/AToAAAsgAyECIAogEmoMAQsgIEUEQCAcRQRAIAsgDWpB//8DOwAACyAOIQIgCiALagwBC0EBIQIgAUECagshASAaIBggGxshGCACIAxqIQwgAiANaiECAkACQAJAAkAgIgRAIBhBAWsgC2whCgJAAkACQAJAAkACQAJAIAlB/wFxDgcIBAMCBQEABgsgCkEATA0FQQAhCCAKQQFHBEAgCkF+cSEPQQAhCQNAIAIgCGogAiAIIAtrai0AACABIAhqLQAAajoAACACIAhBAXIiDGogAiAMIAtrai0AACABIAxqLQAAajoAACAIQQJqIQggCUECaiIJIA9HDQALCyAKQQFxRQ0FIAIgCGogAiAIIAtrai0AACABIAhqLQAAajoAACABIApqIQEMCAsgCkEATA0EQQAhCCAKQQFHBEAgCkF+cSEPQQAhCQNAIAIgCGogASAIai0AACACIAggC2tqLQAAQQF2ajoAACACIAhBAXIiDGogASAMai0AACACIAwgC2tqLQAAQQF2ajoAACAIQQJqIQggCUECaiIJIA9HDQALCyAKQQFxRQ0EIAIgCGogASAIai0AACACIAggC2tqLQAAQQF2ajoAACABIApqIQEMBwsgCkEATA0DQQAhCCAKQQFHBEAgCkF+cSENQQAhCQNAIAIgCGogASAIai0AACACIAggC2tqLQAAIAggDGotAABqQQF2ajoAACACIAhBAXIiD2ogASAPai0AACACIA8gC2tqLQAAIAwgD2otAABqQQF2ajoAACAIQQJqIQggCUECaiIJIA1HDQALCyAKQQFxRQ0DIAIgCGogASAIai0AACACIAggC2tqLQAAIAggDGotAABqQQF2ajoAACABIApqIQEMBgsgCkEATA0CQQAhCCAKQQFHBEAgCkF+cSENQQAhCQNAIAIgCGogCCAMai0AACABIAhqLQAAajoAACACIAhBAXIiD2ogDCAPai0AACABIA9qLQAAajoAACAIQQJqIQggCUECaiIJIA1HDQALCyAKQQFxRQ0CIAIgCGogCCAMai0AACABIAhqLQAAajoAACABIApqIQEMBQsgCkEATA0BQQAhCCAKQQFHBEAgCkF+cSEPQQAhCQNAIAIgCGogAiAIIAtrai0AACABIAhqLQAAajoAACACIAhBAXIiDGogAiAMIAtrai0AACABIAxqLQAAajoAACAIQQJqIQggCUECaiIJIA9HDQALCyAKQQFxRQ0BIAIgCGogAiAIIAtrai0AACABIAhqLQAAajoAACABIApqIQEMBAtBACEIIApBAEwNAANAIAIgCGogASAIai0AACAMIAggC2siDWotAAAiCSAIIAxqLQAAIg8gDyACIA1qLQAAIg1qIAlrIhcgD2siDyAPQR91Ig9zIA9rIg8gFyAJayIJIAlBH3UiCXMgCWsiCUsbIhEgESANIAkgFyANayIJIAlBH3UiCXMgCWsiCUkbIAkgD0sbajoAACAIQQFqIgggCkcNAAsLIAEgCmohAQwCCwJAAkACQAJAAkACQAJAAkAgCUH/AXEOBwUEAwIGAQAHCyAQRQ0GIAtBfnEhDSALQQFxIREgECEKA0ACQCAPDQBBACEIQQAhCSALQQFHBEADQCACIAhqIAIgCCAOa2otAAAgASAIai0AAGo6AAAgAiAIQQFyIgxqIAIgDCAOa2otAAAgASAMai0AAGo6AAAgCEECaiEIIAlBAmoiCSANRw0ACwsgEUUNACACIAhqIAIgCCAOa2otAAAgASAIai0AAGo6AAALIAIgC2pB/wE6AAAgAiAOaiECIAEgC2ohASAKQQFrIgoNAAsMBgsgEEUNBSALQX5xIQ0gC0EBcSERIBAhCgNAAkAgDw0AQQAhCEEAIQkgC0EBRwRAA0AgAiAIaiABIAhqLQAAIAIgCCAOa2otAABBAXZqOgAAIAIgCEEBciIMaiABIAxqLQAAIAIgDCAOa2otAABBAXZqOgAAIAhBAmohCCAJQQJqIgkgDUcNAAsLIBFFDQAgAiAIaiABIAhqLQAAIAIgCCAOa2otAABBAXZqOgAACyACIAtqQf8BOgAAIAIgDmohAiABIAtqIQEgCkEBayIKDQALDAULIBBFDQQgC0F+cSERIAtBAXEhFCAQIQoDQAJAIA8NAEEAIQhBACEJIAtBAUcEQANAIAIgCGogASAIai0AACACIAggDmtqLQAAIAggDGotAABqQQF2ajoAACACIAhBAXIiDWogASANai0AACACIA0gDmtqLQAAIAwgDWotAABqQQF2ajoAACAIQQJqIQggCUECaiIJIBFHDQALCyAURQ0AIAIgCGogASAIai0AACACIAggDmtqLQAAIAggDGotAABqQQF2ajoAAAsgAiALakH/AToAACAMIA5qIQwgAiAOaiECIAEgC2ohASAKQQFrIgoNAAsMBAsgEEUNAyALQX5xIREgC0EBcSEUIBAhCgNAAkAgDw0AQQAhCEEAIQkgC0EBRwRAA0AgAiAIaiAIIAxqLQAAIAEgCGotAABqOgAAIAIgCEEBciINaiAMIA1qLQAAIAEgDWotAABqOgAAIAhBAmohCCAJQQJqIgkgEUcNAAsLIBRFDQAgAiAIaiAIIAxqLQAAIAEgCGotAABqOgAACyACIAtqQf8BOgAAIAwgDmohDCACIA5qIQIgASALaiEBIApBAWsiCg0ACwwDCyAQRQ0CIAtBfnEhDSALQQFxIREgECEKA0ACQCAPDQBBACEIQQAhCSALQQFHBEADQCACIAhqIAIgCCAOa2otAAAgASAIai0AAGo6AAAgAiAIQQFyIgxqIAIgDCAOa2otAAAgASAMai0AAGo6AAAgCEECaiEIIAlBAmoiCSANRw0ACwsgEUUNACACIAhqIAIgCCAOa2otAAAgASAIai0AAGo6AAALIAIgC2pB/wE6AAAgAiAOaiECIAEgC2ohASAKQQFrIgoNAAsMAgsgEEUNASALQXxxIREgC0EDcSENIAtBAWshFCAQIQoDQAJAIA8NAEEAIQxBACEIQQAhCSAUQQNPBEADQCACIAhqIAEgCGotAAA6AAAgAiAIQQFyIhVqIAEgFWotAAA6AAAgAiAIQQJyIhVqIAEgFWotAAA6AAAgAiAIQQNyIhVqIAEgFWotAAA6AAAgCEEEaiEIIAlBBGoiCSARRw0ACwsgDUUNAANAIAIgCGogASAIai0AADoAACAI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DQALC0EBDwtBgAghHQtB8M4AIB02AgBBAAuECQEEfyABKAIAQQBKBEADQCAAIAJqQYAKakEBOgAAIAJBAWoiAiABKAIASA0ACwsgASgCBEEASgRAA0AgACACakGACmpBAjoAACACQQFqIQIgA0EBaiIDIAEoAgRIDQALCyABKAIIQQBKBEBBACEDA0AgACACakGACmpBAzoAACACQQFqIQIgA0EBaiIDIAEoAghIDQALCyABKAIMQQBKBEBBACEDA0AgACACakGACmpBBDoAACACQQFqIQIgA0EBaiIDIAEoAgxIDQALCyABKAIQQQBKBEBBACEDA0AgACACakGACmpBBToAACACQQFqIQIgA0EBaiIDIAEoAhBIDQALCyABKAIUQQBKBEBBACEDA0AgACACakGACmpBBjoAACACQQFqIQIgA0EBaiIDIAEoAhRIDQALCyABKAIYQQBKBEBBACEDA0AgACACakGACmpBBzoAACACQQFqIQIgA0EBaiIDIAEoAhhIDQALCyABKAIcQQBKBEBBACEDA0AgACACakGACmpBCDoAACACQQFqIQIgA0EBaiIDIAEoAhxIDQALCyABKAIgQQBKBEBBACEDA0AgACACakGACmpBCToAACACQQFqIQIgA0EBaiIDIAEoAiBIDQALCyABKAIkQQBKBEBBACEDA0AgACACakGACmpBCjoAACACQQFqIQIgA0EBaiIDIAEoAiRIDQALCyABKAIoQQBKBEBBACEDA0AgACACakGACmpBCzoAACACQQFqIQIgA0EBaiIDIAEoAihIDQALCyABKAIsQQBKBEBBACEDA0AgACACakGACmpBDDoAACACQQFqIQIgA0EBaiIDIAEoAixIDQALCyABKAIwQQBKBEBBACEDA0AgACACakGACmpBDToAACACQQFqIQIgA0EBaiIDIAEoAjBIDQALCyABKAI0QQBKBEBBACEDA0AgACACakGACmpBDjoAACACQQFqIQIgA0EBaiIDIAEoAjRIDQALCyABKAI4QQBKBEBBACEDA0AgACACakGACmpBDzoAACACQQFqIQIgA0EBaiIDIAEoAjhIDQALCyABKAI8QQBKBEBBACEDA0AgACACakGACmpBEDoAACACQQFqIQIgA0EBaiIDIAEoAjxIDQALC0EAIQEgACACakGACmpBADoAAEEBIQRBACECA0AgACAEQQJ0aiIFQcwMaiACIAFrNgIAAkAgBCAAIAJqQYAKai0AAEcNAANAIAAgAkEBdGogASIDOwGABCABQQFqIQEgBCAAIAJBAWoiAmpBgApqLQAARg0ACyADIAR2RQ0AQfDOAEH1DjYCAEEADwsgBUGEDGogAUEQIARrdDYCACABQQF0IQEgBEEBaiIEQRFHDQALIABByAxqQX82AgAgAEH/AUGABBAJIQMgAkEASgRAQQAhAQNAIAEgA2pBgApqLQAAIgBBCU0EQCADIAFBAXRqLwGABEEJIABrIgR0IQVBACEAA0AgAyAAIAVqaiABOgAAIABBAWoiACAEdkUNAAsLIAFBAWoiASACRw0ACwtBAQvkAQECfwJAIAACfyAAKAKoASIBIAAoAqwBIgJJBEAgAUEBagwBCyAAKAIgRQ0BIAACfyAAKAIcIABBKGoiASAAKAIkIAAoAhARAAAiAkUEQCAAQQA6ACggAEEANgIgIABBKWoMAQsgASACagsiAjYCrAEgAEEpagsiATYCqAELAkAgACABIAJJBH8gAUEBagUgACgCIEUNASAAAn8gACgCHCAAQShqIgEgACgCJCAAKAIQEQAAIgJFBEAgAEEAOgAoIABBADYCICAAQSlqDAELIAEgAmoLNgKsASAAQSlqCzYCqAELC+sCAQR/AkAgACgCqAEiAyAAKAKsASIESQRAIAAgA0EBaiICNgKoASADLQAAIQUMAQsgACgCIEUEQCADIQIMAQsCfyAAKAIcIABBKGoiAiAAKAIkIAAoAhARAAAiA0UEQCAAQQA6ACggAEEANgIgIABBKWohBEEADAELIAIgA2ohBCACLQAACyEFIAAgBDYCrAEgACAAQSlqIgI2AqgBCwJAIAIgBEkEQCAAIAJBAWo2AqgBIAItAAAhAgwBCyAAKAIgRQRAQQAhAgwBCwJ/IAAoAhwgAEEoaiICIAAoAiQgACgCEBEAACIDRQRAIABBADoAKCAAQQA2AiAgAEEpaiEEQQAMAQsgAiADaiEEIAItAAALIQIgACAENgKsASAAIABBKWo2AqgBCyABIAVBH3FB/wFsQR9uOgACIAEgAkECdkEfcUH/AWxBH246AAAgASAFQeABcSACQQh0ckEFdkEfcUH/AWxBH246AAELVgIBfQF/AkAgAS0AAyIDBEAgACADQYgBaxAZtiICIAEtAACzlDgCACAAIAIgAS0AAbOUOAIEIAAgAiABLQACs5Q4AggMAQsgAEEANgIIIABCADcCAAsL3QQBBn8gAEEpaiEGIABBKGohBAJAIAAoAqgBIgcgACgCrAEiBUkEQCAAIAdBAWoiAjYCqAEgBy0AACEDDAELIAAoAiBFBEAgByECDAELAn8gACgCHCAEIAAoAiQgACgCEBEAACICRQRAIABBADoAKCAAQQA2AiAgBgwBCyAELQAAIQMgAiAEagshBSAAIAY2AqgBIAAgBTYCrAEgBiECCwJAIAMgAS0AAEcNAAJAIAIgBU8EQCAAKAIgRQRAQQAhAwwCCwJ/IAAoAhwgBCAAKAIkIAAoAhARAAAiAgRAIAQtAAAhAyACIARqDAELQQAhAyAAQQA6ACggAEEANgIgIAYLIQUgACAGNgKoASAAIAU2AqwBIAYhAgwBCyAAIAJBAWoiBzYCqAEgAi0AACEDIAchAgsgAyABLQABRw0AAkAgAiAFTwRAIAAoAiBFBEBBACEDDAILAn8gACgCHCAEIAAoAiQgACgCEBEAACICBEAgBC0AACEDIAIgBGoMAQtBACEDIABBADoAKCAAQQA2AiAgBgshBSAAIAY2AqgBIAAgBTYCrAEgBiECDAELIAAgAkEBaiIHNgKoASACLQAAIQMgByECCyADIAEtAAJHDQACQCACIAVPBEAgACgCIEUEQEEAIQIMAgsCfyAAKAIcIAQgACgCJCAAKAIQEQAAIgIEQCACIARqIQUgBC0AAAwBCyAAQQA6ACggAEEANgIgIAYhBUEACyECIAAgBjYCqAEgACAFNgKsAQwBCyAAIAJBAWo2AqgBIAItAAAhAgsgAS0AAyACQf8BcUYPC0EAC/IIAQZ/IABBKWohBCAAQShqIQMCfwJAAkAgACgCqAEiAiAAKAKsASIBSQRAIAAgAkEBaiIFNgKoASACLQAAIQIMAQsgACgCIEUNAQJ/IAAoAhwgAyAAKAIkIAAoAhARAAAiAUUEQEEAIQIgAEEAOgAoIABBADYCICAEDAELIAMtAAAhAiABIANqCyEBIAAgBDYCqAEgACABNgKsASAEIQULIAJB/wFxQYkBRw0AAkAgASAFTQRAIAAoAiBFDQICfyAAKAIcIAMgACgCJCAAKAIQEQAAIgEEQCADLQAAIQIgASADagwBC0EAIQIgAEEAOgAoIABBADYCICAECyEBIAAgBDYCqAEgACABNgKsASAEIQYMAQsgACAFQQFqIgY2AqgBIAUtAAAhAgsgAkH/AXFB0ABHDQACQCABIAZNBEAgACgCIEUNAgJ/IAAoAhwgAyAAKAIkIAAoAhARAAAiAQRAIAMtAAAhBSABIANqDAELQQAhBSAAQQA6ACggAEEANgIgIAQLIQEgACAENgKoASAAIAE2AqwBIAQhAgwBCyAAIAZBAWoiAjYCqAEgBi0AACEFCyAFQf8BcUHOAEcNAAJAIAEgAk0EQCAAKAIgRQ0CAn8gACgCHCADIAAoAiQgACgCEBEAACIBBEAgAy0AACECIAEgA2oMAQtBACECIABBADoAKCAAQQA2AiAgBAshASAAIAQ2AqgBIAAgATYCrAEgBCEFDAELIAAgAkEBaiIFNgKoASACLQAAIQILIAJB/wFxQccARw0AAkAgASAFTQRAIAAoAiBFDQICfyAAKAIcIAMgACgCJCAAKAIQEQAAIgEEQCADLQAAIQIgASADagwBC0EAIQIgAEEAOgAoIABBADYCICAECyEBIAAgBDYCqAEgACABNgKsASAEIQYMAQsgACAFQQFqIgY2AqgBIAUtAAAhAgsgAkH/AXFBDUcNAAJAIAEgBk0EQCAAKAIgRQ0CAn8gACgCHCADIAAoAiQgACgCEBEAACIBBEAgAy0AACEFIAEgA2oMAQtBACEFIABBADoAKCAAQQA2AiAgBAshASAAIAQ2AqgBIAAgATYCrAEgBCECDAELIAAgBkEBaiICNgKoASAGLQAAIQULIAVB/wFxQQpHDQACQCABIAJNBEAgACgCIEUNAgJ/IAAoAhwgAyAAKAIkIAAoAhARAAAiAQRAIAMtAAAhAiABIANqDAELQQAhAiAAQQA6ACggAEEANgIgIAQLIQEgACAENgKoASAAIAE2AqwBIAQhBQwBCyAAIAJBAWoiBTYCqAEgAi0AACECCyACQf8BcUEaRw0AAkAgASAFTQRAIAAoAiBFDQICfyAAKAIcIAMgACgCJCAAKAIQEQAAIgEEQCABIANqIQIgAy0AAAwBCyAAQQA6ACggAEEANgIgIAQhAkEACyEBIAAgBDYCqAEgACACNgKsAQwBCyAAIAVBAWo2AqgBIAUtAAAhAQtBASABQf8BcUEKRg0BGgtB8M4AQesONgIAQQALC4krAQ1/IwBBQGoiDCQAAn8CQAJAAkACQAJAIAFBxAFrDhoEAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAQALIAFB/wFHDQJB8M4AQfUONgIAQQAMBAsCQCAAKAIAIgMoAqgBIgEgAygCrAEiBEkEQCADIAFBAWoiAjYCqAEgAS0AACEFDAELIAMoAiBFBEAgASECDAELIAMCfyADKAIcIANBKGoiASADKAIkIAMoAhARAAAiAkUEQCADQQA6ACggA0EANgIgIANBKWoMAQsgAS0AACEFIAEgAmoLIgQ2AqwBIAMgA0EpaiICNgKoAQsCQCACIARJBEAgAyACQQFqNgKoASACLQAAIQIMAQsgAygCIEUEQEEAIQIMAQsCfyADKAIcIANBKGoiASADKAIkIAMoAhARAAAiAkUEQCADQQA6ACggA0EANgIgIANBKWohBEEADAELIAEgAmohBCABLQAACyECIAMgBDYCrAEgAyADQSlqNgKoAQsgAkH/AXEgBUH/AXFBCHRyQQRHBEBB8M4AQfUONgIAQQAMBAsCQCAAKAIAIgMoAqgBIgEgAygCrAEiBEkEQCADIAFBAWoiAjYCqAEgAS0AACEFDAELIAMoAiBFBEBBACEFIAEhAgwBCyADAn8gAygCHCADQShqIgEgAygCJCADKAIQEQAAIgJFBEBBACEFIANBADoAKCADQQA2AiAgA0EpagwBCyABLQAAIQUgASACagsiBDYCrAEgAyADQSlqIgI2AqgBCwJAIAIgBEkEQCADIAJBAWo2AqgBIAItAAAhAgwBCyADKAIgRQRAQQAhAgwBCwJ/IAMoAhwgA0EoaiIBIAMoAiQgAygCEBEAACICRQRAIANBADoAKCADQQA2AiAgA0EpaiEEQQAMAQsgASACaiEEIAEtAAALIQIgAyAENgKsASADIANBKWo2AqgBCyAAIAJB/wFxIAVB/wFxQQh0cjYChJABQQEMAwsCQCAAKAIAIgMoAqgBIgEgAygCrAEiBEkEQCADIAFBAWoiAjYCqAEgAS0AACEFDAELIAMoAiBFBEAgASECDAELIAMCfyADKAIcIANBKGoiASADKAIkIAMoAhARAAAiAkUEQCADQQA6ACggA0EANgIgIANBKWoMAQsgAS0AACEFIAEgAmoLIgQ2AqwBIAMgA0EpaiICNgKoAQsCQCACIARJBEAgAyACQQFqNgKoASACLQAAIQIMAQsgAygCIEUEQEEAIQIMAQsCfyADKAIcIANBKGoiASADKAIkIAMoAhARAAAiAkUEQCADQQA6ACggA0EANgIgIANBKWohBEEADAELIAEgAmohBCABLQAACyECIAMgBDYCrAEgAyADQSlqNgKoAQsgAkH/AXEgBUH/AXFBCHRyQQJrIghBAEoEQANAAn8CQAJAAkACQCAAKAIAIgEoAqgBIgIgASgCrAFJBEAgASACQQFqNgKoASACLQAAIQIMAQsgASgCIEUEQEEAIQUMAgsCfyABKAIcIAFBKGoiAiABKAIkIAEoAhARAAAiBEUEQCABQQA6ACggAUEANgIgIAFBKWohBEEADAELIAIgBGohBCACLQAACyECIAEgBDYCrAEgASABQSlqNgKoAQsCQCACQf8BcSIBQRBJDQAgAkHwAXFBEEYNAEHwzgBB9Q42AgBBAAwJCyACQQ9xIgVBA0sNAUEAIQQgAUEPSw0CC0EAIQIDQAJAIAAoAgAiASgCqAEiBCABKAKsAUkEQCABIARBAWo2AqgBIAQtAAAhBAwBCyABKAIgRQRAQQAhBAwBCwJ/IAEoAhwgAUEoaiIEIAEoAiQgASgCEBEAACIDRQRAIAFBADoAKCABQQA2AiAgAUEpaiEDQQAMAQsgAyAEaiEDIAQtAAALIQQgASADNgKsASABIAFBKWo2AqgBCyAAIAVBB3RqIAJBkBFqLQAAQQF0akGE6QBqIARB/wFxOwEAIAJBAWoiAkHAAEcNAAtBv38MAgtB8M4AQfUONgIAQQAMBgsDQAJAIAAoAgAiBigCqAEiAiAGKAKsASIDTwRAIAYoAiBFBEBBACEHDAILIAYCfyAGKAIcIAZBKGoiASAGKAIkIAYoAhARAAAiAgRAIAEtAAAhByABIAJqDAELQQAhByAGQQA6ACggBkEANgIgIAZBKWoLIgM2AqwBIAYgBkEpaiICNgKoAQwBCyAGIAJBAWoiATYCqAEgAi0AACEHIAEhAgsCQCACIANPBEAgBigCIEUEQEEAIQIMAgsCfyAGKAIcIAZBKGoiASAGKAIkIAYoAhARAAAiAgRAIAEgAmohAyABLQAADAELIAZBADoAKCAGQQA2AiAgBkEpaiEDQQALIQIgBiADNgKsASAGIAZBKWo2AqgBDAELIAYgAkEBajYCqAEgAi0AACECCyAAIAVBB3RqIARBkBFqLQAAQQF0akGE6QBqIAJB/wFxIAdBCHRyOwEAIARBAWoiBEHAAEcNAAtB/34LIAhqIghBAEoNAAsLIAhFDAILAkACQCABQf4BRyABQXBxQeABR3FFBEACQCAAKAIAIgUoAqgBIgIgBSgCrAEiA0kEQCAFIAJBAWoiBDYCqAEgAi0AACEHDAELIAUoAiBFBEAgAiEEDAELIAUCfyAFKAIcIAVBKGoiAiAFKAIkIAUoAhARAAAiBEUEQCAFQQA6ACggBUEANgIgIAVBKWoMAQsgAi0AACEHIAIgBGoLIgM2AqwBIAUgBUEpaiIENgKoAQsCQCADIARLBEAgBSAEQQFqNgKoASAELQAAIQQMAQsgBSgCIEUEQEEAIQQMAQsCfyAFKAIcIAVBKGoiAiAFKAIkIAUoAhARAAAiBEUEQCAFQQA6ACggBUEANgIgIAVBKWohA0EADAELIAIgBGohAyACLQAACyEEIAUgAzYCrAEgBSAFQSlqNgKoAQsgBEH/AXEgB0H/AXFBCHRyIgpBAU0EQEHwzgBB9Q42AgBBAAwFCwJAIAFB4AFHDQAgCkEHSQ0AAkAgACgCACIBKAKoASIEIAEoAqwBIgNJBEAgASAEQQFqIgI2AqgBIAQtAAAhCAwBCyABKAIgRQRAIAQhAgwBCyABAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgRFBEAgAUEAOgAoIAFBADYCICABQSlqDAELIAItAAAhCCACIARqCzYCrAEgASABQSlqNgKoASAAKAIAIgEoAqwBIQMgASgCqAEhAgsCQCACIANPBEAgASgCIEUEQAwCCyABAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgQEQCACLQAAIQYgAiAEagwBCyABQQA6ACggAUEANgIgIAFBKWoLNgKsASABIAFBKWo2AqgBIAAoAgAiASgCrAEhAyABKAKoASECDAELIAEgAkEBaiIENgKoASACLQAAIQYgBCECCwJAIAIgA08EQCABKAIgRQRAQQAhBwwCCyABAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgQEQCACLQAAIQcgAiAEagwBC0EAIQcgAUEAOgAoIAFBADYCICABQSlqCzYCrAEgASABQSlqNgKoASAAKAIAIgEoAqwBIQMgASgCqAEhAgwBCyABIAJBAWoiBDYCqAEgAi0AACEHIAQhAgsCQCACIANPBEAgASgCIEUEQEEAIQUMAgsgAQJ/IAEoAhwgAUEoaiICIAEoAiQgASgCEBEAACIEBEAgAi0AACEFIAIgBGoMAQtBACEFIAFBADoAKCABQQA2AiAgAUEpags2AqwBIAEgAUEpajYCqAEgACgCACIBKAKsASEDIAEoAqgBIQIMAQsgASACQQFqIgQ2AqgBIAItAAAhBSAEIQILAkAgAiADTwRAIAEoAiBFBEBBACEDDAILAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgQEQCACIARqIQkgAi0AAAwBCyABQQA6ACggAUEANgIgIAFBKWohCUEACyEDIAEgCTYCrAEgASABQSlqNgKoAQwBCyABIAJBAWo2AqgBIAItAAAhAwsgCkEHayECIANB/wFxDQMgBUH/AXFBxgBHDQMgB0H/AXFByQBHDQMgBkHGAEcNAyAIQf8BcUHKAEcNAyAAQQE2AuSPAQwDCyABQe4BRw0BIApBDkkNAQJAIAAoAgAiASgCqAEiBCABKAKsASIDSQRAIAEgBEEBaiICNgKoASAELQAAIQkMAQsgASgCIEUEQCAEIQIMAQsgAQJ/IAEoAhwgAUEoaiICIAEoAiQgASgCEBEAACIERQRAIAFBADoAKCABQQA2AiAgAUEpagwBCyACLQAAIQkgAiAEags2AqwBIAEgAUEpajYCqAEgACgCACIBKAKsASEDIAEoAqgBIQILAkAgAiADTwRAIAEoAiBFBEAMAgsgAQJ/IAEoAhwgAUEoaiICIAEoAiQgASgCEBEAACIEBEAgAi0AACEIIAIgBGoMAQsgAUEAOgAoIAFBADYCICABQSlqCzYCrAEgASABQSlqNgKoASAAKAIAIgEoAqwBIQMgASgCqAEhAgwBCyABIAJBAWoiBDYCqAEgAi0AACEIIAQhAgsCQCACIANPBEAgASgCIEUEQAwCCyABAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgQEQCACLQAAIQYgAiAEagwBCyABQQA6ACggAUEANgIgIAFBKWoLNgKsASABIAFBKWo2AqgBIAAoAgAiASgCrAEhAyABKAKoASECDAELIAEgAkEBaiIENgKoASACLQAAIQYgBCECCwJAIAIgA08EQCABKAIgRQRAQQAhBwwCCyABAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgQEQCACLQAAIQcgAiAEagwBC0EAIQcgAUEAOgAoIAFBADYCICABQSlqCzYCrAEgASABQSlqNgKoASAAKAIAIgEoAqwBIQMgASgCqAEhAgwBCyABIAJBAWoiBDYCqAEgAi0AACEHIAQhAgsCQCACIANPBEAgASgCIEUEQEEAIQUMAgsgAQJ/IAEoAhwgAUEoaiICIAEoAiQgASgCEBEAACIEBEAgAi0AACEFIAIgBGoMAQtBACEFIAFBADoAKCABQQA2AiAgAUEpags2AqwBIAEgAUEpajYCqAEgACgCACIBKAKsASEDIAEoAqgBIQIMAQsgASACQQFqIgQ2AqgBIAItAAAhBSAEIQILAkAgAiADTwRAIAEoAiBFBEBBACEDDAILAn8gASgCHCABQShqIgIgASgCJCABKAIQEQAAIgQEQCACIARqIQsgAi0AAAwBCyABQQA6ACggAUEANgIgIAFBKWohC0EACyEDIAEgCzYCrAEgASABQSlqNgKoAQwBCyABIAJBAWo2AqgBIAItAAAhAwsgCkEIayECIANB/wFxDQIgBUH/AXFB5QBHDQIgB0H/AXFB4gBHDQIgBkHvAEcNAiAIQf8BcUHkAEcNAiAJQf8BcUHBAEcNAiAAKAIAEA0aIAAoAgAQHyAAKAIAEB8gACAAKAIAEA02AuiPASAKQQ5rIQIMAgtB8M4AQfUONgIAQQAMAwsgCkECayECCwJAIAAoAgAiASgCEEUEQCABKAKoASEADAELIAIgASgCrAEiBCABKAKoASIAayIDTA0AIAEgBDYCqAEgASgCHCACIANrIAEoAhQRAQBBAQwCCyABIAAgAmo2AqgBQQEMAQsCQCAAKAIAIgMoAqgBIgEgAygCrAEiBEkEQCADIAFBAWoiAjYCqAEgAS0AACEFDAELIAMoAiBFBEAgASECDAELIAMCfyADKAIcIANBKGoiASADKAIkIAMoAhARAAAiAkUEQCADQQA6ACggA0EANgIgIANBKWoMAQsgAS0AACEFIAEgAmoLIgQ2AqwBIAMgA0EpaiICNgKoAQsCQCACIARJBEAgAyACQQFqNgKoASACLQAAIQIMAQsgAygCIEUEQEEAIQIMAQsCfyADKAIcIANBKGoiASADKAIkIAMoAhARAAAiAkUEQCADQQA6ACggA0EANgIgIANBKWohBEEADAELIAEgAmohBCABLQAACyECIAMgBDYCrAEgAyADQSlqNgKoAQsCQCACQf8BcSAFQf8BcUEIdHJBAmsiC0EASgRAIABBBGohCiAAQcQ0aiEIA0ACQCAAKAIAIgEoAqgBIgIgASgCrAFJBEAgASACQQFqNgKoASACLQAAIQMMAQsgASgCIEUEQEEAIQMMAQsgAQJ/IAEoAhwgAUEoaiICIAEoAiQgASgCEBEAACIERQRAQQAhAyABQQA6ACggAUEANgIgIAFBKWoMAQsgAi0AACEDIAIgBGoLNgKsASABIAFBKWo2AqgBCwJAIANB/wFxIglBH00EQEEAIQRBACECIANBD3EiBkEESQ0BC0HwzgBB9Q42AgAMAwsDQAJAIAAoAgAiASgCqAEiAyABKAKsAUkEQCABIANBAWo2AqgBIAMtAAAhAwwBCyABKAIgRQRAQQAhAwwBCwJ/IAEoAhwgAUEoaiIDIAEoAiQgASgCEBEAACIFRQRAIAFBADoAKCABQQA2AiAgAUEpaiEFQQAMAQsgAyAFaiEFIAMtAAALIQMgASAFNgKsASABIAFBKWo2AqgBCyAMIAJBAnRqIANB/wFxIgE2AgAgASAEaiEEIAJBAWoiAkEQRw0ACwJ/IAlBD00EQCAKIAZBkA1sIgFqIAwQHkUNBCAAIAFqQYQIagwBCyAIIAZBkA1sIgFqIAwQHkUNAyAAIAFqQcQ8agshBUEAIQIgBARAA0ACQCAAKAIAIgEoAqgBIgMgASgCrAFJBEAgASADQQFqNgKoASADLQAAIQMMAQsgASgCIEUEQEEAIQMMAQsCfyABKAIcIAFBKGoiAyABKAIkIAEoAhARAAAiB0UEQCABQQA6ACggAUEANgIgIAFBKWohB0EADAELIAMgB2ohByADLQAACyEDIAEgBzYCrAEgASABQSlqNgKoAQsgAiAFaiADOgAAIAJBAWoiAiAERw0ACwsgCUEQTwRAIAggBkGQDWxqIQMgACAGQQp0akGE7QBqIQVBACEBA0AgASADai0AACECIAUgAUEBdGoiBkEAOwEAAkAgAkH/AUYNACACIANqIgdBgAhqLQAAIglBD3EiAkUNACACIAdBgApqLQAAIgdqIg1BCUsNAEF/IAJ0QQFyQQAgASAHdEH/A3EiB0GAAkkbIAdBCSACa3ZqIgJBgAFqQf8BSw0AIAYgDSAJQfABcWogAkEIdGo7AQALIAFBAWoiAUGABEcNAAsLIAtBEWsgBGsiC0EASg0ACwsgC0UMAQtBAAshDiAMQUBrJAAgDgvZBAEHfyAAKALUjwEEQEHwzgBB9Q42AgBBAA8LIAAoAsCPAUEPTARAIAAQBQsCfwJAIAAoAtiPAUUEQCABQQBBgAEQCSEIIAAoAsCPAUEPTARAIAAQBQsCQCACIAAoAryPASIGQRd2ai0AACIBQf8BRwRAQX8hBCAAKALAjwEiBSABIAJqQYAKai0AACIHSA0DIAAgBSAHayIFNgLAjwEgACAGIAd0IgY2AryPAQwBCyAGQRB2IQVBCiEEA0AgBCIBQQFqIQQgBSACIAFBAnRqQYQMaigCAE8NAAsgACgCwI8BIQUgAUERRgRAIAAgBUEQayIFNgLAjwFBfyEEDAMLQX8hBCABIAVKDQIgAiABQQJ0IgdqQcwMaigCACEKIAAgBiABdCIENgK8jwEgACAFIAFrIgU2AsCPASAKIAdB8BFqKAIAIAZBICABa3ZxaiEBIAQhBgsgASACakGACGotAAAiBA0BQQAMAgsgACAAKALAjwEiBEEATAR/IAAQBSAAKALAjwEFIAQLQQFrNgLAjwEgACAAKAK8jwEiAkEBdDYCvI8BIAJBAEgEQCABIAEvAQBBASAAKALcjwF0ajsBAAtBAQ8LIAQgBUoEQCAAEAUgACgCwI8BIQUgACgCvI8BIQYLIAAgBSAEazYCwI8BIAAgBiAEdyIBIARBAnQiAkHwEWooAgAiBEF/c3E2AryPASABIARxIAJBwBJqKAIAQQAgBkEAThtqCyEEIAAgA0HIAGxqQbSNAWoiASABKAIAIARqIgE2AgAgCCABIAAoAtyPAXQ7AQBBAQuTCAEHfwJAIAAoAsCPAUEPSg0AIAAQBSAAKALAjwFBD0oNACAAEAULAkACQAJAIAIgACgCvI8BIgtBF3ZqLQAAIgdB/wFHBEAgACgCwI8BIgkgAiAHakGACmotAAAiCEgNAyAAIAkgCGs2AsCPASAAIAsgCHQ2AryPAQwBCyALQRB2IQlBCiEIA0AgCCIHQQFqIQggCSACIAdBAnQiCmpBhAxqKAIATw0ACyAAKALAjwEhCCAHQRFGDQEgByAISg0CIAIgCiIJakHMDGooAgAhDCAAIAsgB3Q2AryPASAAIAggB2s2AsCPASAMIAlB8BFqKAIAIAtBICAHa3ZxaiEHCyACIAdqQYAIai0AACECIAFBAEGAARAJIQsgACgCwI8BIQggAgR/IAAgAiAISgR/IAAQBSAAKALAjwEFIAgLIAJrIgg2AsCPASAAIAAoAryPASIBIAJ3IgcgAkECdCICQfARaigCACIJQX9zcTYCvI8BIAcgCXEgAkHAEmooAgBBACABQQBOG2oFQQALIQcgACAFQcgAbGpBtI0BaiIBIAEoAgAgB2oiATYCACALIAYvAQAgAWw7AQBBASEFA0AgCEEPTARAIAAQBQsCfyAEIAAoAryPASIBQRd2IghBAXRqLwEAIgIEQCAAIAEgAkEPcSIBdDYCvI8BIAAgACgCwI8BIAFrIgg2AsCPASALIAJBBHZBD3EgBWoiAUGQEWotAABBAXQiBWogBSAGai8BACACwUEIdmw7AQAgAUEBagwBCwJAIAAoAsCPAUEPTAR/IAAQBSAAKAK8jwEiAUEXdgUgCAsgA2otAAAiB0H/AUcEQCAAKALAjwEiCCADIAdqQYAKai0AACICSA0FIAAgCCACayIINgLAjwEgACABIAJ0IgI2AryPAQwBCyABQRB2IQJBCiEIA0AgCCIHQQFqIQggAiADIAdBAnQiCWoiCkGEDGooAgBPDQALIAAoAsCPASEIIAdBEUYNAyAHIAhKDQQgCkHMDGooAgAhDSAAIAEgB3QiAjYCvI8BIAAgCCAHayIINgLAjwEgDSAJQfARaigCACABQSAgB2t2cWohBwsgAyAHakGACGotAAAiB0EPcSIBRQRAIAdB8AFHBEBBAQ8LIAVBEGoMAQsgB0EEdiAFaiIFQZARai0AACEHIAEgCEoEQCAAEAUgACgCwI8BIQggACgCvI8BIQILIAAgCCABayIINgLAjwEgACACIAF3IgkgAUECdCIBQfARaigCACIKQX9zcTYCvI8BIAsgB0EBdCIHaiAGIAdqLwEAIAkgCnEgAUHAEmooAgBBACACQQBOG2psOwEAIAVBAWoLIgVBwABIDQALQQEPCyAAIAhBEGs2AsCPAQtB8M4AQfUONgIAQQAL8AcCDH8BfEEJIQdBECEIAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkAgACgCCCIGQQJrDgUDBgABAgQLIAAoAgAiCkECdCELIAAoAhQhDEELIQdBDiEIQQQhCSAEIQUMCwtBDCEHQRIhCAwBC0ENIQdBEyEICyAAKAIUIQxBAgwBC0EBIQkgACgCFCEMIAZBAUYNBkEPIQhBCCEHQQQLIgkgACgCACIKbCELIAQhBQJAIAZBAmsOBQACBwMEBQsCfyAEQQh2Qf8BcbhEXW3F/rJ7sj+iIARBEHZB/wFxuESlLEMc6+LmP6IgBEEYdrND0LNZPpS7oKAiEUQAAAAAAADwQWMgEUQAAAAAAAAAAGZxBEAgEasMAQtBAAtBCHRBgP4DcSAEQf8BcXIhBQwGC0EDIQkgACgCACIKQQNsIQsgACgCFCEMQQohB0ERIQgLIARBCHYhBQwECyAEQQt2QR9xIARBEHZBgPADcSAEQQ12QeAPcXJyIQUMAwsgBEEEdkEPcSAEQQh2QfABcSAEQRB2QYDgA3EgBEEMdkGAHnFycnIhBQwCC0EAIQUMAQsgBEH/AXEhBUEIIQdBDyEIIAAoAgAiCyEKCwJAIANBAEgNACADIApPDQAgASACIAEgAkobIgZBAEgNACABIAIgASACSBsiASAAKAIEIg1ODQAgAUEAIAFBAEobIgIgBiANQQFrIAYgDUgbIg1BAWpGDQAgBEH/AXEiBiAEQRh2bCEOIARBCHZB/wFxIAZsIQ8gBEEQdkH/AXEgBmwhECAMIAIgCmwgA2ogCWxqIQQDQCACIQECQCAAKAIMRQ0AIAAoAggiCSAEIAcRAgAQCCEFIAYEQCAFQf8BcSICIAIgBmxB/wFuayICIAVBGHZsIA5qIAIgBmoiA25BGHQgAiAFQRB2Qf8BcWwgEGogA25BEHRyIAIgBUEIdkH/AXFsIA9qIANuQQh0ciADciEFCwJAAkACQAJAAkACQCAJQQFrDgYAAQIGAwQFCyAFQf8BcSEFDAULAn8gBUEIdkH/AXG4RF1txf6ye7I/oiAFQRB2Qf8BcbhEpSxDHOvi5j+iIAVBGHazQ9CzWT6Uu6CgIhFEAAAAAAAA8EFjIBFEAAAAAAAAAABmcQRAIBGrDAELQQALQQh0QYD+A3EgBUH/AXFyIQUMBAsgBUEIdiEFDAMLIAVBC3ZBH3EgBUEQdkGA8ANxIAVBDXZB4A9xcnIhBQwCCyAFQQR2QQ9xIAVBCHZB8AFxIAVBEHZBgOADcSAFQQx2QYAecXJyciEFDAELQQAhBQsgBCAFIAgRAQAgBCALaiEEIAFBAWohAiABIA1HDQALCwsHACAALwEACyQBAX8jAEEQayICIAA2AgwgAiABNgIIIAIoAgwgAigCCDYCCAsYAQF/IwBBEGsiASAANgIMIAEoAgwoAggLJAEBfyMAQRBrIgIgADYCDCACIAE2AgggAigCDCACKAIINgIECxgBAX8jAEEQayIBIAA2AgwgASgCDCgCBAusAQEDfwJAIANBAEwNAEEAIQQgA0EBRwRAIANBfnEhBwNAIAAgBGogAiAEai0AACABIARqLQAAQQNsakECakECdjoAACAAIARBAXIiBmogAiAGai0AACABIAZqLQAAQQNsakECakECdjoAACAEQQJqIQQgBUECaiIFIAdHDQALCyADQQFxRQ0AIAAgBGogAiAEai0AACABIARqLQAAQQNsakECakECdjoAAAsgAAsEACABC+UBAQd/AkAgA0EATA0AIARBAEwNACAEQXxxIQogBEEDcSEJIARBBEkhCwNAIAQgCGwhBSABIAhqIQZBACECQQAhByALRQRAA0AgACACIAVqaiAGLQAAOgAAIAAgAkEBciAFamogBi0AADoAACAAIAJBAnIgBWpqIAYtAAA6AAAgACACQQNyIAVqaiAGLQAAOgAAIAJBBGohAiAHQQRqIgcgCkcNAAsLQQAhByAJBEADQCAAIAIgBWpqIAYtAAA6AAAgAkEBaiECIAdBAWoiByAJRw0ACwsgCEEBaiIIIANHDQALCyAAC+gBAQN/QQEhAiABLQAAIQQgA0EBRgRAIAAgBDoAACAAIAQ6AAEgAA8LIAAgBDoAACAAIAEtAAEgAS0AAEEDbGpBAmpBAnY6AAEgA0EBayEEQQIhBSADQQNOBEADQCAAIAJBAXRqIgUgASACaiIGLQAAQQNsQQJqIgcgBkEBay0AAGpBAnY6AAAgBSAHIAEgAkEBaiICai0AAGpBAnY6AAEgAiAERw0ACyAEQQF0IQULIAAgBWogASAEaiICLQAAIAEgA2pBAmstAABBA2xqQQJqQQJ2OgAAIAAgBUEBcmogAi0AADoAACAACyQBAX8jAEEQayICIAA2AgwgAiABNgIIIAIoAgwgAigCCDYCAAuU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dEGA/gNxIAJB/wFxcgwECyACQQh2IQJBESEEDAQLQRIhBCACQQt2QR9xIAJBEHZBgPADcSACQQ12QeAPcXJyDAILQRMhBCACQQR2QQ9xIAJBCHZB8AFxIAJBEHZBgOADcSACQQx2QYAecXJycgwBC0EPIQRBAAshAgsCQCADIApMIgcNACAJIAtqIgEgCnJBAEgNACABIA9ODQAgCCAAIAEgA2wgCmpsaiACIAQRAQALAkAgBw0AIAsgCWsiASAKckEASA0AIAEgD04NACAIIAAgASADbCAKamxqIAIgBBEBAAsCQCALIA9OIgcNACAJIApqIgEgC3JBAEgNACABIANODQAgCCAAIAMgC2wgAWpsaiACIAQRAQALAkAgBw0AIAogCWsiASALckEASA0AIAEgA04NACAIIAAgAyALbCABamxqIAIgBBEBAAsgCUEASgRAQQAhBwNAIAUgB0EBaiIHQQAgCUEBayIBIAVBAEgiBhtrQQF0aiESAkACQCAJIAEgBhsiCSAHRgRAIAcgCmohBgJAIAcgC2oiASAPTiIODQAgAyAGTA0AIAEgBnJBAEgNACAIIAEgA2wgBmogAGxqIAIgBBEBAAsgCiAHayEFAkAgDg0AIAMgBUwNACABIAVyQQBIDQAgCCABIANsIAVqIABsaiACIAQRAQALAkAgCyAHayIBIA9OIg4NACADIAZMDQAgASAGckEASA0AIAggASADbCAGaiAAbGogAiAEEQEACyAODQIgAyAFTA0CIAEgBXJBAE4NAQwCCyAHIAlODQEgByAKaiEBAkAgCSALaiIGIA9OIg4NACABIANODQAgASAGckEASA0AIAggAyAGbCABaiAAbGogAiAEEQEACyAKIAdrIQUCQCAODQAgAyAFTA0AIAUgBnJBAEgNACAIIAMgBmwgBWogAGxqIAIgBBEBAAsCQCALIAlrIgYgD04iDg0AIAEgA04NACABIAZyQQBIDQAgCCADIAZsIAFqIABsaiACIAQRAQALAkAgDg0AIAMgBUwNACAFIAZyQQBIDQAgCCADIAZsIAVqIABsaiACIAQRAQALIAkgCmohBgJAIAcgC2oiASAPTiIODQAgAyAGTA0AIAEgBnJBAEgNACAIIAEgA2wgBmogAGxqIAIgBBEBAAsgCiAJayEFAkAgDg0AIAMgBUwNACABIAVyQQBI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IAIgAzsBDCACIAM7AQogAiADOwEIIAIgAzsBBiACIAM7AQQgAiADOwECIAIgAzsBACACQRBqIQIgAEEJayEPIABBCGshACAPQX5JDQALCyAHQRBqJAAgBkEQaiQACyIBAX8jAEEQayIBJAAgASAANgIMIAFBEGokAEHwzgAoAgALJgECfyMAQRBrIgEkACABIAA2AgwgASgCDBAEIQIgAUEQaiQAIAILXgEBfyMAQRBrIgMkACADIAA2AgwgAyABNgIIIAMgAjYCBCADKAIEIQEjAEEQayIAJAAgACADKAIINgIMIAAgATYCCCAAKAIMIAAoAgg2AhAgAEEQaiQAIANBEGokAAteAQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgQhASMAQRBrIgAkACAAIAMoAgg2AgwgACABNgIIIAAoAgwgACgCCDYCDCAAQRBqJAAgA0EQaiQAC0wBAX8jAEEQayICJAAgAiAANgIMIAIgATYCCCMAQRBrIgAkACAAIAIoAgg2AgwgACgCDCIBKAIUEAIgARACIABBEGokACACQRBqJAAL5wEBA38jAEEQayIEJAAgBCAANgIMIAQgATYCCCAEIAI2AgQgBCADNgIAIAQoAgQhASAEKAIAIQIjAEEQayIAJAAgACAEKAIINgIMIAAgATYCCCAAIAI2AgQCfyAAKAIMIQIgACgCCCEDIAAoAgQhBUEYEAQiAQRAIAFCgYCAgBA3AgwgASAFNgIIIAEgAzYCBCABIAI2AgAgAiADbCECIAEgBUEBayIDQQVNBH8gA0ECdEGIHGooAgAFQQQLIAJsEAQiAjYCFCABIAINARogARACC0EACyEGIABBEGokACAEQRBqJAAgBgu1qwQEa38IfAN9A34jAEEQayIkJAAgJCAANgIMICQgATYCCCAkIAI2AgQgJCADNgIAICQoAgQhACAkKAIAIQEjAEEQayIiJAAgIiAkKAIINgIMICIgADYCCCAiIAE2AgQgIiAiKAIMNgIAICIoAgQhAUEAIQJBACEDIwBB0AFrIhwkACAcICIoAgAgIigCCGoiADYCyAEgHEEANgI4IBxBADYCKCAcIAAgAWoiATYCzAEgHCAANgLAASAcIAE2AsQBQQAhACMAQZAQayIjJAAjAEGAkQJrIhkkACAjQQA2AgwgI0IINwIE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IAdBPzYC1I8BCyAHQQA2AsiPASAHQgA3AryPASAHQQA2AoyPASAHQQA2AsSOASAHQQA2AvyNASAHQf8BOgDEjwEgB0EANgK0jQEgB0EANgLgjwEgByAHKAKEkAEiAUH/////ByABGyIONgKIkAEgBygC8I8BIQEgBUUEQCABQQFGBEAgByAHKAL0jwEiBkHIAGxqIgFBvI0BaigCACIIQQBMDQcgAUG4jQFqKAIAIgVBAEwNByABQcCNAWohCSABQciNAWohBCABQaiNAWohCiABQayNAWohDiABQbCNAWohEEEBIAhBB2pBA3UiASABQQFMGyEIQQEgBUEHakEDdSIBIAFBAUwbIQVBACELA0AgC0EDdCEPQQAhAQNAIAcgGUEgaiIRIBggDigCAEGQDWxqIBcgECgCACIVQZANbGogByAVQQp0akGE7QBqIAYgByAKKAIAQQd0akGE6QBqECZFDQ0gBCgCACAPIAkoAgAiFWxqIAFBA3RqIBUgESAHKAKMkAERBAAgByAHKAKIkAEiEUEBazYCiJABIBFBAUwEQCAHKALAjwFBF0wEQCAHEAULIActAMSPAUH4AXFB0AFHDQogB0EANgLIjwEgB0IANwK8jwEgB0EANgKMjwEgB0EANgLEjgEgB0EANgL8jQEgB0H/AToAxI8BIAdBADYCtI0BIAdBADYC4I8BIAcgBygChJABIhFB/////wcgERs2AoiQAQsgAUEBaiIBIAVHDQALIAtBAWoiCyAIRw0ACwwHCyAHKAKQjQEiBUEATA0GQQAhECAHKAKMjQEiAUEATA0GA0BBACEJIAFBAEoEQANAQQAhCCAHKALwjwEiBkEASgRAA0ACQCAHIAcgCEECdGpB9I8BaigCACILQcgAbGoiAUGkjQFqIgQoAgAiBUEATA0AIAFBoI0BaiIPKAIAIg5BAEwNACABQcCNAWohBiABQciNAWohESABQaiNAWohFSABQayNAWohEyABQbCNAWohEkEAIQoDQEEAIQEgDkEASgRAA0AgBCgCACEFIAcgGUEgaiIUIBggEygCAEGQDWxqIBcgEigCACIWQZANbGogByAWQQp0akGE7QBqIAsgByAVKAIAQQd0akGE6QBqECZFDRMgESgCACAGKAIAIhYgBSAQbCAKamxBA3RqIAkgDmwgAWpBA3RqIBYgFCAHKAKM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IG9mIG1lbW9yeQBKUEVHIGZvcm1hdCBub3Qgc3VwcG9ydGVkOiA4LWJpdCBvbmx5AFBORyBub3Qgc3VwcG9ydGVkOiAxLzIvNC84LzE2LWJpdCBvbmx5AFBJQyBmaWxlIHRvbyBzaG9ydABJbWFnZSBub3Qgb2YgYW55IGtub3duIHR5cGUsIG9yIGNvcnJ1cHQAUFBNIGltYWdlIG5vdCA4LWJpdABQU0QgYml0IGRlcHRoIGlzIG5vdCA4IG9yIDE2IGJpdABKUEVHIGZvcm1hdCBub3Qgc3VwcG9ydGVkOiBkZWxheWVkIGhlaWdodABDYW4ndCBmaW5kIG91dCBUR0EgcGl4ZWxmb3JtYXQAUFNEIGlzIG5vdCBpbiBSR0IgY29sb3IgZm9ybWF0AFBTRCBoYXMgYW4gdW5rbm93biBjb21wcmVzc2lvbiBmb3JtYXQAVW5zdXBwb3J0ZWQgSERSIGZvcm1hdAB0b28gbWFueSBwYWNrZXRzAEludGVybmFsIGVycm9yAHBhY2tldCBpc24ndCA4YnBwAEJNUCB0eXBlIG5vdCBzdXBwb3J0ZWQ6IHVua25vd24Ac2NhbmxpbmUgb3ZlcnJ1bgBwYWNrZXQgaGFzIGJhZCBjb21wcmVzc2lvbiB0eXBlAFBORyBub3Qgc3VwcG9ydGVkOiB1bmtub3duIFBORyBjaHVuayB0eXBlAEhEUiBpbWFnZSBpcyB0b28gbGFyZ2UAR0lGIGltYWdlIGlzIHRvbyBsYXJnZQBQTk0gdG9vIGxhcmdlAENvcnJ1cHQgSERSIGltYWdlAENvcnJ1cHQgUFNEIGltYWdlAFVuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVscyBpbiBQU0QgaW1hZ2UAVW5zdXBwb3J0ZWQgdmVyc2lvbiBvZiBQU0QgaW1hZ2UAUElDIGltYWdlIHRvbyBsYXJnZSB0byBkZWNvZGUASW1hZ2UgdG9vIGxhcmdlIHRvIGRlY29kZQBGT1JNQVQ9MzItYml0X3JsZV9yZ2JlAGJhZCBSTEUgZGF0YQBQSUNUAGNvcnJ1cHQgSERSAGJhZCBSTEUgZGF0YSBpbiBIRFIAQ29ycnVwdCBCTVAAYmFkIEJNUABDb3JydXB0IFBORwBOb3QgYSBQTkcAQ29ycnVwdCBKUEVHAENvcnJ1cHQgR0lGAEJNUCB0eXBlIG5vdCBzdXBwb3J0ZWQ6IFJMRQAjP1JBRElBTkNFACM/UkdCRQBDb3JydXB0IFBTRABDb3JydXB0IFRHQQBTgPY0AGZpbGUgdG9vIHNob3J0IChwdXJlIHJlYWQgY291bnQpAGZpbGUgdG9vIHNob3J0IChtaXhlZCByZWFkIGNvdW50KQBmaWxlIHRvbyBzaG9ydCAocmVhZGluZyBwYWNrZXRzKQBmaWxlIHRvbyBzaG9ydCAocGljIGhlYWRlcikAVmVyeSBsYXJnZSBpbWFnZSAoY29ycnVwdD8pAC1ZIAArWCAAIz9SQURJQU5DRQoAQZERC1EBCBAJAgMKERggGRILBAUMExohKDApIhsUDQYHDhUcIyoxODkyKyQdFg8XHiUsMzo7NC0mHycuNTw9Ni83Pj8/Pz8/Pz8/Pz8/Pz8/Pz9SR0IAQfQRCz4BAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wBBxBILRf/////9////+f////H////h////wf///4H///8B////Af7//wH8//8B+P//AfD//wHg//8BwP//AYD//wD/VQARAAAAAQBBlBMLEQQAAAAAAAAAAgAAAAAAAAABAEG4EwtZBAAAAAAAAAACAAAAAAAAAAEAAAAAAAAACAAAAAgAAAAEAAAABAAAAAIAAAACAAAAAQAAAAAAAAAIAAAACAAAAAgAAAAEAAAABAAAAAIAAAACAAAAAAEABQYAQaQUCx3/AAAAVQAAAEkAAAARAAAAIQAAAEEAAACBAAAAAQBB3BQLEQEAAAAAAAAAAgAAAAQAAAAGAEGAFQvTAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ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";if(!N(O)){var P=O;O=d.locateFile?d.locateFile(P,t):t+P} +function ca(){var a=O;return Promise.resolve().then(()=>{if(a==O&&z)var b=new Uint8Array(z);else{if(N(a)){var c=a.slice(37);if("undefined"!=typeof q&&q)b=Buffer.from(c,"base64"),b=new Uint8Array(b.buffer,b.byteOffset,b.length);else try{var e=atob(c),f=new Uint8Array(e.length);for(c=0;cWebAssembly.instantiate(c,a)).then(c=>c).then(b,c=>{y(`failed to asynchronously prepare wasm: ${c}`);A(c)})}function ea(a,b){return da(a,b)} +var Q=a=>{for(;0{if(a){var c=E,e=a+b;for(b=a;c[b]&&!(b>=e);)++b;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+= +String.fromCharCode(f)}a=e}}else a="";return a},ha={b:(a,b,c)=>E.copyWithin(a,b,b+c),a:a=>{var b=E.length;a>>>=0;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);var f=Math;e=Math.max(a,e);a:{f=(f.min.call(f,2147483648,e+(65536-e%65536)%65536)-B.buffer.byteLength+65535)/65536;try{B.grow(f);F();var g=1;break a}catch(l){}g=void 0}if(g)return!0}return!1}},S=function(){function a(c){S=c=c.exports;B=S.c;F();H.unshift(S.d);J--;d.monitorRunDependencies&&d.monitorRunDependencies(J); +if(0==J&&(null!==K&&(clearInterval(K),K=null),M)){var e=M;M=null;e()}return c}var b={a:ha};J++;d.monitorRunDependencies&&d.monitorRunDependencies(J);if(d.instantiateWasm)try{return d.instantiateWasm(b,a)}catch(c){y(`Module.instantiateWasm callback failed with error: ${c}`),k(c)}ea(b,function(c){a(c.instance)}).catch(k);return{}}();d._webidl_free=a=>(d._webidl_free=S.e)(a);d._free=a=>(d._free=S.f)(a);d._webidl_malloc=a=>(d._webidl_malloc=S.g)(a);d._malloc=a=>(d._malloc=S.h)(a); +var ia=d._emscripten_bind_VoidPtr___destroy___0=a=>(ia=d._emscripten_bind_VoidPtr___destroy___0=S.i)(a),ja=d._emscripten_bind_gdx2d_pixmap_get_width_0=a=>(ja=d._emscripten_bind_gdx2d_pixmap_get_width_0=S.j)(a),ka=d._emscripten_bind_gdx2d_pixmap_set_width_1=(a,b)=>(ka=d._emscripten_bind_gdx2d_pixmap_set_width_1=S.k)(a,b),la=d._emscripten_bind_gdx2d_pixmap_get_height_0=a=>(la=d._emscripten_bind_gdx2d_pixmap_get_height_0=S.l)(a),ma=d._emscripten_bind_gdx2d_pixmap_set_height_1=(a,b)=>(ma=d._emscripten_bind_gdx2d_pixmap_set_height_1= +S.m)(a,b),na=d._emscripten_bind_gdx2d_pixmap_get_format_0=a=>(na=d._emscripten_bind_gdx2d_pixmap_get_format_0=S.n)(a),oa=d._emscripten_bind_gdx2d_pixmap_set_format_1=(a,b)=>(oa=d._emscripten_bind_gdx2d_pixmap_set_format_1=S.o)(a,b),pa=d._emscripten_bind_gdx2d_pixmap_get_blend_0=a=>(pa=d._emscripten_bind_gdx2d_pixmap_get_blend_0=S.p)(a),qa=d._emscripten_bind_gdx2d_pixmap_set_blend_1=(a,b)=>(qa=d._emscripten_bind_gdx2d_pixmap_set_blend_1=S.q)(a,b),ra=d._emscripten_bind_gdx2d_pixmap_get_scale_0=a=>(ra= +d._emscripten_bind_gdx2d_pixmap_get_scale_0=S.r)(a),sa=d._emscripten_bind_gdx2d_pixmap_set_scale_1=(a,b)=>(sa=d._emscripten_bind_gdx2d_pixmap_set_scale_1=S.s)(a,b),ta=d._emscripten_bind_gdx2d_pixmap___destroy___0=a=>(ta=d._emscripten_bind_gdx2d_pixmap___destroy___0=S.t)(a),ua=d._emscripten_bind_Gdx_g2d_get_pixels_1=(a,b)=>(ua=d._emscripten_bind_Gdx_g2d_get_pixels_1=S.u)(a,b),va=d._emscripten_bind_Gdx_g2d_load_3=(a,b,c,e)=>(va=d._emscripten_bind_Gdx_g2d_load_3=S.v)(a,b,c,e),wa=d._emscripten_bind_Gdx_g2d_new_3= +(a,b,c,e)=>(wa=d._emscripten_bind_Gdx_g2d_new_3=S.w)(a,b,c,e),xa=d._emscripten_bind_Gdx_g2d_free_1=(a,b)=>(xa=d._emscripten_bind_Gdx_g2d_free_1=S.x)(a,b),ya=d._emscripten_bind_Gdx_g2d_set_blend_2=(a,b,c)=>(ya=d._emscripten_bind_Gdx_g2d_set_blend_2=S.y)(a,b,c),za=d._emscripten_bind_Gdx_g2d_set_scale_2=(a,b,c)=>(za=d._emscripten_bind_Gdx_g2d_set_scale_2=S.z)(a,b,c),Aa=d._emscripten_bind_Gdx_g2d_get_failure_reason_0=a=>(Aa=d._emscripten_bind_Gdx_g2d_get_failure_reason_0=S.A)(a),Ba=d._emscripten_bind_Gdx_g2d_clear_2= +(a,b,c)=>(Ba=d._emscripten_bind_Gdx_g2d_clear_2=S.B)(a,b,c),Ca=d._emscripten_bind_Gdx_g2d_set_pixel_4=(a,b,c,e,f)=>(Ca=d._emscripten_bind_Gdx_g2d_set_pixel_4=S.C)(a,b,c,e,f),Da=d._emscripten_bind_Gdx_g2d_get_pixel_3=(a,b,c,e)=>(Da=d._emscripten_bind_Gdx_g2d_get_pixel_3=S.D)(a,b,c,e),Ea=d._emscripten_bind_Gdx_g2d_draw_line_6=(a,b,c,e,f,g,l)=>(Ea=d._emscripten_bind_Gdx_g2d_draw_line_6=S.E)(a,b,c,e,f,g,l),Fa=d._emscripten_bind_Gdx_g2d_draw_rect_6=(a,b,c,e,f,g,l)=>(Fa=d._emscripten_bind_Gdx_g2d_draw_rect_6= +S.F)(a,b,c,e,f,g,l),Ga=d._emscripten_bind_Gdx_g2d_draw_circle_5=(a,b,c,e,f,g)=>(Ga=d._emscripten_bind_Gdx_g2d_draw_circle_5=S.G)(a,b,c,e,f,g),Ha=d._emscripten_bind_Gdx_g2d_fill_rect_6=(a,b,c,e,f,g,l)=>(Ha=d._emscripten_bind_Gdx_g2d_fill_rect_6=S.H)(a,b,c,e,f,g,l),Ia=d._emscripten_bind_Gdx_g2d_fill_circle_5=(a,b,c,e,f,g)=>(Ia=d._emscripten_bind_Gdx_g2d_fill_circle_5=S.I)(a,b,c,e,f,g),Ja=d._emscripten_bind_Gdx_g2d_fill_triangle_8=(a,b,c,e,f,g,l,n,r)=>(Ja=d._emscripten_bind_Gdx_g2d_fill_triangle_8=S.J)(a, +b,c,e,f,g,l,n,r),Ka=d._emscripten_bind_Gdx_g2d_draw_pixmap_10=(a,b,c,e,f,g,l,n,r,v,L)=>(Ka=d._emscripten_bind_Gdx_g2d_draw_pixmap_10=S.K)(a,b,c,e,f,g,l,n,r,v,L),La=d._emscripten_bind_Gdx_g2d_bytes_per_pixel_1=(a,b)=>(La=d._emscripten_bind_Gdx_g2d_bytes_per_pixel_1=S.L)(a,b),Ma=d._emscripten_bind_Gdx___destroy___0=a=>(Ma=d._emscripten_bind_Gdx___destroy___0=S.M)(a);d.___start_em_js=9990;d.___stop_em_js=10088;d.UTF8ToString=fa;d.writeArrayToMemory=(a,b)=>{D.set(a,b)};var T; +M=function Na(){T||Oa();T||(M=Na)}; +function Oa(){function a(){if(!T&&(T=!0,d.calledRun=!0,!C)){Q(H);h(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();I.unshift(b)}Q(I)}}if(!(0 Gdx); async function asyncCall() { window.Gdx = await Gdx(); } diff --git a/backends/backend-teavm/src/main/resources/gdx.wasm.wasm b/backends/backend-teavm/src/main/resources/gdx.wasm.wasm deleted file mode 100644 index e388ed6b..00000000 Binary files a/backends/backend-teavm/src/main/resources/gdx.wasm.wasm and /dev/null differ diff --git a/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildTeaVMTestDemo.java b/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildTeaVMTestDemo.java index 7bf076e0..ec63eb4d 100644 --- a/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildTeaVMTestDemo.java +++ b/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildTeaVMTestDemo.java @@ -17,9 +17,10 @@ public static void main(String[] args) throws IOException { teaBuildConfiguration.webappPath = new File("build/dist").getCanonicalPath(); teaBuildConfiguration.logoPath = "logo.png"; + TeaVMTool tool = TeaBuilder.config(teaBuildConfiguration); tool.setMainClass(TeaVMTestLauncher.class.getName()); - tool.setObfuscated(true); + tool.setObfuscated(false); TeaBuilder.build(tool); } } diff --git a/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/launcher/TeaVMTestLauncher.java b/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/launcher/TeaVMTestLauncher.java index d7292073..cf83cff1 100644 --- a/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/launcher/TeaVMTestLauncher.java +++ b/examples/core/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/launcher/TeaVMTestLauncher.java @@ -11,6 +11,7 @@ public static void main(String[] args) { TeaApplicationConfiguration config = new TeaApplicationConfiguration("canvas"); config.width = 0; config.height = 0; + config.showDownloadLogs = true; // new TeaApplication(new GearsDemo(), config); new TeaApplication(new ReadPixelsTest(), config); // new TeaApplication(new PixelTest(), config); diff --git a/examples/freetype/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildFreetypeTest.java b/examples/freetype/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildFreetypeTest.java index b87a47b5..0f3632f5 100644 --- a/examples/freetype/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildFreetypeTest.java +++ b/examples/freetype/teavm/src/main/java/com/github/xpenatan/gdx/examples/teavm/BuildFreetypeTest.java @@ -7,6 +7,7 @@ import java.io.File; import java.io.IOException; import org.teavm.tooling.TeaVMTool; +import org.teavm.vm.TeaVMOptimizationLevel; @SkipClass public class BuildFreetypeTest { @@ -17,6 +18,7 @@ public static void main(String[] args) throws IOException { teaBuildConfiguration.webappPath = new File("build/dist").getCanonicalPath(); TeaVMTool tool = TeaBuilder.config(teaBuildConfiguration); + tool.setOptimizationLevel(TeaVMOptimizationLevel.FULL); tool.setMainClass(FreetypeTestLauncher.class.getName()); tool.setObfuscated(false); TeaBuilder.build(tool); diff --git a/examples/gdx-tests/core/src/main/java/com/badlogic/gdx/tests/TeaVMGdxTests.java b/examples/gdx-tests/core/src/main/java/com/badlogic/gdx/tests/TeaVMGdxTests.java index b63668a2..8fa409f9 100644 --- a/examples/gdx-tests/core/src/main/java/com/badlogic/gdx/tests/TeaVMGdxTests.java +++ b/examples/gdx-tests/core/src/main/java/com/badlogic/gdx/tests/TeaVMGdxTests.java @@ -1,728 +1,337 @@ package com.badlogic.gdx.tests; +import com.badlogic.gdx.tests.bench.TiledMapBench; +import com.badlogic.gdx.tests.conformance.AudioSoundAndMusicIsolationTest; import com.badlogic.gdx.tests.conformance.DisplayModeTest; +import com.badlogic.gdx.tests.examples.MoveSpriteExample; +import com.badlogic.gdx.tests.extensions.FreeTypeAtlasTest; +import com.badlogic.gdx.tests.extensions.FreeTypeDisposeTest; +import com.badlogic.gdx.tests.extensions.FreeTypeFontLoaderTest; +import com.badlogic.gdx.tests.extensions.FreeTypeIncrementalTest; +import com.badlogic.gdx.tests.extensions.FreeTypeMetricsTest; +import com.badlogic.gdx.tests.extensions.FreeTypePackTest; +import com.badlogic.gdx.tests.extensions.FreeTypeTest; +import com.badlogic.gdx.tests.extensions.InternationalFontsTest; +import com.badlogic.gdx.tests.g3d.Animation3DTest; +import com.badlogic.gdx.tests.g3d.AnisotropyTest; +import com.badlogic.gdx.tests.g3d.Basic3DSceneTest; +import com.badlogic.gdx.tests.g3d.Basic3DTest; +import com.badlogic.gdx.tests.g3d.Benchmark3DTest; +import com.badlogic.gdx.tests.g3d.FogTest; +import com.badlogic.gdx.tests.g3d.FrameBufferCubemapTest; +import com.badlogic.gdx.tests.g3d.HeightMapTest; +import com.badlogic.gdx.tests.g3d.LightsTest; +import com.badlogic.gdx.tests.g3d.MaterialEmissiveTest; +import com.badlogic.gdx.tests.g3d.MaterialTest; +import com.badlogic.gdx.tests.g3d.MeshBuilderTest; import com.badlogic.gdx.tests.g3d.ModelCacheTest; +import com.badlogic.gdx.tests.g3d.ModelTest; import com.badlogic.gdx.tests.g3d.MultipleRenderTargetTest; +import com.badlogic.gdx.tests.g3d.ParticleControllerInfluencerSingleTest; +import com.badlogic.gdx.tests.g3d.ParticleControllerTest; +import com.badlogic.gdx.tests.g3d.PolarAccelerationTest; +import com.badlogic.gdx.tests.g3d.ShaderCollectionTest; +import com.badlogic.gdx.tests.g3d.ShaderTest; import com.badlogic.gdx.tests.g3d.ShadowMappingTest; +import com.badlogic.gdx.tests.g3d.SkeletonTest; +import com.badlogic.gdx.tests.g3d.TangentialAccelerationTest; import com.badlogic.gdx.tests.g3d.TextureArrayTest; import com.badlogic.gdx.tests.g3d.TextureRegion3DTest; +import com.badlogic.gdx.tests.g3d.utils.DefaultTextureBinderTest; +import com.badlogic.gdx.tests.gles2.HelloTriangle; +import com.badlogic.gdx.tests.gles2.SimpleVertexShader; import com.badlogic.gdx.tests.gles2.VertexArrayTest; import com.badlogic.gdx.tests.gles3.GL30Texture3DTest; import com.badlogic.gdx.tests.gles3.InstancedRenderingTest; +import com.badlogic.gdx.tests.gles3.ModelInstancedRenderingTest; +import com.badlogic.gdx.tests.gles3.NonPowerOfTwoTest; +import com.badlogic.gdx.tests.gles3.PixelBufferObjectTest; +import com.badlogic.gdx.tests.gles3.UniformBufferObjectsTest; +import com.badlogic.gdx.tests.gles31.GL31FrameBufferMultisampleTest; +import com.badlogic.gdx.tests.gles31.GL31IndirectDrawingIndexedTest; +import com.badlogic.gdx.tests.gles31.GL31IndirectDrawingNonIndexedTest; +import com.badlogic.gdx.tests.gles31.GL31ProgramIntrospectionTest; +import com.badlogic.gdx.tests.gles32.GL32AdvancedBlendingTest; +import com.badlogic.gdx.tests.gles32.GL32DebugControlTest; +import com.badlogic.gdx.tests.gles32.GL32MultipleRenderTargetsBlendingTest; +import com.badlogic.gdx.tests.gles32.GL32OffsetElementsTest; import com.badlogic.gdx.tests.gwt.GwtInputTest; import com.badlogic.gdx.tests.gwt.GwtWindowModeTest; +import com.badlogic.gdx.tests.math.CollisionPlaygroundTest; import com.badlogic.gdx.tests.math.OctreeTest; +import com.badlogic.gdx.tests.math.collision.OrientedBoundingBoxTest; +import com.badlogic.gdx.tests.net.NetAPITest; import com.badlogic.gdx.tests.net.OpenBrowserExample; import com.badlogic.gdx.tests.superkoalio.SuperKoalio; import com.badlogic.gdx.tests.utils.GdxTest; +import com.badlogic.gdx.tests.utils.IssueTest; import java.util.ArrayList; public class TeaVMGdxTests { public static TeaVMInstancer[] getTestList() { - ArrayList test = new ArrayList<>(); + ArrayList tests = new ArrayList<>(); // QUICK TEST ################################### - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new SoundTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new MusicTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new TextureDataTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new FloatTextureTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new TextureRegion3DTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new GL30Texture3DTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new InstancedRenderingTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new TextureArrayTest(); - } - } - ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new MultipleRenderTargetTest(); - } - } - ); + add(tests, SoundTest::new); + add(tests, MusicTest::new); + add(tests, TextureDataTest::new); + add(tests, FloatTextureTest::new); + add(tests, TextureRegion3DTest::new); + add(tests, GL30Texture3DTest::new); + add(tests, InstancedRenderingTest::new); + add(tests, TextureArrayTest::new); + add(tests, MultipleRenderTargetTest::new); // ################################### + add(tests, GwtInputTest::new); + add(tests, GwtWindowModeTest::new); + add(tests, OpenBrowserExample::new); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new AccelerometerTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ActionTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ActionSequenceTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new AlphaTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new AnimationTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new AnnotationTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new AssetManagerTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new AtlasIssueTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BigMeshTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BitmapFontAlignmentTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BitmapFontFlipTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BitmapFontTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BitmapFontMetricsTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BlitTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new BufferUtilsTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ClipboardTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ColorTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ComplexActionTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new CustomShaderSpriteBatchTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new DecalTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new DisplayModeTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new LabelScaleTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new EdgeDetectionTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new FilesTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new FilterPerformanceTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new FrameBufferTest(); -// } -// } -// ); - test.add( - new TeaVMInstancer() { - public GdxTest instance() { - return new DownloadTest(); - } - } - ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new FramebufferToTextureTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GestureDetectorTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GLProfilerErrorTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GroupCullingTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GroupFadeTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GwtInputTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GwtWindowModeTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new I18NSimpleMessageTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ImageScaleTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new IndexBufferObjectShaderTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new IntegerBitmapFontTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new InterpolationTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new InverseKinematicsTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new IsometricTileTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new KinematicBodyTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new LifeCycleTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new LabelTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new MeshShaderTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new MeshWithCustomAttributesTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new MipMapTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ModelCacheTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new MultitouchTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new OctreeTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new OpenBrowserExample(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ParallaxTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ParticleEmitterTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new PixelsPerInchTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new PixmapPackerTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new PixmapTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new PreferencesTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ProjectiveTextureTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new RotationTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ReflectionCorrectnessTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new Scene2dTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ShadowMappingTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ShapeRendererTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SimpleAnimationTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SimpleDecalTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SimpleStageCullingTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SortedSpriteTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SpriteBatchShaderTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SpriteCacheOffsetTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SpriteCacheTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new StageTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SystemCursorTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TableTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TextButtonTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TextureAtlasTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TiledMapObjectLoadingTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new UITest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new VertexBufferObjectShaderTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new YDownTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new SuperKoalio(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new ReflectionTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TiledMapAtlasAssetManagerTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TimeUtilsTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new GWTLossyPremultipliedAlphaTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new QuadTreeFloatTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new QuadTreeFloatNearestTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TextAreaTest(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TextAreaTest2(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new TextAreaTest3(); -// } -// } -// ); -// test.add( -// new TeaVMInstancer() { -// public GdxTest instance() { -// return new VertexArrayTest(); -// } -// } -// ); + // #### START BUILD ERRORS #### +// add(tests, Box2DTest::new); - TeaVMInstancer[] t = new TeaVMInstancer[test.size()]; - return test.toArray(t); +// add(tests, Box2DTestCollection::new); +// add(tests, KinematicBodyTest::new); +// add(tests, BulletTestCollection::new); +// add(tests, PixelBufferObjectTest::new); +// add(tests, ETC1Test::new); +// add(tests, Gdx2DTest::new); +// add(tests, MatrixJNITest::new); +// add(tests, KTXTest::new); +// add(tests, VBOWithVAOPerformanceTest::new); +// add(tests, FreeTypeIncrementalTest::new); + + // #### END BUILD ERRORS #### + + add(tests, IssueTest::new); + add(tests, AccelerometerTest::new); + add(tests, ActionSequenceTest::new); + add(tests, ActionTest::new); + add(tests, Affine2Test::new); + add(tests, AlphaTest::new); + add(tests, Animation3DTest::new); + add(tests, AnimationTest::new); + add(tests, AnisotropyTest::new); + add(tests, AnnotationTest::new); + add(tests, AssetManagerTest::new); + add(tests, AtlasIssueTest::new); + add(tests, AudioChangeDeviceTest::new); + add(tests, AudioDeviceTest::new); + add(tests, AudioRecorderTest::new); + add(tests, AudioSoundAndMusicIsolationTest::new); + add(tests, Basic3DSceneTest::new); + add(tests, Basic3DTest::new); + add(tests, Benchmark3DTest::new); + add(tests, BigMeshTest::new); + add(tests, BitmapFontAlignmentTest::new); + add(tests, BitmapFontDistanceFieldTest::new); + add(tests, BitmapFontFlipTest::new); + add(tests, BitmapFontMetricsTest::new); + add(tests, BitmapFontTest::new); + add(tests, BitmapFontAtlasRegionTest::new); + add(tests, BlitTest::new); + add(tests, Bresenham2Test::new); + add(tests, BufferUtilsTest::new); + add(tests, ClipboardTest::new); + add(tests, CollectionsTest::new); + add(tests, CollisionPlaygroundTest::new); + add(tests, ColorTest::new); + add(tests, ContainerTest::new); + add(tests, CoordinatesTest::new); + add(tests, CpuSpriteBatchTest::new); + add(tests, CullTest::new); + add(tests, CursorTest::new); + add(tests, DecalTest::new); + add(tests, DefaultTextureBinderTest::new); + add(tests, DelaunayTriangulatorTest::new); + add(tests, DeltaTimeTest::new); + add(tests, DirtyRenderingTest::new); + add(tests, DisplayModeTest::new); + add(tests, DownloadTest::new); + add(tests, DragAndDropTest::new); + add(tests, EdgeDetectionTest::new); + add(tests, ExitTest::new); + add(tests, ExternalMusicTest::new); + add(tests, FilesTest::new); + add(tests, FilterPerformanceTest::new); + add(tests, FogTest::new); + add(tests, FrameBufferCubemapTest::new); + add(tests, FrameBufferTest::new); + add(tests, FramebufferToTextureTest::new); + add(tests, FullscreenTest::new); + add(tests, GestureDetectorTest::new); + add(tests, GLES30Test::new); + add(tests, GL31IndirectDrawingIndexedTest::new); + add(tests, GL31IndirectDrawingNonIndexedTest::new); + add(tests, GL31FrameBufferMultisampleTest::new); + add(tests, GL31ProgramIntrospectionTest::new); + add(tests, GL32AdvancedBlendingTest::new); + add(tests, GL32DebugControlTest::new); + add(tests, GL32MultipleRenderTargetsBlendingTest::new); + add(tests, GL32OffsetElementsTest::new); + add(tests, GLProfilerErrorTest::new); + add(tests, GroupCullingTest::new); + add(tests, GroupFadeTest::new); + add(tests, GroupTest::new); + add(tests, HeightMapTest::new); + add(tests, HelloTriangle::new); + add(tests, HexagonalTiledMapTest::new); + add(tests, I18NMessageTest::new); + add(tests, I18NSimpleMessageTest::new); + add(tests, ImageScaleTest::new); + add(tests, ImageTest::new); + add(tests, ImmediateModeRendererTest::new); + add(tests, IndexBufferObjectShaderTest::new); + add(tests, InputTest::new); + add(tests, IntegerBitmapFontTest::new); + add(tests, InterpolationTest::new); + add(tests, IntersectorOverlapConvexPolygonsTest::new); + add(tests, InverseKinematicsTest::new); + add(tests, IsometricTileTest::new); + add(tests, LabelScaleTest::new); + add(tests, LabelTest::new); + add(tests, LifeCycleTest::new); + add(tests, LightsTest::new); + add(tests, MaterialTest::new); + add(tests, MaterialEmissiveTest::new); + add(tests, MeshBuilderTest::new); + add(tests, MeshShaderTest::new); + add(tests, MeshWithCustomAttributesTest::new); + add(tests, MipMapTest::new); + add(tests, ModelTest::new); + add(tests, ModelCacheTest::new); + add(tests, ModelInstancedRenderingTest::new); + add(tests, MoveSpriteExample::new); + add(tests, MultitouchTest::new); + add(tests, NetAPITest::new); + add(tests, NinePatchTest::new); + add(tests, NoncontinuousRenderingTest::new); + add(tests, NonPowerOfTwoTest::new); + add(tests, OctreeTest::new); + add(tests, OnscreenKeyboardTest::new); + add(tests, OrientedBoundingBoxTest::new); + add(tests, PathTest::new); + add(tests, ParallaxTest::new); + add(tests, ParticleControllerInfluencerSingleTest::new); + add(tests, ParticleControllerTest::new); + add(tests, ParticleEmitterTest::new); + add(tests, ParticleEmittersTest::new); + add(tests, ParticleEmitterChangeSpriteTest::new); + add(tests, PixelsPerInchTest::new); + add(tests, PixmapBlendingTest::new); + add(tests, PixmapPackerTest::new); + add(tests, PixmapPackerIOTest::new); + add(tests, PixmapTest::new); + add(tests, PolarAccelerationTest::new); + add(tests, PolygonRegionTest::new); + add(tests, PolygonSpriteTest::new); + add(tests, PreferencesTest::new); + add(tests, ProjectTest::new); + add(tests, ProjectiveTextureTest::new); + add(tests, ReflectionTest::new); + add(tests, ReflectionCorrectnessTest::new); + add(tests, RotationTest::new); + add(tests, RunnablePostTest::new); + add(tests, Scene2dTest::new); + add(tests, ScrollPane2Test::new); + add(tests, ScrollPaneScrollBarsTest::new); + add(tests, ScrollPaneTest::new); + add(tests, ScrollPaneTextAreaTest::new); + add(tests, ScrollPaneWithDynamicScrolling::new); + add(tests, SelectTest::new); + add(tests, SensorTest::new); + add(tests, ShaderCollectionTest::new); + add(tests, ShaderMultitextureTest::new); + add(tests, ShaderTest::new); + add(tests, ShadowMappingTest::new); + add(tests, ShapeRendererTest::new); + add(tests, ShapeRendererAlphaTest::new); + add(tests, SimpleAnimationTest::new); + add(tests, SimpleDecalTest::new); + add(tests, SimpleStageCullingTest::new); + add(tests, SimpleVertexShader::new); + add(tests, SkeletonTest::new); + add(tests, SoftKeyboardTest::new); + add(tests, SortedSpriteTest::new); + add(tests, SpriteBatchRotationTest::new); + add(tests, SpriteBatchShaderTest::new); + add(tests, SpriteBatchTest::new); + add(tests, SpriteCacheOffsetTest::new); + add(tests, SpriteCacheTest::new); + add(tests, StageDebugTest::new); + add(tests, StagePerformanceTest::new); + add(tests, StageTest::new); + add(tests, SuperKoalio::new); + add(tests, SystemCursorTest::new); + add(tests, TableLayoutTest::new); + add(tests, TableTest::new); + add(tests, TangentialAccelerationTest::new); + add(tests, TextAreaTest::new); + add(tests, TextAreaTest2::new); + add(tests, TextAreaTest3::new); + add(tests, TextButtonTest::new); + add(tests, TextInputDialogTest::new); + add(tests, TextureAtlasTest::new); + add(tests, TextureDownloadTest::new); + add(tests, TextureFormatTest::new); + add(tests, TideMapAssetManagerTest::new); + add(tests, TideMapDirectLoaderTest::new); + add(tests, TiledDrawableTest::new); + add(tests, TileTest::new); + add(tests, TiledMapAnimationLoadingTest::new); + add(tests, TiledMapAssetManagerTest::new); + add(tests, TiledMapGroupLayerTest::new); + add(tests, TiledMapAtlasAssetManagerTest::new); + add(tests, TiledMapDirectLoaderTest::new); + add(tests, TiledMapModifiedExternalTilesetTest::new); + add(tests, TiledMapObjectLoadingTest::new); + add(tests, TiledMapObjectPropertyTest::new); + add(tests, TiledMapBench::new); + add(tests, TiledMapLayerOffsetTest::new); + add(tests, TimerTest::new); + add(tests, TimeUtilsTest::new); + add(tests, TouchpadTest::new); + add(tests, TreeTest::new); + add(tests, UISimpleTest::new); + add(tests, UITest::new); + add(tests, UniformBufferObjectsTest::new); + add(tests, UtfFontTest::new); + add(tests, Vector2dTest::new); + add(tests, VertexArrayTest::new); + add(tests, VertexBufferObjectShaderTest::new); + add(tests, VibratorTest::new); + add(tests, ViewportTest1::new); + add(tests, ViewportTest2::new); + add(tests, ViewportTest3::new); + add(tests, YDownTest::new); + add(tests, FreeTypeFontLoaderTest::new); + add(tests, FreeTypeDisposeTest::new); + add(tests, FreeTypeMetricsTest::new); + add(tests, FreeTypePackTest::new); + add(tests, FreeTypeAtlasTest::new); + add(tests, FreeTypeTest::new); + add(tests, InternationalFontsTest::new); + add(tests, PngTest::new); + add(tests, JsonTest::new); + add(tests, QuadTreeFloatTest::new); + add(tests, QuadTreeFloatNearestTest::new); + + TeaVMInstancer[] t = new TeaVMInstancer[tests.size()]; + return tests.toArray(t); + } + + private static void add(ArrayList tests, GdxRunnable instance) { + tests.add(new TeaVMInstancer() { + public GdxTest instance() { + return instance.run(); + } + }); + } + + public interface GdxRunnable { + GdxTest run(); } public abstract static class TeaVMInstancer implements AbstractTestWrapper.Instancer { diff --git a/examples/gdx-tests/core/src/main/java/com/github/xpenatan/imgui/example/tests/imgui/ImGuiTestsApp.java b/examples/gdx-tests/core/src/main/java/com/github/xpenatan/imgui/example/tests/imgui/ImGuiTestsApp.java index 290e33d6..41a6746d 100644 --- a/examples/gdx-tests/core/src/main/java/com/github/xpenatan/imgui/example/tests/imgui/ImGuiTestsApp.java +++ b/examples/gdx-tests/core/src/main/java/com/github/xpenatan/imgui/example/tests/imgui/ImGuiTestsApp.java @@ -10,12 +10,12 @@ import com.badlogic.gdx.tests.TeaVMGdxTests; import com.github.xpenatan.gdx.multiview.EmuFrameBuffer; import com.github.xpenatan.imgui.example.tests.frame.GameFrame; -import com.github.xpenatan.imgui.gdx.ImGuiGdxImpl; -import com.github.xpenatan.imgui.gdx.ImGuiGdxInputMultiplexer; import imgui.ImDrawData; import imgui.ImGui; import imgui.ImGuiIO; import imgui.ImVec2; +import imgui.gdx.ImGuiGdxImpl; +import imgui.gdx.ImGuiGdxInputMultiplexer; /** * Requires Gdx-test diff --git a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/FreeTypePixmap.java b/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/FreeTypePixmap.java deleted file mode 100644 index d10b9e4d..00000000 --- a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/FreeTypePixmap.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.badlogic.gdx.graphics; - -import com.github.xpenatan.gdx.backends.teavm.dom.CanvasRenderingContext2DWrapper; -import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.ArrayBufferViewWrapper; -import java.nio.ByteBuffer; -import org.teavm.jso.JSBody; - -/** - * @author Simon Gerst - */ -public class FreeTypePixmap extends PixmapEmu { - - ByteBuffer buffer; - - public FreeTypePixmap(int width, int height, PixmapEmu.FormatEmu format) { - super(width, height, format); - } - - public void setPixelsNull() { - pixels = null; - } - - public static ByteBuffer getRealPixels(PixmapEmu pixmap) { - if(pixmap.getWidth() == 0 || pixmap.getHeight() == 0) { - return FreeTypeUtil.newDirectReadWriteByteBuffer(); - } - if(pixmap.pixels == null) { - pixmap.pixels = pixmap.getContext().getImageData(0, 0, pixmap.getWidth(), pixmap.getHeight()).getData(); - pixmap.buffer = FreeTypeUtil.newDirectReadWriteByteBuffer(pixmap.pixels); - return pixmap.buffer; - } - return pixmap.buffer; - } - - public static void putPixelsBack(PixmapEmu pixmap, ByteBuffer pixels) { - if(pixmap.getWidth() == 0 || pixmap.getHeight() == 0) return; - ArrayBufferViewWrapper typedArray = FreeTypeUtil.getTypedArray(pixels); - putPixelsBack(typedArray, pixmap.getWidth(), pixmap.getHeight(), pixmap.getContext()); - } - - @JSBody(params = {"pixels", "width", "height", "ctx"}, script = "" + - "var imgData = ctx.createImageData(width, height);" + - "var data = imgData.data;" + - "for (var i = 0, len = width * height * 4; i < len; i++) {" + - "data[i] = pixels[i] & 0xff;" + - "}" + - "ctx.putImageData(imgData, 0, 0);") - private static native void putPixelsBack(ArrayBufferViewWrapper pixels, int width, int height, CanvasRenderingContext2DWrapper ctx); -} \ No newline at end of file diff --git a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeType.java b/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeEmu.java similarity index 87% rename from extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeType.java rename to extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeEmu.java index cdb232a7..4ec86fa6 100644 --- a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeType.java +++ b/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeEmu.java @@ -19,9 +19,8 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.FreeTypePixmap; import com.badlogic.gdx.graphics.FreeTypeUtil; -import com.badlogic.gdx.graphics.PixmapEmu; +import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.utils.BufferUtils; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.GdxRuntimeException; @@ -31,6 +30,7 @@ import com.github.xpenatan.gdx.backends.teavm.TeaApplication; import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.ArrayBufferViewWrapper; import com.github.xpenatan.gdx.backends.teavm.dom.typedarray.Int8ArrayWrapper; +import com.github.xpenatan.gdx.backends.teavm.gen.Emulate; import com.github.xpenatan.gdx.backends.teavm.preloader.Preloader; import java.io.IOException; import java.io.InputStream; @@ -38,7 +38,8 @@ import java.nio.IntBuffer; import org.teavm.jso.JSBody; -public class FreeType { +@Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType") +public class FreeTypeEmu { // @off /*JNI #include @@ -57,18 +58,20 @@ public class FreeType { @JSBody(script = "return Module._c_FreeType_getLastErrorCode();") static native int getLastErrorCode(); - private static class Pointer { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Pointer") + private static class PointerEmu { int address; - Pointer(int address) { + PointerEmu(int address) { this.address = address; } } - public static class Library extends Pointer implements Disposable { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Library") + public static class LibraryEmu extends PointerEmu implements Disposable { LongMap fontData = new LongMap(); - Library(int address) { + LibraryEmu(int address) { super(address); } @@ -83,7 +86,7 @@ public void dispose() { @JSBody(params = {"library"}, script = "Module._c_Library_doneFreeType(library);") private static native void doneFreeType(int library); - public Face newFace(FileHandle fontFile, int faceIndex) { + public FaceEmu newFace(FileHandle fontFile, int faceIndex) { ByteBuffer buffer = null; try { //buffer = fontFile.map(); //method missing in gwt emulation @@ -117,13 +120,13 @@ public Face newFace(FileHandle fontFile, int faceIndex) { return newMemoryFace(buffer, faceIndex); } - public Face newMemoryFace(byte[] data, int dataSize, int faceIndex) { + public FaceEmu newMemoryFace(byte[] data, int dataSize, int faceIndex) { ByteBuffer buffer = BufferUtils.newByteBuffer(data.length); BufferUtils.copy(data, 0, buffer, data.length); return newMemoryFace(buffer, faceIndex); } - public Face newMemoryFace(ByteBuffer buffer, int faceIndex) { + public FaceEmu newMemoryFace(ByteBuffer buffer, int faceIndex) { ArrayBufferViewWrapper buf = FreeTypeUtil.getTypedArray(buffer); int[] addressToFree = new int[]{0}; // Hacky way to get two return values @@ -136,7 +139,7 @@ public Face newMemoryFace(ByteBuffer buffer, int faceIndex) { } else { fontData.put(face, addressToFree[0]); - return new Face(face, this); + return new FaceEmu(face, this); } } @@ -148,21 +151,22 @@ public Face newMemoryFace(ByteBuffer buffer, int faceIndex) { "return ret") private static native int newMemoryFace(int library, ArrayBufferViewWrapper data, int dataSize, int faceIndex, int[] outAddressToFree); - public Stroker createStroker() { + public StrokerEmu createStroker() { int stroker = strokerNew(address); if(stroker == 0) throw new GdxRuntimeException("Couldn't create FreeType stroker, FreeType error code: " + getLastErrorCode()); - return new Stroker(stroker); + return new StrokerEmu(stroker); } @JSBody(params = {"library"}, script = "return Module._c_Library_strokerNew(library);") private static native int strokerNew(int library); } - public static class Face extends Pointer implements Disposable { - Library library; + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Face") + public static class FaceEmu extends PointerEmu implements Disposable { + LibraryEmu library; - public Face(int address, Library library) { + public FaceEmu(int address, LibraryEmu library) { super(address); this.library = library; } @@ -285,15 +289,15 @@ public boolean loadChar(int charCode, int loadFlags) { @JSBody(params = {"face", "charCode", "loadFlags"}, script = "return !!Module._c_Face_loadChar(face, charCode, loadFlags);") private static native boolean loadChar(int face, int charCode, int loadFlags); - public GlyphSlot getGlyph() { - return new GlyphSlot(getGlyph(address)); + public GlyphSlotEmu getGlyph() { + return new GlyphSlotEmu(getGlyph(address)); } @JSBody(params = {"face"}, script = "return Module._c_Face_getGlyph(face);") private static native int getGlyph(int face); - public Size getSize() { - return new Size(getSize(address)); + public SizeEmu getSize() { + return new SizeEmu(getSize(address)); } @JSBody(params = {"face"}, script = "return Module._c_Face_getSize(face);") @@ -321,21 +325,23 @@ public int getCharIndex(int charCode) { private static native int getCharIndex(int face, int charCode); } - public static class Size extends Pointer { - Size(int address) { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Size") + public static class SizeEmu extends PointerEmu { + SizeEmu(int address) { super(address); } - public SizeMetrics getMetrics() { - return new SizeMetrics(getMetrics(address)); + public SizeMetricsEmu getMetrics() { + return new SizeMetricsEmu(getMetrics(address)); } @JSBody(params = {"address"}, script = "return Module._c_Size_getMetrics(address);") private static native int getMetrics(int address); } - public static class SizeMetrics extends Pointer { - SizeMetrics(int address) { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$SizeMetrics") + public static class SizeMetricsEmu extends PointerEmu { + SizeMetricsEmu(int address) { super(address); } @@ -396,13 +402,14 @@ public int getMaxAdvance() { private static native int getMaxAdvance(int metrics); } - public static class GlyphSlot extends Pointer { - GlyphSlot(int address) { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$GlyphSlot") + public static class GlyphSlotEmu extends PointerEmu { + GlyphSlotEmu(int address) { super(address); } - public GlyphMetrics getMetrics() { - return new GlyphMetrics(getMetrics(address)); + public GlyphMetricsEmu getMetrics() { + return new GlyphMetricsEmu(getMetrics(address)); } @JSBody(params = {"slot"}, script = "return Module._c_GlyphSlot_getMetrics(slot);") @@ -443,8 +450,8 @@ public int getFormat() { @JSBody(params = {"slot"}, script = "return Module._c_GlyphSlot_getFormat(slot);") private static native int getFormat(int slot); - public Bitmap getBitmap() { - return new Bitmap(getBitmap(address)); + public BitmapEmu getBitmap() { + return new BitmapEmu(getBitmap(address)); } @JSBody(params = {"slot"}, script = "return Module._c_GlyphSlot_getBitmap(slot);") @@ -471,21 +478,22 @@ public boolean renderGlyph(int renderMode) { @JSBody(params = {"slot", "renderMode"}, script = "return !!Module._c_GlyphSlot_renderGlyph(slot, renderMode);") private static native boolean renderGlyph(int slot, int renderMode); - public Glyph getGlyph() { + public GlyphEmu getGlyph() { int glyph = getGlyph(address); if(glyph == 0) throw new GdxRuntimeException("Couldn't get glyph, FreeType error code: " + getLastErrorCode()); - return new Glyph(glyph); + return new GlyphEmu(glyph); } @JSBody(params = {"glyphSlot"}, script = "return Module._c_GlyphSlot_getGlyph(glyphSlot);") private static native int getGlyph(int glyphSlot); } - public static class Glyph extends Pointer implements Disposable { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Glyph") + public static class GlyphEmu extends PointerEmu implements Disposable { private boolean rendered; - Glyph(int address) { + GlyphEmu(int address) { super(address); } @@ -501,7 +509,7 @@ private int bTI(boolean bool) { return bool == true ? 1 : 0; } - public void strokeBorder(Stroker stroker, boolean inside) { + public void strokeBorder(StrokerEmu stroker, boolean inside) { address = strokeBorder(address, stroker.address, bTI(inside)); } @@ -519,11 +527,11 @@ public void toBitmap(int renderMode) { @JSBody(params = {"glyph", "renderMode"}, script = "return Module._c_Glyph_toBitmap(glyph, renderMode);") private static native int toBitmap(int glyph, int renderMode); - public Bitmap getBitmap() { + public BitmapEmu getBitmap() { if(!rendered) { throw new GdxRuntimeException("Glyph is not yet rendered"); } - return new Bitmap(getBitmap(address)); + return new BitmapEmu(getBitmap(address)); } @JSBody(params = {"glyph"}, script = "return Module._c_Glyph_getBitmap(glyph);") @@ -550,8 +558,9 @@ public int getTop() { private static native int getTop(int glyph); } - public static class Bitmap extends Pointer { - Bitmap(int address) { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Bitmap") + public static class BitmapEmu extends PointerEmu { + BitmapEmu(int address) { super(address); } @@ -603,33 +612,29 @@ public ByteBuffer getBuffer() { private static native Int8ArrayWrapper getBuffer(int bitmap, int offset, int length); // @on - public PixmapEmu getPixmap(PixmapEmu.FormatEmu format, Color color, float gamma) { + public Pixmap getPixmap (Pixmap.Format format, Color color, float gamma) { int width = getWidth(), rows = getRows(); ByteBuffer src = getBuffer(); - FreeTypePixmap pixmap; - ByteBuffer changedPixels; + Pixmap pixmap; int pixelMode = getPixelMode(); int rowBytes = Math.abs(getPitch()); // We currently ignore negative pitch. - if(color == Color.WHITE && pixelMode == FT_PIXEL_MODE_GRAY && rowBytes == width && gamma == 1) { - pixmap = new FreeTypePixmap(width, rows, PixmapEmu.FormatEmu.Alpha); - changedPixels = FreeTypePixmap.getRealPixels(pixmap); - BufferUtils.copy(src, changedPixels, changedPixels.capacity()); - } - else { - pixmap = new FreeTypePixmap(width, rows, PixmapEmu.FormatEmu.RGBA8888); + if (color == Color.WHITE && pixelMode == FT_PIXEL_MODE_GRAY && rowBytes == width && gamma == 1) { + pixmap = new Pixmap(width, rows, Pixmap.Format.Alpha); + BufferUtils.copy(src, pixmap.getPixels(), pixmap.getPixels().capacity()); + } else { + pixmap = new Pixmap(width, rows, Pixmap.Format.RGBA8888); int rgba = Color.rgba8888(color); byte[] srcRow = new byte[rowBytes]; int[] dstRow = new int[width]; - changedPixels = FreeTypePixmap.getRealPixels(pixmap); - IntBuffer dst = changedPixels.asIntBuffer(); - if(pixelMode == FT_PIXEL_MODE_MONO) { + IntBuffer dst = pixmap.getPixels().asIntBuffer(); + if (pixelMode == FT_PIXEL_MODE_MONO) { // Use the specified color for each set bit. - for(int y = 0; y < rows; y++) { + for (int y = 0; y < rows; y++) { src.get(srcRow); - for(int i = 0, x = 0; x < width; i++, x += 8) { + for (int i = 0, x = 0; x < width; i++, x += 8) { byte b = srcRow[i]; - for(int ii = 0, n = Math.min(8, width - x); ii < n; ii++) { - if((b & (1 << (7 - ii))) != 0) + for (int ii = 0, n = Math.min(8, width - x); ii < n; ii++) { + if ((b & (1 << (7 - ii))) != 0) dstRow[x + ii] = rgba; else dstRow[x + ii] = 0; @@ -637,21 +642,20 @@ public PixmapEmu getPixmap(PixmapEmu.FormatEmu format, Color color, float gamma) } dst.put(dstRow); } - } - else { + } else { // Use the specified color for RGB, blend the FreeType bitmap with alpha. int rgb = rgba & 0xffffff00; int a = rgba & 0xff; - for(int y = 0; y < rows; y++) { + for (int y = 0; y < rows; y++) { src.get(srcRow); - for(int x = 0; x < width; x++) { + for (int x = 0; x < width; x++) { // Zero raised to any power is always zero. // 255 (=one) raised to any power is always one. // We only need Math.pow() when alpha is NOT zero and NOT one. int alpha = srcRow[x] & 0xff; - if(alpha == 0) + if (alpha == 0) dstRow[x] = rgb; - else if(alpha == 255) + else if (alpha == 255) dstRow[x] = rgb | a; else dstRow[x] = rgb | (int)(a * (float)Math.pow(alpha / 255f, gamma)); // Inverse gamma. @@ -661,15 +665,12 @@ else if(alpha == 255) } } - FreeTypePixmap.putPixelsBack(pixmap, changedPixels); - pixmap.setPixelsNull(); - - PixmapEmu converted = pixmap; - if(format != pixmap.getFormat()) { - converted = new PixmapEmu(pixmap.getWidth(), pixmap.getHeight(), format); - converted.setBlending(PixmapEmu.BlendingEmu.None); + Pixmap converted = pixmap; + if (format != pixmap.getFormat()) { + converted = new Pixmap(pixmap.getWidth(), pixmap.getHeight(), format); + converted.setBlending(Pixmap.Blending.None); converted.drawPixmap(pixmap, 0, 0); - converted.setBlending(PixmapEmu.BlendingEmu.SourceOver); + converted.setBlending(Pixmap.Blending.SourceOver); pixmap.dispose(); } return converted; @@ -691,8 +692,9 @@ public int getPixelMode() { private static native int getPixelMode(int bitmap); } - public static class GlyphMetrics extends Pointer { - GlyphMetrics(int address) { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$GlyphMetrics") + public static class GlyphMetricsEmu extends PointerEmu { + GlyphMetricsEmu(int address) { super(address); } @@ -753,8 +755,9 @@ public int getVertAdvance() { private static native int getVertAdvance(int metrics); } - public static class Stroker extends Pointer implements Disposable { - Stroker(int address) { + @Emulate(valueStr = "com.badlogic.gdx.graphics.g2d.freetype.FreeType$Stroker") + public static class StrokerEmu extends PointerEmu implements Disposable { + StrokerEmu(int address) { super(address); } @@ -864,7 +867,7 @@ private static int encode(char a, char b, char c, char d) { private static boolean freeTypeInit; - public static Library initFreeType() { + public static LibraryEmu initFreeType() { if(!freeTypeInit) { TeaApplication app = (TeaApplication)Gdx.app; Preloader preloader = app.getPreloader(); @@ -886,7 +889,7 @@ public void onFailure(String url) { if(address == 0) throw new GdxRuntimeException("Couldn't initialize FreeType library"); else - return new Library(address); + return new LibraryEmu(address); } @JSBody(script = "return Module._c_FreeType_initFreeTypeJni();") diff --git a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeFontGenerator.java b/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeFontGenerator.java deleted file mode 100644 index 29e9a333..00000000 --- a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeFontGenerator.java +++ /dev/null @@ -1,912 +0,0 @@ -/******************************************************************************* - * Copyright 2011 See AUTHORS file. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -package com.badlogic.gdx.graphics.g2d.freetype; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.FreeTypePixmap; -import com.badlogic.gdx.graphics.PixmapEmu; -import com.badlogic.gdx.graphics.Texture.TextureFilter; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.BitmapFont.BitmapFontData; -import com.badlogic.gdx.graphics.g2d.BitmapFont.Glyph; -import com.badlogic.gdx.graphics.g2d.GlyphLayout.GlyphRun; -import com.badlogic.gdx.graphics.g2d.PixmapPacker; -import com.badlogic.gdx.graphics.g2d.PixmapPacker.GuillotineStrategy; -import com.badlogic.gdx.graphics.g2d.PixmapPacker.PackStrategy; -import com.badlogic.gdx.graphics.g2d.PixmapPacker.SkylineStrategy; -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.Bitmap; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.Face; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.GlyphMetrics; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.GlyphSlot; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.Library; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.SizeMetrics; -import com.badlogic.gdx.graphics.g2d.freetype.FreeType.Stroker; -import com.badlogic.gdx.math.MathUtils; -import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Disposable; -import com.badlogic.gdx.utils.GdxRuntimeException; -import com.badlogic.gdx.graphics.Pixmap; -import java.nio.ByteBuffer; - -/** - * Generates {@link BitmapFont} and {@link BitmapFontData} instances from TrueType, OTF, and other FreeType supported fonts. - *

- *

- * Usage example: - * - *

- * FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("myfont.ttf"));
- * BitmapFont font = gen.generateFont(16);
- * gen.dispose(); // Don't dispose if doing incremental glyph generation.
- * 
- *

- * The generator has to be disposed once it is no longer used. The returned {@link BitmapFont} instances are managed by the user - * and have to be disposed as usual. - * - * @author mzechner - * @author Nathan Sweet - * @author Rob Rendell - */ -public class FreeTypeFontGenerator implements Disposable { - static public final String DEFAULT_CHARS = "\u0000ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890\"!`?'.,;:()[]{}<>|/@\\^$€-%+=#_&~*\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF"; - - /** - * A hint to scale the texture as needed, without capping it at any maximum size - */ - static public final int NO_MAXIMUM = -1; - - /** - * The maximum texture size allowed by generateData, when storing in a texture atlas. Multiple texture pages will be created - * if necessary. Default is 1024. - * - * @see #setMaxTextureSize(int) - */ - static private int maxTextureSize = 1024; - - final Library library; - final Face face; - final String name; - boolean bitmapped = false; - private int pixelWidth, pixelHeight; - - /** - * {@link #FreeTypeFontGenerator(FileHandle, int)} - */ - public FreeTypeFontGenerator(FileHandle fontFile) { - this(fontFile, 0); - } - - /** - * Creates a new generator from the given font file. Uses {@link FileHandle#length()} to determine the file size. If the file - * length could not be determined (it was 0), an extra copy of the font bytes is performed. Throws a - * {@link GdxRuntimeException} if loading did not succeed. - */ - public FreeTypeFontGenerator(FileHandle fontFile, int faceIndex) { - name = fontFile.nameWithoutExtension(); - library = FreeType.initFreeType(); - face = library.newFace(fontFile, faceIndex); - if(checkForBitmapFont()) return; - setPixelSizes(0, 15); - } - - private int getLoadingFlags(FreeTypeFontParameter parameter) { - int loadingFlags = FreeType.FT_LOAD_DEFAULT; - switch(parameter.hinting) { - case None: - loadingFlags |= FreeType.FT_LOAD_NO_HINTING; - break; - case Slight: - loadingFlags |= FreeType.FT_LOAD_TARGET_LIGHT; - break; - case Medium: - loadingFlags |= FreeType.FT_LOAD_TARGET_NORMAL; - break; - case Full: - loadingFlags |= FreeType.FT_LOAD_TARGET_MONO; - break; - case AutoSlight: - loadingFlags |= FreeType.FT_LOAD_FORCE_AUTOHINT | FreeType.FT_LOAD_TARGET_LIGHT; - break; - case AutoMedium: - loadingFlags |= FreeType.FT_LOAD_FORCE_AUTOHINT | FreeType.FT_LOAD_TARGET_NORMAL; - break; - case AutoFull: - loadingFlags |= FreeType.FT_LOAD_FORCE_AUTOHINT | FreeType.FT_LOAD_TARGET_MONO; - break; - } - return loadingFlags; - } - - private boolean loadChar(int c) { - return loadChar(c, FreeType.FT_LOAD_DEFAULT | FreeType.FT_LOAD_FORCE_AUTOHINT); - } - - private boolean loadChar(int c, int flags) { - return face.loadChar(c, flags); - } - - private boolean checkForBitmapFont() { - int faceFlags = face.getFaceFlags(); - if(((faceFlags & FreeType.FT_FACE_FLAG_FIXED_SIZES) == FreeType.FT_FACE_FLAG_FIXED_SIZES) - && ((faceFlags & FreeType.FT_FACE_FLAG_HORIZONTAL) == FreeType.FT_FACE_FLAG_HORIZONTAL)) { - if(loadChar(32)) { - GlyphSlot slot = face.getGlyph(); - if(slot.getFormat() == 1651078259) { - bitmapped = true; - } - } - } - return bitmapped; - } - - public BitmapFont generateFont(FreeTypeFontParameter parameter) { - return generateFont(parameter, new FreeTypeBitmapFontData()); - } - - /** - * Generates a new {@link BitmapFont}. The size is expressed in pixels. Throws a GdxRuntimeException if the font could not be - * generated. Using big sizes might cause such an exception. - * - * @param parameter configures how the font is generated - */ - public BitmapFont generateFont(FreeTypeFontParameter parameter, FreeTypeBitmapFontData data) { - boolean updateTextureRegions = data.regions == null && parameter.packer != null; - if(updateTextureRegions) data.regions = new Array(); - generateData(parameter, data); - if(updateTextureRegions) - parameter.packer.updateTextureRegions(data.regions, parameter.minFilter, parameter.magFilter, parameter.genMipMaps); - if(data.regions.isEmpty()) throw new GdxRuntimeException("Unable to create a font with no texture regions."); - BitmapFont font = new BitmapFont(data, data.regions, true); - font.setOwnsTexture(parameter.packer == null); - return font; - } - - /** - * Uses ascender and descender of font to calculate real height that makes all glyphs to fit in given pixel size. Source: - * http://nothings.org/stb/stb_truetype.h / stbtt_ScaleForPixelHeight - */ - public int scaleForPixelHeight(int height) { - setPixelSizes(0, height); - SizeMetrics fontMetrics = face.getSize().getMetrics(); - int ascent = FreeType.toInt(fontMetrics.getAscender()); - int descent = FreeType.toInt(fontMetrics.getDescender()); - return height * height / (ascent - descent); - } - - /** - * Uses max advance, ascender and descender of font to calculate real height that makes any n glyphs to fit in given pixel - * width. - * - * @param width the max width to fit (in pixels) - * @param numChars max number of characters that to fill width - */ - public int scaleForPixelWidth(int width, int numChars) { - SizeMetrics fontMetrics = face.getSize().getMetrics(); - int advance = FreeType.toInt(fontMetrics.getMaxAdvance()); - int ascent = FreeType.toInt(fontMetrics.getAscender()); - int descent = FreeType.toInt(fontMetrics.getDescender()); - int unscaledHeight = ascent - descent; - int height = unscaledHeight * width / (advance * numChars); - setPixelSizes(0, height); - return height; - } - - /** - * Uses max advance, ascender and descender of font to calculate real height that makes any n glyphs to fit in given pixel - * width and height. - * - * @param width the max width to fit (in pixels) - * @param height the max height to fit (in pixels) - * @param numChars max number of characters that to fill width - */ - public int scaleToFitSquare(int width, int height, int numChars) { - return Math.min(scaleForPixelHeight(height), scaleForPixelWidth(width, numChars)); - } - - public class GlyphAndBitmap { - public Glyph glyph; - public Bitmap bitmap; - } - - /** - * Returns null if glyph was not found. If there is nothing to render, for example with various space characters, then bitmap - * is null. - */ - public GlyphAndBitmap generateGlyphAndBitmap(int c, int size, boolean flip) { - setPixelSizes(0, size); - - SizeMetrics fontMetrics = face.getSize().getMetrics(); - int baseline = FreeType.toInt(fontMetrics.getAscender()); - - // Check if character exists in this font. - // 0 means 'undefined character code' - if(face.getCharIndex(c) == 0) { - return null; - } - - // Try to load character - if(!loadChar(c)) { - throw new GdxRuntimeException("Unable to load character!"); - } - - GlyphSlot slot = face.getGlyph(); - - // Try to render to bitmap - Bitmap bitmap; - if(bitmapped) { - bitmap = slot.getBitmap(); - } - else if(!slot.renderGlyph(FreeType.FT_RENDER_MODE_NORMAL)) { - bitmap = null; - } - else { - bitmap = slot.getBitmap(); - } - - GlyphMetrics metrics = slot.getMetrics(); - - Glyph glyph = new Glyph(); - if(bitmap != null) { - glyph.width = bitmap.getWidth(); - glyph.height = bitmap.getRows(); - } - else { - glyph.width = 0; - glyph.height = 0; - } - glyph.xoffset = slot.getBitmapLeft(); - glyph.yoffset = flip ? -slot.getBitmapTop() + baseline : -(glyph.height - slot.getBitmapTop()) - baseline; - glyph.xadvance = FreeType.toInt(metrics.getHoriAdvance()); - glyph.srcX = 0; - glyph.srcY = 0; - glyph.id = c; - - GlyphAndBitmap result = new GlyphAndBitmap(); - result.glyph = glyph; - result.bitmap = bitmap; - return result; - } - - /** - * Generates a new {@link BitmapFontData} instance, expert usage only. Throws a GdxRuntimeException if something went wrong. - * - * @param size the size in pixels - */ - public FreeTypeBitmapFontData generateData(int size) { - FreeTypeFontParameter parameter = new FreeTypeFontParameter(); - parameter.size = size; - return generateData(parameter); - } - - public FreeTypeBitmapFontData generateData(FreeTypeFontParameter parameter) { - return generateData(parameter, new FreeTypeBitmapFontData()); - } - - void setPixelSizes(int pixelWidth, int pixelHeight) { - this.pixelWidth = pixelWidth; - this.pixelHeight = pixelHeight; - if(!bitmapped && !face.setPixelSizes(pixelWidth, pixelHeight)) - throw new GdxRuntimeException("Couldn't set size for font"); - } - - /** - * Generates a new {@link BitmapFontData} instance, expert usage only. Throws a GdxRuntimeException if something went wrong. - * - * @param parameter configures how the font is generated - */ - public FreeTypeBitmapFontData generateData(FreeTypeFontParameter parameter, FreeTypeBitmapFontData data) { - data.name = name + "-" + parameter.size; - parameter = parameter == null ? new FreeTypeFontParameter() : parameter; - char[] characters = parameter.characters.toCharArray(); - int charactersLength = characters.length; - boolean incremental = parameter.incremental; - int flags = getLoadingFlags(parameter); - - setPixelSizes(0, parameter.size); - - // set general font data - SizeMetrics fontMetrics = face.getSize().getMetrics(); - data.flipped = parameter.flip; - data.ascent = FreeType.toInt(fontMetrics.getAscender()); - data.descent = FreeType.toInt(fontMetrics.getDescender()); - data.lineHeight = FreeType.toInt(fontMetrics.getHeight()); - float baseLine = data.ascent; - - // if bitmapped - if(bitmapped && (data.lineHeight == 0)) { - for(int c = 32; c < (32 + face.getNumGlyphs()); c++) { - if(loadChar(c, flags)) { - int lh = FreeType.toInt(face.getGlyph().getMetrics().getHeight()); - data.lineHeight = (lh > data.lineHeight) ? lh : data.lineHeight; - } - } - } - data.lineHeight += parameter.spaceY; - - // determine space width - if(loadChar(' ', flags) || loadChar('l', flags)) { - data.spaceXadvance = FreeType.toInt(face.getGlyph().getMetrics().getHoriAdvance()); - } - else { - data.spaceXadvance = face.getMaxAdvanceWidth(); // Possibly very wrong. - } - - // determine x-height - for(char xChar : data.xChars) { - if(!loadChar(xChar, flags)) continue; - data.xHeight = FreeType.toInt(face.getGlyph().getMetrics().getHeight()); - break; - } - if(data.xHeight == 0) throw new GdxRuntimeException("No x-height character found in font"); - - // determine cap height - for(char capChar : data.capChars) { - if(!loadChar(capChar, flags)) continue; - data.capHeight = FreeType.toInt(face.getGlyph().getMetrics().getHeight()) + Math.abs(parameter.shadowOffsetY); - break; - } - if(!bitmapped && data.capHeight == 1) throw new GdxRuntimeException("No cap character found in font"); - - data.ascent -= data.capHeight; - data.down = -data.lineHeight; - if(parameter.flip) { - data.ascent = -data.ascent; - data.down = -data.down; - } - - boolean ownsAtlas = false; - - PixmapPacker packer = parameter.packer; - - if(packer == null) { - // Create a packer. - int size; - PackStrategy packStrategy; - if(incremental) { - size = maxTextureSize; - packStrategy = new GuillotineStrategy(); - } - else { - int maxGlyphHeight = (int)Math.ceil(data.lineHeight); - size = MathUtils.nextPowerOfTwo((int)Math.sqrt(maxGlyphHeight * maxGlyphHeight * charactersLength)); - if(maxTextureSize > 0) size = Math.min(size, maxTextureSize); - packStrategy = new SkylineStrategy(); - } - ownsAtlas = true; - packer = new PixmapPacker(size, size, com.badlogic.gdx.graphics.Pixmap.Format.RGBA8888, 1, false, packStrategy); - packer.setTransparentColor(parameter.color); - packer.getTransparentColor().a = 0; - if(parameter.borderWidth > 0) { - packer.setTransparentColor(parameter.borderColor); - packer.getTransparentColor().a = 0; - } - } - - if(incremental) data.glyphs = new Array(charactersLength + 32); - - Stroker stroker = null; - if(parameter.borderWidth > 0) { - stroker = library.createStroker(); - stroker.set((int)(parameter.borderWidth * 64f), - parameter.borderStraight ? FreeType.FT_STROKER_LINECAP_BUTT : FreeType.FT_STROKER_LINECAP_ROUND, - parameter.borderStraight ? FreeType.FT_STROKER_LINEJOIN_MITER_FIXED : FreeType.FT_STROKER_LINEJOIN_ROUND, 0); - } - - // Create glyphs largest height first for best packing. - int[] heights = new int[charactersLength]; - for(int i = 0; i < charactersLength; i++) { - char c = characters[i]; - - int height = loadChar(c, flags) ? FreeType.toInt(face.getGlyph().getMetrics().getHeight()) : 0; - heights[i] = height; - - if(c == '\0') { - Glyph missingGlyph = createGlyph('\0', data, parameter, stroker, baseLine, packer); - if(missingGlyph != null && missingGlyph.width != 0 && missingGlyph.height != 0) { - data.setGlyph('\0', missingGlyph); - data.missingGlyph = missingGlyph; - if(incremental) data.glyphs.add(missingGlyph); - } - } - } - int heightsCount = heights.length; - while(heightsCount > 0) { - int best = 0, maxHeight = heights[0]; - for(int i = 1; i < heightsCount; i++) { - int height = heights[i]; - if(height > maxHeight) { - maxHeight = height; - best = i; - } - } - - char c = characters[best]; - if(data.getGlyph(c) == null) { - Glyph glyph = createGlyph(c, data, parameter, stroker, baseLine, packer); - if(glyph != null) { - data.setGlyph(c, glyph); - if(incremental) data.glyphs.add(glyph); - } - } - - heightsCount--; - heights[best] = heights[heightsCount]; - char tmpChar = characters[best]; - characters[best] = characters[heightsCount]; - characters[heightsCount] = tmpChar; - } - - if(stroker != null && !incremental) stroker.dispose(); - - if(incremental) { - data.generator = this; - data.parameter = parameter; - data.stroker = stroker; - data.packer = packer; - } - - // Generate kerning. - parameter.kerning &= face.hasKerning(); - if(parameter.kerning) { - for(int i = 0; i < charactersLength; i++) { - char firstChar = characters[i]; - Glyph first = data.getGlyph(firstChar); - if(first == null) continue; - int firstIndex = face.getCharIndex(firstChar); - for(int ii = i; ii < charactersLength; ii++) { - char secondChar = characters[ii]; - Glyph second = data.getGlyph(secondChar); - if(second == null) continue; - int secondIndex = face.getCharIndex(secondChar); - - int kerning = face.getKerning(firstIndex, secondIndex, 0); // FT_KERNING_DEFAULT (scaled then rounded). - if(kerning != 0) first.setKerning(secondChar, FreeType.toInt(kerning)); - - kerning = face.getKerning(secondIndex, firstIndex, 0); // FT_KERNING_DEFAULT (scaled then rounded). - if(kerning != 0) second.setKerning(firstChar, FreeType.toInt(kerning)); - } - } - } - - // Generate texture regions. - if(ownsAtlas) { - data.regions = new Array(); - packer.updateTextureRegions(data.regions, parameter.minFilter, parameter.magFilter, parameter.genMipMaps); - } - - // Set space glyph. - Glyph spaceGlyph = data.getGlyph(' '); - if(spaceGlyph == null) { - spaceGlyph = new Glyph(); - spaceGlyph.xadvance = (int)data.spaceXadvance + parameter.spaceX; - spaceGlyph.id = (int)' '; - data.setGlyph(' ', spaceGlyph); - } - if(spaceGlyph.width == 0) spaceGlyph.width = (int)(spaceGlyph.xadvance + data.padRight); - - return data; - } - - /** - * @return null if glyph was not found. - */ - Glyph createGlyph(char c, FreeTypeBitmapFontData data, FreeTypeFontParameter parameter, Stroker stroker, float baseLine, PixmapPacker packer) { - - boolean missing = face.getCharIndex(c) == 0 && c != 0; - if(missing) return null; - - if(!loadChar(c, getLoadingFlags(parameter))) return null; - - GlyphSlot slot = face.getGlyph(); - FreeType.Glyph mainGlyph = slot.getGlyph(); - try { - mainGlyph.toBitmap(parameter.mono ? FreeType.FT_RENDER_MODE_MONO : FreeType.FT_RENDER_MODE_NORMAL); - } - catch(GdxRuntimeException e) { - mainGlyph.dispose(); - Gdx.app.log("FreeTypeFontGenerator", "Couldn't render char: " + c); - return null; - } - Bitmap mainBitmap = mainGlyph.getBitmap(); - PixmapEmu mainPixmap = mainBitmap.getPixmap(PixmapEmu.FormatEmu.RGBA8888, parameter.color, parameter.gamma); - - if(mainBitmap.getWidth() != 0 && mainBitmap.getRows() != 0) { - int offsetX = 0, offsetY = 0; - if(parameter.borderWidth > 0) { - // execute stroker; this generates a glyph "extended" along the outline - int top = mainGlyph.getTop(), left = mainGlyph.getLeft(); - FreeType.Glyph borderGlyph = slot.getGlyph(); - borderGlyph.strokeBorder(stroker, false); - borderGlyph.toBitmap(parameter.mono ? FreeType.FT_RENDER_MODE_MONO : FreeType.FT_RENDER_MODE_NORMAL); - offsetX = left - borderGlyph.getLeft(); - offsetY = -(top - borderGlyph.getTop()); - - // Render border (pixmap is bigger than main). - Bitmap borderBitmap = borderGlyph.getBitmap(); - PixmapEmu borderPixmap = borderBitmap.getPixmap(PixmapEmu.FormatEmu.RGBA8888, parameter.borderColor, parameter.borderGamma); - - // Draw main glyph on top of border. - for(int i = 0, n = parameter.renderCount; i < n; i++) - borderPixmap.drawPixmap(mainPixmap, offsetX, offsetY); - - mainPixmap.dispose(); - mainGlyph.dispose(); - mainPixmap = borderPixmap; - mainGlyph = borderGlyph; - } - - if(parameter.shadowOffsetX != 0 || parameter.shadowOffsetY != 0) { - int mainW = mainPixmap.getWidth(), mainH = mainPixmap.getHeight(); - int shadowOffsetX = Math.max(parameter.shadowOffsetX, 0), shadowOffsetY = Math.max(parameter.shadowOffsetY, 0); - int shadowW = mainW + Math.abs(parameter.shadowOffsetX), shadowH = mainH + Math.abs(parameter.shadowOffsetY); - PixmapEmu shadowPixmap = new PixmapEmu(shadowW, shadowH, mainPixmap.getFormat()); - - Color shadowColor = parameter.shadowColor; - float a = shadowColor.a; - if(a != 0) { - byte r = (byte)(shadowColor.r * 255), g = (byte)(shadowColor.g * 255), b = (byte)(shadowColor.b * 255); - ByteBuffer mainPixels = FreeTypePixmap.getRealPixels(mainPixmap); - ByteBuffer shadowPixels = FreeTypePixmap.getRealPixels(shadowPixmap); - for(int y = 0; y < mainH; y++) { - int shadowRow = shadowW * (y + shadowOffsetY) + shadowOffsetX; - for(int x = 0; x < mainW; x++) { - int mainPixel = (mainW * y + x) * 4; - byte mainA = mainPixels.get(mainPixel + 3); - if(mainA == 0) continue; - int shadowPixel = (shadowRow + x) * 4; - shadowPixels.put(shadowPixel, r); - shadowPixels.put(shadowPixel + 1, g); - shadowPixels.put(shadowPixel + 2, b); - shadowPixels.put(shadowPixel + 3, (byte)((mainA & 0xff) * a)); - } - } - FreeTypePixmap.putPixelsBack(shadowPixmap, shadowPixels); - } - - // Draw main glyph (with any border) on top of shadow. - for(int i = 0, n = parameter.renderCount; i < n; i++) - shadowPixmap.drawPixmap(mainPixmap, Math.max(-parameter.shadowOffsetX, 0), Math.max(-parameter.shadowOffsetY, 0)); - mainPixmap.dispose(); - mainPixmap = shadowPixmap; - } - else if(parameter.borderWidth == 0) { - // No shadow and no border, draw glyph additional times. - for(int i = 0, n = parameter.renderCount - 1; i < n; i++) - mainPixmap.drawPixmap(mainPixmap, 0, 0); - } - - if(parameter.padTop > 0 || parameter.padLeft > 0 || parameter.padBottom > 0 || parameter.padRight > 0) { - PixmapEmu padPixmap = new PixmapEmu(mainPixmap.getWidth() + parameter.padLeft + parameter.padRight, - mainPixmap.getHeight() + parameter.padTop + parameter.padBottom, mainPixmap.getFormat()); - padPixmap.setBlending(PixmapEmu.BlendingEmu.None); - padPixmap.drawPixmap(mainPixmap, parameter.padLeft, parameter.padTop); - mainPixmap.dispose(); - mainPixmap = padPixmap; - } - } - - GlyphMetrics metrics = slot.getMetrics(); - Glyph glyph = new Glyph(); - glyph.id = c; - glyph.width = mainPixmap.getWidth(); - glyph.height = mainPixmap.getHeight(); - glyph.xoffset = mainGlyph.getLeft(); - if(parameter.flip) - glyph.yoffset = -mainGlyph.getTop() + (int)baseLine; - else - glyph.yoffset = -(glyph.height - mainGlyph.getTop()) - (int)baseLine; - glyph.xadvance = FreeType.toInt(metrics.getHoriAdvance()) + (int)parameter.borderWidth + parameter.spaceX; - - if(bitmapped) { - mainPixmap.setColor(Color.CLEAR); - mainPixmap.fill(); - ByteBuffer buf = mainBitmap.getBuffer(); - int whiteIntBits = Color.WHITE.toIntBits(); - int clearIntBits = Color.CLEAR.toIntBits(); - for(int h = 0; h < glyph.height; h++) { - int idx = h * mainBitmap.getPitch(); - for(int w = 0; w < (glyph.width + glyph.xoffset); w++) { - int bit = (buf.get(idx + (w / 8)) >>> (7 - (w % 8))) & 1; - mainPixmap.drawPixel(w, h, ((bit == 1) ? whiteIntBits : clearIntBits)); - } - } - } - - Object obj = mainPixmap; - Pixmap pixmap = (Pixmap)obj; - Rectangle rect = packer.pack(pixmap); - glyph.page = packer.getPages().size - 1; // Glyph is always packed into the last page for now. - glyph.srcX = (int)rect.x; - glyph.srcY = (int)rect.y; - - // If a page was added, create a new texture region for the incrementally added glyph. - if(parameter.incremental && data.regions != null && data.regions.size <= glyph.page) - packer.updateTextureRegions(data.regions, parameter.minFilter, parameter.magFilter, parameter.genMipMaps); - - mainPixmap.dispose(); - mainGlyph.dispose(); - - return glyph; - } - - /** - * check the font glyph exists for single UTF-32 code point - */ - public boolean hasGlyph(int charCode) { - // 0 stand for undefined character code - return face.getCharIndex(charCode) != 0; - } - - public String toString() { - return name; - } - - /** - * Cleans up all resources of the generator. Call this if you no longer use the generator. - */ - @Override - public void dispose() { - face.dispose(); - library.dispose(); - } - - /** - * Sets the maximum size that will be used when generating texture atlases for glyphs with generateData(). The - * default is 1024. By specifying {@link #NO_MAXIMUM}, the texture atlas will scale as needed. - *

- * The power-of-two square texture size will be capped to the given texSize. It's recommended that a power-of-two - * value be used here. - *

- * Multiple pages may be used to fit all the generated glyphs. You can query the resulting number of pages by calling - * bitmapFont.getRegions().length or freeTypeBitmapFontData.getTextureRegions().length. - *

- * If PixmapPacker is specified when calling generateData, this parameter is ignored. - * - * @param texSize the maximum texture size for one page of glyphs - */ - public static void setMaxTextureSize(int texSize) { - maxTextureSize = texSize; - } - - /** - * Returns the maximum texture size that will be used by generateData() when creating a texture atlas for the glyphs. - * - * @return the power-of-two max texture size - */ - public static int getMaxTextureSize() { - return maxTextureSize; - } - - /** - * {@link BitmapFontData} used for fonts generated via the {@link FreeTypeFontGenerator}. The texture storing the glyphs is - * held in memory, thus the {@link #getImagePaths()} and {@link #getFontFile()} methods will return null. - * - * @author mzechner - * @author Nathan Sweet - */ - static public class FreeTypeBitmapFontData extends BitmapFontData implements Disposable { - public Array regions; - - // Fields for incremental glyph generation. - FreeTypeFontGenerator generator; - FreeTypeFontParameter parameter; - Stroker stroker; - PixmapPacker packer; - Array glyphs; - private boolean dirty; - - @Override - public Glyph getGlyph(char ch) { - Glyph glyph = super.getGlyph(ch); - if(glyph == null && generator != null) { - generator.setPixelSizes(0, parameter.size); - float baseline = ((flipped ? -ascent : ascent) + capHeight) / scaleY; - glyph = generator.createGlyph(ch, this, parameter, stroker, baseline, packer); - if(glyph == null) return missingGlyph; - - setGlyphRegion(glyph, regions.get(glyph.page)); - setGlyph(ch, glyph); - glyphs.add(glyph); - dirty = true; - - Face face = generator.face; - if(parameter.kerning) { - int glyphIndex = face.getCharIndex(ch); - for(int i = 0, n = glyphs.size; i < n; i++) { - Glyph other = glyphs.get(i); - int otherIndex = face.getCharIndex(other.id); - - int kerning = face.getKerning(glyphIndex, otherIndex, 0); - if(kerning != 0) glyph.setKerning(other.id, FreeType.toInt(kerning)); - - kerning = face.getKerning(otherIndex, glyphIndex, 0); - if(kerning != 0) other.setKerning(ch, FreeType.toInt(kerning)); - } - } - } - return glyph; - } - - public void getGlyphs(GlyphRun run, CharSequence str, int start, int end, Glyph lastGlyph) { - if(packer != null) - packer.setPackToTexture(true); // All glyphs added after this are packed directly to the texture. - super.getGlyphs(run, str, start, end, lastGlyph); - if(dirty) { - dirty = false; - packer.updateTextureRegions(regions, parameter.minFilter, parameter.magFilter, parameter.genMipMaps); - } - } - - @Override - public void dispose() { - if(stroker != null) stroker.dispose(); - if(packer != null) packer.dispose(); - } - } - - /** - * Font smoothing algorithm. - */ - public static enum Hinting { - /** - * Disable hinting. Generated glyphs will look blurry. - */ - None, - /** - * Light hinting with fuzzy edges, but close to the original shape - */ - Slight, - /** - * Average hinting - */ - Medium, - /** - * Strong hinting with crisp edges at the expense of shape fidelity - */ - Full, - /** - * Light hinting with fuzzy edges, but close to the original shape. Uses the FreeType auto-hinter. - */ - AutoSlight, - /** - * Average hinting. Uses the FreeType auto-hinter. - */ - AutoMedium, - /** - * Strong hinting with crisp edges at the expense of shape fidelity. Uses the FreeType auto-hinter. - */ - AutoFull, - } - - /** - * Parameter container class that helps configure how {@link FreeTypeBitmapFontData} and {@link BitmapFont} instances are - * generated. - *

- * The packer field is for advanced usage, where it is necessary to pack multiple BitmapFonts (i.e. styles, sizes, families) - * into a single Texture atlas. If no packer is specified, the generator will use its own PixmapPacker to pack the glyphs into - * a power-of-two sized texture, and the resulting {@link FreeTypeBitmapFontData} will have a valid {@link TextureRegion} which - * can be used to construct a new {@link BitmapFont}. - * - * @author siondream - * @author Nathan Sweet - */ - public static class FreeTypeFontParameter { - /** - * The size in pixels - */ - public int size = 16; - /** - * If true, font smoothing is disabled. - */ - public boolean mono; - /** - * Strength of hinting - */ - public Hinting hinting = Hinting.AutoMedium; - /** - * Foreground color (required for non-black borders) - */ - public Color color = Color.WHITE; - /** - * Glyph gamma. Values > 1 reduce antialiasing. - */ - public float gamma = 1.8f; - /** - * Number of times to render the glyph. Useful with a shadow or border, so it doesn't show through the glyph. - */ - public int renderCount = 2; - /** - * Border width in pixels, 0 to disable - */ - public float borderWidth = 0; - /** - * Border color; only used if borderWidth > 0 - */ - public Color borderColor = Color.BLACK; - /** - * true for straight (mitered), false for rounded borders - */ - public boolean borderStraight = false; - /** - * Values < 1 increase the border size. - */ - public float borderGamma = 1.8f; - /** - * Offset of text shadow on X axis in pixels, 0 to disable - */ - public int shadowOffsetX = 0; - /** - * Offset of text shadow on Y axis in pixels, 0 to disable - */ - public int shadowOffsetY = 0; - /** - * Shadow color; only used if shadowOffset > 0. If alpha component is 0, no shadow is drawn but characters are still offset - * by shadowOffset. - */ - public Color shadowColor = new Color(0, 0, 0, 0.75f); - /** - * Pixels to add to glyph spacing when text is rendered. Can be negative. - */ - public int spaceX, spaceY; - /** - * Pixels to add to the glyph in the texture. Cannot be negative. - */ - public int padTop, padLeft, padBottom, padRight; - /** - * The characters the font should contain. If '\0' is not included then {@link BitmapFontData#missingGlyph} is not set. - */ - public String characters = DEFAULT_CHARS; - /** - * Whether the font should include kerning - */ - public boolean kerning = true; - /** - * The optional PixmapPacker to use for packing multiple fonts into a single texture. - * - * @see FreeTypeFontParameter - */ - public PixmapPacker packer = null; - /** - * Whether to flip the font vertically - */ - public boolean flip = false; - /** - * Whether to generate mip maps for the resulting texture - */ - public boolean genMipMaps = false; - /** - * Minification filter - */ - public TextureFilter minFilter = TextureFilter.Nearest; - /** - * Magnification filter - */ - public TextureFilter magFilter = TextureFilter.Nearest; - /** - * When true, glyphs are rendered on the fly to the font's glyph page textures as they are needed. The - * FreeTypeFontGenerator must not be disposed until the font is no longer needed. The FreeTypeBitmapFontData must be - * disposed (separately from the generator) when the font is no longer needed. The FreeTypeFontParameter should not be - * modified after creating a font. If a PixmapPacker is not specified, the font glyph page textures will use - * {@link FreeTypeFontGenerator#getMaxTextureSize()}. - */ - public boolean incremental; - } -} \ No newline at end of file diff --git a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeFontGeneratorLoader.java b/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeFontGeneratorLoader.java deleted file mode 100644 index 1c32f756..00000000 --- a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreeTypeFontGeneratorLoader.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright 2011 See AUTHORS file. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ******************************************************************************/ - -package com.badlogic.gdx.graphics.g2d.freetype; - -import com.badlogic.gdx.assets.AssetDescriptor; -import com.badlogic.gdx.assets.AssetLoaderParameters; -import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.assets.loaders.FileHandleResolver; -import com.badlogic.gdx.assets.loaders.SynchronousAssetLoader; -import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.utils.Array; - -/** - * Makes {@link FreeTypeFontGenerator} managable via {@link AssetManager}. - *

- * Do - * {@code assetManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(new InternalFileHandleResolver()))} - * to register it. - *

- * - * @author Daniel Holderbaum - */ -public class FreeTypeFontGeneratorLoader extends SynchronousAssetLoader { - - public FreeTypeFontGeneratorLoader(FileHandleResolver resolver) { - super(resolver); - } - - @Override - public FreeTypeFontGenerator load(AssetManager assetManager, String fileName, FileHandle file, - FreeTypeFontGeneratorParameters parameter) { - FreeTypeFontGenerator generator = null; - if(file.extension().equals("gen")) { - generator = new FreeTypeFontGenerator(file.sibling(file.nameWithoutExtension())); - } - else { - generator = new FreeTypeFontGenerator(file); - } - return generator; - } - - @Override - public Array getDependencies(String fileName, FileHandle file, FreeTypeFontGeneratorParameters parameter) { - return null; - } - - static public class FreeTypeFontGeneratorParameters extends AssetLoaderParameters { - } -} \ No newline at end of file diff --git a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreetypeFontLoader.java b/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreetypeFontLoader.java deleted file mode 100644 index 77e57b90..00000000 --- a/extensions/gdx-freetype-teavm/src/main/java/com/badlogic/gdx/graphics/g2d/freetype/FreetypeFontLoader.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.badlogic.gdx.graphics.g2d.freetype; - -import com.badlogic.gdx.assets.AssetDescriptor; -import com.badlogic.gdx.assets.AssetLoaderParameters; -import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; -import com.badlogic.gdx.assets.loaders.FileHandleResolver; -import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter; -import com.badlogic.gdx.utils.Array; - -/** - * Creates {@link BitmapFont} instances from FreeType font files. Requires a {@link FreeTypeFontLoaderParameter} to be passed to - * {@link AssetManager#load(String, Class, AssetLoaderParameters)} which specifies the name of the TTF file as well the parameters - * used to generate the BitmapFont (size, characters, etc.) - */ -public class FreetypeFontLoader extends AsynchronousAssetLoader { - public FreetypeFontLoader(FileHandleResolver resolver) { - super(resolver); - } - - public static class FreeTypeFontLoaderParameter extends AssetLoaderParameters { - /** - * the name of the TTF file to be used to load the font - **/ - public String fontFileName; - /** - * the parameters used to generate the font, e.g. size, characters, etc. - **/ - public FreeTypeFontParameter fontParameters = new FreeTypeFontParameter(); - } - - @Override - public void loadAsync(AssetManager manager, String fileName, FileHandle file, FreeTypeFontLoaderParameter parameter) { - if(parameter == null) - throw new RuntimeException("FreetypeFontParameter must be set in AssetManager#load to point at a TTF file!"); - } - - @Override - public BitmapFont loadSync(AssetManager manager, String fileName, FileHandle file, FreeTypeFontLoaderParameter parameter) { - if(parameter == null) - throw new RuntimeException("FreetypeFontParameter must be set in AssetManager#load to point at a TTF file!"); - FreeTypeFontGenerator generator = manager.get(parameter.fontFileName + ".gen", FreeTypeFontGenerator.class); - BitmapFont font = generator.generateFont(parameter.fontParameters); - return font; - } - - @Override - public Array getDependencies(String fileName, FileHandle file, FreeTypeFontLoaderParameter parameter) { - Array deps = new Array(); - deps.add(new AssetDescriptor(parameter.fontFileName + ".gen", FreeTypeFontGenerator.class)); - return deps; - } -} \ No newline at end of file