add Engine_destroyCamera

This commit is contained in:
Nick Fisher
2025-04-19 09:49:19 +08:00
parent 8228486ef3
commit 4cb725d47e
3 changed files with 14 additions and 4 deletions

View File

@@ -148,7 +148,7 @@ class FFICamera extends Camera {
} }
Future destroy() async { Future destroy() async {
throw UnimplementedError(); Engine_destroyCamera(app.engine, camera);
} }
Future setCameraExposure( Future setCameraExposure(
@@ -157,13 +157,14 @@ class FFICamera extends Camera {
} }
Future<double> getFocusDistance() async => Camera_getFocusDistance(camera); Future<double> getFocusDistance() async => Camera_getFocusDistance(camera);
Future setFocusDistance(double focusDistance) async => Camera_setFocusDistance(camera, focusDistance); Future setFocusDistance(double focusDistance) async =>
Camera_setFocusDistance(camera, focusDistance);
@override @override
Future<double> getHorizontalFieldOfView() async { Future<double> getHorizontalFieldOfView() async {
return Camera_getFov(camera, true); return Camera_getFov(camera, true);
} }
@override @override
Future<double> getVerticalFieldOfView() async { Future<double> getVerticalFieldOfView() async {
return Camera_getFov(camera, false); return Camera_getFov(camera, false);

View File

@@ -37,6 +37,7 @@ EMSCRIPTEN_KEEPALIVE void Engine_destroyScene(TEngine *tEngine, TScene *tScene);
EMSCRIPTEN_KEEPALIVE void Engine_destroyColorGrading(TEngine *tEngine, TColorGrading *tColorGrading); EMSCRIPTEN_KEEPALIVE void Engine_destroyColorGrading(TEngine *tEngine, TColorGrading *tColorGrading);
EMSCRIPTEN_KEEPALIVE TCamera *Engine_createCamera(TEngine* tEngine); EMSCRIPTEN_KEEPALIVE TCamera *Engine_createCamera(TEngine* tEngine);
EMSCRIPTEN_KEEPALIVE void Engine_destroyCamera(TEngine *tEngine, TCamera *tCamera);
EMSCRIPTEN_KEEPALIVE TView *Engine_createView(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE TView *Engine_createView(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine* tEngine, EntityId entityId); EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine* tEngine, EntityId entityId);
EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *engine); EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *engine);

View File

@@ -1,5 +1,6 @@
#include "c_api/TEngine.h" #include "c_api/TEngine.h"
#include <filament/Camera.h>
#include <filament/Engine.h> #include <filament/Engine.h>
#include <filament/Fence.h> #include <filament/Fence.h>
#include <filament/IndirectLight.h> #include <filament/IndirectLight.h>
@@ -179,6 +180,13 @@ namespace thermion
return reinterpret_cast<TCamera *>(camera); return reinterpret_cast<TCamera *>(camera);
} }
EMSCRIPTEN_KEEPALIVE void Engine_destroyCamera(TEngine *tEngine, TCamera *tCamera) {
auto *engine = reinterpret_cast<Engine *>(tEngine);
auto *camera = reinterpret_cast<Camera *>(tCamera);
engine->destroyCameraComponent(camera->getEntity());
utils::EntityManager::get().destroy(camera->getEntity());
}
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId) EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId)
{ {
auto *engine = reinterpret_cast<Engine *>(tEngine); auto *engine = reinterpret_cast<Engine *>(tEngine);