/* * Copyright (C) 2020 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 #include #include using namespace filament::camutils; using namespace filament::math; using Builder = Manipulator::Builder; extern "C" JNIEXPORT jlong Java_com_google_android_filament_utils_Manipulator_nCreateBuilder(JNIEnv*, jclass) { return (jlong) new Builder {}; } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nDestroyBuilder(JNIEnv*, jclass, jlong nativeBuilder) { Builder* builder = (Builder*) nativeBuilder; delete builder; } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderViewport(JNIEnv*, jclass, jlong nativeBuilder, jint width, jint height) { Builder* builder = (Builder*) nativeBuilder; builder->viewport(width, height); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderTargetPosition(JNIEnv*, jclass, jlong nativeBuilder, jfloat x, jfloat y, jfloat z) { Builder* builder = (Builder*) nativeBuilder; builder->targetPosition(x, y, z); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderUpVector(JNIEnv*, jclass, jlong nativeBuilder, jfloat x, jfloat y, jfloat z) { Builder* builder = (Builder*) nativeBuilder; builder->upVector(x, y, z); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderZoomSpeed(JNIEnv*, jclass, jlong nativeBuilder, jfloat arg) { Builder* builder = (Builder*) nativeBuilder; builder->zoomSpeed(arg); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderOrbitHomePosition(JNIEnv*, jclass, jlong nativeBuilder, jfloat x, jfloat y, jfloat z) { Builder* builder = (Builder*) nativeBuilder; builder->orbitHomePosition(x, y, z); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderOrbitSpeed(JNIEnv*, jclass, jlong nativeBuilder, jfloat x, jfloat y) { Builder* builder = (Builder*) nativeBuilder; builder->orbitSpeed(x, y); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFovDirection(JNIEnv*, jclass, jlong nativeBuilder, jint arg) { Builder* builder = (Builder*) nativeBuilder; builder->fovDirection((Fov) arg); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFovDegrees(JNIEnv*, jclass, jlong nativeBuilder, jfloat arg) { Builder* builder = (Builder*) nativeBuilder; builder->fovDegrees(arg); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFarPlane(JNIEnv*, jclass, jlong nativeBuilder, jfloat distance) { Builder* builder = (Builder*) nativeBuilder; builder->farPlane(distance); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderMapExtent(JNIEnv*, jclass, jlong nativeBuilder, jfloat width, jfloat height) { Builder* builder = (Builder*) nativeBuilder; builder->mapExtent(width, height); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderMapMinDistance(JNIEnv*, jclass, jlong nativeBuilder, jfloat arg) { Builder* builder = (Builder*) nativeBuilder; builder->mapMinDistance(arg); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFlightStartPosition(JNIEnv*, jclass, jlong nativeBuilder, jfloat x, jfloat y, jfloat z) { Builder* builder = (Builder*) nativeBuilder; builder->flightStartPosition(x, y, z); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFlightStartOrientation(JNIEnv*, jclass, jlong nativeBuilder, jfloat pitch, jfloat yaw) { Builder* builder = (Builder*) nativeBuilder; builder->flightStartOrientation(pitch, yaw); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFlightMaxMoveSpeed(JNIEnv*, jclass, jlong nativeBuilder, jfloat maxSpeed) { Builder* builder = (Builder*) nativeBuilder; builder->flightMaxMoveSpeed(maxSpeed); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFlightSpeedSteps(JNIEnv*, jclass, jlong nativeBuilder, jint steps) { Builder* builder = (Builder*) nativeBuilder; builder->flightSpeedSteps(steps); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFlightPanSpeed(JNIEnv*, jclass, jlong nativeBuilder, jfloat x, jfloat y) { Builder* builder = (Builder*) nativeBuilder; builder->flightPanSpeed(x, y); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderFlightMoveDamping(JNIEnv*, jclass, jlong nativeBuilder, jfloat damping) { Builder* builder = (Builder*) nativeBuilder; builder->flightMoveDamping(damping); } extern "C" JNIEXPORT void Java_com_google_android_filament_utils_Manipulator_nBuilderGroundPlane(JNIEnv*, jclass, jlong nativeBuilder, jfloat a, jfloat b, jfloat c, jfloat d) { Builder* builder = (Builder*) nativeBuilder; builder->groundPlane(a, b, c, d); } extern "C" JNIEXPORT long Java_com_google_android_filament_utils_Manipulator_nBuilderBuild(JNIEnv*, jclass, jlong nativeBuilder, jint mode) { Builder* builder = (Builder*) nativeBuilder; return (jlong) builder->build((Mode) mode); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nDestroyManipulator(JNIEnv*, jclass, jlong nativeManip) { auto manip = (Manipulator*) nativeManip; delete manip; } extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_utils_Manipulator_nGetMode(JNIEnv*, jclass, jlong nativeManip) { auto manip = (Manipulator*) nativeManip; return (int) manip->getMode(); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nSetViewport(JNIEnv*, jclass, jlong nativeManip, jint width, jint height) { auto manip = (Manipulator*) nativeManip; manip->setViewport(width, height); } 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); jfloat *target = env->GetFloatArrayElements(targetPosition, NULL); jfloat *up = env->GetFloatArrayElements(upward, NULL); manip->getLookAt((float3*) eye, (float3*) target, (float3*) up); env->ReleaseFloatArrayElements(eyePosition, eye, 0); env->ReleaseFloatArrayElements(targetPosition, target, 0); 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); manip->raycast(x, y, (float3*) presult); env->ReleaseFloatArrayElements(result, presult, 0); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nGrabBegin(JNIEnv*, jclass, jlong nativeManip, jint x, jint y, jboolean strafe) { auto manip = (Manipulator*) nativeManip; manip->grabBegin(x, y, (bool) strafe); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nGrabUpdate(JNIEnv*, jclass, jlong nativeManip, jint x, jint y) { auto manip = (Manipulator*) nativeManip; manip->grabUpdate(x, y); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nGrabEnd(JNIEnv*, jclass, jlong nativeManip) { auto manip = (Manipulator*) nativeManip; manip->grabEnd(); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nKeyDown(JNIEnv*, jclass, jlong nativeManip, jint key) { auto manip = (Manipulator*) nativeManip; manip->keyDown((Manipulator::Key) key); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nKeyUp(JNIEnv*, jclass, jlong nativeManip, jint key) { auto manip = (Manipulator*) nativeManip; manip->keyUp((Manipulator::Key) key); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nScroll(JNIEnv*, jclass, jlong nativeManip, jint x, jint y, jfloat scrolldelta) { auto manip = (Manipulator*) nativeManip; manip->scroll(x, y, scrolldelta); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nUpdate(JNIEnv*, jclass, jlong nativeManip, jfloat deltaTime) { auto manip = (Manipulator*) nativeManip; manip->update(deltaTime); } extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_utils_Manipulator_nGetCurrentBookmark(JNIEnv*, jclass, jlong nativeManip) { auto manip = (Manipulator*) nativeManip; return (jlong) new Bookmark(manip->getCurrentBookmark()); } extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_utils_Manipulator_nGetHomeBookmark(JNIEnv*, jclass, jlong nativeManip) { auto manip = (Manipulator*) nativeManip; return (jlong) new Bookmark(manip->getHomeBookmark()); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nJumpToBookmark(JNIEnv*, jclass, jlong nativeManip, jlong nativeBookmark) { auto manip = (Manipulator*) nativeManip; auto bookmark = (Bookmark*) nativeBookmark; manip->jumpToBookmark(*bookmark); }