pull/2395/head
commit
555c54d917
|
@ -33,10 +33,6 @@ env:
|
|||
|
||||
matrix:
|
||||
include:
|
||||
# disabled until clang 5.0 analyzer issues are fixed
|
||||
# - os: linux
|
||||
# compiler: clang
|
||||
# env: ANALYZE=ON
|
||||
- os: linux
|
||||
compiler: clang
|
||||
env: ASAN=ON
|
||||
|
@ -51,7 +47,6 @@ matrix:
|
|||
env: ANALYZE=ON
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
# env: DISABLE_EXPORTERS=YES ENABLE_COVERALLS=ON
|
||||
env: ENABLE_COVERALLS=ON
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
|
|
|
@ -10,6 +10,8 @@ A library to import and export various 3d-model-formats including scene-post-pro
|
|||
</a>
|
||||
[![Coverage Status](https://coveralls.io/repos/github/assimp/assimp/badge.svg?branch=master)](https://coveralls.io/github/assimp/assimp?branch=master)
|
||||
[![Join the chat at https://gitter.im/assimp/assimp](https://badges.gitter.im/assimp/assimp.svg)](https://gitter.im/assimp/assimp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/assimp/assimp.svg)](http://isitmaintained.com/project/assimp/assimp "Average time to resolve an issue")
|
||||
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5be56faac64f46fc941ac890fb4febef)](https://www.codacy.com/app/kimkulling/assimp?utm_source=github.com&utm_medium=referral&utm_content=assimp/assimp&utm_campaign=Badge_Grade)
|
||||
<br>
|
||||
|
||||
APIs are provided for C and C++. There are various bindings to other languages (C#, Java, Python, Delphi, D). Assimp also runs on Android and iOS.
|
||||
|
|
|
@ -29,7 +29,6 @@ from . import structs
|
|||
from . import helper
|
||||
from . import postprocess
|
||||
from .errors import AssimpError
|
||||
from .formats import available_formats
|
||||
|
||||
class AssimpLib(object):
|
||||
"""
|
||||
|
@ -300,14 +299,12 @@ def load(filename,
|
|||
'''
|
||||
|
||||
if hasattr(filename, 'read'):
|
||||
'''
|
||||
This is the case where a file object has been passed to load.
|
||||
It is calling the following function:
|
||||
const aiScene* aiImportFileFromMemory(const char* pBuffer,
|
||||
unsigned int pLength,
|
||||
unsigned int pFlags,
|
||||
const char* pHint)
|
||||
'''
|
||||
# This is the case where a file object has been passed to load.
|
||||
# It is calling the following function:
|
||||
# const aiScene* aiImportFileFromMemory(const char* pBuffer,
|
||||
# unsigned int pLength,
|
||||
# unsigned int pFlags,
|
||||
# const char* pHint)
|
||||
if file_type == None:
|
||||
raise AssimpError('File type must be specified when passing file objects!')
|
||||
data = filename.read()
|
||||
|
|
|
@ -1177,6 +1177,22 @@ class PyAssimp3DViewer:
|
|||
return True
|
||||
|
||||
def controls_3d(self, dx, dy, zooming_one_shot=False):
|
||||
""" Orbiting the camera is implemented the following way:
|
||||
|
||||
- the rotation is split into a rotation around the *world* Z axis
|
||||
(controlled by the horizontal mouse motion along X) and a
|
||||
rotation around the *X* axis of the camera (pitch) *shifted to
|
||||
the focal origin* (the world origin for now). This is controlled
|
||||
by the vertical motion of the mouse (Y axis).
|
||||
- as a result, the resulting transformation of the camera in the
|
||||
world frame C' is:
|
||||
C' = (T · Rx · T⁻¹ · (Rz · C)⁻¹)⁻¹
|
||||
where:
|
||||
- C is the original camera transformation in the world frame,
|
||||
- Rz is the rotation along the Z axis (in the world frame)
|
||||
- T is the translation camera -> world (ie, the inverse of the
|
||||
translation part of C
|
||||
- Rx is the rotation around X in the (translated) camera frame """
|
||||
|
||||
CAMERA_TRANSLATION_FACTOR = 0.01
|
||||
CAMERA_ROTATION_FACTOR = 0.01
|
||||
|
@ -1188,26 +1204,6 @@ class PyAssimp3DViewer:
|
|||
distance = numpy.linalg.norm(self.focal_point - current_pos)
|
||||
|
||||
if self.is_rotating:
|
||||
""" Orbiting the camera is implemented the following way:
|
||||
|
||||
- the rotation is split into a rotation around the *world* Z axis
|
||||
(controlled by the horizontal mouse motion along X) and a
|
||||
rotation around the *X* axis of the camera (pitch) *shifted to
|
||||
the focal origin* (the world origin for now). This is controlled
|
||||
by the vertical motion of the mouse (Y axis).
|
||||
|
||||
- as a result, the resulting transformation of the camera in the
|
||||
world frame C' is:
|
||||
C' = (T · Rx · T⁻¹ · (Rz · C)⁻¹)⁻¹
|
||||
|
||||
where:
|
||||
- C is the original camera transformation in the world frame,
|
||||
- Rz is the rotation along the Z axis (in the world frame)
|
||||
- T is the translation camera -> world (ie, the inverse of the
|
||||
translation part of C
|
||||
- Rx is the rotation around X in the (translated) camera frame
|
||||
"""
|
||||
|
||||
rotation_camera_x = dy * CAMERA_ROTATION_FACTOR
|
||||
rotation_world_z = dx * CAMERA_ROTATION_FACTOR
|
||||
world_z_rotation = transformations.euler_matrix(0, 0, rotation_world_z)
|
||||
|
|
|
@ -54,6 +54,26 @@ import java.util.List;
|
|||
* {@link AiMesh} for a description and comparison of these APIs.
|
||||
*/
|
||||
public final class AiAnimation {
|
||||
/**
|
||||
* Name.
|
||||
*/
|
||||
private final String m_name;
|
||||
|
||||
/**
|
||||
* Duration.
|
||||
*/
|
||||
private final double m_duration;
|
||||
|
||||
/**
|
||||
* Ticks per second.
|
||||
*/
|
||||
private final double m_ticksPerSecond;
|
||||
|
||||
/**
|
||||
* Bone animation channels.
|
||||
*/
|
||||
private final List<AiNodeAnim> m_nodeAnims = new ArrayList<AiNodeAnim>();
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -151,29 +171,5 @@ public final class AiAnimation {
|
|||
*/
|
||||
public List<AiMeshAnim> getMeshChannels() {
|
||||
throw new UnsupportedOperationException("not implemented yet");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Name.
|
||||
*/
|
||||
private final String m_name;
|
||||
|
||||
|
||||
/**
|
||||
* Duration.
|
||||
*/
|
||||
private final double m_duration;
|
||||
|
||||
|
||||
/**
|
||||
* Ticks per second.
|
||||
*/
|
||||
private final double m_ticksPerSecond;
|
||||
|
||||
|
||||
/**
|
||||
* Bone animation channels.
|
||||
*/
|
||||
private final List<AiNodeAnim> m_nodeAnims = new ArrayList<AiNodeAnim>();
|
||||
}
|
||||
}
|
|
@ -55,6 +55,24 @@ import java.util.List;
|
|||
* writable and may be modified.
|
||||
*/
|
||||
public final class AiBone {
|
||||
/**
|
||||
* Name of the bone.
|
||||
*/
|
||||
private String m_name;
|
||||
|
||||
|
||||
/**
|
||||
* Bone weights.
|
||||
*/
|
||||
private final List<AiBoneWeight> m_boneWeights =
|
||||
new ArrayList<AiBoneWeight>();
|
||||
|
||||
|
||||
/**
|
||||
* Offset matrix.
|
||||
*/
|
||||
private Object m_offsetMatrix;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
|
@ -114,24 +132,5 @@ public final class AiBone {
|
|||
AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
|
||||
|
||||
return (M4) m_offsetMatrix;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Name of the bone.
|
||||
*/
|
||||
private String m_name;
|
||||
|
||||
|
||||
/**
|
||||
* Bone weights.
|
||||
*/
|
||||
private final List<AiBoneWeight> m_boneWeights =
|
||||
new ArrayList<AiBoneWeight>();
|
||||
|
||||
|
||||
/**
|
||||
* Offset matrix.
|
||||
*/
|
||||
private Object m_offsetMatrix;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -139,10 +139,8 @@ public class AiClassLoaderIOSystem implements AiIOSystem<AiInputStreamIOStream>
|
|||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,16 @@ import java.nio.ByteBuffer;
|
|||
* modify the underlying mesh.
|
||||
*/
|
||||
public final class AiColor {
|
||||
/**
|
||||
* Wrapped buffer.
|
||||
*/
|
||||
private final ByteBuffer m_buffer;
|
||||
|
||||
/**
|
||||
* Offset into m_buffer.
|
||||
*/
|
||||
private final int m_offset;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -147,16 +157,4 @@ public final class AiColor {
|
|||
return "[" + getRed() + ", " + getGreen() + ", " + getBlue() + ", " +
|
||||
getAlpha() + "]";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Wrapped buffer.
|
||||
*/
|
||||
private final ByteBuffer m_buffer;
|
||||
|
||||
|
||||
/**
|
||||
* Offset into m_buffer.
|
||||
*/
|
||||
private final int m_offset;
|
||||
}
|
||||
|
|
|
@ -70,6 +70,17 @@ import java.util.Set;
|
|||
* properties (i.e., properties starting with <code>TEX_</code>).
|
||||
*/
|
||||
public final class AiMaterial {
|
||||
/**
|
||||
* List of properties.
|
||||
*/
|
||||
private final List<Property> m_properties = new ArrayList<Property>();
|
||||
|
||||
/**
|
||||
* Number of textures for each type.
|
||||
*/
|
||||
private final Map<AiTextureType, Integer> m_numTextures =
|
||||
new EnumMap<AiTextureType, Integer>(AiTextureType.class);
|
||||
|
||||
/**
|
||||
* Enumerates all supported material properties.
|
||||
*/
|
||||
|
@ -317,7 +328,36 @@ public final class AiMaterial {
|
|||
* properties easily.
|
||||
*/
|
||||
public static final class Property {
|
||||
/**
|
||||
* Key.
|
||||
*/
|
||||
private final String m_key;
|
||||
|
||||
|
||||
/**
|
||||
* Semantic.
|
||||
*/
|
||||
private final int m_semantic;
|
||||
|
||||
|
||||
/**
|
||||
* Index.
|
||||
*/
|
||||
private final int m_index;
|
||||
|
||||
|
||||
/**
|
||||
* Type.
|
||||
*/
|
||||
private final PropertyType m_type;
|
||||
|
||||
|
||||
/**
|
||||
* Data.
|
||||
*/
|
||||
private final Object m_data;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param key
|
||||
|
@ -417,39 +457,9 @@ public final class AiMaterial {
|
|||
*
|
||||
* @return the data
|
||||
*/
|
||||
Object getData() {
|
||||
private Object getData() {
|
||||
return m_data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Key.
|
||||
*/
|
||||
private final String m_key;
|
||||
|
||||
|
||||
/**
|
||||
* Semantic.
|
||||
*/
|
||||
private final int m_semantic;
|
||||
|
||||
|
||||
/**
|
||||
* Index.
|
||||
*/
|
||||
private final int m_index;
|
||||
|
||||
|
||||
/**
|
||||
* Type.
|
||||
*/
|
||||
private final PropertyType m_type;
|
||||
|
||||
|
||||
/**
|
||||
* Data.
|
||||
*/
|
||||
private final Object m_data;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1185,18 +1195,5 @@ public final class AiMaterial {
|
|||
@SuppressWarnings("unused")
|
||||
private void setTextureNumber(int type, int number) {
|
||||
m_numTextures.put(AiTextureType.fromRawValue(type), number);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* List of properties.
|
||||
*/
|
||||
private final List<Property> m_properties = new ArrayList<Property>();
|
||||
|
||||
|
||||
/**
|
||||
* Number of textures for each type.
|
||||
*/
|
||||
private final Map<AiTextureType, Integer> m_numTextures =
|
||||
new EnumMap<AiTextureType, Integer>(AiTextureType.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -153,6 +153,89 @@ public final class AiMesh {
|
|||
private final int SIZEOF_V3D = Jassimp.NATIVE_AIVEKTOR3D_SIZE;
|
||||
|
||||
|
||||
/**
|
||||
* The primitive types used by this mesh.
|
||||
*/
|
||||
private final Set<AiPrimitiveType> m_primitiveTypes =
|
||||
EnumSet.noneOf(AiPrimitiveType.class);
|
||||
|
||||
|
||||
/**
|
||||
* Number of vertices in this mesh.
|
||||
*/
|
||||
private int m_numVertices = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Number of faces in this mesh.
|
||||
*/
|
||||
private int m_numFaces = 0;
|
||||
|
||||
/**
|
||||
* Material used by this mesh.
|
||||
*/
|
||||
private int m_materialIndex = -1;
|
||||
|
||||
/**
|
||||
* The name of the mesh.
|
||||
*/
|
||||
private String m_name = "";
|
||||
|
||||
/**
|
||||
* Buffer for vertex position data.
|
||||
*/
|
||||
private ByteBuffer m_vertices = null;
|
||||
|
||||
/**
|
||||
* Buffer for faces/ indices.
|
||||
*/
|
||||
private ByteBuffer m_faces = null;
|
||||
|
||||
|
||||
/**
|
||||
* Index structure for m_faces.<p>
|
||||
*
|
||||
* Only used by meshes that are not pure triangular
|
||||
*/
|
||||
private ByteBuffer m_faceOffsets = null;
|
||||
|
||||
/**
|
||||
* Buffer for normals.
|
||||
*/
|
||||
private ByteBuffer m_normals = null;
|
||||
|
||||
/**
|
||||
* Buffer for tangents.
|
||||
*/
|
||||
private ByteBuffer m_tangents = null;
|
||||
|
||||
/**
|
||||
* Buffer for bitangents.
|
||||
*/
|
||||
private ByteBuffer m_bitangents = null;
|
||||
|
||||
/**
|
||||
* Vertex colors.
|
||||
*/
|
||||
private ByteBuffer[] m_colorsets =
|
||||
new ByteBuffer[JassimpConfig.MAX_NUMBER_COLORSETS];
|
||||
|
||||
/**
|
||||
* Number of UV components for each texture coordinate set.
|
||||
*/
|
||||
private int[] m_numUVComponents = new int[JassimpConfig.MAX_NUMBER_TEXCOORDS];
|
||||
|
||||
/**
|
||||
* Texture coordinates.
|
||||
*/
|
||||
private ByteBuffer[] m_texcoords =
|
||||
new ByteBuffer[JassimpConfig.MAX_NUMBER_TEXCOORDS];
|
||||
|
||||
/**
|
||||
* Bones.
|
||||
*/
|
||||
private final List<AiBone> m_bones = new ArrayList<AiBone>();
|
||||
|
||||
/**
|
||||
* This class is instantiated via JNI, no accessible constructor.
|
||||
*/
|
||||
|
@ -1335,99 +1418,4 @@ public final class AiMesh {
|
|||
}
|
||||
}
|
||||
// }}
|
||||
|
||||
|
||||
/**
|
||||
* The primitive types used by this mesh.
|
||||
*/
|
||||
private final Set<AiPrimitiveType> m_primitiveTypes =
|
||||
EnumSet.noneOf(AiPrimitiveType.class);
|
||||
|
||||
|
||||
/**
|
||||
* Number of vertices in this mesh.
|
||||
*/
|
||||
private int m_numVertices = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Number of faces in this mesh.
|
||||
*/
|
||||
private int m_numFaces = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Material used by this mesh.
|
||||
*/
|
||||
private int m_materialIndex = -1;
|
||||
|
||||
|
||||
/**
|
||||
* The name of the mesh.
|
||||
*/
|
||||
private String m_name = "";
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for vertex position data.
|
||||
*/
|
||||
private ByteBuffer m_vertices = null;
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for faces/ indices.
|
||||
*/
|
||||
private ByteBuffer m_faces = null;
|
||||
|
||||
|
||||
/**
|
||||
* Index structure for m_faces.<p>
|
||||
*
|
||||
* Only used by meshes that are not pure triangular
|
||||
*/
|
||||
private ByteBuffer m_faceOffsets = null;
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for normals.
|
||||
*/
|
||||
private ByteBuffer m_normals = null;
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for tangents.
|
||||
*/
|
||||
private ByteBuffer m_tangents = null;
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for bitangents.
|
||||
*/
|
||||
private ByteBuffer m_bitangents = null;
|
||||
|
||||
|
||||
/**
|
||||
* Vertex colors.
|
||||
*/
|
||||
private ByteBuffer[] m_colorsets =
|
||||
new ByteBuffer[JassimpConfig.MAX_NUMBER_COLORSETS];
|
||||
|
||||
|
||||
/**
|
||||
* Number of UV components for each texture coordinate set.
|
||||
*/
|
||||
private int[] m_numUVComponents = new int[JassimpConfig.MAX_NUMBER_TEXCOORDS];
|
||||
|
||||
|
||||
/**
|
||||
* Texture coordinates.
|
||||
*/
|
||||
private ByteBuffer[] m_texcoords =
|
||||
new ByteBuffer[JassimpConfig.MAX_NUMBER_TEXCOORDS];
|
||||
|
||||
|
||||
/**
|
||||
* Bones.
|
||||
*/
|
||||
private final List<AiBone> m_bones = new ArrayList<AiBone>();
|
||||
}
|
||||
|
|
|
@ -55,6 +55,34 @@ import java.util.Map;
|
|||
* the imported scene consists of only a single root node without children.
|
||||
*/
|
||||
public final class AiNode {
|
||||
/**
|
||||
* Parent node.
|
||||
*/
|
||||
private final AiNode m_parent;
|
||||
|
||||
|
||||
/**
|
||||
* Mesh references.
|
||||
*/
|
||||
private final int[] m_meshReferences;
|
||||
|
||||
|
||||
/**
|
||||
* List of children.
|
||||
*/
|
||||
private final List<AiNode> m_children = new ArrayList<AiNode>();
|
||||
|
||||
/**
|
||||
* List of metadata entries.
|
||||
*/
|
||||
private final Map<String, AiMetadataEntry> m_metaData = new HashMap<String, AiMetadataEntry>();
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for transformation matrix.
|
||||
*/
|
||||
private final Object m_transformationMatrix;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -214,34 +242,5 @@ public final class AiNode {
|
|||
/**
|
||||
* Name.
|
||||
*/
|
||||
private final String m_name;
|
||||
|
||||
|
||||
/**
|
||||
* Parent node.
|
||||
*/
|
||||
private final AiNode m_parent;
|
||||
|
||||
|
||||
/**
|
||||
* Mesh references.
|
||||
*/
|
||||
private final int[] m_meshReferences;
|
||||
|
||||
|
||||
/**
|
||||
* List of children.
|
||||
*/
|
||||
private final List<AiNode> m_children = new ArrayList<AiNode>();
|
||||
|
||||
/**
|
||||
* List of metadata entries.
|
||||
*/
|
||||
private final Map<String, AiMetadataEntry> m_metaData = new HashMap<String, AiMetadataEntry>();
|
||||
|
||||
|
||||
/**
|
||||
* Buffer for transformation matrix.
|
||||
*/
|
||||
private final Object m_transformationMatrix;
|
||||
private final String m_name;
|
||||
}
|
||||
|
|
|
@ -50,6 +50,17 @@ import java.nio.ByteBuffer;
|
|||
* modify the underlying mesh/animation.
|
||||
*/
|
||||
public final class AiQuaternion {
|
||||
/**
|
||||
* Wrapped buffer.
|
||||
*/
|
||||
private final ByteBuffer m_buffer;
|
||||
|
||||
|
||||
/**
|
||||
* Offset into m_buffer.
|
||||
*/
|
||||
private final int m_offset;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
@ -150,17 +161,5 @@ public final class AiQuaternion {
|
|||
public String toString() {
|
||||
return "[" + getX() + ", " + getY() + ", " + getZ() + ", " +
|
||||
getW() + "]";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Wrapped buffer.
|
||||
*/
|
||||
private final ByteBuffer m_buffer;
|
||||
|
||||
|
||||
/**
|
||||
* Offset into m_buffer.
|
||||
*/
|
||||
private final int m_offset;
|
||||
}
|
||||
}
|
|
@ -47,6 +47,11 @@ import java.util.Set;
|
|||
* Status flags for {@link AiScene}s.
|
||||
*/
|
||||
public enum AiSceneFlag {
|
||||
/**
|
||||
* The mapped c/c++ integer enum value.
|
||||
*/
|
||||
private final int m_rawValue;
|
||||
|
||||
/**
|
||||
* Specifies that the scene data structure that was imported is not
|
||||
* complete.<p>
|
||||
|
@ -143,11 +148,5 @@ public enum AiSceneFlag {
|
|||
*/
|
||||
private AiSceneFlag(int rawValue) {
|
||||
m_rawValue = rawValue;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The mapped c/c++ integer enum value.
|
||||
*/
|
||||
private final int m_rawValue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,44 @@ import java.util.Set;
|
|||
*/
|
||||
public final class Jassimp {
|
||||
|
||||
/**
|
||||
* The native interface.
|
||||
*
|
||||
* @param filename the file to load
|
||||
* @param postProcessing post processing flags
|
||||
* @return the loaded scene, or null if an error occurred
|
||||
* @throws IOException if an error occurs
|
||||
*/
|
||||
private static native AiScene aiImportFile(String filename,
|
||||
long postProcessing, AiIOSystem<?> ioSystem) throws IOException;
|
||||
|
||||
|
||||
/**
|
||||
* The active wrapper provider.
|
||||
*/
|
||||
private static AiWrapperProvider<?, ?, ?, ?, ?> s_wrapperProvider =
|
||||
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();
|
||||
|
||||
/**
|
||||
* The default wrapper provider using built in types.
|
||||
*/
|
||||
|
@ -327,48 +365,9 @@ public final class Jassimp {
|
|||
s_libraryLoaded = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The native interface.
|
||||
*
|
||||
* @param filename the file to load
|
||||
* @param postProcessing post processing flags
|
||||
* @return the loaded scene, or null if an error occurred
|
||||
* @throws IOException if an error occurs
|
||||
*/
|
||||
private static native AiScene aiImportFile(String filename,
|
||||
long postProcessing, AiIOSystem<?> ioSystem) throws IOException;
|
||||
|
||||
|
||||
/**
|
||||
* The active wrapper provider.
|
||||
*/
|
||||
private static AiWrapperProvider<?, ?, ?, ?, ?> s_wrapperProvider =
|
||||
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.
|
||||
*/
|
||||
|
@ -384,5 +383,4 @@ public final class Jassimp {
|
|||
public static int NATIVE_UINT_SIZE;
|
||||
public static int NATIVE_DOUBLE_SIZE;
|
||||
public static int NATIVE_LONG_SIZE;
|
||||
|
||||
}
|
||||
|
|
|
@ -124,6 +124,8 @@ SET( IMPORTERS
|
|||
unit/ImportExport/utOgreImportExport.cpp
|
||||
unit/ImportExport/utQ3BSPFileImportExport.cpp
|
||||
unit/ImportExport/utOFFImportExport.cpp
|
||||
unit/ImportExport/utNFFImportExport.cpp
|
||||
unit/ImportExport/utXGLImportExport.cpp
|
||||
)
|
||||
|
||||
SET( MATERIAL
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
---------------------------------------------------------------------------
|
||||
Open Asset Import Library (assimp)
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2006-2018, 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.
|
||||
---------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "UnitTestPCH.h"
|
||||
#include "AbstractImportExportBase.h"
|
||||
#include <assimp/Importer.hpp>
|
||||
#include <assimp/postprocess.h>
|
||||
|
||||
using namespace Assimp;
|
||||
|
||||
class utNFFImportExport : public AbstractImportExportBase {
|
||||
public:
|
||||
virtual bool importerTest() {
|
||||
Assimp::Importer importer;
|
||||
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/NFF/NFF/ManyEarthsNotJustOne.nff", 0);
|
||||
return true;
|
||||
return nullptr != scene;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(utNFFImportExport, importNFFFromFileTest) {
|
||||
EXPECT_TRUE(importerTest());
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
---------------------------------------------------------------------------
|
||||
Open Asset Import Library (assimp)
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2006-2018, 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.
|
||||
---------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "UnitTestPCH.h"
|
||||
#include "AbstractImportExportBase.h"
|
||||
#include <assimp/Importer.hpp>
|
||||
#include <assimp/postprocess.h>
|
||||
|
||||
using namespace Assimp;
|
||||
|
||||
class utXGLImportExport : public AbstractImportExportBase {
|
||||
public:
|
||||
virtual bool importerTest() {
|
||||
Assimp::Importer importer;
|
||||
const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/XGL/sample_official.xgl", 0);
|
||||
return true;
|
||||
return nullptr != scene;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(utXGLImportExport, importXGLFromFileTest) {
|
||||
EXPECT_TRUE(importerTest());
|
||||
}
|
Loading…
Reference in New Issue