From ee24fca20ed2c4b827e171abe9320df1408b40f5 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sat, 7 Sep 2024 18:00:50 +0800 Subject: [PATCH] feat: move createGeometry to SceneManager, add queueRelativePositionUpdateFromViewportVector and removeStencilHighlight --- thermion_dart/native/src/ThermionDartApi.cpp | 22 ++++++++++++++----- .../native/src/ThermionDartFFIApi.cpp | 4 ++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/thermion_dart/native/src/ThermionDartApi.cpp b/thermion_dart/native/src/ThermionDartApi.cpp index 48cf4602..866d3ea5 100644 --- a/thermion_dart/native/src/ThermionDartApi.cpp +++ b/thermion_dart/native/src/ThermionDartApi.cpp @@ -745,6 +745,10 @@ extern "C" ((SceneManager *)sceneManager)->queueRotationUpdate(asset, rads, x, y, z, w, relative); } + EMSCRIPTEN_KEEPALIVE void queue_position_update_from_viewport_coords(void *sceneManager, EntityId entity, float viewportX, float viewportY) { + ((SceneManager *)sceneManager)->queueRelativePositionUpdateFromViewportVector(entity, viewportX, viewportY); + } + EMSCRIPTEN_KEEPALIVE void stop_animation(void *sceneManager, EntityId asset, int index) { ((SceneManager *)sceneManager)->stopAnimation(asset, index); @@ -825,9 +829,15 @@ extern "C" ((SceneManager *)sceneManager)->removeAnimationComponent(entityId); } - EMSCRIPTEN_KEEPALIVE EntityId create_geometry(void *const viewer, float *vertices, int numVertices, uint16_t *indices, int numIndices, int primitiveType, const char *materialPath) + EMSCRIPTEN_KEEPALIVE EntityId create_geometry(void *const sceneManager, float *vertices, int numVertices, uint16_t *indices, int numIndices, int primitiveType, const char *materialPath) { - return ((FilamentViewer *)viewer)->createGeometry(vertices, (uint32_t)numVertices, indices, numIndices, (filament::RenderableManager::PrimitiveType)primitiveType, materialPath); + return ((SceneManager *)sceneManager)->createGeometry( + vertices, + (uint32_t)numVertices, + indices, + numIndices, + (filament::RenderableManager::PrimitiveType)primitiveType, + materialPath); } EMSCRIPTEN_KEEPALIVE EntityId find_child_entity_by_name(void *const sceneManager, const EntityId parent, const char *name) @@ -893,10 +903,12 @@ extern "C" ((SceneManager*)sceneManager)->gizmo->setVisibility(visible); } - EMSCRIPTEN_KEEPALIVE void set_stencil_highlight(void *const sceneManager, EntityId entityId) { - ((SceneManager*)sceneManager)->setStencilHighlight(entityId); + EMSCRIPTEN_KEEPALIVE void set_stencil_highlight(void *const sceneManager, EntityId entityId, float r, float g, float b) { + ((SceneManager*)sceneManager)->setStencilHighlight(entityId, r, g, b); } - + EMSCRIPTEN_KEEPALIVE void remove_stencil_highlight(void *const sceneManager, EntityId entityId) { + ((SceneManager*)sceneManager)->removeStencilHighlight(entityId); + } } diff --git a/thermion_dart/native/src/ThermionDartFFIApi.cpp b/thermion_dart/native/src/ThermionDartFFIApi.cpp index 3312f7e7..041b45f5 100644 --- a/thermion_dart/native/src/ThermionDartFFIApi.cpp +++ b/thermion_dart/native/src/ThermionDartFFIApi.cpp @@ -859,7 +859,7 @@ extern "C" } EMSCRIPTEN_KEEPALIVE void create_geometry_ffi( - void *const viewer, + void *const sceneManager, float *vertices, int numVertices, uint16_t *indices, @@ -871,7 +871,7 @@ extern "C" std::packaged_task lambda( [=] { - auto entity = create_geometry(viewer, vertices, numVertices, indices, numIndices, primitiveType, materialPath); + auto entity = create_geometry(sceneManager, vertices, numVertices, indices, numIndices, primitiveType, materialPath); #ifdef __EMSCRIPTEN__ MAIN_THREAD_EM_ASM({ moduleArg.dartFilamentResolveCallback($0,$1);