/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include using namespace filament; using namespace filament::math; using namespace gltfio; using namespace utils; extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetRoot(JNIEnv*, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; return asset->getRoot().getId(); } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nPopRenderable(JNIEnv*, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; return asset->popRenderable().getId(); } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nPopRenderables(JNIEnv* env, jclass, jlong nativeAsset, jintArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; jsize available = env->GetArrayLength(result); Entity* entities = (Entity*) env->GetIntArrayElements(result, nullptr); size_t retval = asset->popRenderables(entities, available); env->ReleaseIntArrayElements(result, (jint*) entities, 0); return retval; } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetEntityCount(JNIEnv*, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; return asset->getEntityCount(); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetEntities(JNIEnv* env, jclass, jlong nativeAsset, jintArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; jsize available = env->GetArrayLength(result); Entity* entities = (Entity*) env->GetIntArrayElements(result, nullptr); std::copy_n(asset->getEntities(), std::min(available, (jsize) asset->getEntityCount()), entities); env->ReleaseIntArrayElements(result, (jint*) entities, 0); } extern "C" JNIEXPORT jint Java_com_google_android_filament_gltfio_FilamentAsset_nGetFirstEntityByName(JNIEnv* env, jclass, jlong nativeAsset, jstring name) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; const char* cname = env->GetStringUTFChars(name, nullptr); Entity result = asset->getFirstEntityByName(cname); env->ReleaseStringUTFChars(name, cname); return result.getId(); } extern "C" JNIEXPORT jint Java_com_google_android_filament_gltfio_FilamentAsset_nGetEntitiesByName(JNIEnv* env, jclass, jlong nativeAsset, jstring name, jintArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; const char* cname = env->GetStringUTFChars(name, nullptr); size_t numEntities = asset->getEntitiesByName(cname, nullptr, 0); if (result == nullptr) { env->ReleaseStringUTFChars(name, cname); return numEntities; } Entity* entities = (Entity*) env->GetIntArrayElements(result, nullptr); numEntities = asset->getEntitiesByName(cname, entities, env->GetArrayLength(result)); env->ReleaseIntArrayElements(result, (jint*) entities, 0); env->ReleaseStringUTFChars(name, cname); return numEntities; } extern "C" JNIEXPORT jint Java_com_google_android_filament_gltfio_FilamentAsset_nGetEntitiesByPrefix(JNIEnv* env, jclass, jlong nativeAsset, jstring prefix, jintArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; const char* cprefix = env->GetStringUTFChars(prefix, nullptr); size_t numEntities = asset->getEntitiesByPrefix(cprefix, nullptr, 0); if (result == nullptr) { env->ReleaseStringUTFChars(prefix, cprefix); return numEntities; } Entity* entities = (Entity*) env->GetIntArrayElements(result, nullptr); numEntities = asset->getEntitiesByPrefix(cprefix, entities, env->GetArrayLength(result)); env->ReleaseIntArrayElements(result, (jint*) entities, 0); env->ReleaseStringUTFChars(prefix, cprefix); return numEntities; } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetLightEntityCount(JNIEnv*, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; return asset->getLightEntityCount(); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetLightEntities(JNIEnv* env, jclass, jlong nativeAsset, jintArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; jsize available = env->GetArrayLength(result); Entity* entities = (Entity*) env->GetIntArrayElements(result, nullptr); std::copy_n(asset->getLightEntities(), std::min(available, (jsize) asset->getLightEntityCount()), entities); env->ReleaseIntArrayElements(result, (jint*) entities, 0); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetCameraEntities(JNIEnv* env, jclass, jlong nativeAsset, jintArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; jsize available = env->GetArrayLength(result); Entity* entities = (Entity*) env->GetIntArrayElements(result, nullptr); std::copy_n(asset->getCameraEntities(), std::min(available, (jsize) asset->getCameraEntityCount()), entities); env->ReleaseIntArrayElements(result, (jint*) entities, 0); } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetCameraEntityCount(JNIEnv*, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; return asset->getCameraEntityCount(); } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetMaterialInstanceCount(JNIEnv*, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; return asset->getMaterialInstanceCount(); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetMaterialInstances(JNIEnv* env, jclass, jlong nativeAsset, jlongArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; jsize available = env->GetArrayLength(result); jsize count = std::min(available, (jsize) asset->getMaterialInstanceCount()); jlong* dst = env->GetLongArrayElements(result, nullptr); const MaterialInstance * const* src = asset->getMaterialInstances(); for (jsize i = 0; i < count; i++) { dst[i] = (jlong) src[i]; } env->ReleaseLongArrayElements(result, dst, 0); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetBoundingBox(JNIEnv* env, jclass, jlong nativeAsset, jfloatArray result) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; float* values = env->GetFloatArrayElements(result, nullptr); const filament::Aabb box = asset->getBoundingBox(); const float3 center = box.center(); const float3 extent = box.extent(); values[0] = center.x; values[1] = center.y; values[2] = center.z; values[3] = extent.x; values[4] = extent.y; values[5] = extent.z; env->ReleaseFloatArrayElements(result, values, 0); } extern "C" JNIEXPORT jstring JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetName(JNIEnv* env, jclass, jlong nativeAsset, jint entityId) { Entity entity = Entity::import(entityId); FilamentAsset* asset = (FilamentAsset*) nativeAsset; const char* val = asset->getName(entity); return val ? env->NewStringUTF(val) : nullptr; } extern "C" JNIEXPORT jstring JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetExtras(JNIEnv* env, jclass, jlong nativeAsset, jint entityId) { Entity entity = Entity::import(entityId); FilamentAsset* asset = (FilamentAsset*) nativeAsset; const auto val = asset->getExtras(entity); return val ? env->NewStringUTF(val) : nullptr; } extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nGetAnimator(JNIEnv* , jclass, jlong nativeAsset) { 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])); } } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_gltfio_FilamentAsset_nReleaseSourceData(JNIEnv* env, jclass, jlong nativeAsset) { FilamentAsset* asset = (FilamentAsset*) nativeAsset; asset->releaseSourceData(); }