Feature 871 (#873)

* Update LWJGL to 3.1.6

* Change LinkedLists to ArrayDeques

* Call glfwTerminate & set NULL error callback on destroy

fixes crash when context is re-created
accellbaker
Toni Helenius 6 years ago committed by empirephoenix
parent d57c362ec3
commit bbcb8c5701
  1. 2
      jme3-lwjgl3/build.gradle
  2. 11
      jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwKeyInput.java
  3. 15
      jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/GlfwMouseInput.java
  4. 18
      jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java

@ -2,7 +2,7 @@ if (!hasProperty('mainClass')) {
ext.mainClass = '' ext.mainClass = ''
} }
def lwjglVersion = '3.1.5' def lwjglVersion = '3.1.6'
sourceCompatibility = '1.8' sourceCompatibility = '1.8'

@ -32,17 +32,16 @@
package com.jme3.input.lwjgl; package com.jme3.input.lwjgl;
import static org.lwjgl.glfw.GLFW.*;
import com.jme3.input.KeyInput; import com.jme3.input.KeyInput;
import com.jme3.input.RawInputListener; import com.jme3.input.RawInputListener;
import com.jme3.input.event.KeyInputEvent; import com.jme3.input.event.KeyInputEvent;
import com.jme3.system.lwjgl.LwjglWindow; import com.jme3.system.lwjgl.LwjglWindow;
import org.lwjgl.glfw.GLFWCharCallback; import java.util.ArrayDeque;
import org.lwjgl.glfw.GLFWKeyCallback;
import java.util.LinkedList;
import java.util.Queue; import java.util.Queue;
import java.util.logging.Logger; import java.util.logging.Logger;
import static org.lwjgl.glfw.GLFW.*;
import org.lwjgl.glfw.GLFWCharCallback;
import org.lwjgl.glfw.GLFWKeyCallback;
/** /**
* The LWJGL implementation of {@link KeyInput}. * The LWJGL implementation of {@link KeyInput}.
@ -54,7 +53,7 @@ public class GlfwKeyInput implements KeyInput {
/** /**
* The queue of key events. * The queue of key events.
*/ */
private final Queue<KeyInputEvent> keyInputEvents = new LinkedList<>(); private final Queue<KeyInputEvent> keyInputEvents = new ArrayDeque<>();
/** /**
* The LWJGL context. * The LWJGL context.

@ -31,7 +31,6 @@
*/ */
package com.jme3.input.lwjgl; package com.jme3.input.lwjgl;
import static org.lwjgl.glfw.GLFW.*;
import com.jme3.cursors.plugins.JmeCursor; import com.jme3.cursors.plugins.JmeCursor;
import com.jme3.input.MouseInput; import com.jme3.input.MouseInput;
import com.jme3.input.RawInputListener; import com.jme3.input.RawInputListener;
@ -39,17 +38,17 @@ import com.jme3.input.event.MouseButtonEvent;
import com.jme3.input.event.MouseMotionEvent; import com.jme3.input.event.MouseMotionEvent;
import com.jme3.system.lwjgl.LwjglWindow; import com.jme3.system.lwjgl.LwjglWindow;
import com.jme3.util.BufferUtils; import com.jme3.util.BufferUtils;
import org.lwjgl.glfw.*;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.system.MemoryUtil;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.IntBuffer; import java.nio.IntBuffer;
import java.util.ArrayDeque;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map; import java.util.Map;
import java.util.Queue; import java.util.Queue;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.lwjgl.glfw.*;
import static org.lwjgl.glfw.GLFW.*;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.system.MemoryUtil;
/** /**
* Captures mouse input using GLFW callbacks. It then temporarily stores these * Captures mouse input using GLFW callbacks. It then temporarily stores these
@ -110,8 +109,8 @@ public class GlfwMouseInput implements MouseInput {
private final Map<JmeCursor, long[]> jmeToGlfwCursorMap = new HashMap<>(); private final Map<JmeCursor, long[]> jmeToGlfwCursorMap = new HashMap<>();
private final Queue<MouseMotionEvent> mouseMotionEvents = new LinkedList<>(); private final Queue<MouseMotionEvent> mouseMotionEvents = new ArrayDeque<>();
private final Queue<MouseButtonEvent> mouseButtonEvents = new LinkedList<>(); private final Queue<MouseButtonEvent> mouseButtonEvents = new ArrayDeque<>();
private final LwjglWindow context; private final LwjglWindow context;

@ -32,9 +32,6 @@
package com.jme3.system.lwjgl; package com.jme3.system.lwjgl;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.GL_FALSE;
import static org.lwjgl.system.MemoryUtil.NULL;
import com.jme3.input.JoyInput; import com.jme3.input.JoyInput;
import com.jme3.input.KeyInput; import com.jme3.input.KeyInput;
import com.jme3.input.MouseInput; import com.jme3.input.MouseInput;
@ -47,9 +44,6 @@ import com.jme3.system.JmeContext;
import com.jme3.system.JmeSystem; import com.jme3.system.JmeSystem;
import com.jme3.system.NanoTimer; import com.jme3.system.NanoTimer;
import com.jme3.util.BufferUtils; import com.jme3.util.BufferUtils;
import org.lwjgl.Version;
import org.lwjgl.glfw.*;
import java.awt.*; import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -59,6 +53,11 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.lwjgl.Version;
import org.lwjgl.glfw.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.GL_FALSE;
import static org.lwjgl.system.MemoryUtil.NULL;
/** /**
* A wrapper class over the GLFW framework in LWJGL 3. * A wrapper class over the GLFW framework in LWJGL 3.
@ -383,6 +382,10 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
} }
if (errorCallback != null) { if (errorCallback != null) {
// We need to specifically set this to null as we might set a new callback before we reinit GLFW
glfwSetErrorCallback(null);
errorCallback.close(); errorCallback.close();
errorCallback = null; errorCallback = null;
} }
@ -401,6 +404,8 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
glfwDestroyWindow(window); glfwDestroyWindow(window);
window = NULL; window = NULL;
} }
glfwTerminate();
} catch (final Exception ex) { } catch (final Exception ex) {
listener.handleError("Failed to destroy context", ex); listener.handleError("Failed to destroy context", ex);
} }
@ -548,7 +553,6 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
/** /**
* De-initialize in the OpenGL thread. * De-initialize in the OpenGL thread.
*/ */
protected void deinitInThread() { protected void deinitInThread() {
listener.destroy(); listener.destroy();

Loading…
Cancel
Save