pass shared NameComponentManager to gltfio AssetLoader
This commit is contained in:
@@ -339,10 +339,11 @@ external void FilamentAsset_getEntities(
|
|||||||
|
|
||||||
@ffi.Native<
|
@ffi.Native<
|
||||||
ffi.Pointer<TGltfAssetLoader> Function(
|
ffi.Pointer<TGltfAssetLoader> Function(
|
||||||
ffi.Pointer<TEngine>, ffi.Pointer<TMaterialProvider>)>(isLeaf: true)
|
ffi.Pointer<TEngine>, ffi.Pointer<TMaterialProvider>, ffi.Pointer<TNameComponentManager> )>(isLeaf: true)
|
||||||
external ffi.Pointer<TGltfAssetLoader> GltfAssetLoader_create(
|
external ffi.Pointer<TGltfAssetLoader> GltfAssetLoader_create(
|
||||||
ffi.Pointer<TEngine> tEngine,
|
ffi.Pointer<TEngine> tEngine,
|
||||||
ffi.Pointer<TMaterialProvider> tMaterialProvider,
|
ffi.Pointer<TMaterialProvider> tMaterialProvider,
|
||||||
|
ffi.Pointer<TNameComponentManager> tNameComponentManager,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ffi.Native<
|
@ffi.Native<
|
||||||
@@ -2718,6 +2719,7 @@ external void AnimationManager_resetToRestPoseRenderThread(
|
|||||||
ffi.Void Function(
|
ffi.Void Function(
|
||||||
ffi.Pointer<TEngine>,
|
ffi.Pointer<TEngine>,
|
||||||
ffi.Pointer<TMaterialProvider>,
|
ffi.Pointer<TMaterialProvider>,
|
||||||
|
ffi.Pointer<TNameComponentManager>,
|
||||||
ffi.Pointer<
|
ffi.Pointer<
|
||||||
ffi.NativeFunction<
|
ffi.NativeFunction<
|
||||||
ffi.Void Function(
|
ffi.Void Function(
|
||||||
@@ -2725,6 +2727,7 @@ external void AnimationManager_resetToRestPoseRenderThread(
|
|||||||
external void GltfAssetLoader_createRenderThread(
|
external void GltfAssetLoader_createRenderThread(
|
||||||
ffi.Pointer<TEngine> tEngine,
|
ffi.Pointer<TEngine> tEngine,
|
||||||
ffi.Pointer<TMaterialProvider> tMaterialProvider,
|
ffi.Pointer<TMaterialProvider> tMaterialProvider,
|
||||||
|
ffi.Pointer<TNameComponentManager> tNameComponentManager,
|
||||||
ffi.Pointer<
|
ffi.Pointer<
|
||||||
ffi.NativeFunction<ffi.Void Function(ffi.Pointer<TGltfAssetLoader>)>>
|
ffi.NativeFunction<ffi.Void Function(ffi.Pointer<TGltfAssetLoader>)>>
|
||||||
callback,
|
callback,
|
||||||
|
|||||||
@@ -592,6 +592,7 @@ extension type NativeLibrary(JSObject _) implements JSObject {
|
|||||||
external Pointer<TGltfAssetLoader> _GltfAssetLoader_create(
|
external Pointer<TGltfAssetLoader> _GltfAssetLoader_create(
|
||||||
Pointer<TEngine> tEngine,
|
Pointer<TEngine> tEngine,
|
||||||
Pointer<TMaterialProvider> tMaterialProvider,
|
Pointer<TMaterialProvider> tMaterialProvider,
|
||||||
|
self.Pointer<TNameComponentManager> tNameComponentManager
|
||||||
);
|
);
|
||||||
external Pointer<TFilamentAsset> _GltfAssetLoader_load(
|
external Pointer<TFilamentAsset> _GltfAssetLoader_load(
|
||||||
Pointer<TEngine> tEngine,
|
Pointer<TEngine> tEngine,
|
||||||
@@ -1841,6 +1842,7 @@ extension type NativeLibrary(JSObject _) implements JSObject {
|
|||||||
external void _GltfAssetLoader_createRenderThread(
|
external void _GltfAssetLoader_createRenderThread(
|
||||||
Pointer<TEngine> tEngine,
|
Pointer<TEngine> tEngine,
|
||||||
Pointer<TMaterialProvider> tMaterialProvider,
|
Pointer<TMaterialProvider> tMaterialProvider,
|
||||||
|
Pointer<TNameComponentManager> tNameComponentManager,
|
||||||
Pointer<self.NativeFunction<void Function(PointerClass<TGltfAssetLoader>)>>
|
Pointer<self.NativeFunction<void Function(PointerClass<TGltfAssetLoader>)>>
|
||||||
callback,
|
callback,
|
||||||
);
|
);
|
||||||
@@ -2641,9 +2643,10 @@ void FilamentAsset_getEntities(
|
|||||||
self.Pointer<TGltfAssetLoader> GltfAssetLoader_create(
|
self.Pointer<TGltfAssetLoader> GltfAssetLoader_create(
|
||||||
self.Pointer<TEngine> tEngine,
|
self.Pointer<TEngine> tEngine,
|
||||||
self.Pointer<TMaterialProvider> tMaterialProvider,
|
self.Pointer<TMaterialProvider> tMaterialProvider,
|
||||||
|
self.Pointer<TNameComponentManager> tNameComponentManager
|
||||||
) {
|
) {
|
||||||
final result =
|
final result =
|
||||||
_lib._GltfAssetLoader_create(tEngine.cast(), tMaterialProvider.cast());
|
_lib._GltfAssetLoader_create(tEngine.cast(), tMaterialProvider.cast(), tNameComponentManager.cast());
|
||||||
return self.Pointer<TGltfAssetLoader>(result);
|
return self.Pointer<TGltfAssetLoader>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5200,11 +5203,12 @@ void AnimationManager_resetToRestPoseRenderThread(
|
|||||||
void GltfAssetLoader_createRenderThread(
|
void GltfAssetLoader_createRenderThread(
|
||||||
self.Pointer<TEngine> tEngine,
|
self.Pointer<TEngine> tEngine,
|
||||||
self.Pointer<TMaterialProvider> tMaterialProvider,
|
self.Pointer<TMaterialProvider> tMaterialProvider,
|
||||||
|
self.Pointer<TNameComponentManager> tNameComponentManager,
|
||||||
self.Pointer<self.NativeFunction<void Function(Pointer<TGltfAssetLoader>)>>
|
self.Pointer<self.NativeFunction<void Function(Pointer<TGltfAssetLoader>)>>
|
||||||
callback,
|
callback,
|
||||||
) {
|
) {
|
||||||
final result = _lib._GltfAssetLoader_createRenderThread(
|
final result = _lib._GltfAssetLoader_createRenderThread(
|
||||||
tEngine.cast(), tMaterialProvider.cast(), callback.cast());
|
tEngine.cast(), tMaterialProvider.cast(), tNameComponentManager.cast(), callback.cast());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,12 +82,9 @@ class FFIAsset extends ThermionAsset {
|
|||||||
final childEntities = await getChildEntities();
|
final childEntities = await getChildEntities();
|
||||||
var names = <String?>[];
|
var names = <String?>[];
|
||||||
for (final entity in childEntities) {
|
for (final entity in childEntities) {
|
||||||
var name = NameComponentManager_getName(app.nameComponentManager, entity);
|
var name = await FilamentApp.instance!.getNameForEntity(entity);
|
||||||
if (name == nullptr) {
|
names.add(name);
|
||||||
names.add(null);
|
|
||||||
} else {
|
|
||||||
names.add(name.cast<Utf8>().toDartString());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
config.stereoscopicEyeCount,
|
config.stereoscopicEyeCount,
|
||||||
config.disableHandleUseAfterFreeCheck,
|
config.disableHandleUseAfterFreeCheck,
|
||||||
cb));
|
cb));
|
||||||
|
final nameComponentManager = NameComponentManager_create();
|
||||||
final gltfAssetLoader = await withPointerCallback<TGltfAssetLoader>(
|
final gltfAssetLoader = await withPointerCallback<TGltfAssetLoader>(
|
||||||
(cb) => GltfAssetLoader_createRenderThread(engine, nullptr, cb));
|
(cb) => GltfAssetLoader_createRenderThread(engine, nullptr, nameComponentManager, cb));
|
||||||
final renderer = await withPointerCallback<TRenderer>(
|
final renderer = await withPointerCallback<TRenderer>(
|
||||||
(cb) => Engine_createRendererRenderThread(engine, cb));
|
(cb) => Engine_createRendererRenderThread(engine, cb));
|
||||||
final ubershaderMaterialProvider =
|
final ubershaderMaterialProvider =
|
||||||
@@ -101,7 +101,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
|
|
||||||
RenderThread_setRenderTicker(renderTicker);
|
RenderThread_setRenderTicker(renderTicker);
|
||||||
|
|
||||||
final nameComponentManager = NameComponentManager_create();
|
|
||||||
|
|
||||||
FilamentApp.instance = FFIFilamentApp(
|
FilamentApp.instance = FFIFilamentApp(
|
||||||
engine,
|
engine,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ extern "C"
|
|||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider);
|
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider, TNameComponentManager *tNameComponentManager);
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TFilamentAsset *GltfAssetLoader_load(
|
EMSCRIPTEN_KEEPALIVE TFilamentAsset *GltfAssetLoader_load(
|
||||||
TEngine *tEngine,
|
TEngine *tEngine,
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ namespace thermion
|
|||||||
|
|
||||||
void AnimationManager_resetToRestPoseRenderThread(TAnimationManager *tAnimationManager, EntityId entityId, uint32_t requestId, VoidCallback onComplete);
|
void AnimationManager_resetToRestPoseRenderThread(TAnimationManager *tAnimationManager, EntityId entityId, uint32_t requestId, VoidCallback onComplete);
|
||||||
|
|
||||||
void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, void (*callback)(TGltfAssetLoader *));
|
void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, TNameComponentManager *tNameComponentManager, void (*callback)(TGltfAssetLoader *));
|
||||||
void GltfResourceLoader_createRenderThread(TEngine *tEngine, void (*callback)(TGltfResourceLoader *));
|
void GltfResourceLoader_createRenderThread(TEngine *tEngine, void (*callback)(TGltfResourceLoader *));
|
||||||
void GltfResourceLoader_destroyRenderThread(TEngine *tEngine, TGltfResourceLoader *tResourceLoader, uint32_t requestId, VoidCallback onComplete);
|
void GltfResourceLoader_destroyRenderThread(TEngine *tEngine, TGltfResourceLoader *tResourceLoader, uint32_t requestId, VoidCallback onComplete);
|
||||||
void GltfResourceLoader_loadResourcesRenderThread(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset, void (*callback)(bool));
|
void GltfResourceLoader_loadResourcesRenderThread(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset, void (*callback)(bool));
|
||||||
|
|||||||
@@ -38,8 +38,9 @@ namespace thermion
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider) {
|
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider, TNameComponentManager *tNameComponentManager) {
|
||||||
auto *engine = reinterpret_cast<filament::Engine *>(tEngine);
|
auto *engine = reinterpret_cast<filament::Engine *>(tEngine);
|
||||||
|
auto *nameComponentManager = reinterpret_cast<utils::NameComponentManager *>(tNameComponentManager);
|
||||||
auto *materialProvider = reinterpret_cast<gltfio::MaterialProvider *>(tMaterialProvider);
|
auto *materialProvider = reinterpret_cast<gltfio::MaterialProvider *>(tMaterialProvider);
|
||||||
|
|
||||||
if(!materialProvider) {
|
if(!materialProvider) {
|
||||||
@@ -52,8 +53,7 @@ EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine,
|
|||||||
}
|
}
|
||||||
|
|
||||||
utils::EntityManager &em = utils::EntityManager::get();
|
utils::EntityManager &em = utils::EntityManager::get();
|
||||||
auto ncm = new utils::NameComponentManager(em);
|
auto *assetLoader = gltfio::AssetLoader::create({engine, materialProvider, nameComponentManager, &em});
|
||||||
auto *assetLoader = gltfio::AssetLoader::create({engine, materialProvider, ncm, &em});
|
|
||||||
return reinterpret_cast<TGltfAssetLoader *>(assetLoader);
|
return reinterpret_cast<TGltfAssetLoader *>(assetLoader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1118,12 +1118,16 @@ extern "C"
|
|||||||
auto fut = _renderThread->add_task(lambda);
|
auto fut = _renderThread->add_task(lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMSCRIPTEN_KEEPALIVE void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, void (*callback)(TGltfAssetLoader *))
|
EMSCRIPTEN_KEEPALIVE void GltfAssetLoader_createRenderThread(
|
||||||
|
TEngine *tEngine,
|
||||||
|
TMaterialProvider *tMaterialProvider,
|
||||||
|
TNameComponentManager *tNameComponentManager,
|
||||||
|
void (*callback)(TGltfAssetLoader *))
|
||||||
{
|
{
|
||||||
std::packaged_task<void()> lambda(
|
std::packaged_task<void()> lambda(
|
||||||
[=]() mutable
|
[=]() mutable
|
||||||
{
|
{
|
||||||
auto loader = GltfAssetLoader_create(tEngine, tMaterialProvider);
|
auto loader = GltfAssetLoader_create(tEngine, tMaterialProvider, tNameComponentManager);
|
||||||
PROXY(callback(loader));
|
PROXY(callback(loader));
|
||||||
});
|
});
|
||||||
auto fut = _renderThread->add_task(lambda);
|
auto fut = _renderThread->add_task(lambda);
|
||||||
|
|||||||
25
thermion_dart/test/entity_tests.dart
Normal file
25
thermion_dart/test/entity_tests.dart
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
@Timeout(const Duration(seconds: 600))
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
import 'package:thermion_dart/thermion_dart.dart';
|
||||||
|
import 'helpers.dart';
|
||||||
|
|
||||||
|
void main() async {
|
||||||
|
var testHelper = TestHelper("entity_tests");
|
||||||
|
await testHelper.setup();
|
||||||
|
|
||||||
|
test('get entity names', () async {
|
||||||
|
var asset = await FilamentApp.instance!.loadGltfFromBuffer(
|
||||||
|
File("${testHelper.testDir}/assets/cube.glb").readAsBytesSync(),
|
||||||
|
nullptr);
|
||||||
|
|
||||||
|
expect(null, await FilamentApp.instance!.getNameForEntity(asset.entity));
|
||||||
|
var children = await asset.getChildEntities();
|
||||||
|
var child = children.first;
|
||||||
|
|
||||||
|
expect("Cube", await FilamentApp.instance!.getNameForEntity(child));
|
||||||
|
var childNames = await asset.getChildEntityNames();
|
||||||
|
expect("Cube", childNames.first);
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user