diff --git a/android/gltfio-android/src/main/cpp/FilamentAsset.cpp b/android/gltfio-android/src/main/cpp/FilamentAsset.cpp index d4031df5c829..da4edf0948d7 100644 --- a/android/gltfio-android/src/main/cpp/FilamentAsset.cpp +++ b/android/gltfio-android/src/main/cpp/FilamentAsset.cpp @@ -223,3 +223,31 @@ Java_com_google_android_filament_gltfio_FilamentAsset_nReleaseSourceData(JNIEnv* FilamentAsset* asset = (FilamentAsset*) nativeAsset; asset->releaseSourceData(); } + + +extern "C" JNIEXPORT jstring JNICALL +Java_com_google_android_filament_gltfio_FilamentAsset_nGetResourceUri(JNIEnv* env, jclass, + jlong nativeAsset, + jint index) { + FilamentAsset* asset = (FilamentAsset*) nativeAsset; + int n_index = (int)index; + if (n_index>=0 && n_index< asset->getResourceUriCount()) { + auto resourceUris = asset->getResourceUris(); + return env->NewStringUTF(resourceUris[n_index]); + } + return nullptr; +} + +extern "C" JNIEXPORT void JNICALL +Java_com_google_android_filament_gltfio_FilamentAsset_nGetResourceUrisBySize(JNIEnv* env, jclass, + jlong nativeAsset, + jobjectArray result, + jint index, jint size) { + FilamentAsset* asset = (FilamentAsset*) nativeAsset; + auto resourceUris = asset->getResourceUris(); + int n_index = (int)index; + int n_size = (int)size; + for (int i = n_index, j = 0; i < asset->getResourceUriCount() && j < n_size; ++i,++j) { + env->SetObjectArrayElement(result, (jsize) i, env->NewStringUTF(resourceUris[i])); + } +} 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 81b956016867..b78d8ff71dff 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 @@ -209,8 +209,15 @@ public String getName(@Entity int entity) { * Gets resource URIs for all externally-referenced buffers. */ public @NonNull String[] getResourceUris() { - String[] uris = new String[nGetResourceUriCount(mNativeObject)]; - nGetResourceUris(mNativeObject, uris); + int count = nGetResourceUriCount(mNativeObject); + String[] uris = new String[count]; + int MAX_SIZE = 200; + for (int i = 0; i < count; ) { + int size = count - i; + if (size > MAX_SIZE) size = MAX_SIZE; + nGetResourceUrisBySize(mNativeObject, uris, i, size); + i += size; + } return uris; } @@ -256,4 +263,7 @@ void clearNativeObject() { private static native int nGetResourceUriCount(long nativeAsset); private static native void nGetResourceUris(long nativeAsset, String[] result); private static native void nReleaseSourceData(long nativeAsset); + + private static native String nGetResourceUri(long nativeAsset, int index); + private static native void nGetResourceUrisBySize(long nativeAsset, String[] result, int index, int size); }