|
@@ -32,9 +32,7 @@
|
|
|
package jme3test.app;
|
|
|
|
|
|
import com.jme3.system.NativeLibraryLoader;
|
|
|
-import com.jme3.util.JmeFormatter;
|
|
|
-import java.util.logging.ConsoleHandler;
|
|
|
-import java.util.logging.Handler;
|
|
|
+import java.io.File;
|
|
|
import java.util.logging.Level;
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
@@ -45,13 +43,114 @@ import java.util.logging.Logger;
|
|
|
*/
|
|
|
public class TestNativeLoader {
|
|
|
|
|
|
- public static void main(String[] args) {
|
|
|
- Logger.getLogger("").getHandlers()[0].setLevel(Level.ALL);
|
|
|
- Logger.getLogger("").setLevel(Level.ALL);
|
|
|
-
|
|
|
+ private static final File WORKING_FOLDER = new File(System.getProperty("user.dir"));
|
|
|
+
|
|
|
+ private static void tryLoadLwjgl() {
|
|
|
NativeLibraryLoader.loadNativeLibrary("lwjgl", true);
|
|
|
+ System.out.println("Succeeded in loading LWJGL.\n\tVersion: " +
|
|
|
+ org.lwjgl.Sys.getVersion());
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void tryLoadJinput() {
|
|
|
NativeLibraryLoader.loadNativeLibrary("jinput", true);
|
|
|
+
|
|
|
+ net.java.games.input.ControllerEnvironment ce =
|
|
|
+ net.java.games.input.ControllerEnvironment.getDefaultEnvironment();
|
|
|
+ if (ce.isSupported()) {
|
|
|
+ net.java.games.input.Controller[] c =
|
|
|
+ ce.getControllers();
|
|
|
+
|
|
|
+ System.out.println("Succeeded in loading JInput.\n\tVersion: " +
|
|
|
+ net.java.games.util.Version.getVersion());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void tryLoadOpenAL() {
|
|
|
NativeLibraryLoader.loadNativeLibrary("openal", true);
|
|
|
- NativeLibraryLoader.loadNativeLibrary("bulletjme", false);
|
|
|
+
|
|
|
+ try {
|
|
|
+ org.lwjgl.openal.AL.create();
|
|
|
+ String renderer = org.lwjgl.openal.AL10.alGetString(org.lwjgl.openal.AL10.AL_RENDERER);
|
|
|
+ String vendor = org.lwjgl.openal.AL10.alGetString(org.lwjgl.openal.AL10.AL_VENDOR);
|
|
|
+ String version = org.lwjgl.openal.AL10.alGetString(org.lwjgl.openal.AL10.AL_VERSION);
|
|
|
+ System.out.println("Succeeded in loading OpenAL.");
|
|
|
+ System.out.println("\tVersion: " + version);
|
|
|
+ } catch (org.lwjgl.LWJGLException ex) {
|
|
|
+ throw new RuntimeException(ex);
|
|
|
+ } finally {
|
|
|
+ if (org.lwjgl.openal.AL.isCreated()) {
|
|
|
+ org.lwjgl.openal.AL.destroy();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void tryLoadOpenGL() {
|
|
|
+ org.lwjgl.opengl.Pbuffer pb = null;
|
|
|
+ try {
|
|
|
+ pb = new org.lwjgl.opengl.Pbuffer(1, 1, new org.lwjgl.opengl.PixelFormat(0, 0, 0), null);
|
|
|
+ pb.makeCurrent();
|
|
|
+ String version = org.lwjgl.opengl.GL11.glGetString(org.lwjgl.opengl.GL11.GL_VERSION);
|
|
|
+ System.out.println("Succeeded in loading OpenGL.\n\tVersion: " + version);
|
|
|
+ } catch (org.lwjgl.LWJGLException ex) {
|
|
|
+ throw new RuntimeException(ex);
|
|
|
+ } finally {
|
|
|
+ if (pb != null) {
|
|
|
+ pb.destroy();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void tryLoadBulletJme() {
|
|
|
+ if (NativeLibraryLoader.isUsingNativeBullet()) {
|
|
|
+ NativeLibraryLoader.loadNativeLibrary("bulletjme", true);
|
|
|
+
|
|
|
+ com.jme3.bullet.PhysicsSpace physSpace = new com.jme3.bullet.PhysicsSpace();
|
|
|
+ com.jme3.bullet.PhysicsSpace.initNativePhysics();
|
|
|
+
|
|
|
+ System.out.println("Succeeded in loading BulletJme.");
|
|
|
+ } else {
|
|
|
+ System.out.println("Native bullet not included. Cannot test loading.");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void cleanupNativesFolder(File folder) {
|
|
|
+ for (File file : folder.listFiles()) {
|
|
|
+ String lowerCaseName = file.getName().toLowerCase();
|
|
|
+ if (lowerCaseName.contains("lwjgl") ||
|
|
|
+ lowerCaseName.contains("jinput") ||
|
|
|
+ lowerCaseName.contains("openal") ||
|
|
|
+ lowerCaseName.contains("bulletjme")) {
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ Logger.getLogger("").getHandlers()[0].setLevel(Level.WARNING);
|
|
|
+ Logger.getLogger(NativeLibraryLoader.class.getName()).setLevel(Level.ALL);
|
|
|
+
|
|
|
+ // Get a bit more output from LWJGL about issues.
|
|
|
+ // System.setProperty("org.lwjgl.util.Debug", "true");
|
|
|
+
|
|
|
+ // Extracting to working folder is no brainer.
|
|
|
+ // Choose some random path, then load LWJGL.
|
|
|
+ File customNativesFolder = new File("CustomNativesFolder");
|
|
|
+ customNativesFolder.mkdirs();
|
|
|
+
|
|
|
+ if (!customNativesFolder.isDirectory()) {
|
|
|
+ throw new IllegalStateException("Failed to make custom natives folder");
|
|
|
+ }
|
|
|
+
|
|
|
+ // Let's cleanup our folders first.
|
|
|
+ cleanupNativesFolder(WORKING_FOLDER);
|
|
|
+ cleanupNativesFolder(customNativesFolder);
|
|
|
+
|
|
|
+ NativeLibraryLoader.setCustomExtractionFolder(customNativesFolder.getAbsolutePath());
|
|
|
+
|
|
|
+ tryLoadLwjgl();
|
|
|
+ tryLoadOpenGL();
|
|
|
+ tryLoadOpenAL();
|
|
|
+ tryLoadJinput();
|
|
|
+ tryLoadBulletJme();
|
|
|
}
|
|
|
}
|