diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index f51c0bfc..a48222c7 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -758,14 +758,14 @@ class FFIFilamentApp extends FilamentApp { final pixelBuffers = <(View, Uint8List)>[]; - if (beginFrame) { - final views = []; - if (view != null) { - views.add(view); - } else { - views.addAll(_swapChains[swapChain]!.where((v) => v.renderable)); - } + final views = []; + if (view != null) { + views.add(view); + } else { + views.addAll(_swapChains[swapChain]!.where((v) => v.renderable)); + } + if (beginFrame) { _logger.info("Capturing ${views.length} views"); for (final view in views) { @@ -784,7 +784,8 @@ class FFIFilamentApp extends FilamentApp { PixelDataType.UBYTE || PixelDataType.BYTE => 1, _ => throw UnsupportedError(pixelDataFormat.toString()) }; - final pixelBuffer = Uint8List(viewport.width * + + final pixelBuffer = makeUint8List(viewport.width * viewport.height * numChannels * channelSizeInBytes); @@ -807,10 +808,6 @@ class FFIFilamentApp extends FilamentApp { view.renderTarget == null ? nullptr : view.renderTarget!.renderTarget, - // TPixelDataFormat.PIXELDATAFORMAT_RGBA, - // TPixelDataType.PIXELDATATYPE_UBYTE, - // TPixelDataFormat.fromValue(pixelDataFormat.value), - // TPixelDataType.fromValue(pixelDataType.value), pixelDataFormat.value, pixelDataType.value, pixelBuffer.address, @@ -829,6 +826,7 @@ class FFIFilamentApp extends FilamentApp { }); await flush(); + return pixelBuffers; } diff --git a/thermion_dart/native/src/scene/GltfSceneAsset.cpp b/thermion_dart/native/src/scene/GltfSceneAsset.cpp index 43f06af6..fb86c18e 100644 --- a/thermion_dart/native/src/scene/GltfSceneAsset.cpp +++ b/thermion_dart/native/src/scene/GltfSceneAsset.cpp @@ -90,8 +90,8 @@ namespace thermion TRACE("Instance child entity %d not renderable", i); } else { TRACE("Instance child entity %d renderable", i); - for(int i = 0; i < materialInstanceCount; i++) { - rm.setMaterialInstanceAt(renderableInstance, i, materialInstances[i]); + for(int j = 0; j < materialInstanceCount; j++) { + rm.setMaterialInstanceAt(renderableInstance, i, materialInstances[j]); } } }