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 {
throw UnimplementedError();
Engine_destroyCamera(app.engine, camera);
}
Future setCameraExposure(
@@ -157,13 +157,14 @@ class FFICamera extends 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
Future<double> getHorizontalFieldOfView() async {
return Camera_getFov(camera, true);
}
@override
Future<double> getVerticalFieldOfView() async {
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 TCamera *Engine_createCamera(TEngine* tEngine);
EMSCRIPTEN_KEEPALIVE void Engine_destroyCamera(TEngine *tEngine, TCamera *tCamera);
EMSCRIPTEN_KEEPALIVE TView *Engine_createView(TEngine *tEngine);
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine* tEngine, EntityId entityId);
EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *engine);

View File

@@ -1,5 +1,6 @@
#include "c_api/TEngine.h"
#include <filament/Camera.h>
#include <filament/Engine.h>
#include <filament/Fence.h>
#include <filament/IndirectLight.h>
@@ -179,6 +180,13 @@ namespace thermion
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)
{
auto *engine = reinterpret_cast<Engine *>(tEngine);