diff --git a/thermion_dart/native/include/c_api/TEngine.h b/thermion_dart/native/include/c_api/TEngine.h new file mode 100644 index 00000000..9f313670 --- /dev/null +++ b/thermion_dart/native/include/c_api/TEngine.h @@ -0,0 +1,29 @@ +#ifndef _T_ENGINE_H +#define _T_ENGINE_H + +#include "APIExport.h" +#include "APIBoundaryTypes.h" +#include "TMaterialInstance.h" + +#include "ResourceBuffer.hpp" +#include "MathUtils.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif + +EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine* tEngine, EntityId entityId); +EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *engine); +EMSCRIPTEN_KEEPALIVE TRenderableManager *Engine_getRenderableManager(TEngine *engine); +EMSCRIPTEN_KEEPALIVE TLightManager *Engine_getLightManager(TEngine *engine); +EMSCRIPTEN_KEEPALIVE TEntityManager *Engine_getEntityManager(TEngine *engine); + +EMSCRIPTEN_KEEPALIVE TMaterial *Engine_buildMaterial(TEngine *tEngine, const uint8_t* materialData, size_t length); +EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterial(TEngine *tEngine, TMaterial *tMaterial); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/thermion_dart/native/src/c_api/TEngine.cpp b/thermion_dart/native/src/c_api/TEngine.cpp new file mode 100644 index 00000000..3d52ea0a --- /dev/null +++ b/thermion_dart/native/src/c_api/TEngine.cpp @@ -0,0 +1,85 @@ +#include "c_api/TEngine.h" + + +#include +#include +#include +#include +#include + +#include "Log.hpp" + +#ifdef __cplusplus +namespace thermion +{ + extern "C" + { + using namespace filament; +#endif + + EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *tEngine) + { + auto *engine = reinterpret_cast(tEngine); + auto &transformManager = engine->getTransformManager(); + return reinterpret_cast(&transformManager); + } + + EMSCRIPTEN_KEEPALIVE TRenderableManager *Engine_getRenderableManager(TEngine *tEngine) + { + auto *engine = reinterpret_cast(tEngine); + auto &renderableManager = engine->getRenderableManager(); + return reinterpret_cast(&renderableManager); + } + + EMSCRIPTEN_KEEPALIVE TLightManager *Engine_getLightManager(TEngine *tEngine) + { + auto *engine = reinterpret_cast(tEngine); + auto &lightManager = engine->getLightManager(); + return reinterpret_cast(&lightManager); + } + + EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId) + { + auto *engine = reinterpret_cast(tEngine); + auto entity = utils::Entity::import(entityId); + if (entity.isNull()) + { + return std::nullptr_t(); + } + auto *camera = engine->getCameraComponent(entity); + return reinterpret_cast(camera); + } + + EMSCRIPTEN_KEEPALIVE void Engine_setTransform(TEngine *tEngine, EntityId entity, double4x4 transform) + { + auto *engine = reinterpret_cast(tEngine); + auto &transformManager = engine->getTransformManager(); + + auto transformInstance = transformManager.getInstance(utils::Entity::import(entity)); + if (!transformInstance.isValid()) + { + Log("Transform instance not valid"); + } + transformManager.setTransform(transformInstance, convert_double4x4_to_mat4(transform)); + } + + EMSCRIPTEN_KEEPALIVE TMaterial *Engine_buildMaterial(TEngine *tEngine, const uint8_t *materialData, size_t length) + { + auto *engine = reinterpret_cast(tEngine); + auto *material = Material::Builder() + .package(materialData, length) + .build(*engine); + return reinterpret_cast(material); + } + + EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterial(TEngine *tEngine, TMaterial *tMaterial) + { + auto *engine = reinterpret_cast(tEngine); + auto *material = reinterpret_cast(tMaterial); + engine->destroy(material); + } + +#ifdef __cplusplus + } +} +#endif diff --git a/thermion_dart/native/src/c_api/ThermionDartApi.cpp b/thermion_dart/native/src/c_api/ThermionDartApi.cpp index a1fc5273..a0cbab85 100644 --- a/thermion_dart/native/src/c_api/ThermionDartApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartApi.cpp @@ -415,7 +415,7 @@ extern "C" EMSCRIPTEN_KEEPALIVE void unproject_texture(TViewer *viewer, EntityId entity, uint8_t *input, uint32_t inputWidth, uint32_t inputHeight, uint8_t *out, uint32_t outWidth, uint32_t outHeight) { - ((FilamentViewer *)viewer)->unprojectTexture(entity, input, inputWidth, inputHeight, out, outWidth, outHeight); + // ((FilamentViewer *)viewer)->unprojectTexture(entity, input, inputWidth, inputHeight, out, outWidth, outHeight); } EMSCRIPTEN_KEEPALIVE void *const create_texture(TSceneManager *sceneManager, uint8_t *data, size_t length) @@ -433,61 +433,5 @@ extern "C" ((SceneManager *)sceneManager)->destroyTexture(reinterpret_cast(texture)); } - EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *tEngine) - { - auto *engine = reinterpret_cast(tEngine); - auto &transformManager = engine->getTransformManager(); - return reinterpret_cast(&transformManager); - } - EMSCRIPTEN_KEEPALIVE TRenderableManager *Engine_getRenderableManager(TEngine *tEngine) - { - auto *engine = reinterpret_cast(tEngine); - auto &renderableManager = engine->getRenderableManager(); - return reinterpret_cast(&renderableManager); - } - - EMSCRIPTEN_KEEPALIVE TLightManager *Engine_getLightManager(TEngine *tEngine) { - auto *engine = reinterpret_cast(tEngine); - auto &lightManager = engine->getLightManager(); - return reinterpret_cast(&lightManager); - } - - EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId) - { - auto *engine = reinterpret_cast(tEngine); - auto entity = utils::Entity::import(entityId); - if(entity.isNull()) { - return std::nullptr_t(); - } - auto *camera = engine->getCameraComponent(entity); - return reinterpret_cast(camera); - } - - EMSCRIPTEN_KEEPALIVE void Engine_setTransform(TEngine *tEngine, EntityId entity, double4x4 transform) - { - auto *engine = reinterpret_cast(tEngine); - auto &transformManager = engine->getTransformManager(); - - auto transformInstance = transformManager.getInstance(utils::Entity::import(entity)); - if (!transformInstance.isValid()) - { - Log("Transform instance not valid"); - } - transformManager.setTransform(transformInstance, convert_double4x4_to_mat4(transform)); - } - - EMSCRIPTEN_KEEPALIVE TMaterial *Engine_buildMaterial(TEngine *tEngine, const uint8_t* materialData, size_t length) { - auto *engine = reinterpret_cast(tEngine); - auto *material = Material::Builder() - .package(materialData, length) - .build(*engine); - return reinterpret_cast(material); - } - - EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterial(TEngine *tEngine, TMaterial *tMaterial) { - auto *engine = reinterpret_cast(tEngine); - auto *material = reinterpret_cast(tMaterial); - engine->destroy(material); - } } diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index d901d7a6..84146dc9 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -6,6 +6,7 @@ #include #include "c_api/APIBoundaryTypes.h" +#include "c_api/TEngine.h" #include "c_api/TView.h" #include "c_api/TSceneAsset.h" #include "c_api/TSceneManager.h"