From 9ea8148d846155d8b35ac5ae6644b4930219fda0 Mon Sep 17 00:00:00 2001 From: Philip Rideout Date: Thu, 16 Jan 2020 16:32:35 -0800 Subject: [PATCH] Add doubles to Manipulator for convenience. --- .../src/main/cpp/Manipulator.cpp | 20 ++++++++++++++++++- .../android/filament/utils/Manipulator.java | 12 +++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/android/filament-utils-android/src/main/cpp/Manipulator.cpp b/android/filament-utils-android/src/main/cpp/Manipulator.cpp index 72f89586f9..fd4def1310 100644 --- a/android/filament-utils-android/src/main/cpp/Manipulator.cpp +++ b/android/filament-utils-android/src/main/cpp/Manipulator.cpp @@ -116,7 +116,7 @@ extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipul manip->setViewport(width, height); } -extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nGetLookAt(JNIEnv* env, jclass, jlong nativeManip, jfloatArray eyePosition, jfloatArray targetPosition, jfloatArray upward) { +extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nGetLookAtFloat(JNIEnv* env, jclass, jlong nativeManip, jfloatArray eyePosition, jfloatArray targetPosition, jfloatArray upward) { auto manip = (Manipulator*) nativeManip; jfloat *eye = env->GetFloatArrayElements(eyePosition, NULL); @@ -130,6 +130,24 @@ extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipul env->ReleaseFloatArrayElements(upward, up, 0); } +extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nGetLookAtDouble(JNIEnv* env, jclass, jlong nativeManip, jdoubleArray eyePosition, jdoubleArray targetPosition, jdoubleArray upward) { + auto manip = (Manipulator*) nativeManip; + float3 eyef, targetf, upf; + manip->getLookAt(&eyef, &targetf, &upf); + + jdouble *eye = env->GetDoubleArrayElements(eyePosition, NULL); + jdouble *target = env->GetDoubleArrayElements(targetPosition, NULL); + jdouble *up = env->GetDoubleArrayElements(upward, NULL); + + *((double3*) eye) = eyef; + *((double3*) target) = targetf; + *((double3*) up) = upf; + + env->ReleaseDoubleArrayElements(eyePosition, eye, 0); + env->ReleaseDoubleArrayElements(targetPosition, target, 0); + env->ReleaseDoubleArrayElements(upward, up, 0); +} + extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nRaycast(JNIEnv* env, jclass, jlong nativeManip, jint x, jint y, jfloatArray result) { auto manip = (Manipulator*) nativeManip; jfloat *presult = env->GetFloatArrayElements(result, NULL); diff --git a/android/filament-utils-android/src/main/java/com/google/android/filament/utils/Manipulator.java b/android/filament-utils-android/src/main/java/com/google/android/filament/utils/Manipulator.java index f9ea6da0da..fdb955cae9 100644 --- a/android/filament-utils-android/src/main/java/com/google/android/filament/utils/Manipulator.java +++ b/android/filament-utils-android/src/main/java/com/google/android/filament/utils/Manipulator.java @@ -258,7 +258,14 @@ public class Manipulator { @NonNull @Size(min = 3) float[] eyePosition, @NonNull @Size(min = 3) float[] targetPosition, @NonNull @Size(min = 3) float[] upward) { - nGetLookAt(mNativeObject, eyePosition, targetPosition, upward); + nGetLookAtFloat(mNativeObject, eyePosition, targetPosition, upward); + } + + public void getLookAt( + @NonNull @Size(min = 3) double[] eyePosition, + @NonNull @Size(min = 3) double[] targetPosition, + @NonNull @Size(min = 3) double[] upward) { + nGetLookAtDouble(mNativeObject, eyePosition, targetPosition, upward); } /** @@ -358,7 +365,8 @@ public class Manipulator { private static native void nDestroyManipulator(long nativeManip); private static native int nGetMode(long nativeManip); private static native void nSetViewport(long nativeManip, int width, int height); - private static native void nGetLookAt(long nativeManip, float[] eyePosition, float[] targetPosition, float[] upward); + private static native void nGetLookAtFloat(long nativeManip, float[] eyePosition, float[] targetPosition, float[] upward); + private static native void nGetLookAtDouble(long nativeManip, double[] eyePosition, double[] targetPosition, double[] upward); private static native void nRaycast(long nativeManip, int x, int y, float[] result); private static native void nGrabBegin(long nativeManip, int x, int y, boolean strafe); private static native void nGrabUpdate(long nativeManip, int x, int y);