From b1d877e7db3c5ee4a76d8b86cf6f907571b78b06 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 20 Apr 2021 15:30:34 -0700 Subject: [PATCH] Add Engine::getEntityManager() --- .../filament-android/src/main/cpp/Engine.cpp | 6 ++++ .../com/google/android/filament/Engine.java | 3 ++ .../android/filament/EntityManager.java | 4 +++ filament/include/filament/Engine.h | 33 ++++++++++++++----- filament/src/Engine.cpp | 4 +++ web/filament-js/jsbindings.cpp | 4 +++ 6 files changed, 46 insertions(+), 8 deletions(-) diff --git a/android/filament-android/src/main/cpp/Engine.cpp b/android/filament-android/src/main/cpp/Engine.cpp index a49b78e9fe..3efbef1a14 100644 --- a/android/filament-android/src/main/cpp/Engine.cpp +++ b/android/filament-android/src/main/cpp/Engine.cpp @@ -312,3 +312,9 @@ Java_com_google_android_filament_Engine_nGetJobSystem(JNIEnv*, jclass, jlong nat Engine* engine = (Engine*) nativeEngine; return (jlong) &engine->getJobSystem(); } + +extern "C" JNIEXPORT jlong JNICALL +Java_com_google_android_filament_Engine_nGetEnityManager(JNIEnv*, jclass, jlong nativeEngine) { + Engine* engine = (Engine*) nativeEngine; + return (jlong) &engine->getEntityManager(); +} 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 16476131b7..e58a0a3111 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 @@ -110,6 +110,7 @@ public class Engine { @NonNull private final TransformManager mTransformManager; @NonNull private final LightManager mLightManager; @NonNull private final RenderableManager mRenderableManager; + @NonNull private final EntityManager mEntityManager; /** * Denotes a backend @@ -142,6 +143,7 @@ public class Engine { mTransformManager = new TransformManager(nGetTransformManager(nativeEngine)); mLightManager = new LightManager(nGetLightManager(nativeEngine)); mRenderableManager = new RenderableManager(nGetRenderableManager(nativeEngine)); + mEntityManager = new EntityManager(nGetEntityManager(nativeEngine)); } /** @@ -707,4 +709,5 @@ public class Engine { private static native long nGetLightManager(long nativeEngine); private static native long nGetRenderableManager(long nativeEngine); private static native long nGetJobSystem(long nativeEngine); + private static native long nGetEntityManager(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 cf83ecc41d..cd586de9e4 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 @@ -31,6 +31,10 @@ public class EntityManager { private EntityManager() { } + EntityManager(long nativeEntityManager) { + mNativeObject = nativeEntityManager; + } + @NonNull public static EntityManager get() { return Holder.INSTANCE; diff --git a/filament/include/filament/Engine.h b/filament/include/filament/Engine.h index 301424a96b..c31ba295f0 100644 --- a/filament/include/filament/Engine.h +++ b/filament/include/filament/Engine.h @@ -23,6 +23,7 @@ namespace utils { class Entity; +class EntityManager; class JobSystem; } // namespace utils @@ -303,10 +304,24 @@ public: */ static void destroy(Engine* engine); + /** + * @return EntityManager used by filament + */ + utils::EntityManager& getEntityManager() noexcept; + + /** + * @return RenderableManager reference + */ RenderableManager& getRenderableManager() noexcept; + /** + * @return LightManager reference + */ LightManager& getLightManager() noexcept; + /** + * @return TransformManager reference + */ TransformManager& getTransformManager() noexcept; /** @@ -477,16 +492,18 @@ public: UTILS_DEPRECATED void destroy(const Camera* camera); - /** - * Invokes one iteration of the render loop, used only on single-threaded platforms. - * - * This should be called every time the windowing system needs to paint (e.g. at 60 Hz). - */ + /** + * Invokes one iteration of the render loop, used only on single-threaded platforms. + * + * This should be called every time the windowing system needs to paint (e.g. at 60 Hz). + */ void execute(); - /** - * Retrieves the job system that the Engine has ownership over. - */ + /** + * Retrieves the job system that the Engine has ownership over. + * + * @return JobSystem used by filament + */ utils::JobSystem& getJobSystem() noexcept; DebugRegistry& getDebugRegistry() noexcept; diff --git a/filament/src/Engine.cpp b/filament/src/Engine.cpp index 8ffdfc5f1b..0135f5def7 100644 --- a/filament/src/Engine.cpp +++ b/filament/src/Engine.cpp @@ -1007,6 +1007,10 @@ void Engine::flushAndWait() { upcast(this)->flushAndWait(); } +utils::EntityManager& Engine::getEntityManager() noexcept { + return upcast(this)->getEntityManager(); +} + RenderableManager& Engine::getRenderableManager() noexcept { return upcast(this)->getRenderableManager(); } diff --git a/web/filament-js/jsbindings.cpp b/web/filament-js/jsbindings.cpp index bbed7f0866..5eea254bf7 100644 --- a/web/filament-js/jsbindings.cpp +++ b/web/filament-js/jsbindings.cpp @@ -512,6 +512,10 @@ class_("Engine") return &engine->getRenderableManager(); }), allow_raw_pointers()) + .function("getEntityManager", EMBIND_LAMBDA(EntityManager*, (Engine* engine), { + return &engine->getEntityManager(); + }), allow_raw_pointers()) + /// createSwapChain ::method:: /// ::retval:: an instance of [SwapChain] .function("createSwapChain", (SwapChain* (*)(Engine*)) []