* Pointer comparison will fail.
*/
public final class Jassimp {
-
+
/**
* The default wrapper provider using built in types.
*/
public static AiScene importFile(String filename,
Set<AiPostProcessSteps> postProcessing) throws IOException {
+ loadLibrary();
+
return aiImportFile(filename, AiPostProcessSteps.toRawValue(
postProcessing));
}
}
+ public static void setLibraryLoader(JassimpLibraryLoader libraryLoader) {
+ s_libraryLoader = libraryLoader;
+ }
+
+
/**
* Helper method for wrapping a matrix.<p>
*
return s_wrapperProvider.wrapSceneNode(parent, matrix, meshRefs, name);
}
+ /**
+ * Helper method to load the library using the provided JassimpLibraryLoader.<p>
+ *
+ * Synchronized to avoid race conditions.
+ */
+ private static void loadLibrary()
+ {
+ if(!s_libraryLoaded)
+ {
+ synchronized(s_libraryLoadingLock)
+ {
+ if(!s_libraryLoaded)
+ {
+ s_libraryLoader.loadLibrary();
+ NATIVE_AIVEKTORKEY_SIZE = getVKeysize();
+ NATIVE_AIQUATKEY_SIZE = getQKeysize();
+ NATIVE_AIVEKTOR3D_SIZE = getV3Dsize();
+ NATIVE_FLOAT_SIZE = getfloatsize();
+ NATIVE_INT_SIZE = getintsize();
+ NATIVE_UINT_SIZE = getuintsize();
+ NATIVE_DOUBLE_SIZE = getdoublesize();
+ NATIVE_LONG_SIZE = getlongsize();
+
+ s_libraryLoaded = true;
+ }
+ }
+
+ }
+ }
/**
* The native interface.
/**
+ * The library loader to load the native library.
+ */
+ private static JassimpLibraryLoader s_libraryLoader =
+ new JassimpLibraryLoader();
+
+ /**
+ * Status flag if the library is loaded.
+ *
+ * Volatile to avoid problems with double checked locking.
+ *
+ */
+ private static volatile boolean s_libraryLoaded = false;
+
+ /**
+ * Lock for library loading.
+ */
+ private static final Object s_libraryLoadingLock = new Object();
+
+ /**
* Pure static class, no accessible constructor.
*/
private Jassimp() {
/* nothing to do */
}
- public static final int NATIVE_AIVEKTORKEY_SIZE;
- public static final int NATIVE_AIQUATKEY_SIZE;
- public static final int NATIVE_AIVEKTOR3D_SIZE;
- public static final int NATIVE_FLOAT_SIZE;
- public static final int NATIVE_INT_SIZE;
- public static final int NATIVE_UINT_SIZE;
- public static final int NATIVE_DOUBLE_SIZE;
- public static final int NATIVE_LONG_SIZE;
+ public static int NATIVE_AIVEKTORKEY_SIZE;
+ public static int NATIVE_AIQUATKEY_SIZE;
+ public static int NATIVE_AIVEKTOR3D_SIZE;
+ public static int NATIVE_FLOAT_SIZE;
+ public static int NATIVE_INT_SIZE;
+ public static int NATIVE_UINT_SIZE;
+ public static int NATIVE_DOUBLE_SIZE;
+ public static int NATIVE_LONG_SIZE;
- static {
-// System.loadLibrary("jassimp");
- NATIVE_AIVEKTORKEY_SIZE = getVKeysize();
- NATIVE_AIQUATKEY_SIZE = getQKeysize();
- NATIVE_AIVEKTOR3D_SIZE = getV3Dsize();
- NATIVE_FLOAT_SIZE = getfloatsize();
- NATIVE_INT_SIZE = getintsize();
- NATIVE_UINT_SIZE = getuintsize();
- NATIVE_DOUBLE_SIZE = getdoublesize();
- NATIVE_LONG_SIZE = getlongsize();
- }
}
--- /dev/null
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library - Java Binding (jassimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2012, assimp team
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+package jassimp;
+
+public class JassimpLibraryLoader
+{
+ static final JassimpLibraryLoader instance = new JassimpLibraryLoader();
+
+ public void loadLibrary()
+ {
+ System.loadLibrary("jassimp");
+ }
+}