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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DQALC0EBDwtBgAghHQtB8M4AIB02AgBBAAuECQEEfyABKAIAQQBKBEADQCAAIAJqQYAKakEBOgAAIAJBAWoiAiABKAIASA0ACwsgASgCBEEASgRAA0AgACACakGACmpBAjoAACACQQFqIQIgA0EBaiIDIAEoAgRIDQALCyABKAIIQQBKBEBBACEDA0AgACACakGACmpBAzoAACACQQFqIQIgA0EBaiIDIAEoAghIDQALCyABKAIMQQBKBEBBACEDA0AgACACakGACmpBBDoAACACQQFqIQIgA0EBaiIDIAEoAgxIDQALCyABKAIQQQBKBEBBACEDA0AgACACakGACmpBBToAACACQQFqIQIgA0EBaiIDIAEoAhBIDQALCyABKAIUQQBKBEBBACEDA0AgACACakGACmpBBjoAACACQQFqIQIgA0EBaiIDIAEoAhRIDQALCyABKAIYQQBKBEBBACEDA0AgACACakGACmpBBzoAACACQQFqIQIgA0EBaiIDIAEoAhhIDQALCyABKAIcQQBKBEBBACEDA0AgACACakGACmpBCDoAACACQQFqIQIgA0EBaiIDIAEoAhxIDQALCyABKAIgQQBKBEBBACEDA0AgACACakGACmpBCToAACACQQFqIQIgA0EBaiIDIAEoAiBIDQALCyABKAIkQQBKBEBBACEDA0AgACACakGACmpBCjoAACACQQFqIQIgA0EBaiIDIAEoAiRIDQALCyABKAIoQQBKBEBBACEDA0AgACACakGACmpBCzoAACACQQFqIQIgA0EBaiIDIAEoAihIDQALCyABKAIsQQBKBEBBACEDA0AgACACakGACmpBDDoAACACQQFqIQIgA0EBaiIDIAEoAixIDQALCyABKAIwQQBKBEBBACEDA0AgACACakGACmpBDToAACACQQFqIQIgA0EBaiIDIAEoAjBIDQALCyABKAI0QQBKBEBBACEDA0AgACACakGACmpBDjoAACACQQFqIQIgA0EBaiIDIAEoAjRIDQALCyABKAI4QQBKBEBBACEDA0AgACACakGACmpBDzoAACACQQFqIQIgA0EBaiIDIAEoAjhIDQALCyABKAI8QQBKBEBBACEDA0AgACACakGACmpBEDoAACACQQFqIQIgA0EBaiIDIAEoAjxIDQALC0EAIQEgACACakGACmpBADoAAEEB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BQwCCyAFQQR2QQ9xIAVBCHZB8AFxIAVBEHZBgOADcSAFQQx2QYAecXJyciEFDAELQQAhBQsgBCAFIAgRAQAgBCALaiEEIAFBAWohAiABIA1HDQALCwsHACAALwEACyQBAX8jAEEQayICIAA2AgwgAiABNgIIIAIoAgwgAigCCDYCCAsYAQF/IwBBEGsiASAANgIMIAEoAgwoAggLJAEBfyMAQRBrIgIgADYCDCACIAE2AgggAigCDCACKAIINgIECxgBAX8jAEEQayIBIAA2AgwgASgCDCgCBAusAQEDfwJAIANBAEwNAEEAIQQgA0EBRwRAIANBfnEhBwNAIAAgBGogAiAEai0AACABIARqLQAAQQNsakECakECdjoAACAAIARBAXIiBmogAiAGai0AACABIAZqLQAAQQNsakECakECdjoAACAEQQJqIQQgBUECaiIFIAdHDQALCyADQQFxRQ0AIAAgBGogAiAEai0AACABIARqLQAAQQNsakECakECdjoAAAsgAAsEACABC+UBAQd/AkAgA0EATA0AIARBAEwNACAEQXxxIQogBEEDcSEJIARBBEkhCwNAIAQgCGwhBSABIAhqIQZBACECQQAhByALRQRAA0AgACACIAVqaiAGLQAAOgAAIAAgAkEBciAFamogBi0AADoAACAAIAJBAnIgBWpqIAYtAAA6AAAgACACQQNyIAVqaiAGLQAAOgAAIAJBBGohAiAHQQRqIgcgCkcNAAsLQQAhByAJBEADQCAAIAIgBWpqIAYtAAA6AAAgAkEBaiECIAdBAWoiByAJRw0ACwsgCEEBaiIIIANHDQALCyAAC+gBAQN/QQEhAiABLQAAIQQgA0EBRgRAIAAgBDoAACAAIAQ6AAEgAA8LIAAgBDoAACAAIAEtAAEgAS0AAEEDbGpBAmpBAnY6AAEgA0EBayEEQQIhBSADQQNOBEADQCAAIAJBAXRqIgUgASACaiIGLQAAQQNsQQJqIgcgBkEBay0AAGpBAnY6AAAgBSAHIAEgAkEBaiICai0AAGpBAnY6AAEgAiAERw0ACyAEQQF0IQULIAAgBWogASAEaiICLQAAIAEgA2pBAmstAABBA2xqQQJqQQJ2OgAAIAAgBUEBcmogAi0AADoAACAACyQBAX8jAEEQayICIAA2AgwgAiABNgIIIAIoAgwgAigCCDYCAAuUCAESfyMAQYACayIQJAAgECEEA0ACQAJAIAIuARAiAyACLwEgIgVyQf//A3ENAEEAIQUgAi8BMA0AIAIvAUANACACLwFQDQAgAi8BYA0AIAIvAXANACAEIAIuAQBBAnQiAzYCwAEgBCADNgLgASAEIAM2AqABIAQgAzYCgAEgBCADNgJgIAQgAzYCQCAEIAM2AiAgBCADNgIADAELIAQgAi4BYCIIIAXBIgVqQakRbCIMIAVBvxhsaiINIAIuAUAiCSACLgEAIg5qQQx0Ig9qQYAEaiIKIAIuAVAiBSADaiIGQcNzbCIRIANBhTBsaiAGIAIuATAiBiACLgFwIgtqIhJqQdAlbCITIAMgC2pBm2NsaiIDaiIUa0EKdTYC4AEgBCAKIBRqQQp1NgIAIAQgDCAIQfFEbGoiCCAOIAlrQQx0IgxqQYAEaiIJIBMgBSAGakH/rX9saiIOIBJBnkFsIgogBkGq4gBsamoiBmtBCnU2AsABIAQgBiAJakEKdTYCICAEIAwgCGtBgARqIgYgESAFQdrBAGxqIA5qIgVrQQp1NgKgASAEIAUgBmpBCnU2AkAgBCAPIA1rQYAEaiIFIAogC0HHCWxqIANqIgNrQQp1NgKAASAEIAMgBWpBCnU2AmALIARBBGohBCACQQJqIQIgB0EBaiIHQQhHDQALIBAhAkEAIQQDQCAAIAIoAhgiCyACKAIIIgNqQakRbCIIIANBvxhsaiIMIAIoAhAiDSACKAIAIglqQQx0Ig5qQYCAhAhqIg8gAigCBCIDIAIoAhQiB2oiCkHDc2wiESADQYUwbGogCiACKAIMIgUgAigCHCIGaiISakHQJWwiCiADIAZqQZtjbGoiE2oiFGsiA0EfdUF/cyADQRF2IANB////D0sbOgAHIAAgDyAUaiIDQR91QX9zIANBEXYgA0H///8PSxs6AAAgACAIIAtB8URsaiILIAkgDWtBDHQiCGpBgICECGoiDSAKIAUgB2pB/61/bGoiCSASQZ5BbCIPIAVBquIAbGpqIgVrIgNBH3VBf3MgA0ERdiADQf///w9LGzoABiAAIAUgDWoiA0EfdUF/cyADQRF2IANB////D0sbOgABIAAgCCALa0GAgIQIaiIFIBEgB0HawQBsaiAJaiIHayIDQR91QX9zIANBEXYgA0H///8PSxs6AAUgACAFIAdqIgNBH3VBf3MgA0ERdiADQf///w9LGzoAAiAAIA4gDGtBgICECGoiByAPIAZBxwlsaiATaiIFayIDQR91QX9zIANBEXYgA0H///8PSxs6AAQgACAFIAdqIgNBH3VBf3MgA0ERdiADQf///w9LGzoAAyAAIAFqIQAgAkEgaiECIARBAWoiBEEIRw0ACyAQQYACaiQAC+gBAQV/IARBAEoEQANAIAMgCGotAAAhCSACIAhqLQAAIQYgASAIai0AACEHIABB/wE6AAMgAEH/AUEAIAdBFHRBgIAgciIHIAZBgAFrIgpBgLTxAGxqIgZBAE4bIAZBFHYgBkH/////AEsbOgACIABB/wFBACAJQYABayIJQYDe2QBsIAdqIgZBAE4bIAZBFHYgBkH/////AEsbOgAAIABB/wFBACAJQYCmUmwgB2ogCkGA/GlsQYCAfHFqIgdBAE4bIAdBFHYgB0H/////AEsbOgABIAAgBWohACAIQQFqIgggBEcNAAsLC88BAQN/QQEhBiACLQAAIQQgAS0AACEFIANBAUYEQCAAIAQgBUEDbGpBAmpBAnYiAToAACAAIAE6AAEgAA8LIAAgBUEDbCAEaiIEQQJqQQJ2IgU6AAAgA0EBdCAAakEBayADQQJOBH8DQCAAIAZBAXRqIgdBAWsgAiAGai0AACABIAZqLQAAQQNsaiIFIARBA2xqQQhqQQR2OgAAIAcgBCAFQQNsakEIakEEdjoAACAFIQQgBkEBaiIGIANHDQALIAVBAmpBAnYFIAULOgAAIAALHQAgACABOgACIAAgAUEIdjoAASAAIAFBEHY6AAALCQAgACABOgAACygAIAAgAUEYdCABQYD+A3FBCHRyIAFBCHZBgP4DcSABQRh2cnI2AgALGAEBfyMAQRBrIgEgADYCDCABKAIMKAIACygAIAAoAAAiAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnILGQAgAC0AAiAALQABQQh0IAAtAABBEHRycgsQACAALQABIAAtAABBCHRyCwcAIAAtAAALWwEBfyMAQRBrIgIkACACIAA2AgwgAiABNgIIIwBBEGsiACQAIAAgAigCCDYCDCAAQRBqJAAgAkEQaiQAIAAoAgxBAWsiAEEFTQR/IABBAnRBiBxqKAIABUEECwurIAMbfwF8C30jAEEwayIMJAAgDCAANgIsIAwgATYCKCAMIAI2AiQgDCADNgIgIAwgBDYCHCAMIAU2AhggDCAGNgIUIAwgBzYCECAMIAg2AgwgDCAJNgIIIAwgCjYCBCAMKAIkIQAgDCgCICEBIAwoAhwhAiAMKAIYIQMgDCgCFCEEIAwoAhAhBSAMKAIMIQYgDCgCCCEIIAwoAgQhCSMAQTBrIgckACAHIAwoAig2AiwgByAANgIoIAcgATYCJCAHIAI2AiAgByADNgIcIAcgBDYCGCAHIAU2AhQgByAGNgIQIAcgCDYCDCAHIAk2AgggBygCLCEIIAcoAighBiAHKAIkIQMgBygCICEWIAcoAhghEiAHKAIUIQUgBygCECEYIAcoAgghBEEAIQoCQAJAIAcoAhwiGiAHKAIMIhFHDQAgBCASRw0AQQ8hDyAGKAIIIgBBAmsiAUEETQRAIAFBAnRB4BtqKAIAIQ8LQQghCkEIIQ0gCCgCCCIBQQJrIgJBBE0EQCACQQJ0QfQbaigCACENC0EEIQsgAEECayICQQRNBEAgAkECdEH0G2ooAgAhCgsgAUEBayIBQQVNBEAgAUECdEGIHGooAgAhCwtBBCEJIABBAWsiAEEFTQRAIABBAnRBiBxqKAIAIQkLIBIgFmoiDiAWTQ0BIAMgGmoiGiADTQ0BIAYoAgAgCWwhEyAIKAIAIAtsIRQDQAJAIBZBAEgNACAYQQBIDQAgFiAIKAIETw0DIBggBigCBE8NAyATIBhsIRkgFCAWbCEbIAMhAiAFIQADQAJAIAJBAEgNACAAQQBIDQAgAiAIKAIATw0CIAAgBigCAE8NAiAGKAIUIAAgCWxqIBlqIRAgCCgCCCAIKAIUIAIgC2xqIBtqIA0RAgAQCCEBIAYoAgghBAJAAkAgBigCDARAIAQgECAKEQIAEAghBCAGKAIIIRcgAUH/AXEiEQR/IARB/wFxIhIgESASbEH/AW5rIhIgBEEYdmwgAUEYdiARbGogESASaiIVbkEYdCASIARBEHZB/wFxbCABQRB2Qf8BcSARbGogFW5BEHRyIBIgBEEIdkH/AXFsIAFBCHZB/wFxIBFsaiAVbkEIdHIgFXIFIAQLIQECQAJAAkACQAJAIBdBAWsOBgQDAgcBAAYLIAFBBHZBD3EgAUEIdkHwAXEgAUEQdkGA4ANxIAFBDHZBgB5xcnJyIQEMBgsgAUELdkEfcSABQRB2QYDwA3EgAUENdkHgD3FyciEBDAULIAFBCHYhAQwECwJ/IAFBCHZB/wFxuERdbcX+snuyP6IgAUEQdkH/AXG4RKUsQxzr4uY/oiABQRh2s0PQs1k+lLugoCImRAAAAAAAAPBBYyAmRAAAAAAAAAAAZnEEQCAmqwwBC0EAC0EIdEGA/gNxIAFB/wFxciEBDAMLIAFB/wFxIQEMAgsCQAJAAkACQAJAIARBAWsOBgQDAgYBAAULIAFBBHZBD3EgAUEIdkHwAXEgAUEQdkGA4ANxIAFBDHZBgB5xcnJyIQEMBQsgAUELdkEfcSABQRB2QYDwA3EgAUENdkHgD3FyciEBDAQLIAFBCHYhAQwDCwJ/IAFBCHZB/wFxuERdbcX+snuyP6IgAUEQdkH/AXG4RKUsQxzr4uY/oiABQRh2s0PQs1k+lLugoCImRAAAAAAAAPBBYyAmRAAAAAAAAAAAZnEEQCAmqwwBC0EAC0EIdEGA/gNxIAFB/wFxciEBDAILIAFB/wFxIQEMAQtBACEBCyAQIAEgDxEBAAsgAEEBaiEAIAJBAWoiAiAaRw0ACwsgGEEBaiEYIBZBAWoiFiAORw0ACwwBCyAGKAIQIgAEfyAABUEPIQ8gBigCCCIAQQJrIgFBBE0EQCABQQJ0QeAbaigCACEPC0EIIRVBCCENIAgoAggiAUECayICQQRNBEAgAkECdEH0G2ooAgAhDQtBBCELIABBAmsiAkEETQRAIAJBAnRB9BtqKAIAIRULIAFBAWsiAUEFTQRAIAFBAnRBiBxqKAIAIQsLQQQhCSAAQQFrIgBBBU0EQCAAQQJ0QYgcaigCACEJCyAERQ0BIBFFDQEgBigCACAJbCEZIAgoAgAgC2whGyASQRB0IARuQQFqIRcgGkEQdCARbkEBaiEcA0ACQAJAIAogF2xBEHYgFmoiAEEASA0AIAogGGoiAUEASA0AIAAgCCgCBE8NASABIAYoAgRPDQEgASAZbCEdIAAgG2whHkEAIQIDQAJAIAIgHGxBEHYgA2oiAEEASA0AIAIgBWoiAUEASA0AIAAgCCgCAE8NAiABIAYoAgBPDQIgBigCFCABIAlsaiAdaiEUIAgoAgggCCgCFCAAIAtsaiAeaiANEQIAEAghACAGKAIIIQECQAJAIAYoAgwEQCABIBQgFRECABAIIQEgBigCCCEfIABB/wFxIhAEfyABQf8BcSIOIA4gEGxB/wFuayIOIAFBGHZsIABBGHYgEGxqIA4gEGoiE25BGHQgDiABQRB2Qf8BcWwgAEEQdkH/AXEgEGxqIBNuQRB0ciAOIAFBCHZB/wFxbCAAQQh2Qf8BcSAQbGogE25BCHRyIBNyBSABCyEAAkACQAJAAkACQCAfQQFrDgYEAwIHAQAGCyAAQQR2QQ9xIABBCHZB8AFxIABBEHZBgOADcSAAQQx2QYAecXJyciEADAYLIABBC3ZBH3EgAEEQdkGA8ANxIABBDXZB4A9xcnIhAAwFCyAAQQh2IQAMBAsCfyAAQQh2Qf8BcbhEXW3F/rJ7sj+iIABBEHZB/wFxuESlLEMc6+LmP6IgAEEYdrND0LNZPpS7oKAiJkQAAAAAAADwQWMgJkQAAAAAAAAAAGZxBEAgJqsMAQtBAAtBCHRBgP4DcSAAQf8BcXIhAAwDCyAAQf8BcSEADAILAkACQAJAAkACQCABQQFrDgYEAwIGAQAFCyAAQQR2QQ9xIABBCHZB8AFxIABBEHZBgOADcSAAQQx2QYAecXJyciEADAULIABBC3ZBH3EgAEEQdkGA8ANxIABBDXZB4A9xcnIhAAwECyAAQQh2IQAMAwsCfyAAQQh2Qf8BcbhEXW3F/rJ7sj+iIABBEHZB/wFxuESlLEMc6+LmP6IgAEEYdrND0LNZPpS7oKAiJkQAAAAAAADwQWMgJkQAAAAAAAAAAGZxBEAgJqsMAQtBAAtBCHRBgP4DcSAAQf8BcXIhAAwCCyAAQf8BcSEADAELQQAhAAsgFCAAIA8RAQALIAJBAWoiAiARRw0ACwsgCkEBaiIKIARHDQELCyAGKAIQC0EBRw0AQQ8hFSAGKAIIIgBBAmsiAUEETQRAIAFBAnRB4BtqKAIAIRULQQghGUEIIQkgCCgCCCIBQQJrIgJBBE0EQCACQQJ0QfQbaigCACEJC0EEIQ8gAEECayICQQRNBEAgAkECdEH0G2ooAgAhGQsgAUEBayIBQQVNBEAgAUECdEGIHGooAgAhDwtBBCEKIABBAWsiAEEFTQRAIABBAnRBiBxqKAIAIQoLIARFDQAgEUUNACAGKAIAIApsIRwgCCgCACAPbCEbIBKzQwAAgL+SIASzlSEuIBqzQwAAgL+SIBGzlSEvIAOyITAgFrIhMUEAIRADQAJAAn8gLiAQspQiJ4tDAAAAT10EQCAnqAwBC0GAgICAeAsgFmoiAEEASA0AIBAgGGoiAUEASA0AIAAgCCgCBE8NAiABIAYoAgRPDQJDAACAPyAnIDGSIACykyIskyEtIABBAWohHSAAIBtsIR4gASAcbCEfQQAhAgNAAkACfyAvIAKylCIni0MAAABPXQRAICeoDAELQYCAgIB4CyADaiIBQQBIDQAgAiAFaiIUQQBIDQAgASAIKAIATw0CIBQgBigCAE8NAiAGKAIUISQgCCgCCCAIKAIUIAEgD2xqIB5qIg4gCRECABAIIgAhCyABQQFqIBpPIhNFBEAgCCgCCCAOIA9qIAkRAgAQCCELCyAnIDCSIAGykyEnIAAiASENAkAgEiAdTQ0AIAgoAgggDiAbaiIOIAkRAgAQCCEBIBMNACAIKAIIIA4gD2ogCRECABAIIQ0LAn8gDUEIdkH/AXGzICwgJ5QiKpQgAUEIdkH/AXGzICxDAACAPyAnkyIplCIrlCAAQQh2Qf8BcbMgLSAplCIplCAtICeUIicgC0EIdkH/AXGzlJKSkiIoQwAAgE9dIChDAAAAAGBxBEAgKKkMAQtBAAshDgJ/IA1BEHZB/wFxsyAqlCABQRB2Qf8BcbMgK5QgAEEQdkH/AXGzICmUICcgC0EQdkH/AXGzlJKSkiIoQwAAgE9dIChDAAAAAGBxBEAgKKkMAQtBAAshEyAkISUgCiAUbCEjAn8gDUEYdrMgKpQgAUEYdrMgK5QgAEEYdrMgKZQgJyALQRh2s5SSkpIiKEMAAIBPXSAoQwAAAABgcQRAICipDAELQQALIRQgJSAjaiAfaiEXAn8gDUH/AXGzICqUIAFB/wFxsyArlCAAQf8BcbMgKZQgJyALQf8BcbOUkpKSIidDAACAT10gJ0MAAAAAYHEEQCAnqQwBC0EACyIgQf8BcSEBAkACQCAGKAIMBEAgBigCCCAXIBkRAgAQCCEAIAEEQCAAQf8BcSILIAEgC2xB/wFuayILIABBGHZsIBRB/wFxIAFsaiABIAtqIg1uQRh0IAsgAEEQdkH/AXFsIBNB/wFxIAFsaiANbkEQdHIgCyAAQQh2Qf8BcWwgDkH/AXEgAWxqIA1uQQh0ciANciEACwJAAkACQAJAAkAgBigCCEEBaw4GBAMCBwEABgsgAEEEdkEPcSAAQQh2QfABcSAAQRB2QYDgA3EgAEEMdkGAHnFycnIhAAwGCyAAQQt2QR9xIABBEHZBgPADcSAAQQ12QeAPcXJyIQAMBQsgAEEIdiEADAQLAn8gAEEIdkH/AXG4RF1txf6ye7I/oiAAQRB2Qf8BcbhEpSxDHOvi5j+iIABBGHazQ9CzWT6Uu6CgIiZEAAAAAAAA8EFjICZEAAAAAAAAAABmcQRAICarDAELQQALQQh0QYD+A3EgAEH/AXFyIQAMAwsgAEH/AXEhAAwCCyAUQRh0IgsgE0EQdCINQYCA/AdxIA5BCHQiIUGA/gNxcnIiIiABciEAAkACQAJAAkACQCAGKAIIQQFrDgYEAwIGAQAFCyANQQx2QYAecSALQRB2QYDgA3EgIEEEdkEPcSAOQfABcXJyciEADAULICFBC3ZBH3EgDUENdkHgD3EgC0EQdkGA8ANxcnIhAAwECyAiQQh2IQAMAwsCfyAOQf8BcbhEXW3F/rJ7sj+iIBNB/wFxuESlLEMc6+LmP6IgFEH/AXGzQ9CzWT6Uu6CgIiZEAAAAAAAA8EFjICZEAAAAAAAAAABmcQRAICarDAELQQALQQh0QYD+A3EgAXIhAAwCCyABIQAMAQtBACEACyAXIAAgFREBAAsgAkEBaiICIBFHDQALCyAQQQFqIhAgBEcNAAsLIAdBMGokACAMQTBqJAALoAgDEH8BfAR9IwBBMGsiCSQAIAkgADYCLCAJIAE2AiggCSACNgIkIAkgAzYCICAJIAQ2AhwgCSAFNgIYIAkgBjYCFCAJIAc2AhAgCSAINgIMIAkoAiQhACAJKAIgIQEgCSgCHCECIAkoAhghAyAJKAIUIQQgCSgCECEFIAkoAgwhBiMAQSBrIgokACAKIAkoAig2AhwgCiAANgIYIAogATYCFCAKIAI2AhAgCiADNgIMIAogBDYCCCAKIAU2AgQgCiAGNgIAIAooAhwhEyAKKAIAIRYCQCAKKAIEIgggCigCFCIAayAKKAIQIg4gCigCGCIGa2wgCigCCCILIAZrIAooAgwiDCAAa2xGDQAgDCAAIAAgDEobIQIgDCAAIAAgDEgiDRshAwJ/IAAgCEgEQCAIIQEgCyEEIAYMAQsgACEBIAYhBCAIIQAgCwshByAGIA4gDRshBSAOIAYgDRshBiAIIAwgCCAMSiIQGyINIAggDCAIIAxIGyIPayESIA4gCyAQGyERIAsgDiAQGyEQAkACQCABIABrIgsgAyACayIISA0AIAsgEkgNACABIQwgBCEOIAAhFCAHIRUgAyEBIAYhBCACIQAgBSEHIA0hAyAQIQYgDyECIBEhBSAIIQsgEiEIDAELAkAgCCASSg0AIAsgEkoNACANIQwgECEOIA8hFCARIRUMAQsgAyEMIAYhDiACIRQgBSEVIA0hAyAQIQYgDyECIBEhBSASIQgLAkAgCCALTARAIAEhDSAEIQ8gACELIAchESADIQEgBiEEIAIhACAFIQcMAQsgAyENIAYhDyACIQsgBSERCyAVIA5rsiAMIBRrspUhHSALQQAgC0EAShsiCCANIBMoAgRBAWsiAiACIA1LGyICTARAIBEgD2uyIA0gC2uylSEaIA+yIRsgDrIhHANAAn8gGiANIAhrspQgG5K7RAAAAAAAAOA/oCIZmUQAAAAAAADgQWMEQCAZqgwBC0GAgICAeAshAyATAn8gHSAMIAhrspQgHJK7RAAAAAAAAOA/oCIZmUQAAAAAAADgQWMEQCAZqgwBC0GAgICAeAsgAyAIIBYQCiACIAhHIRcgCEEBaiEIIBcNAAsLIAEgAGsiAkEATA0AIABBACAAQQBKGyIIIAEgEygCBEEBayIAIAAgAUsbIgBKDQAgByAEa7IgArKVIRogBLIhGyAOsiEcA0ACfyAaIAEgCGuylCAbkrtEAAAAAAAA4D+gIhmZRAAAAAAAAOBBYwRAIBmqDAELQYCAgIB4CyECIBMCfyAdIAwgCGuylCAckrtEAAAAAAAA4D+gIhmZRAAAAAAAAOBBYwRAIBmqDAELQYCAgIB4CyACIAggFhAKIAAgCEchGCAIQQFqIQggGA0ACwsgCkEgaiQAIAlBMGokAAuFAwEIfyMAQSBrIgYkACAGIAA2AhwgBiABNgIYIAYgAjYCFCAGIAM2AhAgBiAENgIMIAYgBTYCCCAGKAIUIQAgBigCECECIAYoAgwhAyAGKAIIIQQjAEEgayIBJAAgASAGKAIYNgIcIAEgADYCGCABIAI2AhQgASADNgIQIAEgBDYCDEEAIQMgASgCHCIEIAEoAhgiAiACIAEoAhQiBSABKAIQIgBqIAEoAgwiBxAKIAQgAiACIAUgAGsgBxAKIAQgAiAAayAAIAJqIAUgBxAKIABBAEoEQEEBIABrIQlBACAAQQF0ayEKQQEhDANAIAQgAiADQQFqIgNrIgggAiADaiILIAAgCUEATiINayIAIAVqIAcQCiAEIAggCyAFIABrIAcQCiAEIAIgAGsiCCAAIAJqIgsgAyAFaiAHEAogBCAIIAsgBSADayAHEAogCkECaiIIIAogDRshCiAMQQJqIgwgCWogCEEAIA0baiEJIAAgA0oNAAsLIAFBIGokACAGQSBqJAAL0wIBBH8jAEEgayIHJAAgByAANgIcIAcgATYCGCAHIAI2AhQgByADNgIQIAcgBDYCDCAHIAU2AgggByAGNgIEIAcoAhQhASAHKAIQIQIgBygCDCEDIAcoAgghBCAHKAIEIQUjAEEgayIAJAAgACAHKAIYNgIcIAAgATYCGCAAIAI2AhQgACADNgIQIAAgBDYCDCAAIAU2AgggACgCFCEBIAAoAhAhBSAAKAIMIQYgACgCCCEIAkAgACgCGCICIAAoAhwiAygCACIETg0AIAEgBmoiCUEBayIKIAIgBWpBAWsiBXJBAEgNACADKAIEIgYgAUwNACABQQAgAUEAShsiASAJIAYgBiAKShsiBkYNACAFIARBAWsgBCAFShshBCACQQAgAkEAShshAgNAIAMgAiAEIAEgCBAKIAFBAWoiASAGRw0ACwsgAEEgaiQAIAdBIGokAAujCwINfwF8IwBBIGsiDCQAIAwgADYCHCAMIAE2AhggDCACNgIUIAwgAzYCECAMIAQ2AgwgDCAFNgIIIAwoAhQhACAMKAIQIQEgDCgCDCECIAwoAgghAyMAQSBrIg0kACANIAwoAhg2AhwgDSAANgIYIA0gATYCFCANIAI2AhAgDSADNgIMIA0oAhghCiANKAIUIQsgDSgCDCECQQIhAUEFIA0oAhAiCUECdGtBBG0hBSANKAIcIgAoAgQhDyAAKAIAIQMgACgCFCEIQQ4hBAJAAn8CQAJAAkACQAJAAkACQAJAIAAoAggiAEEBaw4GAgEECQEBAAtBBCEBCyAAQQJrIREgASEAIBEOBQECBwMEBQsgAkH/AXEhAkEBIQBBDyEEDAYLQRAhBAJ/IAJBCHZB/wFxuERdbcX+snuyP6IgAkEQdkH/AXG4RKUsQxzr4uY/oiACQRh2s0PQs1k+lLugoCITRAAAAAAAAPBBYyATRAAAAAAAAAAAZnEEQCATqwwBC0EAC0EIdEGA/gNxIAJB/wFxcgwECyACQQh2IQJBESEEDAQLQRIhBCACQQt2QR9xIAJBEHZBgPADcSACQQ12QeAPcXJyDAILQRMhBCACQQR2QQ9xIAJBCHZB8AFxIAJBEHZBgOADcSACQQx2QYAecXJycgwBC0EPIQRBAAshAgsCQCADIApMIgcNACAJIAtqIgEgCnJBAEgNACABIA9ODQAgCCAAIAEgA2wgCmpsaiACIAQRAQALAkAgBw0AIAsgCWsiASAKckEASA0AIAEgD04NACAIIAAgASADbCAKamxqIAIgBBEBAAsCQCALIA9OIgcNACAJIApqIgEgC3JBAEgNACABIANODQAgCCAAIAMgC2wgAWpsaiACIAQRAQALAkAgBw0AIAogCWsiASALckEASA0AIAEgA04NACAIIAAgAyALbCABamxqIAIgBBEBAAsgCUEASgRAQQAhBwNAIAUgB0EBaiIHQQAgCUEBayIBIAVBAEgiBhtrQQF0aiESAkACQCAJIAEgBhsiCSAHRgRAIAcgCmohBgJAIAcgC2oiASAPTiIODQAgAyAGTA0AIAEgBnJBAEgNACAIIAEgA2wgBmogAGxqIAIgBBEBAAsgCiAHayEFAkAgDg0AIAMgBUwNACABIAVyQQBIDQAgCCABIANsIAVqIABsaiACIAQRAQALAkAgCyAHayIBIA9OIg4NACADIAZMDQAgASAGckEASA0AIAggASADbCAGaiAAbGogAiAEEQEACyAODQIgAyAFTA0CIAEgBXJBAE4NAQwCCyAHIAlODQEgByAKaiEBAkAgCSALaiIGIA9OIg4NACABIANODQAgASAGckEASA0AIAggAyAGbCABaiAAbGogAiAEEQEACyAKIAdrIQUCQCAODQAgAyAFTA0AIAUgBnJBAEgNACAIIAMgBmwgBWogAGxqIAIgBBEBAAsCQCALIAlrIgYgD04iDg0AIAEgA04NACABIAZyQQBIDQAgCCADIAZsIAFqIABsaiACIAQRAQALAkAgDg0AIAMgBUwNACAFIAZyQQBIDQAgCCADIAZsIAVqIABsaiACIAQRAQALIAkgCmohBgJAIAcgC2oiASAPTiIODQAgAyAGTA0AIAEgBnJBAEgNACAIIAEgA2wgBmogAGxqIAIgBBEBAAsgCiAJayEFAkAgDg0AIAMgBUwNACABIAVyQQBIDQAgCCABIANsIAVqIABsaiACIAQRAQALAkAgCyAHayIBIA9OIg4NACADIAZMDQAgASAGckEASA0AIAggASADbCAGaiAAbGogAiAEEQEACyAODQEgAyAFTA0BIAEgBXJBAEgNAQsgCCABIANsIAVqIABsaiACIAQRAQALIBJBAWohBSAHIAlIDQALCyANQSBqJAAgDEEgaiQAC4MCAQF/IwBBIGsiByQAIAcgADYCHCAHIAE2AhggByACNgIUIAcgAzYCECAHIAQ2AgwgByAFNgIIIAcgBjYCBCAHKAIUIQEgBygCECECIAcoAgwhAyAHKAIIIQQgBygCBCEFIwBBIGsiACQAIAAgBygCGDYCHCAAIAE2AhggACACNgIUIAAgAzYCECAAIAQ2AgwgACAFNgIIIAAoAgwhBiAAKAIcIgEgACgCGCICIAAoAhAgAmpBAWsiBSAAKAIUIgMgACgCCCIEEAogASACIAUgAyAGakEBayIGIAQQCiABIAMgBiACIAQQJyABIAMgBiAFIAQQJyAAQSBqJAAgB0EgaiQAC/sQAhJ/AXwjAEEgayIJJAAgCSAANgIcIAkgATYCGCAJIAI2AhQgCSADNgIQIAkgBDYCDCAJIAU2AgggCSAGNgIEIAkoAhQhACAJKAIQIQEgCSgCDCECIAkoAgghAyAJKAIEIQUjAEEgayIEJAAgBCAJKAIYNgIcIAQgADYCGCAEIAE2AhQgBCACNgIQIAQgAzYCDCAEIAU2AgggBCgCECIOIAQoAhgiBWshByAEKAIMIg8gBCgCFCIGayELIAQoAhwiCigCFCEVQQ4hDEELIQ1BAiEBIAooAggiCCEAIAQoAggiAyECAkACfwJAAkACQAJAAkACQAJAAkAgCEEBaw4GAgEECQEBAAtBBCEBCyABIQAgCEECaw4FAQIHAwQFCyADQf8BcSECQQ8hDEEBIQBBCCENDAYLQRAhDEEJIQ0CfyADQQh2Qf8BcbhEXW3F/rJ7sj+iIANBEHZB/wFxuESlLEMc6+LmP6IgA0EYdrND0LNZPpS7oKAiGUQAAAAAAADwQWMgGUQAAAAAAAAAAGZxBEAgGasMAQtBAAtBCHRBgP4DcSADQf8BcXIMBAsgA0EIdiECQREhDEEKIQ0MBAtBEiEMQQwhDSADQQt2QR9xIANBEHZBgPADcSADQQ12QeAPcXJyDAILQRMhDEENIQ0gA0EEdkEPcSADQQh2QfABcSADQRB2QYDgA3EgA0EMdkGAHnFycnIMAQtBDyEMQQghDUEACyECCyAHIAdBH3UiAXMgAWtBAXQhECALIAtBH3UiAXMgAWtBAXQhESAHQQBOIRIgC0EATiETAkAgBSAGckEASA0AIAooAgAiASAFTQ0AIAooAgQgBk0NACAVIAEgBmwgBWogAGxqIRQCQCAKKAIMRQ0AIAggFCANEQIAEAghAiADQf8BcSIBBEAgAkH/AXEiByABIAdsQf8BbmsiByACQRh2bCADQRh2IAFsaiABIAdqIgtuQRh0IAcgAkEQdkH/AXFsIANBEHZB/wFxIAFsaiALbkEQdHIgByACQQh2Qf8BcWwgA0EIdkH/AXEgAWxqIAtuQQh0ciALciECCwJAAkACQAJAAkACQCAIQQFrDgYAAQIGAwQFCyACQf8BcSECDAULAn8gAkEIdkH/AXG4RF1txf6ye7I/oiACQRB2Qf8BcbhEpSxDHOvi5j+iIAJBGHazQ9CzWT6Uu6CgIhlEAAAAAAAA8EFjIBlEAAAAAAAAAABmcQRAIBmrDAELQQALQQh0QYD+A3EgAkH/AXFyIQIMBAsgAkEIdiECDAMLIAJBC3ZBH3EgAkEQdkGA8ANxIAJBDXZB4A9xcnIhAgwCCyACQQR2QQ9xIAJBCHZB8AFxIAJBEHZBgOADcSACQQx2QYAecXJyciECDAELQQAhAgsgFCACIAwRAQALQQFBfyASGyELQQFBfyATGyEUAkAgECARSgRAIAUgDkYNASADQf8BcSIIIANBGHZsIRIgA0EIdkH/AXEgCGwhEyADQRB2Qf8BcSAIbCEWIBEgEEEBdWshAQNAIBBBACABQQBOIgMbIRcCQCAUQQAgAxsgBmoiBiAFIAtqIgVyQQBIDQAgCigCACIDIAVNDQAgCigCBCAGTQ0AIBUgAyAGbCAFaiAAbGohDwJAIAooAgxFDQAgCigCCCIYIA8gDRECABAIIQIgCARAIAJB/wFxIgMgAyAIbEH/AW5rIgMgAkEYdmwgEmogAyAIaiIHbkEYdCADIAJBEHZB/wFxbCAWaiAHbkEQdHIgAyACQQh2Qf8BcWwgE2ogB25BCHRyIAdyIQILAkACQAJAAkACQAJAIBhBAWsOBgABAgYDBAULIAJB/wFxIQIMBQsCfyACQQh2Qf8BcbhEXW3F/rJ7sj+iIAJBEHZB/wFxuESlLEMc6+LmP6IgAkEYdrND0LNZPpS7oKAiGUQAAAAAAADwQWMgGUQAAAAAAAAAAGZxBEAgGasMAQtBAAtBCHRBgP4DcSACQf8BcXIhAgwECyACQQh2IQIMAwsgAkELdkEfcSACQRB2QYDwA3EgAkENdkHgD3FyciECDAILIAJBBHZBD3EgAkEIdkHwAXEgAkEQdkGA4ANxIAJBDHZBgB5xcnJyIQIMAQtBACECCyAPIAIgDBEBAAsgASARaiAXayEBIAUgDkcNAAsMAQsgBiAPRg0AIANB/wFxIgggA0EYdmwhEiADQQh2Qf8BcSAIbCETIANBEHZB/wFxIAhsIRYgECARQQF1ayEBA0AgEUEAIAFBAE4iAxshFwJAIAUgC0EAIAMbaiIFIAYgFGoiBnJBAEgNACAKKAIAIgMgBU0NACAKKAIEIAZNDQAgFSADIAZsIAVqIABsaiEOAkAgCigCDEUNACAKKAIIIhggDiANEQIAEAghAiAIBEAgAkH/AXEiAyADIAhsQf8BbmsiAyACQRh2bCASaiADIAhqIgduQRh0IAMgAkEQdkH/AXFsIBZqIAduQRB0ciADIAJBCHZB/wFxbCATaiAHbkEIdHIgB3IhAgsCQAJAAkACQAJAAkAgGEEBaw4GAAECBgMEBQsgAkH/AXEhAgwFCwJ/IAJBCHZB/wFxuERdbcX+snuyP6IgAkEQdkH/AXG4RKUsQxzr4uY/oiACQRh2s0PQs1k+lLugoCIZRAAAAAAAAPBBYyAZRAAAAAAAAAAAZnEEQCAZqwwBC0EAC0EIdEGA/gNxIAJB/wFxciECDAQLIAJBCHYhAgwDCyACQQt2QR9xIAJBEHZBgPADcSACQQ12QeAPcXJyIQIMAgsgAkEEdkEPcSACQQh2QfABcSACQRB2QYDgA3EgAkEMdkGAHnFycnIhAgwBC0EAIQILIA4gAiAMEQEACyABIBBqIBdrIQEgBiAPRw0ACwsgBEEgaiQAIAlBIGokAAvSAgEDfyMAQRBrIgQkACAEIAA2AgwgBCABNgIIIAQgAjYCBCAEIAM2AgAgBCgCBCEBIAQoAgAhAiMAQRBrIgAkACAAIAQoAgg2AgwgACABNgIIIAAgAjYCBCAAKAIMIQJBACEBAkAgACgCCCIDIAAoAgQiBXJBAEgNACACKAIAIgYgA00NACACKAIEIAVNDQAgBSAGbCADaiEDIAIoAhQhBUECIQECQAJAAkACQAJAAkACQAJAAkACQCACKAIIIgZBAWsOBgACAwUCAgELIAMgBWohAkEIIQEMCAtBBCEBCyAFIAEgA2xqIQJBCCEBAkAgBkECaw4FAAIEBQYHC0EJIQEMBgsgBSADQQNsaiECC0EKIQEMBAsgBSADQQJ0aiECC0ELIQEMAgtBDCEBDAELQQ0hAQsgBiACIAERAgAQCCEBCyAAQRBqJAAgBEEQaiQAIAELyAkCBn8BfCMAQSBrIgYkACAGIAA2AhwgBiABNgIYIAYgAjYCFCAGIAM2AhAgBiAENgIMIAYoAhQhACAGKAIQIQEgBigCDCECIwBBEGsiBCQAIAQgBigCGDYCDCAEIAA2AgggBCABNgIEIAQgAjYCACAEKAIIIQcgBCgCBCEIIAQoAgAhAUEAIQACQCAEKAIMIgMoAgwEQAJAIAcgCHIiCkEASA0AIAMoAgAiAiAHTQ0AIAMoAgQgCE0NACACIAhsIAdqIQAgAygCFCECQQIhBQJAAkACQAJAAkACQAJAAkACQAJAIAMoAggiCUEBaw4GAAIDBQICAQsgACACaiEAQQghAgwIC0EEIQULIAIgACAFbGohAEEIIQICQCAJQQJrDgUAAgQFBgcLQQkhAgwGCyACIABBA2xqIQALQQohAgwECyACIABBAnRqIQALQQshAgwCC0EMIQIMAQtBDSECCyAJIAAgAhECABAIIQALIAFB/wFxIgIEQCAAQf8BcSIFIAIgBWxB/wFuayIFIABBGHZsIAFBGHYgAmxqIAIgBWoiCW5BGHQgBSAAQRB2Qf8BcWwgAUEQdkH/AXEgAmxqIAluQRB0ciAFIABBCHZB/wFxbCABQQh2Qf8BcSACbGogCW5BCHRyIAlyIQALQQ4hAgJAAkACQAJAAkACQAJAIAMoAggiAUEBaw4GAAECBgMEBQsgAEH/AXEhAEEPIQJBASEBDAULAn8gAEEIdkH/AXG4RF1txf6ye7I/oiAAQRB2Qf8BcbhEpSxDHOvi5j+iIABBGHazQ9CzWT6Uu6CgIgtEAAAAAAAA8EFjIAtEAAAAAAAAAABmcQRAIAurDAELQQALQQh0QYD+A3EgAEH/AXFyIQBBECECQQIhAQwECyAAQQh2IQBBESECQQMhAQwDCyAAQQt2QR9xIABBEHZBgPADcSAAQQ12QeAPcXJyIQBBEiECQQIhAQwCCyAAQQR2QQ9xIABBCHZB8AFxIABBEHZBgOADcSAAQQx2QYAecXJyciEAQRMhAkECIQEMAQtBDyECQQAhAEEEIQELIApBAEgNASADKAIAIgUgB0wNASADKAIEIAhMDQEgAygCFCAFIAhsIAdqIAFsaiAAIAIRAQAMAQtBDiEAAkACQAJAAkACQAJAAkAgAygCCCICQQFrDgYAAQIGAwQFCyABQf8BcSEBQQ8hAEEBIQIMBQsCfyABQQh2Qf8BcbhEXW3F/rJ7sj+iIAFBEHZB/wFxuESlLEMc6+LmP6IgAUEYdrND0LNZPpS7oKAiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAtBCHRBgP4DcSABQf8BcXIhAUEQIQBBAiECDAQLIAFBCHYhAUERIQBBAyECDAMLIAFBC3ZBH3EgAUEQdkGA8ANxIAFBDXZB4A9xcnIhAUESIQBBAiECDAILIAFBBHZBD3EgAUEIdkHwAXEgAUEQdkGA4ANxIAFBDHZBgB5xcnJyIQFBEyEAQQIhAgwBC0EPIQBBACEBQQQhAgsgAygCBCAITA0AIAcgCHJBAEgNACADKAIAIgUgB0wNACADKAIUIAUgCGwgB2ogAmxqIAEgABEBAAsgBEEQaiQAIAZBIGokAAu6CgINfwF8IwBBEGsiBiQAIAYgADYCDCAGIAE2AgggBiACNgIEIAYoAgQhACMAQRBrIgckACAHIAYoAgg2AgwgByAANgIIIAcoAgghAAJAAkACQAJAAkACQAJAIAcoAgwiAigCCEEBaw4GAAECAwQFBgsgAigCFCAAIAIoAgQgAigCAGwQCRoMBQsCfyAAQQh2Qf8BcbhEXW3F/rJ7sj+iIABBEHZB/wFxuESlLEMc6+LmP6IgAEEYdrND0LNZPpS7oKAiEEQAAAAAAADwQWMgEEQAAAAAAAAAAGZxBEAgEKsMAQtBAAshCiACKAIEIAIoAgBsIgFBAEwNBCAKQf8BcSAAQQh0ciEDIAIoAhQhAgJAIAFBB3EiBUUEQCABIQAMAQsgASEAA0AgAiADOwEAIABBAWshACACQQJqIQIgBEEBaiIEIAVHDQALCyABQQhJDQQDQCACIAM7AQ4gAiADOwEMIAIgAzsBCiACIAM7AQggAiADOwEGIAIgAzsBBCACIAM7AQIgAiADOwEAIAJBEGohAiAAQQlrIQsgAEEIayEAIAtBfkkNAAsMBAsgAigCBCACKAIAbCIBQQBMDQMgAEEQdiEDIABBGHYhBCAAQQh2IQUgAigCFCECAkAgAUEDcSIJRQRAIAEhAAwBCyABIQADQCACIAU6AAIgAiADOgABIAIgBDoAACAAQQFrIQAgAkEDaiECIAhBAWoiCCAJRw0ACwsgAUEESQ0DA0AgAiAFOgALIAIgAzoACiACIAQ6AAkgAiAFOgAIIAIgAzoAByACIAQ6AAYgAiAFOgAFIAIgAzoABCACIAQ6AAMgAiAFOgACIAIgAzoAASACIAQ6AAAgAkEMaiECIABBBWshDCAAQQRrIQAgDEF+SQ0ACwwDCyACKAIEIAIoAgBsIgFBAEwNAiAAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZyciEDIAIoAhQhAgJAIAFBB3EiBUUEQCABIQAMAQsgASEAA0AgAiADNgIAIABBAWshACACQQRqIQIgBEEBaiIEIAVHDQALCyABQQhJDQIDQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAAQQlrIQ0gAEEIayEAIA1BfkkNAAsMAgsgAigCBCACKAIAbCIBQQBMDQEgAEELdkEfcSAAQRB2QYDwA3EgAEENdkHgD3FyciEDIAIoAhQhAgJAIAFBB3EiBUUEQCABIQAMAQsgASEAA0AgAiADOwEAIABBAWshACACQQJqIQIgBEEBaiIEIAVHDQALCyABQQhJDQEDQCACIAM7AQ4gAiADOwEMIAIgAzsBCiACIAM7AQggAiADOwEGIAIgAzsBBCACIAM7AQIgAiADOwEAIAJBEGohAiAAQQlrIQ4gAEEIayEAIA5BfkkNAAsMAQsgAigCBCACKAIAbCIBQQBMDQAgAEEEdkEPcSAAQQh2QfABcSAAQRB2QYDgA3EgAEEMdkGAHnFycnIhAyACKAIUIQICQCABQQdxIgVFBEAgASEADAELIAEhAANAIAIgAzsBACAAQQFrIQAgAkECaiECIARBAWoiBCAFRw0ACwsgAUEISQ0AA0AgAiADOwEOIAIgAzsBDCACIAM7AQogAiADOwEIIAIgAzsBBiACIAM7AQQgAiADOwECIAIgAzsBACACQRBqIQIgAEEJayEPIABBCGshACAPQX5JDQALCyAHQRBqJAAgBkEQaiQACyIBAX8jAEEQayIBJAAgASAANgIMIAFBEGokAEHwzgAoAgALJgECfyMAQRBrIgEkACABIAA2AgwgASgCDBAEIQIgAUEQaiQAIAILXgEBfyMAQRBrIgMkACADIAA2AgwgAyABNgIIIAMgAjYCBCADKAIEIQEjAEEQayIAJAAgACADKAIINgIMIAAgATYCCCAAKAIMIAAoAgg2AhAgAEEQaiQAIANBEGokAAteAQF/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