Przeglądaj źródła

Merge pull request #2295 from kurtzmarc/add_progresshandler_support_jassimp

Add progresshandler support jassimp
Kim Kulling 6 lat temu
rodzic
commit
13ce4a6292

+ 26 - 2
port/jassimp/jassimp-native/src/jassimp.cpp

@@ -1,6 +1,7 @@
 #include "jassimp.h"
 
 #include <assimp/Importer.hpp>
+#include <assimp/ProgressHandler.hpp>
 #include <assimp/scene.h>
 #include <assimp/IOStream.hpp>
 #include <assimp/IOSystem.hpp>
@@ -248,7 +249,7 @@ static bool call(JNIEnv *env, jobject object, const char* typeName, const char*
 		return false;
 	}
 
-	jboolean jReturnValue = env->CallBooleanMethod(object, mid, params[0].l);
+	jboolean jReturnValue = env->CallBooleanMethodA(object, mid, params);
 
 	return (bool)jReturnValue;
 }
@@ -591,6 +592,24 @@ class JavaIOSystem : public Assimp::IOSystem {
 	
 };
 
+class JavaProgressHandler : public Assimp::ProgressHandler {
+	private:
+    JNIEnv* mJniEnv;
+	jobject& mJavaProgressHandler;
+	
+	public:
+	JavaProgressHandler(JNIEnv* env, jobject& javaProgressHandler) :
+		mJniEnv(env),
+		mJavaProgressHandler(javaProgressHandler)
+	{};
+	
+    bool Update(float percentage)
+    {
+    	jvalue params[1];
+		params[0].f = percentage;
+	    return call(mJniEnv, mJavaProgressHandler, "jassimp/AiProgressHandler", "update", "(F)Z", params);
+    }
+};
 
 static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene)
 {
@@ -1880,7 +1899,7 @@ JNIEXPORT jstring JNICALL Java_jassimp_Jassimp_getErrorString
 
 
 JNIEXPORT jobject JNICALL Java_jassimp_Jassimp_aiImportFile
-  (JNIEnv *env, jclass jClazz, jstring jFilename, jlong postProcess, jobject ioSystem)
+  (JNIEnv *env, jclass jClazz, jstring jFilename, jlong postProcess, jobject ioSystem, jobject progressHandler)
 {
 	jobject jScene = NULL; 
 
@@ -1896,6 +1915,11 @@ JNIEXPORT jobject JNICALL Java_jassimp_Jassimp_aiImportFile
 		lprintf("Created aiFileIO\n");
 	}
 	
+	if(progressHandler != NULL)
+	{
+		imp.SetProgressHandler(new JavaProgressHandler(env, progressHandler));
+	}
+	
 	lprintf("opening file: %s\n", cFilename);
 
 	/* do import */

+ 1 - 1
port/jassimp/jassimp-native/src/jassimp.h

@@ -39,7 +39,7 @@ JNIEXPORT jstring JNICALL Java_jassimp_Jassimp_getErrorString
  * Signature: (Ljava/lang/String;J)Ljassimp/AiScene;
  */
 JNIEXPORT jobject JNICALL Java_jassimp_Jassimp_aiImportFile
-  (JNIEnv *, jclass, jstring, jlong, jobject);
+  (JNIEnv *, jclass, jstring, jlong, jobject, jobject);
 
 #ifdef __cplusplus
 }

+ 1 - 1
port/jassimp/jassimp/src/jassimp/AiMaterial.java

@@ -457,7 +457,7 @@ public final class AiMaterial {
          * 
          * @return the data
          */
-        private Object getData() {
+        public Object getData() {
             return m_data;
         }
     }

+ 46 - 0
port/jassimp/jassimp/src/jassimp/AiProgressHandler.java

@@ -0,0 +1,46 @@
+/*
+---------------------------------------------------------------------------
+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 interface AiProgressHandler
+{
+    boolean update(float percentage);
+}

+ 6 - 7
port/jassimp/jassimp/src/jassimp/AiSceneFlag.java

@@ -47,11 +47,6 @@ 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>
@@ -119,8 +114,12 @@ public enum AiSceneFlag {
      * you actually need to render it).
      */
     TERRAIN(0x10);
-    
-    
+
+    /**
+     * The mapped c/c++ integer enum value.
+     */
+    private final int m_rawValue;
+
     /**
      * Utility method for converting from c/c++ based integer enums to java 
      * enums.<p>

+ 22 - 6
port/jassimp/jassimp/src/jassimp/Jassimp.java

@@ -68,8 +68,9 @@ public final class Jassimp {
      * @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;
+    private static native AiScene aiImportFile(String filename,
+            long postProcessing, AiIOSystem<?> ioSystem,
+                AiProgressHandler progressHandler) throws IOException;
     
     
     /**
@@ -158,11 +159,26 @@ public final class Jassimp {
     public static AiScene importFile(String filename, 
             Set<AiPostProcessSteps> postProcessing, AiIOSystem<?> ioSystem) 
                   throws IOException {
-        
-       loadLibrary();
-       
+        return importFile(filename, postProcessing, ioSystem, null);
+    }
+
+    /**
+     * Imports a file via assimp.
+     *
+     * @param filename the file to import
+     * @param postProcessing post processing flags
+     * @param ioSystem ioSystem to load files, or null for default
+     * @return the loaded scene, or null if an error occurred
+     * @throws IOException if an error occurs
+     */
+    public static AiScene importFile(String filename,
+            Set<AiPostProcessSteps> postProcessing, AiIOSystem<?> ioSystem,
+            AiProgressHandler progressHandler) throws IOException {
+
+        loadLibrary();
+
         return aiImportFile(filename, AiPostProcessSteps.toRawValue(
-                postProcessing), ioSystem);
+                postProcessing), ioSystem, progressHandler);
     }