Provided access to the library loading code to allow custom library loaders
parent
8243b01c06
commit
c4d0567a8a
|
@ -140,17 +140,17 @@ public final class AiMesh {
|
|||
/**
|
||||
* Number of bytes per float value.
|
||||
*/
|
||||
private static final int SIZEOF_FLOAT = Jassimp.NATIVE_FLOAT_SIZE;
|
||||
private final int SIZEOF_FLOAT = Jassimp.NATIVE_FLOAT_SIZE;
|
||||
|
||||
/**
|
||||
* Number of bytes per int value.
|
||||
*/
|
||||
private static final int SIZEOF_INT = Jassimp.NATIVE_INT_SIZE;
|
||||
private final int SIZEOF_INT = Jassimp.NATIVE_INT_SIZE;
|
||||
|
||||
/**
|
||||
* Size of an AiVector3D in the native world.
|
||||
*/
|
||||
private static final int SIZEOF_V3D = Jassimp.NATIVE_AIVEKTOR3D_SIZE;
|
||||
private final int SIZEOF_V3D = Jassimp.NATIVE_AIVEKTOR3D_SIZE;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -70,17 +70,17 @@ public final class AiNodeAnim {
|
|||
/**
|
||||
* Size of one position key entry.
|
||||
*/
|
||||
private static final int POS_KEY_SIZE = Jassimp.NATIVE_AIVEKTORKEY_SIZE;
|
||||
private final int POS_KEY_SIZE = Jassimp.NATIVE_AIVEKTORKEY_SIZE;
|
||||
|
||||
/**
|
||||
* Size of one rotation key entry.
|
||||
*/
|
||||
private static final int ROT_KEY_SIZE = Jassimp.NATIVE_AIQUATKEY_SIZE;
|
||||
private final int ROT_KEY_SIZE = Jassimp.NATIVE_AIQUATKEY_SIZE;
|
||||
|
||||
/**
|
||||
* Size of one scaling key entry.
|
||||
*/
|
||||
private static final int SCALE_KEY_SIZE = Jassimp.NATIVE_AIVEKTORKEY_SIZE;
|
||||
private final int SCALE_KEY_SIZE = Jassimp.NATIVE_AIVEKTORKEY_SIZE;
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -59,7 +59,7 @@ import java.util.Set;
|
|||
* Pointer comparison will fail.
|
||||
*/
|
||||
public final class Jassimp {
|
||||
|
||||
|
||||
/**
|
||||
* The default wrapper provider using built in types.
|
||||
*/
|
||||
|
@ -91,6 +91,8 @@ public final class Jassimp {
|
|||
public static AiScene importFile(String filename,
|
||||
Set<AiPostProcessSteps> postProcessing) throws IOException {
|
||||
|
||||
loadLibrary();
|
||||
|
||||
return aiImportFile(filename, AiPostProcessSteps.toRawValue(
|
||||
postProcessing));
|
||||
}
|
||||
|
@ -177,6 +179,11 @@ public final class Jassimp {
|
|||
}
|
||||
|
||||
|
||||
public static void setLibraryLoader(JassimpLibraryLoader libraryLoader) {
|
||||
s_libraryLoader = libraryLoader;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper method for wrapping a matrix.<p>
|
||||
*
|
||||
|
@ -264,6 +271,35 @@ public final class Jassimp {
|
|||
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.
|
||||
|
@ -284,6 +320,25 @@ public final class Jassimp {
|
|||
new AiBuiltInWrapperProvider();
|
||||
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
@ -291,24 +346,13 @@ public final class 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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
---------------------------------------------------------------------------
|
||||
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");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue