Merge pull request #1365 from ihmcrobotics/feature/custom-library-loader

Feature/custom library loader
pull/1370/head
Alexander Gessler 2017-07-30 00:14:03 +02:00 committed by GitHub
commit 36425677c7
5 changed files with 136 additions and 26 deletions

View File

@ -1,5 +1,6 @@
/* DO NOT EDIT THIS FILE - it is machine generated */ /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h> #include <jni.h>
#include <stdlib.h>
/* Header for class jassimp_Jassimp */ /* Header for class jassimp_Jassimp */
#ifndef _Included_jassimp_Jassimp #ifndef _Included_jassimp_Jassimp

View File

@ -140,17 +140,17 @@ public final class AiMesh {
/** /**
* Number of bytes per float value. * 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. * 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. * 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;
/** /**

View File

@ -70,17 +70,17 @@ public final class AiNodeAnim {
/** /**
* Size of one position key entry. * 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. * 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. * 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;
/** /**

View File

@ -91,6 +91,8 @@ public final class Jassimp {
public static AiScene importFile(String filename, public static AiScene importFile(String filename,
Set<AiPostProcessSteps> postProcessing) throws IOException { Set<AiPostProcessSteps> postProcessing) throws IOException {
loadLibrary();
return aiImportFile(filename, AiPostProcessSteps.toRawValue( return aiImportFile(filename, AiPostProcessSteps.toRawValue(
postProcessing)); 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> * Helper method for wrapping a matrix.<p>
* *
@ -264,6 +271,35 @@ public final class Jassimp {
return s_wrapperProvider.wrapSceneNode(parent, matrix, meshRefs, name); 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 native interface.
@ -284,6 +320,25 @@ public final class Jassimp {
new AiBuiltInWrapperProvider(); 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. * Pure static class, no accessible constructor.
*/ */
@ -291,24 +346,13 @@ public final class Jassimp {
/* nothing to do */ /* nothing to do */
} }
public static final int NATIVE_AIVEKTORKEY_SIZE; public static int NATIVE_AIVEKTORKEY_SIZE;
public static final int NATIVE_AIQUATKEY_SIZE; public static int NATIVE_AIQUATKEY_SIZE;
public static final int NATIVE_AIVEKTOR3D_SIZE; public static int NATIVE_AIVEKTOR3D_SIZE;
public static final int NATIVE_FLOAT_SIZE; public static int NATIVE_FLOAT_SIZE;
public static final int NATIVE_INT_SIZE; public static int NATIVE_INT_SIZE;
public static final int NATIVE_UINT_SIZE; public static int NATIVE_UINT_SIZE;
public static final int NATIVE_DOUBLE_SIZE; public static int NATIVE_DOUBLE_SIZE;
public static final int NATIVE_LONG_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();
}
} }

View File

@ -0,0 +1,65 @@
/*
---------------------------------------------------------------------------
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;
/**
* Library loader for the jassimp library.<p>
*
* The default implementation uses "System.loadLibrary" to
* load the jassimp native library. <p>
*
* Custom implementations should override the loadLibrary()
* function.
*
*/
public class JassimpLibraryLoader
{
/**
* Function to load the native jassimp library.
*
* Called the first time Jassimp.importFile() is
* called.
*/
public void loadLibrary()
{
System.loadLibrary("jassimp");
}
}