MaterialKey: expose constrainMaterial to Android (#4398)

This commit is contained in:
Alexey Pelykh
2021-07-28 18:58:41 +02:00
committed by GitHub
parent 2b6d99f5e7
commit 8c36e6d95f
2 changed files with 49 additions and 5 deletions

View File

@@ -69,11 +69,6 @@ void MaterialKeyHelper::init(JNIEnv* env) {
hasIOR = field("hasIOR", "Z");
}
extern "C" JNIEXPORT void JNICALL
Java_com_google_android_filament_gltfio_MaterialProvider_00024MaterialKey_nGlobalInit(JNIEnv* env, jclass) {
MaterialKeyHelper::get().init(env);
}
void MaterialKeyHelper::copy(JNIEnv* env, MaterialKey& dst, jobject src) {
dst.doubleSided = env->GetBooleanField(src, doubleSided);
dst.unlit = env->GetBooleanField(src, unlit);
@@ -149,3 +144,34 @@ void MaterialKeyHelper::copy(JNIEnv* env, jobject dst, const MaterialKey& src) {
env->SetBooleanField(dst, hasSheen, src.hasSheen);
env->SetBooleanField(dst, hasIOR, src.hasIOR);
}
extern "C" JNIEXPORT void JNICALL
Java_com_google_android_filament_gltfio_MaterialProvider_00024MaterialKey_nGlobalInit(JNIEnv* env, jclass) {
MaterialKeyHelper::get().init(env);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_google_android_filament_gltfio_MaterialProvider_00024MaterialKey_nConstrainMaterial(JNIEnv* env, jclass,
jobject materialKey, jintArray uvMap) {
MaterialKey nativeMaterialKey = {};
auto& helper = MaterialKeyHelper::get();
helper.copy(env, nativeMaterialKey, materialKey);
UvMap nativeUvMap = {};
constrainMaterial(&nativeMaterialKey, &nativeUvMap);
// Copy the UvMap results from the native array into the JVM array.
jint* elements = env->GetIntArrayElements(uvMap, nullptr);
if (elements) {
const size_t javaSize = env->GetArrayLength(uvMap);
for (int i = 0, n = std::min(javaSize, nativeUvMap.size()); i < n; ++i) {
elements[i] = nativeUvMap[i];
}
env->ReleaseIntArrayElements(uvMap, elements, 0);
}
// The config parameter is an in-out parameter so we need to copy the results back to Java.
helper.copy(env, materialKey, nativeMaterialKey);
}