diff --git a/android/filament-android/src/main/cpp/Engine.cpp b/android/filament-android/src/main/cpp/Engine.cpp index d2d862dd12..eeb5a049ce 100644 --- a/android/filament-android/src/main/cpp/Engine.cpp +++ b/android/filament-android/src/main/cpp/Engine.cpp @@ -30,38 +30,39 @@ Java_com_google_android_filament_Engine_nCreateEngine(JNIEnv*, jclass, extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyEngine(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; Engine::destroy(&engine); } // SwapChain extern "C" { -// A new JNI platform must implement this method which retrieves the surface handle. Whatever object -// is returned from this method must match what is in folder filament/src/driver/opengl/Context* in -// particular pay attention to the object type in makeCurrent method. +// A new JNI platform must implement this method which retrieves the surface +// handle. Whatever object is returned from this method must match what is in +// folder filament/src/driver/opengl/Context* in particular pay attention to +// the object type in makeCurrent method. extern void *getNativeWindow(JNIEnv *env, jclass, jobject surface); } extern "C" JNIEXPORT jlong JNICALL -Java_com_google_android_filament_Engine_nCreateSwapChain(JNIEnv* env, jclass klass, - jlong nativeEngine, jobject surface, jlong flags) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nCreateSwapChain(JNIEnv* env, + jclass klass, jlong nativeEngine, jobject surface, jlong flags) { + Engine* engine = (Engine*) nativeEngine; void* win = getNativeWindow(env, klass, surface); return (jlong) engine->createSwapChain(win, (uint64_t) flags); } extern "C" JNIEXPORT jlong JNICALL -Java_com_google_android_filament_Engine_nCreateSwapChainFromRawPointer(JNIEnv* env, jclass klass, - jlong nativeEngine, jlong pointer, jlong flags) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nCreateSwapChainFromRawPointer(JNIEnv*, + jclass, jlong nativeEngine, jlong pointer, jlong flags) { + Engine* engine = (Engine*) nativeEngine; return (jlong) engine->createSwapChain((void*)pointer, (uint64_t) flags); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroySwapChain(JNIEnv*, jclass, jlong nativeEngine, jlong nativeSwapChain) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; SwapChain *swapChain = (SwapChain *) nativeSwapChain; engine->destroy(swapChain); } @@ -69,15 +70,16 @@ Java_com_google_android_filament_Engine_nDestroySwapChain(JNIEnv*, jclass, // View extern "C" JNIEXPORT jlong JNICALL -Java_com_google_android_filament_Engine_nCreateView(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nCreateView(JNIEnv*, jclass, + jlong nativeEngine) { + Engine* engine = (Engine*) nativeEngine; return (jlong) engine->createView(); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_Engine_nDestroyView(JNIEnv*, jclass, jlong nativeEngine, - jlong nativeView) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nDestroyView(JNIEnv*, jclass, + jlong nativeEngine, jlong nativeView) { + Engine* engine = (Engine*) nativeEngine; View *view = (View *) nativeView; engine->destroy(view); } @@ -87,14 +89,14 @@ Java_com_google_android_filament_Engine_nDestroyView(JNIEnv*, jclass, jlong nati extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nCreateRenderer(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; return (jlong) engine->createRenderer(); } extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyRenderer(JNIEnv*, jclass, jlong nativeEngine, jlong nativeRenderer) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; Renderer *renderer = (Renderer *) nativeRenderer; engine->destroy(renderer); } @@ -104,21 +106,22 @@ Java_com_google_android_filament_Engine_nDestroyRenderer(JNIEnv*, jclass, extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nCreateCamera(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; return (jlong) engine->createCamera(); } extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nCreateCameraWithEntity(JNIEnv*, jclass, - jlong nativeEngine, jint entity) { - Engine *engine = (Engine *) nativeEngine; - return (jlong) engine->createCamera((Entity &) entity); + jlong nativeEngine, jint entity_) { + Engine* engine = (Engine*) nativeEngine; + Entity& entity = *reinterpret_cast(&entity_); + return (jlong) engine->createCamera(entity); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_Engine_nDestroyCamera(JNIEnv*, jclass, jlong nativeEngine, - jlong nativeCamera) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nDestroyCamera(JNIEnv*, jclass, + jlong nativeEngine, jlong nativeCamera) { + Engine* engine = (Engine*) nativeEngine; Camera *camera = (Camera *) nativeCamera; engine->destroy(camera); } @@ -126,15 +129,16 @@ Java_com_google_android_filament_Engine_nDestroyCamera(JNIEnv*, jclass, jlong na // Scene extern "C" JNIEXPORT jlong JNICALL -Java_com_google_android_filament_Engine_nCreateScene(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nCreateScene(JNIEnv*, jclass, + jlong nativeEngine) { + Engine* engine = (Engine*) nativeEngine; return (jlong) engine->createScene(); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_Engine_nDestroyScene(JNIEnv*, jclass, jlong nativeEngine, - jlong nativeScene) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nDestroyScene(JNIEnv*, jclass, + jlong nativeEngine, jlong nativeScene) { + Engine* engine = (Engine*) nativeEngine; Scene *scene = (Scene *) nativeScene; engine->destroy(scene); } @@ -142,16 +146,16 @@ Java_com_google_android_filament_Engine_nDestroyScene(JNIEnv*, jclass, jlong nat // Fence extern "C" JNIEXPORT jlong JNICALL -Java_com_google_android_filament_Engine_nCreateFence(JNIEnv*, jclass, jlong nativeEngine, - jint fenceType) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nCreateFence(JNIEnv*, jclass, + jlong nativeEngine, jint fenceType) { + Engine* engine = (Engine*) nativeEngine; return (jlong) engine->createFence((Fence::Type) fenceType); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_Engine_nDestroyFence(JNIEnv*, jclass, jlong nativeEngine, - jlong nativeFence) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nDestroyFence(JNIEnv*, jclass, + jlong nativeEngine, jlong nativeFence) { + Engine* engine = (Engine*) nativeEngine; Fence *fence = (Fence *) nativeFence; engine->destroy(fence); } @@ -159,9 +163,9 @@ Java_com_google_android_filament_Engine_nDestroyFence(JNIEnv*, jclass, jlong nat // Stream extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_Engine_nDestroyStream(JNIEnv*, jclass, jlong nativeEngine, - jlong nativeStream) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nDestroyStream(JNIEnv*, jclass, + jlong nativeEngine, jlong nativeStream) { + Engine* engine = (Engine*) nativeEngine; Stream *stream = (Stream *) nativeStream; engine->destroy(stream); } @@ -171,7 +175,7 @@ Java_com_google_android_filament_Engine_nDestroyStream(JNIEnv*, jclass, jlong na extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyIndexBuffer(JNIEnv*, jclass, jlong nativeEngine, jlong nativeIndexBuffer) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; IndexBuffer *indexBuffer = (IndexBuffer *) nativeIndexBuffer; engine->destroy(indexBuffer); } @@ -179,7 +183,7 @@ Java_com_google_android_filament_Engine_nDestroyIndexBuffer(JNIEnv*, jclass, extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyVertexBuffer(JNIEnv*, jclass, jlong nativeEngine, jlong nativeVertexBuffer) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; VertexBuffer *vertexBuffer = (VertexBuffer *) nativeVertexBuffer; engine->destroy(vertexBuffer); } @@ -187,7 +191,7 @@ Java_com_google_android_filament_Engine_nDestroyVertexBuffer(JNIEnv*, jclass, extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyIndirectLight(JNIEnv*, jclass, jlong nativeEngine, jlong nativeIndirectLight) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; IndirectLight *indirectLight = (IndirectLight *) nativeIndirectLight; engine->destroy(indirectLight); } @@ -195,7 +199,7 @@ Java_com_google_android_filament_Engine_nDestroyIndirectLight(JNIEnv*, jclass, extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyMaterial(JNIEnv*, jclass, jlong nativeEngine, jlong nativeMaterial) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; Material *material = (Material *) nativeMaterial; engine->destroy(material); } @@ -203,15 +207,16 @@ Java_com_google_android_filament_Engine_nDestroyMaterial(JNIEnv*, jclass, extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyMaterialInstance(JNIEnv*, jclass, jlong nativeEngine, jlong nativeMaterialInstance) { - Engine *engine = (Engine *) nativeEngine; - MaterialInstance *materialInstance = (MaterialInstance *) nativeMaterialInstance; + Engine* engine = (Engine*) nativeEngine; + MaterialInstance* materialInstance = + (MaterialInstance*) nativeMaterialInstance; engine->destroy(materialInstance); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_Engine_nDestroySkybox(JNIEnv*, jclass, jlong nativeEngine, - jlong nativeSkybox) { - Engine *engine = (Engine *) nativeEngine; +Java_com_google_android_filament_Engine_nDestroySkybox(JNIEnv*, jclass, + jlong nativeEngine, jlong nativeSkybox) { + Engine* engine = (Engine*) nativeEngine; Skybox *skybox = (Skybox *) nativeSkybox; engine->destroy(skybox); } @@ -219,30 +224,38 @@ Java_com_google_android_filament_Engine_nDestroySkybox(JNIEnv*, jclass, jlong na extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Engine_nDestroyTexture(JNIEnv*, jclass, jlong nativeEngine, jlong nativeTexture) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; Texture *texture = (Texture *) nativeTexture; engine->destroy(texture); } +extern "C" JNIEXPORT void JNICALL +Java_com_google_android_filament_Engine_nDestroyEntity(JNIEnv*, jclass, + jlong nativeEngine, jint entity_) { + Engine* engine = (Engine*) nativeEngine; + Entity& entity = *reinterpret_cast(&entity_); + engine->destroy(entity); +} + // Managers... extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nGetTransformManager(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; return (jlong) &engine->getTransformManager(); } extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nGetLightManager(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; return (jlong) &engine->getLightManager(); } extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Engine_nGetRenderableManager(JNIEnv*, jclass, jlong nativeEngine) { - Engine *engine = (Engine *) nativeEngine; + Engine* engine = (Engine*) nativeEngine; return (jlong) &engine->getRenderableManager(); } diff --git a/android/filament-android/src/main/cpp/EntityManager.cpp b/android/filament-android/src/main/cpp/EntityManager.cpp index 54029d458e..353dd0aa35 100644 --- a/android/filament-android/src/main/cpp/EntityManager.cpp +++ b/android/filament-android/src/main/cpp/EntityManager.cpp @@ -24,51 +24,55 @@ using namespace utils; static_assert(sizeof(jint) == sizeof(Entity), "jint and Entity are not compatible!!"); extern "C" JNIEXPORT jlong JNICALL -Java_com_google_android_filament_EntityManager_nGetEntityManager(JNIEnv *env, jclass type) { +Java_com_google_android_filament_EntityManager_nGetEntityManager(JNIEnv*, jclass) { return (jlong) &EntityManager::get(); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_EntityManager_nCreate__JI_3I(JNIEnv *env, jclass type, +Java_com_google_android_filament_EntityManager_nCreateArray(JNIEnv* env, jclass, jlong nativeEntityManager, jint n, jintArray entities_) { - EntityManager *em = (EntityManager *) nativeEntityManager; - jint *entities = env->GetIntArrayElements(entities_, NULL); + EntityManager* em = (EntityManager *) nativeEntityManager; + jint* entities = env->GetIntArrayElements(entities_, NULL); - // This is very very gross, we just pretend Entity is just like an jint (which it is), but still. + // This is very very gross, we just pretend Entity is just like an jint + // (which it is), but still. em->create((size_t) n, reinterpret_cast(entities)); env->ReleaseIntArrayElements(entities_, entities, 0); } extern "C" JNIEXPORT jint JNICALL -Java_com_google_android_filament_EntityManager_nCreate__J(JNIEnv *env, jclass type, +Java_com_google_android_filament_EntityManager_nCreate(JNIEnv*, jclass, jlong nativeEntityManager) { - EntityManager *em = (EntityManager *) nativeEntityManager; + EntityManager* em = (EntityManager *) nativeEntityManager; return em->create().getId(); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_EntityManager_nDestroy__JI_3I(JNIEnv *env, jclass type, +Java_com_google_android_filament_EntityManager_nDestroyArray(JNIEnv* env, jclass, jlong nativeEntityManager, jint n, jintArray entities_) { - EntityManager *em = (EntityManager *) nativeEntityManager; - jint *entities = env->GetIntArrayElements(entities_, NULL); + EntityManager* em = (EntityManager *) nativeEntityManager; + jint* entities = env->GetIntArrayElements(entities_, NULL); - // This is very very gross, we just pretend Entity is just like an jint (which it is), but still. - em->destroy((size_t) n, reinterpret_cast(entities)); + // This is very very gross, we just pretend Entity is just like an + // jint (which it is), but still. + em->destroy((size_t) n, reinterpret_cast(entities)); env->ReleaseIntArrayElements(entities_, entities, JNI_ABORT); } extern "C" JNIEXPORT void JNICALL -Java_com_google_android_filament_EntityManager_nDestroy__JI(JNIEnv *env, jclass type, - jlong nativeEntityManager, jint entity) { +Java_com_google_android_filament_EntityManager_nDestroy(JNIEnv*, jclass, + jlong nativeEntityManager, jint entity_) { EntityManager *em = (EntityManager *) nativeEntityManager; - em->destroy(reinterpret_cast(entity)); + Entity& entity = *reinterpret_cast(&entity_); + em->destroy(entity); } extern "C" JNIEXPORT jboolean JNICALL -Java_com_google_android_filament_EntityManager_nIsAlive(JNIEnv *env, jclass type, - jlong nativeEntityManager, jint entity) { +Java_com_google_android_filament_EntityManager_nIsAlive(JNIEnv*, jclass, + jlong nativeEntityManager, jint entity_) { EntityManager *em = (EntityManager *) nativeEntityManager; - return (jboolean) em->isAlive(reinterpret_cast(entity)); + Entity& entity = *reinterpret_cast(&entity_); + return (jboolean) em->isAlive(entity); } diff --git a/android/filament-android/src/main/java/com/google/android/filament/Engine.java b/android/filament-android/src/main/java/com/google/android/filament/Engine.java index 0cc9485f35..75c9db76b4 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/Engine.java +++ b/android/filament-android/src/main/java/com/google/android/filament/Engine.java @@ -221,6 +221,10 @@ public class Engine { texture.clearNativeObject(); } + public void destroyEntity(@Entity int entity) { + nDestroyEntity(getNativeObject(), entity); + } + // Managers @NonNull @@ -277,6 +281,7 @@ public class Engine { private static native void nDestroyMaterialInstance(long nativeEngine, long nativeMaterialInstance); private static native void nDestroySkybox(long nativeEngine, long nativeSkybox); private static native void nDestroyTexture(long nativeEngine, long nativeTexture); + private static native void nDestroyEntity(long nativeEngine, int entity); private static native long nGetTransformManager(long nativeEngine); private static native long nGetLightManager(long nativeEngine); private static native long nGetRenderableManager(long nativeEngine); diff --git a/android/filament-android/src/main/java/com/google/android/filament/EntityManager.java b/android/filament-android/src/main/java/com/google/android/filament/EntityManager.java index 2d4009b99b..9110e70c59 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/EntityManager.java +++ b/android/filament-android/src/main/java/com/google/android/filament/EntityManager.java @@ -48,18 +48,18 @@ public class EntityManager { public int[] create(@IntRange(from = 1) int n) { if (n < 1) throw new ArrayIndexOutOfBoundsException("n must be at least 1"); int[] entities = new int[n]; - nCreate(mNativeObject, n, entities); + nCreateArray(mNativeObject, n, entities); return entities; } @NonNull public int[] create(@Entity @NonNull int[] entities) { - nCreate(mNativeObject, entities.length, entities); + nCreateArray(mNativeObject, entities.length, entities); return entities; } public void destroy(@Entity @NonNull int[] entities) { - nDestroy(mNativeObject, entities.length, entities); + nDestroyArray(mNativeObject, entities.length, entities); } public boolean isAlive(@Entity int entity) { @@ -67,9 +67,9 @@ public class EntityManager { } private static native long nGetEntityManager(); - private static native void nCreate(long nativeEntityManager, int n, int[] entities); + private static native void nCreateArray(long nativeEntityManager, int n, int[] entities); private static native int nCreate(long nativeEntityManager); - private static native void nDestroy(long nativeEntityManager, int n, int[] entities); + private static native void nDestroyArray(long nativeEntityManager, int n, int[] entities); private static native void nDestroy(long nativeEntityManager, int entity); private static native boolean nIsAlive(long nativeEntityManager, int entity); } diff --git a/android/samples/hello-triangle/app/src/main/java/com/google/android/filament/hellotriangle/MainActivity.kt b/android/samples/hello-triangle/app/src/main/java/com/google/android/filament/hellotriangle/MainActivity.kt index 1080ed6b62..6f55142d2f 100644 --- a/android/samples/hello-triangle/app/src/main/java/com/google/android/filament/hellotriangle/MainActivity.kt +++ b/android/samples/hello-triangle/app/src/main/java/com/google/android/filament/hellotriangle/MainActivity.kt @@ -265,7 +265,7 @@ class MainActivity : Activity() { Fence.waitAndDestroy(engine.createFence(Fence.Type.SOFT), Fence.Mode.FLUSH) // Cleanup all resources - engine.renderableManager.destroy(renderable) + engine.destroyEntity(renderable) engine.destroyRenderer(renderer) engine.destroyVertexBuffer(vertexBuffer) engine.destroyIndexBuffer(indexBuffer)