pass shared NameComponentManager to gltfio AssetLoader
This commit is contained in:
@@ -339,10 +339,11 @@ external void FilamentAsset_getEntities(
|
||||
|
||||
@ffi.Native<
|
||||
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(
|
||||
ffi.Pointer<TEngine> tEngine,
|
||||
ffi.Pointer<TMaterialProvider> tMaterialProvider,
|
||||
ffi.Pointer<TNameComponentManager> tNameComponentManager,
|
||||
);
|
||||
|
||||
@ffi.Native<
|
||||
@@ -2718,6 +2719,7 @@ external void AnimationManager_resetToRestPoseRenderThread(
|
||||
ffi.Void Function(
|
||||
ffi.Pointer<TEngine>,
|
||||
ffi.Pointer<TMaterialProvider>,
|
||||
ffi.Pointer<TNameComponentManager>,
|
||||
ffi.Pointer<
|
||||
ffi.NativeFunction<
|
||||
ffi.Void Function(
|
||||
@@ -2725,6 +2727,7 @@ external void AnimationManager_resetToRestPoseRenderThread(
|
||||
external void GltfAssetLoader_createRenderThread(
|
||||
ffi.Pointer<TEngine> tEngine,
|
||||
ffi.Pointer<TMaterialProvider> tMaterialProvider,
|
||||
ffi.Pointer<TNameComponentManager> tNameComponentManager,
|
||||
ffi.Pointer<
|
||||
ffi.NativeFunction<ffi.Void Function(ffi.Pointer<TGltfAssetLoader>)>>
|
||||
callback,
|
||||
|
||||
@@ -592,6 +592,7 @@ extension type NativeLibrary(JSObject _) implements JSObject {
|
||||
external Pointer<TGltfAssetLoader> _GltfAssetLoader_create(
|
||||
Pointer<TEngine> tEngine,
|
||||
Pointer<TMaterialProvider> tMaterialProvider,
|
||||
self.Pointer<TNameComponentManager> tNameComponentManager
|
||||
);
|
||||
external Pointer<TFilamentAsset> _GltfAssetLoader_load(
|
||||
Pointer<TEngine> tEngine,
|
||||
@@ -1841,6 +1842,7 @@ extension type NativeLibrary(JSObject _) implements JSObject {
|
||||
external void _GltfAssetLoader_createRenderThread(
|
||||
Pointer<TEngine> tEngine,
|
||||
Pointer<TMaterialProvider> tMaterialProvider,
|
||||
Pointer<TNameComponentManager> tNameComponentManager,
|
||||
Pointer<self.NativeFunction<void Function(PointerClass<TGltfAssetLoader>)>>
|
||||
callback,
|
||||
);
|
||||
@@ -2641,9 +2643,10 @@ void FilamentAsset_getEntities(
|
||||
self.Pointer<TGltfAssetLoader> GltfAssetLoader_create(
|
||||
self.Pointer<TEngine> tEngine,
|
||||
self.Pointer<TMaterialProvider> tMaterialProvider,
|
||||
self.Pointer<TNameComponentManager> tNameComponentManager
|
||||
) {
|
||||
final result =
|
||||
_lib._GltfAssetLoader_create(tEngine.cast(), tMaterialProvider.cast());
|
||||
_lib._GltfAssetLoader_create(tEngine.cast(), tMaterialProvider.cast(), tNameComponentManager.cast());
|
||||
return self.Pointer<TGltfAssetLoader>(result);
|
||||
}
|
||||
|
||||
@@ -5200,11 +5203,12 @@ void AnimationManager_resetToRestPoseRenderThread(
|
||||
void GltfAssetLoader_createRenderThread(
|
||||
self.Pointer<TEngine> tEngine,
|
||||
self.Pointer<TMaterialProvider> tMaterialProvider,
|
||||
self.Pointer<TNameComponentManager> tNameComponentManager,
|
||||
self.Pointer<self.NativeFunction<void Function(Pointer<TGltfAssetLoader>)>>
|
||||
callback,
|
||||
) {
|
||||
final result = _lib._GltfAssetLoader_createRenderThread(
|
||||
tEngine.cast(), tMaterialProvider.cast(), callback.cast());
|
||||
tEngine.cast(), tMaterialProvider.cast(), tNameComponentManager.cast(), callback.cast());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -82,12 +82,9 @@ class FFIAsset extends ThermionAsset {
|
||||
final childEntities = await getChildEntities();
|
||||
var names = <String?>[];
|
||||
for (final entity in childEntities) {
|
||||
var name = NameComponentManager_getName(app.nameComponentManager, entity);
|
||||
if (name == nullptr) {
|
||||
names.add(null);
|
||||
} else {
|
||||
names.add(name.cast<Utf8>().toDartString());
|
||||
}
|
||||
var name = await FilamentApp.instance!.getNameForEntity(entity);
|
||||
names.add(name);
|
||||
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
@@ -85,9 +85,9 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
||||
config.stereoscopicEyeCount,
|
||||
config.disableHandleUseAfterFreeCheck,
|
||||
cb));
|
||||
|
||||
final nameComponentManager = NameComponentManager_create();
|
||||
final gltfAssetLoader = await withPointerCallback<TGltfAssetLoader>(
|
||||
(cb) => GltfAssetLoader_createRenderThread(engine, nullptr, cb));
|
||||
(cb) => GltfAssetLoader_createRenderThread(engine, nullptr, nameComponentManager, cb));
|
||||
final renderer = await withPointerCallback<TRenderer>(
|
||||
(cb) => Engine_createRendererRenderThread(engine, cb));
|
||||
final ubershaderMaterialProvider =
|
||||
@@ -101,7 +101,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
||||
|
||||
RenderThread_setRenderTicker(renderTicker);
|
||||
|
||||
final nameComponentManager = NameComponentManager_create();
|
||||
|
||||
|
||||
FilamentApp.instance = FFIFilamentApp(
|
||||
engine,
|
||||
|
||||
@@ -8,7 +8,7 @@ extern "C"
|
||||
{
|
||||
#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(
|
||||
TEngine *tEngine,
|
||||
|
||||
@@ -301,7 +301,7 @@ namespace thermion
|
||||
|
||||
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_destroyRenderThread(TEngine *tEngine, TGltfResourceLoader *tResourceLoader, uint32_t requestId, VoidCallback onComplete);
|
||||
void GltfResourceLoader_loadResourcesRenderThread(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset, void (*callback)(bool));
|
||||
|
||||
@@ -38,8 +38,9 @@ namespace thermion
|
||||
#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 *nameComponentManager = reinterpret_cast<utils::NameComponentManager *>(tNameComponentManager);
|
||||
auto *materialProvider = reinterpret_cast<gltfio::MaterialProvider *>(tMaterialProvider);
|
||||
|
||||
if(!materialProvider) {
|
||||
@@ -52,8 +53,7 @@ EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine,
|
||||
}
|
||||
|
||||
utils::EntityManager &em = utils::EntityManager::get();
|
||||
auto ncm = new utils::NameComponentManager(em);
|
||||
auto *assetLoader = gltfio::AssetLoader::create({engine, materialProvider, ncm, &em});
|
||||
auto *assetLoader = gltfio::AssetLoader::create({engine, materialProvider, nameComponentManager, &em});
|
||||
return reinterpret_cast<TGltfAssetLoader *>(assetLoader);
|
||||
}
|
||||
|
||||
|
||||
@@ -1118,12 +1118,16 @@ extern "C"
|
||||
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(
|
||||
[=]() mutable
|
||||
{
|
||||
auto loader = GltfAssetLoader_create(tEngine, tMaterialProvider);
|
||||
auto loader = GltfAssetLoader_create(tEngine, tMaterialProvider, tNameComponentManager);
|
||||
PROXY(callback(loader));
|
||||
});
|
||||
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