Introduce filament-utils and Java bindings for camutils.
This library houses the KTX loader, camutils bindings, and a Kotlin math library. More will come later. Sample app is forthcoming.
This commit is contained in:
175
android/filament-utils-android/src/main/cpp/Manipulator.cpp
Normal file
175
android/filament-utils-android/src/main/cpp/Manipulator.cpp
Normal file
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
* 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 <jni.h>
|
||||
|
||||
#include <math/mat3.h>
|
||||
#include <math/vec3.h>
|
||||
|
||||
#include <camutils/Manipulator.h>
|
||||
|
||||
using namespace filament::camutils;
|
||||
using namespace filament::math;
|
||||
|
||||
using Builder = Manipulator<float>::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_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<float>*) nativeManip;
|
||||
delete manip;
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jint JNICALL Java_com_google_android_filament_utils_Manipulator_nGetMode(JNIEnv*, jclass, jlong nativeManip) {
|
||||
auto manip = (Manipulator<float>*) 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<float>*) nativeManip;
|
||||
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) {
|
||||
auto manip = (Manipulator<float>*) 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_nRaycast(JNIEnv* env, jclass, jlong nativeManip, jint x, jint y, jfloatArray result) {
|
||||
auto manip = (Manipulator<float>*) 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<float>*) 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<float>*) 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<float>*) nativeManip;
|
||||
manip->grabEnd();
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nZoom(JNIEnv*, jclass, jlong nativeManip, jint x, jint y, jfloat scrolldelta) {
|
||||
auto manip = (Manipulator<float>*) nativeManip;
|
||||
manip->zoom(x, y, scrolldelta);
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_utils_Manipulator_nGetCurrentBookmark(JNIEnv*, jclass, jlong nativeManip) {
|
||||
auto manip = (Manipulator<float>*) nativeManip;
|
||||
return (jlong) new Bookmark<float>(manip->getCurrentBookmark());
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_utils_Manipulator_nGetHomeBookmark(JNIEnv*, jclass, jlong nativeManip) {
|
||||
auto manip = (Manipulator<float>*) nativeManip;
|
||||
return (jlong) new Bookmark<float>(manip->getHomeBookmark());
|
||||
}
|
||||
|
||||
extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_utils_Manipulator_nJumpToBookmark(JNIEnv*, jclass, jlong nativeManip, jlong nativeBookmark) {
|
||||
auto manip = (Manipulator<float>*) nativeManip;
|
||||
auto bookmark = (Bookmark<float>*) nativeBookmark;
|
||||
manip->jumpToBookmark(*bookmark);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user