move Engine_ FFI methods to own header/source
This commit is contained in:
29
thermion_dart/native/include/c_api/TEngine.h
Normal file
29
thermion_dart/native/include/c_api/TEngine.h
Normal file
@@ -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
|
||||||
85
thermion_dart/native/src/c_api/TEngine.cpp
Normal file
85
thermion_dart/native/src/c_api/TEngine.cpp
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#include "c_api/TEngine.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include <filament/Engine.h>
|
||||||
|
#include <filament/Material.h>
|
||||||
|
#include <filament/Scene.h>
|
||||||
|
#include <filament/TransformManager.h>
|
||||||
|
#include <filament/View.h>
|
||||||
|
|
||||||
|
#include "Log.hpp"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
namespace thermion
|
||||||
|
{
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
using namespace filament;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *tEngine)
|
||||||
|
{
|
||||||
|
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
||||||
|
auto &transformManager = engine->getTransformManager();
|
||||||
|
return reinterpret_cast<TTransformManager *>(&transformManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TRenderableManager *Engine_getRenderableManager(TEngine *tEngine)
|
||||||
|
{
|
||||||
|
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
||||||
|
auto &renderableManager = engine->getRenderableManager();
|
||||||
|
return reinterpret_cast<TRenderableManager *>(&renderableManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TLightManager *Engine_getLightManager(TEngine *tEngine)
|
||||||
|
{
|
||||||
|
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
||||||
|
auto &lightManager = engine->getLightManager();
|
||||||
|
return reinterpret_cast<TLightManager *>(&lightManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId)
|
||||||
|
{
|
||||||
|
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
||||||
|
auto entity = utils::Entity::import(entityId);
|
||||||
|
if (entity.isNull())
|
||||||
|
{
|
||||||
|
return std::nullptr_t();
|
||||||
|
}
|
||||||
|
auto *camera = engine->getCameraComponent(entity);
|
||||||
|
return reinterpret_cast<TCamera *>(camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE void Engine_setTransform(TEngine *tEngine, EntityId entity, double4x4 transform)
|
||||||
|
{
|
||||||
|
auto *engine = reinterpret_cast<Engine *>(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<Engine *>(tEngine);
|
||||||
|
auto *material = Material::Builder()
|
||||||
|
.package(materialData, length)
|
||||||
|
.build(*engine);
|
||||||
|
return reinterpret_cast<TMaterial *>(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterial(TEngine *tEngine, TMaterial *tMaterial)
|
||||||
|
{
|
||||||
|
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
||||||
|
auto *material = reinterpret_cast<Material *>(tMaterial);
|
||||||
|
engine->destroy(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -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)
|
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)
|
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 *>(texture));
|
((SceneManager *)sceneManager)->destroyTexture(reinterpret_cast<Texture *>(texture));
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *tEngine)
|
|
||||||
{
|
|
||||||
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
|
||||||
auto &transformManager = engine->getTransformManager();
|
|
||||||
return reinterpret_cast<TTransformManager *>(&transformManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TRenderableManager *Engine_getRenderableManager(TEngine *tEngine)
|
|
||||||
{
|
|
||||||
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
|
||||||
auto &renderableManager = engine->getRenderableManager();
|
|
||||||
return reinterpret_cast<TRenderableManager *>(&renderableManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TLightManager *Engine_getLightManager(TEngine *tEngine) {
|
|
||||||
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
|
||||||
auto &lightManager = engine->getLightManager();
|
|
||||||
return reinterpret_cast<TLightManager *>(&lightManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId)
|
|
||||||
{
|
|
||||||
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
|
||||||
auto entity = utils::Entity::import(entityId);
|
|
||||||
if(entity.isNull()) {
|
|
||||||
return std::nullptr_t();
|
|
||||||
}
|
|
||||||
auto *camera = engine->getCameraComponent(entity);
|
|
||||||
return reinterpret_cast<TCamera *>(camera);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void Engine_setTransform(TEngine *tEngine, EntityId entity, double4x4 transform)
|
|
||||||
{
|
|
||||||
auto *engine = reinterpret_cast<Engine *>(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<Engine *>(tEngine);
|
|
||||||
auto *material = Material::Builder()
|
|
||||||
.package(materialData, length)
|
|
||||||
.build(*engine);
|
|
||||||
return reinterpret_cast<TMaterial*>(material);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void Engine_destroyMaterial(TEngine *tEngine, TMaterial *tMaterial) {
|
|
||||||
auto *engine = reinterpret_cast<Engine *>(tEngine);
|
|
||||||
auto *material = reinterpret_cast<Material *>(tMaterial);
|
|
||||||
engine->destroy(material);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <filament/LightManager.h>
|
#include <filament/LightManager.h>
|
||||||
|
|
||||||
#include "c_api/APIBoundaryTypes.h"
|
#include "c_api/APIBoundaryTypes.h"
|
||||||
|
#include "c_api/TEngine.h"
|
||||||
#include "c_api/TView.h"
|
#include "c_api/TView.h"
|
||||||
#include "c_api/TSceneAsset.h"
|
#include "c_api/TSceneAsset.h"
|
||||||
#include "c_api/TSceneManager.h"
|
#include "c_api/TSceneManager.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user