diff --git a/CHANGES.md b/CHANGES.md index d5444a6d..68f9f966 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,13 @@ [-SNAPSHOT] +[1.0.4] +- Fix music id +- add custom gltf resource path +- Code improvement when using physical pixels +- Fix file handle list returning wrong path +- UsePhysicalPixels is set to false by default +- Fix webgl buffers + [1.0.3] - Don't download assets if preload assets is true - add PowerPreference option diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ByteBufferImplEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ByteBufferImplEmu.java index 82414472..7ed3bbfe 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ByteBufferImplEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ByteBufferImplEmu.java @@ -9,13 +9,6 @@ @Emulate(valueStr = "java.nio.ByteBufferImpl", updateCode = true) public abstract class ByteBufferImplEmu extends TByteBufferImpl implements HasArrayBufferView { - @Emulate - Int8ArrayWrapper backupArray; - @Emulate - int positionCache; - @Emulate - int remainingCache; - public ByteBufferImplEmu(int start, int capacity, byte[] array, int position, int limit, boolean direct, boolean readOnly) { super(start, capacity, array, position, limit, direct, readOnly); } @@ -24,14 +17,7 @@ public ByteBufferImplEmu(int start, int capacity, byte[] array, int position, in @Emulate public ArrayBufferViewWrapper getArrayBufferView() { Int8ArrayWrapper int8Array = (Int8ArrayWrapper)getOriginalArrayBufferView(); - int position1 = position(); - int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { - positionCache = position1; - remainingCache = remaining1; - backupArray = int8Array.subarray(position1, remaining1); - } - return backupArray; + return int8Array; } @Override diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverArrayEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverArrayEmu.java index 5418dc7b..a61e4b0a 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverArrayEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverArrayEmu.java @@ -8,13 +8,6 @@ @Emulate(valueStr = "java.nio.TFloatBufferOverArray", updateCode = true) public abstract class FloatBufferOverArrayEmu extends TFloatBufferOverArray implements HasArrayBufferView { - @Emulate - Float32ArrayWrapper backupArray; - @Emulate - int positionCache; - @Emulate - int remainingCache; - public FloatBufferOverArrayEmu(int start, int capacity, float[] array, int position, int limit, boolean readOnly) { super(start, capacity, array, position, limit, readOnly); } @@ -23,14 +16,7 @@ public FloatBufferOverArrayEmu(int start, int capacity, float[] array, int posit @Emulate public ArrayBufferViewWrapper getArrayBufferView() { Float32ArrayWrapper originalBuffer = (Float32ArrayWrapper)getOriginalArrayBufferView(); - int position1 = position(); - int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { - positionCache = position1; - remainingCache = remaining1; - backupArray = originalBuffer.subarray(position1, remaining1); - } - return backupArray; + return originalBuffer; } @Override diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverByteBufferEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverByteBufferEmu.java index f3d44665..008eb6b7 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverByteBufferEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/FloatBufferOverByteBufferEmu.java @@ -9,14 +9,14 @@ @Emulate(valueStr = "java.nio.FloatBufferOverByteBuffer", updateCode = true) public abstract class FloatBufferOverByteBufferEmu extends TFloatBufferOverByteBuffer implements HasArrayBufferView { - @Emulate - Float32ArrayWrapper backupArray; @Emulate Float32ArrayWrapper floatArray; @Emulate int positionCache; @Emulate int remainingCache; + @Emulate + int capacityCache; public FloatBufferOverByteBufferEmu(int start, int capacity, TByteBufferImpl byteBuffer, int position, int limit, boolean readOnly) { super(start, capacity, byteBuffer, position, limit, readOnly); @@ -27,18 +27,15 @@ public FloatBufferOverByteBufferEmu(int start, int capacity, TByteBufferImpl byt public ArrayBufferViewWrapper getArrayBufferView() { // Int8Array Int8ArrayWrapper int8Array = (Int8ArrayWrapper)getOriginalArrayBufferView(); - if(floatArray == null) { - floatArray = TypedArrays.createFloat32Array(int8Array.getBuffer()); - } - int position1 = position(); int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { + int capacity1 = capacity(); + if(positionCache != position1 || remainingCache != remaining1 || capacityCache != capacity1) { + floatArray = TypedArrays.createFloat32Array(int8Array.getBuffer()); positionCache = position1; remainingCache = remaining1; - backupArray = floatArray.subarray(position1, remaining1); } - return backupArray; + return floatArray; } @Override diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverArrayEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverArrayEmu.java index 778238c9..b618ef9f 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverArrayEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverArrayEmu.java @@ -8,13 +8,6 @@ @Emulate(valueStr = "java.nio.TIntBufferOverArray", updateCode = true) public abstract class IntBufferOverArrayEmu extends TIntBufferOverArray implements HasArrayBufferView { - @Emulate - Int32ArrayWrapper backupArray; - @Emulate - int positionCache; - @Emulate - int remainingCache; - public IntBufferOverArrayEmu(int start, int capacity, int[] array, int position, int limit, boolean readOnly) { super(start, capacity, array, position, limit, readOnly); } @@ -23,14 +16,7 @@ public IntBufferOverArrayEmu(int start, int capacity, int[] array, int position, @Emulate public ArrayBufferViewWrapper getArrayBufferView() { Int32ArrayWrapper originalBuffer = (Int32ArrayWrapper)getOriginalArrayBufferView(); - int position1 = position(); - int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { - positionCache = position1; - remainingCache = remaining1; - backupArray = originalBuffer.subarray(position1, remaining1); - } - return backupArray; + return originalBuffer; } @Override diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverByteBufferEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverByteBufferEmu.java index 92a4da2c..88900aa6 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverByteBufferEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/IntBufferOverByteBufferEmu.java @@ -9,15 +9,14 @@ @Emulate(valueStr = "java.nio.IntBufferOverByteBuffer", updateCode = true) public abstract class IntBufferOverByteBufferEmu extends TIntBufferOverByteBuffer implements HasArrayBufferView { - @Emulate - Int32ArrayWrapper backupArray; @Emulate Int32ArrayWrapper intArray; @Emulate int positionCache; @Emulate int remainingCache; - + @Emulate + int capacityCache; public IntBufferOverByteBufferEmu(int start, int capacity, TByteBufferImpl byteBuffer, int position, int limit, boolean readOnly) { super(start, capacity, byteBuffer, position, limit, readOnly); @@ -28,17 +27,15 @@ public IntBufferOverByteBufferEmu(int start, int capacity, TByteBufferImpl byteB public ArrayBufferViewWrapper getArrayBufferView() { // Int8Array Int8ArrayWrapper int8Array = (Int8ArrayWrapper)getOriginalArrayBufferView(); - if(intArray == null) { - intArray = TypedArrays.createInt32Array(int8Array.getBuffer()); - } int position1 = position(); int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { + int capacity1 = capacity(); + if(positionCache != position1 || remainingCache != remaining1 || capacityCache != capacity1) { + intArray = TypedArrays.createInt32Array(int8Array.getBuffer()); positionCache = position1; remainingCache = remaining1; - backupArray = intArray.subarray(position1, remaining1); } - return backupArray; + return intArray; } @Override diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverArrayEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverArrayEmu.java index 379a37e9..02582b69 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverArrayEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverArrayEmu.java @@ -8,13 +8,6 @@ @Emulate(valueStr = "java.nio.TShortBufferOverArray", updateCode = true) public abstract class ShortBufferOverArrayEmu extends TShortBufferOverArray implements HasArrayBufferView { - @Emulate - Int16ArrayWrapper backupArray; - @Emulate - int positionCache; - @Emulate - int remainingCache; - public ShortBufferOverArrayEmu(int start, int capacity, short[] array, int position, int limit, boolean readOnly) { super(start, capacity, array, position, limit, readOnly); } @@ -23,14 +16,7 @@ public ShortBufferOverArrayEmu(int start, int capacity, short[] array, int posit @Emulate public ArrayBufferViewWrapper getArrayBufferView() { Int16ArrayWrapper originalBuffer = (Int16ArrayWrapper)getOriginalArrayBufferView(); - int position1 = position(); - int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { - positionCache = position1; - remainingCache = remaining1; - backupArray = originalBuffer.subarray(position1, remaining1); - } - return backupArray; + return originalBuffer; } @Override diff --git a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverByteBufferEmu.java b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverByteBufferEmu.java index fc0cedb3..1d293cb8 100644 --- a/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverByteBufferEmu.java +++ b/backends/backend-teavm/emu/org/teavm/classlib/java/nio/ShortBufferOverByteBufferEmu.java @@ -9,14 +9,14 @@ @Emulate(valueStr = "java.nio.ShortBufferOverByteBuffer", updateCode = true) public abstract class ShortBufferOverByteBufferEmu extends TShortBufferOverByteBuffer implements HasArrayBufferView { - @Emulate - Int16ArrayWrapper backupArray; @Emulate Int16ArrayWrapper shortArray; @Emulate int positionCache; @Emulate int remainingCache; + @Emulate + int capacityCache; public ShortBufferOverByteBufferEmu(int start, int capacity, TByteBufferImpl byteBuffer, int position, int limit, boolean readOnly) { super(start, capacity, byteBuffer, position, limit, readOnly); @@ -27,17 +27,16 @@ public ShortBufferOverByteBufferEmu(int start, int capacity, TByteBufferImpl byt public ArrayBufferViewWrapper getArrayBufferView() { // Int8Array Int8ArrayWrapper int8Array = (Int8ArrayWrapper)getOriginalArrayBufferView(); - if(shortArray == null) { - shortArray = TypedArrays.createInt16Array(int8Array.getBuffer()); - } int position1 = position(); int remaining1 = remaining(); - if(backupArray == null || positionCache != position1 || remaining1 != remainingCache) { + int capacity1 = capacity(); + if(positionCache != position1 || remainingCache != remaining1 || capacityCache != capacity1) { + shortArray = TypedArrays.createInt16Array(int8Array.getBuffer()); positionCache = position1; remainingCache = remaining1; - backupArray = shortArray.subarray(position1, remaining1); + capacityCache = capacity1; } - return backupArray; + return shortArray; } @Override 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 b1ab7341..c6e1de21 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 @@ -192,14 +192,7 @@ public void handleEvent(EventWrapper evt) { } if(graphics != null) { - // event calls us with logical pixel size, so if we use physical pixels internally, - // we need to convert them - if(config.usePhysicalPixels) { - double density = graphics.getNativeScreenDensity(); - width = (int)(width * density); - height = (int)(height * density); - } - graphics.setCanvasSize(width, height); + graphics.setCanvasSize(width, height, config.usePhysicalPixels); } } }); 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 2292d5e9..caaba45f 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 @@ -87,7 +87,7 @@ public class TeaApplicationConfiguration { * Setting to false mostly makes sense for fixed-size games or non-mobile games expecting performance issues on huge * resolutions. If you target mobiles and desktops, consider using physical device pixels on mobile devices only by using the * return value of {@link TeaApplication#isMobileDevice()} . */ - public boolean usePhysicalPixels = true; + public boolean usePhysicalPixels = false; /** * default, low-power or high-performance 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 1656d2ab..99b58236 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 @@ -49,7 +49,7 @@ static class CustomIntMap implements JSObject { @JSBody(params = { "key" }, script = "var value = this[key]; delete this[key]; return value;") public native T remove (int key); - @JSBody(params = { "value" }, script = "for (i = 0; i < this.length; i++) { if (value === this[i]) { return i; } }") + @JSBody(params = { "value" }, script = "for (var i = 0; i < this.length; i++) { if (value === this[i]) { return i; } }") public native int getKey (T value); } @@ -393,9 +393,8 @@ public void glGenBuffers(int n, IntBuffer buffers) { for(int i = 0; i < n; i++) { WebGLBufferWrapper buffer = gl.createBuffer(); int id = this.buffers.add(buffer); - buffers.put(id); + buffers.put(i, id); } - buffers.limit(n); } @Override @@ -414,9 +413,8 @@ public void glGenFramebuffers(int n, IntBuffer framebuffers) { for(int i = 0; i < n; i++) { WebGLFramebufferWrapper fb = gl.createFramebuffer(); int id = this.frameBuffers.add(fb); - framebuffers.put(id); + framebuffers.put(i, id); } - framebuffers.limit(n); } @Override @@ -430,9 +428,8 @@ public void glGenRenderbuffers(int n, IntBuffer renderbuffers) { for(int i = 0; i < n; i++) { WebGLRenderbufferWrapper rb = gl.createRenderbuffer(); int id = this.renderBuffers.add(rb); - renderbuffers.put(id); + renderbuffers.put(i, id); } - renderbuffers.limit(n); } @Override @@ -446,28 +443,23 @@ public void glGenTextures(int n, IntBuffer textures) { for(int i = 0; i < n; i++) { WebGLTextureWrapper texture = gl.createTexture(); int id = this.textures.add(texture); - textures.put(id); + textures.put(i, id); } - textures.limit(n); } @Override public String glGetActiveAttrib(int program, int index, IntBuffer size, IntBuffer type) { WebGLActiveInfoWrapper activeUniform = gl.getActiveAttrib(programs.get(program), index); - size.put(activeUniform.getSize()); - size.flip(); - type.put(activeUniform.getType()); - type.flip(); + size.put(0, activeUniform.getSize()); + type.put(0, activeUniform.getType()); return activeUniform.getName(); } @Override public String glGetActiveUniform(int program, int index, IntBuffer size, IntBuffer type) { WebGLActiveInfoWrapper activeUniform = gl.getActiveUniform(programs.get(program), index); - size.put(activeUniform.getSize()); - size.flip(); - type.put(activeUniform.getType()); - type.flip(); + size.put(0, activeUniform.getSize()); + type.put(0, activeUniform.getType()); return activeUniform.getName(); } @@ -504,7 +496,6 @@ public void glGetFloatv(int pname, FloatBuffer params) { if(pname == GL20.GL_DEPTH_CLEAR_VALUE || pname == GL20.GL_LINE_WIDTH || pname == GL20.GL_POLYGON_OFFSET_FACTOR || pname == GL20.GL_POLYGON_OFFSET_UNITS || pname == GL20.GL_SAMPLE_COVERAGE_VALUE) { params.put(0, gl.getParameterf(pname)); - params.limit(1); } else throw new GdxRuntimeException("glGetFloat not supported by WebGL backend"); @@ -517,17 +508,15 @@ public void glGetFramebufferAttachmentParameteriv(int target, int attachment, in case GL20.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: case GL20.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: params.put(0, gl.getFramebufferAttachmentParameteri(target, attachment, pname)); - params.limit(1); break; case GL20.GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: WebGLTextureWrapper tex = (WebGLTextureWrapper)gl.getParametero(pname); if(tex == null) { - params.put(0); + params.put(0, 0); } else { - params.put(textures.getKey(tex)); + params.put(0, textures.getKey(tex)); } - params.flip(); return; default: throw new GdxRuntimeException("glGetFramebufferAttachmentParameteriv Invalid enum for WebGL backend."); @@ -556,7 +545,6 @@ public void glGetIntegerv(int pname, IntBuffer params) { || pname == GL20.GL_STENCIL_PASS_DEPTH_PASS || pname == GL20.GL_STENCIL_REF || pname == GL20.GL_STENCIL_VALUE_MASK || pname == GL20.GL_STENCIL_WRITEMASK || pname == GL20.GL_SUBPIXEL_BITS || pname == GL20.GL_UNPACK_ALIGNMENT) { params.put(0, gl.getParameteri(pname)); - params.limit(1); } else if(pname == GL20.GL_VIEWPORT) { Int32ArrayWrapper array = (Int32ArrayWrapper)gl.getParameterv(pname); @@ -564,17 +552,15 @@ else if(pname == GL20.GL_VIEWPORT) { params.put(1, array.get(1)); params.put(2, array.get(2)); params.put(3, array.get(3)); - params.limit(4); } else if(pname == GL20.GL_FRAMEBUFFER_BINDING) { WebGLFramebufferWrapper fbo = (WebGLFramebufferWrapper)gl.getParametero(pname); if(fbo == null) { - params.put(0); + params.put(0, 0); } else { - params.put(frameBuffers.getKey(fbo)); + params.put(0, frameBuffers.getKey(fbo)); } - params.flip(); } else throw new GdxRuntimeException("glGetInteger not supported by WebGL backend"); @@ -589,12 +575,11 @@ public String glGetProgramInfoLog(int program) { public void glGetProgramiv(int program, int pname, IntBuffer params) { if(pname == GL20.GL_DELETE_STATUS || pname == GL20.GL_LINK_STATUS || pname == GL20.GL_VALIDATE_STATUS) { boolean result = gl.getProgramParameterb(programs.get(program), pname); - params.put(result ? GL20.GL_TRUE : GL20.GL_FALSE); + params.put(0, result ? GL20.GL_TRUE : GL20.GL_FALSE); } else { - params.put(gl.getProgramParameteri(programs.get(program), pname)); + params.put(0, gl.getProgramParameteri(programs.get(program), pname)); } - params.flip(); } @Override @@ -612,13 +597,12 @@ public String glGetShaderInfoLog(int shader) { public void glGetShaderiv(int shader, int pname, IntBuffer params) { if(pname == GL20.GL_COMPILE_STATUS || pname == GL20.GL_DELETE_STATUS) { boolean result = gl.getShaderParameterb(shaders.get(shader), pname); - params.put(result ? GL20.GL_TRUE : GL20.GL_FALSE); + params.put(0, result ? GL20.GL_TRUE : GL20.GL_FALSE); } else { int result = gl.getShaderParameteri(shaders.get(shader), pname); - params.put(result); + params.put(0, result); } - params.flip(); } @Override @@ -756,7 +740,6 @@ public void glReadPixels(int x, int y, int width, int height, int format, int ty int size = 4 * width * height; Uint8ArrayWrapper buffer = TypedArrays.createUint8Array(typedArray.getBuffer(), typedArray.getByteOffset(), size); gl.readPixels(x, y, width, height, format, type, buffer); - pixels.limit(size); } @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 05a75fa4..5be755b7 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 @@ -286,13 +286,11 @@ public void glGenQueries(int n, int[] ids, int offset) { @Override public void glGenQueries(int n, IntBuffer ids) { - int startPosition = ids.position(); for(int i = 0; i < n; i++) { WebGLQueryWrapper query = gl.createQuery(); int id = queries.add(query); - ids.put(id); + ids.put(i, id); } - ids.position(startPosition); } @Override @@ -306,13 +304,11 @@ public void glGenSamplers(int count, int[] samplerr, int offset) { @Override public void glGenSamplers(int n, IntBuffer ids) { - int startPosition = ids.position(); for(int i = 0; i < n; i++) { WebGLSamplerWrapper sampler = gl.createSampler(); int id = samplers.add(sampler); - ids.put(id); + ids.put(i, id); } - ids.position(startPosition); } @Override @@ -326,13 +322,11 @@ public void glGenTransformFeedbacks(int n, int[] ids, int offset) { @Override public void glGenTransformFeedbacks(int n, IntBuffer ids) { - int startPosition = ids.position(); for(int i = 0; i < n; i++) { WebGLTransformFeedbackWrapper feedback = gl.createTransformFeedback(); int id = feedbacks.add(feedback); - ids.put(id); + ids.put(i, id); } - ids.position(startPosition); } @Override @@ -346,36 +340,33 @@ public void glGenVertexArrays(int n, int[] arrays, int offset) { @Override public void glGenVertexArrays(int n, IntBuffer ids) { - int startPosition = ids.position(); for(int i = 0; i < n; i++) { WebGLVertexArrayObjectWrapper vArray = gl.createVertexArray(); int id = vertexArrays.add(vArray); - ids.put(id); + ids.put(i, id); } - ids.position(startPosition); } @Override public void glGetActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, IntBuffer params) { if(pname == GL30.GL_UNIFORM_BLOCK_BINDING || pname == GL30.GL_UNIFORM_BLOCK_DATA_SIZE || pname == GL30.GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS) { - params.put(gl.getActiveUniformBlockParameteri(programs.get(program), uniformBlockIndex, pname)); + params.put(0, gl.getActiveUniformBlockParameteri(programs.get(program), uniformBlockIndex, pname)); } else if(pname == GL30.GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) { Uint32ArrayWrapper array = gl.getActiveUniformBlockParameterv(programs.get(program), uniformBlockIndex, pname); for(int i = 0; i < array.getLength(); i++) { - params.put(i, (int)array.get(i)); + params.put(i, array.get(i)); } } else if(pname == GL30.GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER || pname == GL30.GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER) { boolean result = gl.getActiveUniformBlockParameterb(programs.get(program), uniformBlockIndex, pname); - params.put(result ? GL20.GL_TRUE : GL20.GL_FALSE); + params.put(0, result ? GL20.GL_TRUE : GL20.GL_FALSE); } else { throw new GdxRuntimeException("Unsupported pname passed to glGetActiveUniformBlockiv"); } - params.flip(); } @Override @@ -402,7 +393,6 @@ public void glGetActiveUniformsiv(int program, int uniformCount, IntBuffer unifo params.put(i, arr.get(i)); } } - params.limit(uniformCount); } @Override @@ -420,7 +410,6 @@ public void glGetFloatv(int pname, FloatBuffer params) { // Override GwtGL20 method to check if it's a pname introduced with GL30. if(pname == GL30.GL_MAX_TEXTURE_LOD_BIAS) { params.put(0, gl.getParameterf(pname)); - params.limit(1); } else { super.glGetFloatv(pname, params); @@ -478,39 +467,35 @@ public void glGetIntegerv(int pname, IntBuffer params) { case GL30.GL_UNPACK_SKIP_PIXELS: case GL30.GL_UNPACK_SKIP_ROWS: params.put(0, gl.getParameteri(pname)); - params.limit(1); return; case GL30.GL_DRAW_FRAMEBUFFER_BINDING: case GL30.GL_READ_FRAMEBUFFER_BINDING: WebGLFramebufferWrapper fbo = (WebGLFramebufferWrapper)gl.getParametero(pname); if(fbo == null) { - params.put(0); + params.put(0, 0); } else { - params.put(frameBuffers.getKey(fbo)); + params.put(0, frameBuffers.getKey(fbo)); } - params.flip(); return; case GL30.GL_TEXTURE_BINDING_2D_ARRAY: case GL30.GL_TEXTURE_BINDING_3D: WebGLTextureWrapper tex = (WebGLTextureWrapper)gl.getParametero(pname); if(tex == null) { - params.put(0); + params.put(0, 0); } else { - params.put(textures.getKey(tex)); + params.put(0, textures.getKey(tex)); } - params.flip(); return; case GL30.GL_VERTEX_ARRAY_BINDING: WebGLVertexArrayObjectWrapper obj = (WebGLVertexArrayObjectWrapper)gl.getParametero(pname); if(obj == null) { - params.put(0); + params.put(0, 0); } else { - params.put(vertexArrays.getKey(obj)); + params.put(0, vertexArrays.getKey(obj)); } - params.flip(); return; default: // Assume it is a GL20 pname @@ -526,8 +511,7 @@ public void glGetInteger64v(int pname, LongBuffer params) { case GL30.GL_MAX_ELEMENT_INDEX: case GL30.GL_MAX_SERVER_WAIT_TIMEOUT: case GL30.GL_MAX_UNIFORM_BLOCK_SIZE: - params.put(gl.getParameteri64(pname)); - params.flip(); + params.put(0, gl.getParameteri64(pname)); return; default: throw new UnsupportedOperationException("Given glGetInteger64v enum not supported on WebGL2"); @@ -547,7 +531,6 @@ public void glGetFramebufferAttachmentParameteriv (int target, int attachment, i case GL30.GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: case GL30.GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: params.put(0, gl.getFramebufferAttachmentParameteri(target, attachment, pname)); - params.limit(1); break; default: // Assume it is a GL20 pname @@ -561,40 +544,36 @@ public void glGetQueryiv(int target, int pname, IntBuffer params) { // Similar to how GwtGL20 handles FBO in glGetIntegerv WebGLQueryWrapper query = gl.getQuery(target, pname); if(query == null) { - params.put(0); + params.put(0, 0); } else { - params.put(queries.getKey(query)); + params.put(0, queries.getKey(query)); } - params.flip(); } @Override public void glGetQueryObjectuiv(int id, int pname, IntBuffer params) { // In WebGL2 getQueryObject was renamed to getQueryParameter if(pname == GL30.GL_QUERY_RESULT) { - params.put(gl.getQueryParameteri(queries.get(id), pname)); + params.put(0, gl.getQueryParameteri(queries.get(id), pname)); } else if(pname == GL30.GL_QUERY_RESULT_AVAILABLE) { boolean result = gl.getQueryParameterb(queries.get(id), pname); - params.put(result ? GL20.GL_TRUE : GL20.GL_FALSE); + params.put(0, result ? GL20.GL_TRUE : GL20.GL_FALSE); } else { throw new GdxRuntimeException("Unsupported pname passed to glGetQueryObjectuiv"); } - params.flip(); } @Override public void glGetSamplerParameterfv(int sampler, int pname, FloatBuffer params) { - params.put(gl.getSamplerParameterf(samplers.get(sampler), pname)); - params.flip(); + params.put(0, gl.getSamplerParameterf(samplers.get(sampler), pname)); } @Override public void glGetSamplerParameteriv(int sampler, int pname, IntBuffer params) { - params.put(gl.getSamplerParameteri(samplers.get(sampler), pname)); - params.flip(); + params.put(0, gl.getSamplerParameteri(samplers.get(sampler), pname)); } @Override @@ -614,7 +593,6 @@ public void glGetUniformIndices(int program, String[] uniformNames, IntBuffer un for(int i = 0; i < length; i++) { uniformIndices.put(i, array.get(i)); } - uniformIndices.limit(length); } @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 6cb341e2..b23255ca 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 @@ -81,17 +81,18 @@ public TeaGraphics(TeaApplicationConfiguration config) { if(config.width >= 0 || config.height >= 0) { if(config.isFixedSizeApplication()) { - setCanvasSize(config.width, config.height); + setCanvasSize(config.width, config.height, false); } else { TeaWindow currentWindow = TeaWindow.get(); int width = currentWindow.getClientWidth() - config.padHorizontal; int height = currentWindow.getClientHeight() - config.padVertical; - double density = config.usePhysicalPixels ? getNativeScreenDensity() : 1; - setCanvasSize((int)(density * width), (int)(density * height)); + setCanvasSize(width, height, config.usePhysicalPixels); } } + context.viewport(0, 0, getWidth(), getHeight()); + // listen to fullscreen changes addFullscreenChangeListener(canvas, new FullscreenChanged() { @Override @@ -331,20 +332,26 @@ public boolean setWindowedMode(int width, int height) { if(isFullscreen()) exitFullscreen(); // don't set canvas for resizable applications, resize handler will do it if(!config.isAutoSizeApplication()) { - setCanvasSize(width, height); + setCanvasSize(width, height, config.usePhysicalPixels); } return true; } - void setCanvasSize(int width, int height) { - canvas.setWidth(width); - canvas.setHeight(height); - if(config.usePhysicalPixels) { - //TODO Not tested - double density = getNativeScreenDensity(); + void setCanvasSize(int width, int height, boolean usePhysicalPixels) { + // event calls us with logical pixel size, so if we use physical pixels internally, + // we need to convert them + double density = 1; + if(usePhysicalPixels) { + density = getNativeScreenDensity(); + } + int w = (int)(width * density); + int h = (int)(height * density); + canvas.setWidth(w); + canvas.setHeight(h); + if(usePhysicalPixels) { StyleWrapper style = canvas.getStyle(); - style.setProperty("width", width / density + StyleWrapper.Unit.PX.getType()); - style.setProperty("height", height / density + StyleWrapper.Unit.PX.getType()); + style.setProperty("width", width + StyleWrapper.Unit.PX.getType()); + style.setProperty("height", height + StyleWrapper.Unit.PX.getType()); } } diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/assetloader/AssetLoadImpl.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/assetloader/AssetLoadImpl.java index bfdcf39d..d73b0ba6 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/assetloader/AssetLoadImpl.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/assetloader/AssetLoadImpl.java @@ -155,7 +155,7 @@ public void onSuccess(String url, Blob result) { for(String line : lines) { String[] tokens = line.split(":"); if(tokens.length != 5) { - throw new GdxRuntimeException("Invalid assets description file."); + throw new GdxRuntimeException("Invalid assets description file. " + tokens.length + " " + line); } String fileTypeStr = tokens[0]; String assetTypeStr = tokens[1]; diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/impl/TeaWindow.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/impl/TeaWindow.java index 92a829f1..5bfada0a 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/impl/TeaWindow.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/dom/impl/TeaWindow.java @@ -54,12 +54,12 @@ public LocationWrapper getLocation() { @Override public int getClientWidth() { - return window.getDocument().getDocumentElement().getClientWidth(); + return window.getInnerWidth(); } @Override public int getClientHeight() { - return window.getDocument().getDocumentElement().getClientHeight(); + return window.getInnerHeight(); } @Override diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/MemoryFileStorage.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/MemoryFileStorage.java index 98d38f04..0d1a2890 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/MemoryFileStorage.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/MemoryFileStorage.java @@ -1,5 +1,6 @@ package com.github.xpenatan.gdx.backends.teavm.filesystem; +import com.badlogic.gdx.Files; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; @@ -254,6 +255,8 @@ private String[] getAllChildren(FileHandle file) { private String[] list(FileHandle file, boolean equals) { String dir = fixPath(file.path()); + + Files.FileType type = file.type(); boolean isRoot = isRootFolder(file); if(debug) { System.out.println("########## START LIST ### isRoot: " + isRoot + " DIR: " + dir); @@ -263,7 +266,8 @@ private String[] list(FileHandle file, boolean equals) { ObjectMap.Entry next = it.next(); String path = fixPath(next.key); - FileHandle parent = getFilePath(path).parent(); + FileHandle pathFileHandle = Gdx.files.getFileHandle(path, type); + FileHandle parent = pathFileHandle.parent(); String parentPath = fixPath(parent.path()); boolean isChildParentRoot = isRootFolder(parent); @@ -314,10 +318,6 @@ private String[] list(FileHandle file, boolean equals) { return str; } - protected FileHandle getFilePath(String path) { - return Gdx.files.internal(path); - } - protected void putFile(String key, FileData data) { } diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/types/LocalDBStorage.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/types/LocalDBStorage.java index 7aae416d..ac71d94e 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/types/LocalDBStorage.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/filesystem/types/LocalDBStorage.java @@ -58,11 +58,6 @@ private void setupIndexedDB(TeaApplication teaApplication) { }); } - @Override - protected FileHandle getFilePath(String path) { - return Gdx.files.local(path); - } - @Override protected void putFile(String key, FileData fileData) { if(debug) { diff --git a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/webaudio/howler/HowlMusic.java b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/webaudio/howler/HowlMusic.java index 63dbe125..ef634835 100644 --- a/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/webaudio/howler/HowlMusic.java +++ b/backends/backend-teavm/src/main/java/com/github/xpenatan/gdx/backends/teavm/webaudio/howler/HowlMusic.java @@ -14,6 +14,7 @@ public HowlMusic(FileHandle fileHandle) { byte[] bytes = fileHandle.readBytes(); ArrayBufferViewWrapper data = TypedArrays.getTypedArray(bytes); howl = Howl.create(data); + soundId = -1; } @Override @@ -28,7 +29,9 @@ public void play() { @Override public void pause() { - howl.pause(soundId); + if(soundId != -1) { + howl.pause(soundId); + } } @Override @@ -39,38 +42,55 @@ public void stop() { @Override public boolean isPlaying() { - return howl.isPlaying(soundId); + if(soundId != -1) { + return howl.isPlaying(soundId); + } + return false; } @Override public void setLooping(boolean isLooping) { - howl.setLoop(isLooping, soundId); + if(soundId != -1) { + howl.setLoop(isLooping, soundId); + } } @Override public boolean isLooping() { - return howl.getLoop(soundId); + if(soundId != -1) { + return howl.getLoop(soundId); + } + return false; } @Override public void setVolume(float volume) { - howl.setVolume(volume, soundId); + if(soundId != -1) { + howl.setVolume(volume, soundId); + } } @Override public float getVolume() { - return howl.getVolume(soundId); + if(soundId != -1) { + return howl.getVolume(soundId); + } + return 0f; } @Override public void setPan(float pan, float volume) { - howl.setStereo(pan, soundId); - howl.setVolume(volume, soundId); + if(soundId != -1) { + howl.setStereo(pan, soundId); + howl.setVolume(volume, soundId); + } } @Override public void setPosition(float position) { - howl.setSeek(position, soundId); + if(soundId != -1) { + howl.setSeek(position, soundId); + } } @Override diff --git a/backends/backend-teavm/src/main/resources/META-INF/gdx-teavm.properties b/backends/backend-teavm/src/main/resources/META-INF/gdx-teavm.properties index 18c6b1f6..1b78a026 100644 --- a/backends/backend-teavm/src/main/resources/META-INF/gdx-teavm.properties +++ b/backends/backend-teavm/src/main/resources/META-INF/gdx-teavm.properties @@ -1,5 +1,6 @@ resources=com.badlogicgames.gdx/gdx/ resources=build/libs/gdx- resources=com.github.mgsx-dev.gdx-gltf/gltf/ +resources=com.github.xpenatan.gdx-gltf/gltf resources=build/libs/gltf- ignore-resources=startup-logo.png \ No newline at end of file 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 05f7ff52..0db9fef1 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 @@ -19,7 +19,7 @@ public static void main(String[] args) throws IOException { TeaBuildConfiguration teaBuildConfiguration = new TeaBuildConfiguration(); teaBuildConfiguration.assetsPath.add(new AssetFileHandle("../assets")); - teaBuildConfiguration.shouldGenerateAssetFile = false; + teaBuildConfiguration.shouldGenerateAssetFile = true; teaBuildConfiguration.webappPath = new File("build/dist").getCanonicalPath(); teaBuildConfiguration.logoPath = "logo.png"; 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 1b37ea16..5c31551a 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 @@ -48,7 +48,7 @@ public void show() { ImGui.CreateContext(); ImGuiIO io = ImGui.GetIO(); - io.ConfigFlags(ImGuiConfigFlags.ImGuiConfigFlags_DockingEnable); + io.set_ConfigFlags(ImGuiConfigFlags.ImGuiConfigFlags_DockingEnable); input = new ImGuiGdxInputMultiplexer(); impl = new ImGuiGdxImpl(); @@ -125,7 +125,7 @@ public void render(float delta) { Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - impl.update(); + impl.newFrame(); drawTestListWindow(); diff --git a/gradle.properties b/gradle.properties index 134af495..b8b61709 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=1.0.3 +version=1.0.4 gdxSourcePath = E:/Dev/Projects/java/libgdx teavmPath = E:/Dev/Projects/java/teavm includeLibgdxSource = false