chore: factor out SceneManager_ methods
This commit is contained in:
47
thermion_dart/native/include/APIExport.h
Normal file
47
thermion_dart/native/include/APIExport.h
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#ifndef _API_EXPORT_H
|
||||||
|
#define _API_EXPORT_H
|
||||||
|
#ifdef _WIN32
|
||||||
|
#ifdef IS_DLL
|
||||||
|
#define EMSCRIPTEN_KEEPALIVE __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define EMSCRIPTEN_KEEPALIVE __declspec(dllexport)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifndef EMSCRIPTEN_KEEPALIVE
|
||||||
|
#define EMSCRIPTEN_KEEPALIVE __attribute__((visibility("default")))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// we copy the LLVM <stdbool.h> here rather than including,
|
||||||
|
// because on Windows it's difficult to pin the exact location which confuses dart ffigen
|
||||||
|
|
||||||
|
#ifndef __STDBOOL_H
|
||||||
|
#define __STDBOOL_H
|
||||||
|
|
||||||
|
#define __bool_true_false_are_defined 1
|
||||||
|
|
||||||
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ > 201710L
|
||||||
|
/* FIXME: We should be issuing a deprecation warning here, but cannot yet due
|
||||||
|
* to system headers which include this header file unconditionally.
|
||||||
|
*/
|
||||||
|
#elif !defined(__cplusplus)
|
||||||
|
#define bool _Bool
|
||||||
|
#define true 1
|
||||||
|
#define false 0
|
||||||
|
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||||
|
/* Define _Bool as a GNU extension. */
|
||||||
|
#define _Bool bool
|
||||||
|
#if defined(__cplusplus) && __cplusplus < 201103L
|
||||||
|
/* For C++98, define bool, false, true as a GNU extension. */
|
||||||
|
#define bool bool
|
||||||
|
#define false false
|
||||||
|
#define true true
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __STDBOOL_H */
|
||||||
|
|
||||||
|
#if defined(__APPLE__) || defined(__EMSCRIPTEN__)
|
||||||
|
#include <stddef.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
54
thermion_dart/native/include/TSceneManager.h
Normal file
54
thermion_dart/native/include/TSceneManager.h
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "APIBoundaryTypes.h"
|
||||||
|
#include "ResourceBuffer.hpp"
|
||||||
|
#include "ThermionDartAPIUtils.h"
|
||||||
|
#include "TCamera.h"
|
||||||
|
#include "TMaterialInstance.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TGizmo* SceneManager_createGizmo(TSceneManager *tSceneManager, TView *tView, TScene *tScene);
|
||||||
|
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_createGeometry(
|
||||||
|
TSceneManager *sceneManager,
|
||||||
|
float *vertices,
|
||||||
|
int numVertices,
|
||||||
|
float *normals,
|
||||||
|
int numNormals,
|
||||||
|
float *uvs,
|
||||||
|
int numUvs,
|
||||||
|
uint16_t *indices,
|
||||||
|
int numIndices,
|
||||||
|
int primitiveType,
|
||||||
|
TMaterialInstance *materialInstance,
|
||||||
|
bool keepData);
|
||||||
|
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitMaterialInstance(TSceneManager *sceneManager);
|
||||||
|
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitFixedSizeMaterialInstance(TSceneManager *sceneManager);
|
||||||
|
EMSCRIPTEN_KEEPALIVE bool SceneManager_setTransform(TSceneManager *sceneManager, EntityId entityId, const double *const transform);
|
||||||
|
EMSCRIPTEN_KEEPALIVE void SceneManager_queueTransformUpdates(TSceneManager *sceneManager, EntityId* entities, const double* const transforms, int numEntities);
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_findCameraByName(TSceneManager* tSceneManager, EntityId entity, const char* name);
|
||||||
|
EMSCRIPTEN_KEEPALIVE void SceneManager_setVisibilityLayer(TSceneManager *tSceneManager, EntityId entity, int layer);
|
||||||
|
EMSCRIPTEN_KEEPALIVE TScene* SceneManager_getScene(TSceneManager *tSceneManager);
|
||||||
|
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_loadGlbFromBuffer(TSceneManager *sceneManager, const uint8_t *const, size_t length, bool keepData, int priority, int layer, bool loadResourcesAsync);
|
||||||
|
EMSCRIPTEN_KEEPALIVE bool SceneManager_setMorphAnimation(
|
||||||
|
TSceneManager *sceneManager,
|
||||||
|
EntityId entity,
|
||||||
|
const float *const morphData,
|
||||||
|
const uint32_t *const morphIndices,
|
||||||
|
int numMorphTargets,
|
||||||
|
int numFrames,
|
||||||
|
float frameLengthInMs);
|
||||||
|
|
||||||
|
// SceneManager
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_createCamera(TSceneManager *sceneManager);
|
||||||
|
EMSCRIPTEN_KEEPALIVE void SceneManager_destroyCamera(TSceneManager *sceneManager, TCamera* camera);
|
||||||
|
EMSCRIPTEN_KEEPALIVE size_t SceneManager_getCameraCount(TSceneManager *sceneManager);
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_getCameraAt(TSceneManager *sceneManager, size_t index);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -1,51 +1,7 @@
|
|||||||
#ifndef _FLUTTER_FILAMENT_API_H
|
#ifndef _FLUTTER_FILAMENT_API_H
|
||||||
#define _FLUTTER_FILAMENT_API_H
|
#define _FLUTTER_FILAMENT_API_H
|
||||||
|
|
||||||
#ifdef _WIN32
|
#include "APIExport.h"
|
||||||
#ifdef IS_DLL
|
|
||||||
#define EMSCRIPTEN_KEEPALIVE __declspec(dllimport)
|
|
||||||
#else
|
|
||||||
#define EMSCRIPTEN_KEEPALIVE __declspec(dllexport)
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#ifndef EMSCRIPTEN_KEEPALIVE
|
|
||||||
#define EMSCRIPTEN_KEEPALIVE __attribute__((visibility("default")))
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// we copy the LLVM <stdbool.h> here rather than including,
|
|
||||||
// because on Windows it's difficult to pin the exact location which confuses dart ffigen
|
|
||||||
|
|
||||||
#ifndef __STDBOOL_H
|
|
||||||
#define __STDBOOL_H
|
|
||||||
|
|
||||||
#define __bool_true_false_are_defined 1
|
|
||||||
|
|
||||||
#if defined(__STDC_VERSION__) && __STDC_VERSION__ > 201710L
|
|
||||||
/* FIXME: We should be issuing a deprecation warning here, but cannot yet due
|
|
||||||
* to system headers which include this header file unconditionally.
|
|
||||||
*/
|
|
||||||
#elif !defined(__cplusplus)
|
|
||||||
#define bool _Bool
|
|
||||||
#define true 1
|
|
||||||
#define false 0
|
|
||||||
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
|
||||||
/* Define _Bool as a GNU extension. */
|
|
||||||
#define _Bool bool
|
|
||||||
#if defined(__cplusplus) && __cplusplus < 201103L
|
|
||||||
/* For C++98, define bool, false, true as a GNU extension. */
|
|
||||||
#define bool bool
|
|
||||||
#define false false
|
|
||||||
#define true true
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __STDBOOL_H */
|
|
||||||
|
|
||||||
#if defined(__APPLE__) || defined(__EMSCRIPTEN__)
|
|
||||||
#include <stddef.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "APIBoundaryTypes.h"
|
#include "APIBoundaryTypes.h"
|
||||||
#include "ResourceBuffer.hpp"
|
#include "ResourceBuffer.hpp"
|
||||||
#include "ThermionDartAPIUtils.h"
|
#include "ThermionDartAPIUtils.h"
|
||||||
@@ -197,37 +153,6 @@ extern "C"
|
|||||||
int skinIndex,
|
int skinIndex,
|
||||||
int boneIndex);
|
int boneIndex);
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TGizmo* SceneManager_createGizmo(TSceneManager *tSceneManager, TView *tView, TScene *tScene);
|
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_createGeometry(
|
|
||||||
TSceneManager *sceneManager,
|
|
||||||
float *vertices,
|
|
||||||
int numVertices,
|
|
||||||
float *normals,
|
|
||||||
int numNormals,
|
|
||||||
float *uvs,
|
|
||||||
int numUvs,
|
|
||||||
uint16_t *indices,
|
|
||||||
int numIndices,
|
|
||||||
int primitiveType,
|
|
||||||
TMaterialInstance *materialInstance,
|
|
||||||
bool keepData);
|
|
||||||
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitMaterialInstance(TSceneManager *sceneManager);
|
|
||||||
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitFixedSizeMaterialInstance(TSceneManager *sceneManager);
|
|
||||||
EMSCRIPTEN_KEEPALIVE bool SceneManager_setTransform(TSceneManager *sceneManager, EntityId entityId, const double *const transform);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneManager_queueTransformUpdates(TSceneManager *sceneManager, EntityId* entities, const double* const transforms, int numEntities);
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_findCameraByName(TSceneManager* tSceneManager, EntityId entity, const char* name);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneManager_setVisibilityLayer(TSceneManager *tSceneManager, EntityId entity, int layer);
|
|
||||||
EMSCRIPTEN_KEEPALIVE TScene* SceneManager_getScene(TSceneManager *tSceneManager);
|
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_loadGlbFromBuffer(TSceneManager *sceneManager, const uint8_t *const, size_t length, bool keepData, int priority, int layer, bool loadResourcesAsync);
|
|
||||||
EMSCRIPTEN_KEEPALIVE bool SceneManager_setMorphAnimation(
|
|
||||||
TSceneManager *sceneManager,
|
|
||||||
EntityId entity,
|
|
||||||
const float *const morphData,
|
|
||||||
const uint32_t *const morphIndices,
|
|
||||||
int numMorphTargets,
|
|
||||||
int numFrames,
|
|
||||||
float frameLengthInMs);
|
|
||||||
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE bool update_bone_matrices(TSceneManager *sceneManager, EntityId entityId);
|
EMSCRIPTEN_KEEPALIVE bool update_bone_matrices(TSceneManager *sceneManager, EntityId entityId);
|
||||||
EMSCRIPTEN_KEEPALIVE void get_morph_target_name(TSceneManager *sceneManager, EntityId assetEntity, EntityId childEntity, char *const outPtr, int index);
|
EMSCRIPTEN_KEEPALIVE void get_morph_target_name(TSceneManager *sceneManager, EntityId assetEntity, EntityId childEntity, char *const outPtr, int index);
|
||||||
@@ -247,12 +172,6 @@ extern "C"
|
|||||||
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *engine, EntityId entity);
|
EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *engine, EntityId entity);
|
||||||
EMSCRIPTEN_KEEPALIVE TEntityManager *Engine_getEntityManager(TEngine *engine);
|
EMSCRIPTEN_KEEPALIVE TEntityManager *Engine_getEntityManager(TEngine *engine);
|
||||||
|
|
||||||
// SceneManager
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_createCamera(TSceneManager *sceneManager);
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneManager_destroyCamera(TSceneManager *sceneManager, TCamera* camera);
|
|
||||||
EMSCRIPTEN_KEEPALIVE size_t SceneManager_getCameraCount(TSceneManager *sceneManager);
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_getCameraAt(TSceneManager *sceneManager, size_t index);
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE int hide_mesh(TSceneManager *sceneManager, EntityId entity, const char *meshName);
|
EMSCRIPTEN_KEEPALIVE int hide_mesh(TSceneManager *sceneManager, EntityId entity, const char *meshName);
|
||||||
EMSCRIPTEN_KEEPALIVE int reveal_mesh(TSceneManager *sceneManager, EntityId entity, const char *meshName);
|
EMSCRIPTEN_KEEPALIVE int reveal_mesh(TSceneManager *sceneManager, EntityId entity, const char *meshName);
|
||||||
|
|
||||||
@@ -276,7 +195,6 @@ extern "C"
|
|||||||
EMSCRIPTEN_KEEPALIVE void test_collisions(TSceneManager *sceneManager, EntityId entity);
|
EMSCRIPTEN_KEEPALIVE void test_collisions(TSceneManager *sceneManager, EntityId entity);
|
||||||
EMSCRIPTEN_KEEPALIVE void set_priority(TSceneManager *sceneManager, EntityId entityId, int priority);
|
EMSCRIPTEN_KEEPALIVE void set_priority(TSceneManager *sceneManager, EntityId entityId, int priority);
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE Aabb3 SceneManager_getRenderableBoundingBox(TSceneManager *sceneManager, EntityId entity);
|
|
||||||
EMSCRIPTEN_KEEPALIVE Aabb2 get_bounding_box(TSceneManager *sceneManager, TView *view, EntityId entity);
|
EMSCRIPTEN_KEEPALIVE Aabb2 get_bounding_box(TSceneManager *sceneManager, TView *view, EntityId entity);
|
||||||
EMSCRIPTEN_KEEPALIVE void get_bounding_box_to_out(TSceneManager *sceneManager, TView *view, EntityId entity, float *minX, float *minY, float *maxX, float *maxY);
|
EMSCRIPTEN_KEEPALIVE void get_bounding_box_to_out(TSceneManager *sceneManager, TView *view, EntityId entity, float *minX, float *minY, float *maxX, float *maxY);
|
||||||
|
|
||||||
|
|||||||
133
thermion_dart/native/src/TSceneManager.cpp
Normal file
133
thermion_dart/native/src/TSceneManager.cpp
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
#include "filament/LightManager.h"
|
||||||
|
#include "ResourceBuffer.hpp"
|
||||||
|
#include "FilamentViewer.hpp"
|
||||||
|
#include "Log.hpp"
|
||||||
|
#include "APIExport.h"
|
||||||
|
|
||||||
|
using namespace thermion;
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
|
||||||
|
#include "TSceneManager.h"
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TGizmo *SceneManager_createGizmo(TSceneManager *tSceneManager, TView *tView, TScene *tScene)
|
||||||
|
{
|
||||||
|
auto sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
auto *scene = reinterpret_cast<Scene *>(tScene);
|
||||||
|
auto *view = reinterpret_cast<View *>(tView);
|
||||||
|
auto gizmo = sceneManager->createGizmo(view, scene);
|
||||||
|
return reinterpret_cast<TGizmo *>(gizmo);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_loadGlbFromBuffer(TSceneManager *sceneManager, const uint8_t *const data, size_t length, bool keepData, int priority, int layer, bool loadResourcesAsync)
|
||||||
|
{
|
||||||
|
return ((SceneManager *)sceneManager)->loadGlbFromBuffer((const uint8_t *)data, length, 1, keepData, priority, layer, loadResourcesAsync);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE bool SceneManager_setMorphAnimation(
|
||||||
|
TSceneManager *sceneManager,
|
||||||
|
EntityId asset,
|
||||||
|
const float *const morphData,
|
||||||
|
const uint32_t *const morphIndices,
|
||||||
|
int numMorphTargets,
|
||||||
|
int numFrames,
|
||||||
|
float frameLengthInMs)
|
||||||
|
{
|
||||||
|
auto result = ((SceneManager *)sceneManager)->setMorphAnimationBuffer(asset, morphData, morphIndices, numMorphTargets, numFrames, frameLengthInMs);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera *SceneManager_getCameraByName(TSceneManager *tSceneManager, EntityId entityId, const char *name)
|
||||||
|
{
|
||||||
|
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE bool SceneManager_setTransform(TSceneManager *sceneManager, EntityId entityId, const double *const transform)
|
||||||
|
{
|
||||||
|
auto matrix = math::mat4(
|
||||||
|
transform[0], transform[1], transform[2],
|
||||||
|
transform[3],
|
||||||
|
transform[4],
|
||||||
|
transform[5],
|
||||||
|
transform[6],
|
||||||
|
transform[7],
|
||||||
|
transform[8],
|
||||||
|
transform[9],
|
||||||
|
transform[10],
|
||||||
|
transform[11],
|
||||||
|
transform[12],
|
||||||
|
transform[13],
|
||||||
|
transform[14],
|
||||||
|
transform[15]);
|
||||||
|
return ((SceneManager *)sceneManager)->setTransform(entityId, matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE Aabb3 SceneManager_getRenderableBoundingBox(TSceneManager *tSceneManager, EntityId entity)
|
||||||
|
{
|
||||||
|
auto sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
return sceneManager->getRenderableBoundingBox(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE void SceneManager_setVisibilityLayer(TSceneManager *tSceneManager, EntityId entity, int layer)
|
||||||
|
{
|
||||||
|
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
sceneManager->setVisibilityLayer(entity, layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitMaterialInstance(TSceneManager *sceneManager)
|
||||||
|
{
|
||||||
|
auto *instance = ((SceneManager *)sceneManager)->createUnlitMaterialInstance();
|
||||||
|
return reinterpret_cast<TMaterialInstance *>(instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitFixedSizeMaterialInstance(TSceneManager *sceneManager)
|
||||||
|
{
|
||||||
|
auto *instance = ((SceneManager *)sceneManager)->createUnlitFixedSizeMaterialInstance();
|
||||||
|
return reinterpret_cast<TMaterialInstance *>(instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera *SceneManager_createCamera(TSceneManager *tSceneManager)
|
||||||
|
{
|
||||||
|
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
return reinterpret_cast<TCamera *>(sceneManager->createCamera());
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE void SceneManager_destroyCamera(TSceneManager *tSceneManager, TCamera *tCamera)
|
||||||
|
{
|
||||||
|
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
auto *camera = reinterpret_cast<Camera *>(tCamera);
|
||||||
|
sceneManager->destroyCamera(camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE size_t SceneManager_getCameraCount(TSceneManager *tSceneManager)
|
||||||
|
{
|
||||||
|
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
return sceneManager->getCameraCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE TCamera *SceneManager_getCameraAt(TSceneManager *tSceneManager, size_t index)
|
||||||
|
{
|
||||||
|
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
||||||
|
auto *camera = sceneManager->getCameraAt(index);
|
||||||
|
return reinterpret_cast<TCamera *>(camera);
|
||||||
|
}
|
||||||
|
|
||||||
|
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_createGeometry(
|
||||||
|
TSceneManager *sceneManager,
|
||||||
|
float *vertices,
|
||||||
|
int numVertices,
|
||||||
|
float *normals,
|
||||||
|
int numNormals,
|
||||||
|
float *uvs,
|
||||||
|
int numUvs,
|
||||||
|
uint16_t *indices,
|
||||||
|
int numIndices,
|
||||||
|
int primitiveType,
|
||||||
|
TMaterialInstance *materialInstance,
|
||||||
|
bool keepData)
|
||||||
|
{
|
||||||
|
return ((SceneManager *)sceneManager)->createGeometry(vertices, static_cast<uint32_t>(numVertices), normals, static_cast<uint32_t>(numNormals), uvs, static_cast<uint32_t>(numUvs), indices, static_cast<uint32_t>(numIndices), (filament::RenderableManager::PrimitiveType)primitiveType, reinterpret_cast<MaterialInstance *>(materialInstance), keepData);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -173,19 +173,6 @@ extern "C"
|
|||||||
return ((SceneManager *)sceneManager)->loadGlb(assetPath, numInstances, keepData);
|
return ((SceneManager *)sceneManager)->loadGlb(assetPath, numInstances, keepData);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TGizmo* SceneManager_createGizmo(TSceneManager *tSceneManager, TView *tView, TScene *tScene) {
|
|
||||||
auto sceneManager = reinterpret_cast<SceneManager*>(tSceneManager);
|
|
||||||
auto *scene = reinterpret_cast<Scene*>(tScene);
|
|
||||||
auto *view = reinterpret_cast<View*>(tView);
|
|
||||||
auto gizmo = sceneManager->createGizmo(view, scene);
|
|
||||||
return reinterpret_cast<TGizmo*>(gizmo);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_loadGlbFromBuffer(TSceneManager *sceneManager, const uint8_t *const data, size_t length, bool keepData, int priority, int layer, bool loadResourcesAsync)
|
|
||||||
{
|
|
||||||
return ((SceneManager *)sceneManager)->loadGlbFromBuffer((const uint8_t *)data, length, 1, keepData, priority, layer, loadResourcesAsync);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId create_instance(TSceneManager *sceneManager, EntityId entityId)
|
EMSCRIPTEN_KEEPALIVE EntityId create_instance(TSceneManager *sceneManager, EntityId entityId)
|
||||||
{
|
{
|
||||||
return ((SceneManager *)sceneManager)->createInstance(entityId);
|
return ((SceneManager *)sceneManager)->createInstance(entityId);
|
||||||
@@ -464,19 +451,7 @@ extern "C"
|
|||||||
return ((SceneManager *)sceneManager)->setMorphTargetWeights(asset, weights, numWeights);
|
return ((SceneManager *)sceneManager)->setMorphTargetWeights(asset, weights, numWeights);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE bool SceneManager_setMorphAnimation(
|
|
||||||
TSceneManager *sceneManager,
|
|
||||||
EntityId asset,
|
|
||||||
const float *const morphData,
|
|
||||||
const uint32_t *const morphIndices,
|
|
||||||
int numMorphTargets,
|
|
||||||
int numFrames,
|
|
||||||
float frameLengthInMs)
|
|
||||||
{
|
|
||||||
auto result = ((SceneManager *)sceneManager)->setMorphAnimationBuffer(asset, morphData, morphIndices, numMorphTargets, numFrames, frameLengthInMs);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void clear_morph_animation(TSceneManager *sceneManager, EntityId asset)
|
EMSCRIPTEN_KEEPALIVE void clear_morph_animation(TSceneManager *sceneManager, EntityId asset)
|
||||||
{
|
{
|
||||||
((SceneManager *)sceneManager)->clearMorphAnimationBuffer(asset);
|
((SceneManager *)sceneManager)->clearMorphAnimationBuffer(asset);
|
||||||
@@ -685,59 +660,6 @@ extern "C"
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera* SceneManager_getCameraByName(TSceneManager *tSceneManager, EntityId entityId, const char* name) {
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager*>(tSceneManager);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE bool SceneManager_setTransform(TSceneManager *sceneManager, EntityId entityId, const double *const transform)
|
|
||||||
{
|
|
||||||
auto matrix = math::mat4(
|
|
||||||
transform[0], transform[1], transform[2],
|
|
||||||
transform[3],
|
|
||||||
transform[4],
|
|
||||||
transform[5],
|
|
||||||
transform[6],
|
|
||||||
transform[7],
|
|
||||||
transform[8],
|
|
||||||
transform[9],
|
|
||||||
transform[10],
|
|
||||||
transform[11],
|
|
||||||
transform[12],
|
|
||||||
transform[13],
|
|
||||||
transform[14],
|
|
||||||
transform[15]);
|
|
||||||
return ((SceneManager *)sceneManager)->setTransform(entityId, matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneManager_queueTransformUpdates(TSceneManager *tSceneManager, EntityId *entities, const double *const transforms, int numEntities)
|
|
||||||
{
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
|
||||||
|
|
||||||
std::vector<math::mat4> matrices(
|
|
||||||
numEntities);
|
|
||||||
for (int i = 0; i < numEntities; i++)
|
|
||||||
{
|
|
||||||
matrices[i] = math::mat4(
|
|
||||||
transforms[i * 16], transforms[i * 16 + 1], transforms[i * 16 + 2],
|
|
||||||
transforms[i * 16 + 3],
|
|
||||||
transforms[i * 16 + 4],
|
|
||||||
transforms[i * 16 + 5],
|
|
||||||
transforms[i * 16 + 6],
|
|
||||||
transforms[i * 16 + 7],
|
|
||||||
transforms[i * 16 + 8],
|
|
||||||
transforms[i * 16 + 9],
|
|
||||||
transforms[i * 16 + 10],
|
|
||||||
transforms[i * 16 + 11],
|
|
||||||
transforms[i * 16 + 12],
|
|
||||||
transforms[i * 16 + 13],
|
|
||||||
transforms[i * 16 + 14],
|
|
||||||
transforms[i * 16 + 15]);
|
|
||||||
}
|
|
||||||
sceneManager->queueTransformUpdates(entities, matrices.data(), numEntities);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE bool update_bone_matrices(TSceneManager *sceneManager, EntityId entityId)
|
EMSCRIPTEN_KEEPALIVE bool update_bone_matrices(TSceneManager *sceneManager, EntityId entityId)
|
||||||
{
|
{
|
||||||
return ((SceneManager *)sceneManager)->updateBoneMatrices(entityId);
|
return ((SceneManager *)sceneManager)->updateBoneMatrices(entityId);
|
||||||
@@ -862,23 +784,7 @@ extern "C"
|
|||||||
((SceneManager *)sceneManager)->removeAnimationComponent(entityId);
|
((SceneManager *)sceneManager)->removeAnimationComponent(entityId);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId SceneManager_createGeometry(
|
|
||||||
TSceneManager *sceneManager,
|
|
||||||
float *vertices,
|
|
||||||
int numVertices,
|
|
||||||
float *normals,
|
|
||||||
int numNormals,
|
|
||||||
float *uvs,
|
|
||||||
int numUvs,
|
|
||||||
uint16_t *indices,
|
|
||||||
int numIndices,
|
|
||||||
int primitiveType,
|
|
||||||
TMaterialInstance *materialInstance,
|
|
||||||
bool keepData)
|
|
||||||
{
|
|
||||||
return ((SceneManager *)sceneManager)->createGeometry(vertices, static_cast<uint32_t>(numVertices), normals, static_cast<uint32_t>(numNormals), uvs, static_cast<uint32_t>(numUvs), indices, static_cast<uint32_t>(numIndices), (filament::RenderableManager::PrimitiveType)primitiveType, reinterpret_cast<MaterialInstance *>(materialInstance), keepData);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE EntityId find_child_entity_by_name(TSceneManager *sceneManager, const EntityId parent, const char *name)
|
EMSCRIPTEN_KEEPALIVE EntityId find_child_entity_by_name(TSceneManager *sceneManager, const EntityId parent, const char *name)
|
||||||
{
|
{
|
||||||
auto entity = ((SceneManager *)sceneManager)->findChildEntityByName(parent, name);
|
auto entity = ((SceneManager *)sceneManager)->findChildEntityByName(parent, name);
|
||||||
@@ -909,12 +815,6 @@ extern "C"
|
|||||||
{
|
{
|
||||||
((SceneManager *)sceneManager)->setPriority(entity, priority);
|
((SceneManager *)sceneManager)->setPriority(entity, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE Aabb3 SceneManager_getRenderableBoundingBox(TSceneManager *tSceneManager, EntityId entity) {
|
|
||||||
auto sceneManager = reinterpret_cast<SceneManager*>(tSceneManager);
|
|
||||||
return sceneManager->getRenderableBoundingBox(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE Aabb2 get_bounding_box(TSceneManager *sceneManager, TView *tView, EntityId entity)
|
EMSCRIPTEN_KEEPALIVE Aabb2 get_bounding_box(TSceneManager *sceneManager, TView *tView, EntityId entity)
|
||||||
{
|
{
|
||||||
@@ -932,12 +832,6 @@ extern "C"
|
|||||||
*maxY = box.maxY;
|
*maxY = box.maxY;
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneManager_setVisibilityLayer(TSceneManager *tSceneManager, EntityId entity, int layer)
|
|
||||||
{
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager*>(tSceneManager);
|
|
||||||
sceneManager->setVisibilityLayer(entity, layer);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void thermion_flutter_free(void *ptr)
|
EMSCRIPTEN_KEEPALIVE void thermion_flutter_free(void *ptr)
|
||||||
{
|
{
|
||||||
free(ptr);
|
free(ptr);
|
||||||
@@ -1033,18 +927,6 @@ extern "C"
|
|||||||
return reinterpret_cast<TMaterialInstance *>(materialInstance);
|
return reinterpret_cast<TMaterialInstance *>(materialInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitMaterialInstance(TSceneManager *sceneManager)
|
|
||||||
{
|
|
||||||
auto *instance = ((SceneManager *)sceneManager)->createUnlitMaterialInstance();
|
|
||||||
return reinterpret_cast<TMaterialInstance *>(instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TMaterialInstance *SceneManager_createUnlitFixedSizeMaterialInstance(TSceneManager *sceneManager)
|
|
||||||
{
|
|
||||||
auto *instance = ((SceneManager *)sceneManager)->createUnlitFixedSizeMaterialInstance();
|
|
||||||
return reinterpret_cast<TMaterialInstance *>(instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void destroy_material_instance(TSceneManager *sceneManager, TMaterialInstance *instance)
|
EMSCRIPTEN_KEEPALIVE void destroy_material_instance(TSceneManager *sceneManager, TMaterialInstance *instance)
|
||||||
{
|
{
|
||||||
((SceneManager *)sceneManager)->destroy(reinterpret_cast<MaterialInstance *>(instance));
|
((SceneManager *)sceneManager)->destroy(reinterpret_cast<MaterialInstance *>(instance));
|
||||||
@@ -1072,31 +954,6 @@ extern "C"
|
|||||||
transformManager.setTransform(transformInstance, convert_double4x4_to_mat4(transform));
|
transformManager.setTransform(transformInstance, convert_double4x4_to_mat4(transform));
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera *SceneManager_createCamera(TSceneManager *tSceneManager)
|
|
||||||
{
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
|
||||||
return reinterpret_cast<TCamera *>(sceneManager->createCamera());
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void SceneManager_destroyCamera(TSceneManager *tSceneManager, TCamera *tCamera)
|
|
||||||
{
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
|
||||||
auto *camera = reinterpret_cast<Camera *>(tCamera);
|
|
||||||
sceneManager->destroyCamera(camera);
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE size_t SceneManager_getCameraCount(TSceneManager *tSceneManager)
|
|
||||||
{
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
|
||||||
return sceneManager->getCameraCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TCamera *SceneManager_getCameraAt(TSceneManager *tSceneManager, size_t index)
|
|
||||||
{
|
|
||||||
auto *sceneManager = reinterpret_cast<SceneManager *>(tSceneManager);
|
|
||||||
auto *camera = sceneManager->getCameraAt(index);
|
|
||||||
return reinterpret_cast<TCamera *>(camera);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
|
#include <functional>
|
||||||
|
#include <mutex>
|
||||||
|
#include <thread>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "ThermionDartRenderThreadApi.h"
|
#include "ThermionDartRenderThreadApi.h"
|
||||||
#include "FilamentViewer.hpp"
|
#include "FilamentViewer.hpp"
|
||||||
#include "TView.h"
|
#include "TView.h"
|
||||||
#include "Log.hpp"
|
#include "Log.hpp"
|
||||||
#include "ThreadPool.hpp"
|
#include "ThreadPool.hpp"
|
||||||
#include "filament/LightManager.h"
|
#include "TSceneManager.h"
|
||||||
|
|
||||||
#include <functional>
|
#include "filament/LightManager.h"
|
||||||
#include <mutex>
|
|
||||||
#include <thread>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
using namespace thermion;
|
using namespace thermion;
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|||||||
Reference in New Issue
Block a user