From e252558ef630f23a4b42de97aaac3a2cbdaf9821 Mon Sep 17 00:00:00 2001 From: Nicklas Ansman Giertz Date: Sun, 3 Nov 2019 10:19:02 -0500 Subject: [PATCH] Expose FilamentAsset.getResourceUris in the Android bindings --- .../src/main/cpp/FilamentAsset.cpp | 18 ++++++++++++++++++ .../android/filament/gltfio/AssetLoader.java | 13 +++++++++++-- .../android/filament/gltfio/FilamentAsset.java | 11 +++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/android/gltfio-android/src/main/cpp/FilamentAsset.cpp b/android/gltfio-android/src/main/cpp/FilamentAsset.cpp index aa4f7455a7..b1db966be3 100644 --- a/android/gltfio-android/src/main/cpp/FilamentAsset.cpp +++ b/android/gltfio-android/src/main/cpp/FilamentAsset.cpp @@ -78,3 +78,21 @@ Java_com_google_android_filament_gltfio_FilamentAsset_nGetAnimator(JNIEnv* env, FilamentAsset* asset = (FilamentAsset*) nativeAsset; return (jlong) asset->getAnimator(); } + +extern "C" JNIEXPORT jint JNICALL +Java_com_google_android_filament_gltfio_FilamentAsset_nGetResourceUriCount(JNIEnv*, jclass, + jlong nativeAsset) { + FilamentAsset* asset = (FilamentAsset*) nativeAsset; + return (jint) asset->getResourceUriCount(); +} + +extern "C" JNIEXPORT void JNICALL +Java_com_google_android_filament_gltfio_FilamentAsset_nGetResourceUris(JNIEnv* env, jclass, + jlong nativeAsset, + jobjectArray result) { + FilamentAsset* asset = (FilamentAsset*) nativeAsset; + auto resourceUris = asset->getResourceUris(); + for (int i = 0; i < asset->getResourceUriCount(); ++i) { + env->SetObjectArrayElement(result, (jsize) i, env->NewStringUTF(resourceUris[i])); + } +} diff --git a/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/AssetLoader.java b/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/AssetLoader.java index 20f8bc2c45..b2b552d98a 100644 --- a/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/AssetLoader.java +++ b/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/AssetLoader.java @@ -37,7 +37,6 @@ import java.nio.Buffer; * * companion object { * init { - * Filament.init() * AssetLoader.init() * } * } @@ -54,11 +53,21 @@ import java.nio.Buffer; * assetLoader.createAssetFromBinary(ByteBuffer.wrap(bytes))!! * } * - * ResourceLoader(engine).loadResources(filamentAsset).destroy() + * val resourceLoader = ResourceLoader(engine) + * resourceLoader.loadResources(filamentAsset) + * for (uri in filamentAsset.resourceUris) { + * val buffer = loadResource(uri) + * resourceLoader.addResourceData(uri, buffer) + * } + * resourceLoader.destroy() * animator = asset.getAnimator() * * scene.addEntities(filamentAsset.entities) * } + * + * private fun loadResource(uri: String): Buffer { + * TODO() + * } * * * @see Animator diff --git a/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/FilamentAsset.java b/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/FilamentAsset.java index b3abd71c43..5425d0f112 100644 --- a/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/FilamentAsset.java +++ b/android/gltfio-android/src/main/java/com/google/android/filament/gltfio/FilamentAsset.java @@ -103,6 +103,15 @@ public class FilamentAsset { return mAnimator; } + /** + * Gets resource URIs for all externally-referenced buffers. + */ + public @NonNull String[] getResourceUris() { + String[] uris = new String[nGetResourceUriCount(mNativeObject)]; + nGetResourceUris(mNativeObject, uris); + return uris; + } + void clearNativeObject() { mNativeObject = 0; } @@ -113,4 +122,6 @@ public class FilamentAsset { private static native void nGetBoundingBox(long nativeAsset, float[] box); private static native String nGetName(long nativeAsset, int entity); private static native long nGetAnimator(long nativeAsset); + private static native int nGetResourceUriCount(long nativeAsset); + private static native void nGetResourceUris(long nativeAsset, String[] result); }