update all void callbacks to accept an integer requestId

This commit is contained in:
Nick Fisher
2025-05-13 17:18:07 +08:00
parent 383fc221d9
commit dc5cdcb7e1
7 changed files with 50 additions and 47 deletions

View File

@@ -97,7 +97,7 @@ late NativeCallable<Void Function(Int32)>
_voidCallbackNativeCallable = NativeCallable<Void Function(Int32)>.listener(_voidCallbackHandler);
Future<void> withVoidCallback(
Function(int, Pointer<NativeFunction<Void Function(int)>>) func) async {
Function(int, Pointer<NativeFunction<Void Function(Int32)>>) func) async {
var requestId = _requestId;
_requestId++;
final completer = Completer();
@@ -107,7 +107,6 @@ Future<void> withVoidCallback(
func.call(requestId, _voidCallbackNativeCallable.nativeFunction.cast());
await completer.future;
// nativeCallable.close();
}
Future<Pointer<T>> withPointerCallback<T extends NativeType>(

View File

@@ -227,8 +227,8 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
for (final swapChain in _swapChains.keys.toList()) {
await destroySwapChain(swapChain);
}
await withVoidCallback((cb) async {
Engine_destroyRenderThread(engine, cb);
await withVoidCallback((requestId, cb) async {
Engine_destroyRenderThread(engine, requestId, cb);
});
RenderThread_destroy();
@@ -248,7 +248,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
///
Future destroyAsset(covariant FFIAsset asset) async {
await withVoidCallback(
(cb) => SceneAsset_destroyRenderThread(asset.asset, cb));
(requestId, cb) => SceneAsset_destroyRenderThread(asset.asset, requestId, cb));
await asset.dispose();
}
@@ -536,22 +536,23 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
Renderer_beginFrameRenderThread(
renderer, swapchain.swapChain, 0.toBigInt, cb);
});
await withVoidCallback((cb) {
await withVoidCallback((requestId, cb) {
Renderer_renderRenderThread(
renderer,
view.view,
requestId,
cb,
);
});
await withVoidCallback((cb) {
Renderer_endFrameRenderThread(renderer, cb);
await withVoidCallback((requestId, cb) {
Renderer_endFrameRenderThread(renderer, requestId, cb);
});
if (FILAMENT_SINGLE_THREADED) {
await withVoidCallback((cb) => Engine_executeRenderThread(engine, cb));
await withVoidCallback((requestId, cb) => Engine_executeRenderThread(engine, requestId, cb));
} else {
await withVoidCallback(
(cb) => Engine_flushAndWaitRenderThread(engine, cb));
(requestId, cb) => Engine_flushAndWaitRenderThread(engine, requestId, cb));
}
}
@@ -723,10 +724,11 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
final viewport = await view.getViewport();
final pixelBuffer =
Uint8List(viewport.width * viewport.height * 4 * sizeOf<Float>());
await withVoidCallback((cb) {
await withVoidCallback((requestId, cb) {
Renderer_renderRenderThread(
renderer,
view.view,
requestId,
cb,
);
});
@@ -734,7 +736,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
if (captureRenderTarget && view.renderTarget == null) {
throw Exception();
}
await withVoidCallback((cb) {
await withVoidCallback((requestId, cb) {
Renderer_readPixelsRenderThread(
renderer,
view.view,
@@ -749,20 +751,21 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
pixelDataType.value,
pixelBuffer.address,
pixelBuffer.length,
requestId,
cb);
});
pixelBuffers.add((view, pixelBuffer));
}
await withVoidCallback((cb) {
Renderer_endFrameRenderThread(renderer, cb);
await withVoidCallback((requestId, cb) {
Renderer_endFrameRenderThread(renderer, requestId, cb);
});
await withVoidCallback((cb) {
await withVoidCallback((requestId, cb) {
if (FILAMENT_SINGLE_THREADED) {
Engine_executeRenderThread(engine, cb);
Engine_executeRenderThread(engine, requestId, cb);
} else {
Engine_flushAndWaitRenderThread(engine, cb);
Engine_flushAndWaitRenderThread(engine, requestId, cb);
}
});
return pixelBuffers;
@@ -823,12 +826,13 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
resources.add(FinalizableUint8List(resourceUris[i], resourceData));
await withVoidCallback((cb) =>
await withVoidCallback((requestId, cb) =>
GltfResourceLoader_addResourceDataRenderThread(
gltfResourceLoader,
resourceUris[i],
resourceData.address,
resourceData.lengthInBytes,
requestId,
cb));
}
@@ -864,8 +868,8 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
SceneAsset_createFromFilamentAssetRenderThread(engine,
gltfAssetLoader, nameComponentManager, filamentAsset, cb));
await withVoidCallback((cb) => GltfResourceLoader_destroyRenderThread(
engine, gltfResourceLoader, cb));
await withVoidCallback((requestId, cb) => GltfResourceLoader_destroyRenderThread(
engine, gltfResourceLoader, requestId, cb));
return FFIAsset(asset, this, animationManager.cast<TAnimationManager>());
} finally {
@@ -883,10 +887,10 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
View_setColorGrading(view.view, nullptr);
for (final cg in view.colorGrading.entries) {
await withVoidCallback(
(cb) => Engine_destroyColorGradingRenderThread(engine, cg.value, cb));
(requestId, cb) => Engine_destroyColorGradingRenderThread(engine, cg.value, requestId, cb));
}
await withVoidCallback(
(cb) => Engine_destroyViewRenderThread(engine, view.view, cb));
(requestId, cb) => Engine_destroyViewRenderThread(engine, view.view, requestId, cb));
for (final swapchain in _swapChains.keys) {
if (_swapChains[swapchain]!.contains(view)) {
_swapChains[swapchain]!.remove(view);
@@ -898,7 +902,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
Future destroyScene(covariant FFIScene scene) async {
await withVoidCallback(
(cb) => Engine_destroySceneRenderThread(engine, scene.scene, cb));
(requestId, cb) => Engine_destroySceneRenderThread(engine, scene.scene, requestId, cb));
}
Future<Pointer<TColorGrading>> createColorGrading(ToneMapper mapper) async {
@@ -1024,10 +1028,10 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
///
Future flush() async {
if (FILAMENT_SINGLE_THREADED) {
await withVoidCallback((cb) => Engine_executeRenderThread(engine, cb));
await withVoidCallback((requestId, cb) => Engine_executeRenderThread(engine, requestId, cb));
} else {
await withVoidCallback(
(cb) => Engine_flushAndWaitRenderThread(engine, cb));
(requestId, cb) => Engine_flushAndWaitRenderThread(engine, requestId, cb));
}
}

View File

@@ -18,8 +18,8 @@ class FFIMaterial extends Material {
}
Future destroy() async {
await withVoidCallback((cb) {
Engine_destroyMaterialRenderThread(app.engine, pointer, cb);
await withVoidCallback((requestId, cb) {
Engine_destroyMaterialRenderThread(app.engine, pointer, requestId, cb);
});
}
@@ -168,8 +168,8 @@ class FFIMaterialInstance extends MaterialInstance {
}
Future destroy() async {
await withVoidCallback((cb) {
Engine_destroyMaterialInstanceRenderThread(app.engine, this.pointer, cb);
await withVoidCallback((requestId, cb) {
Engine_destroyMaterialInstanceRenderThread(app.engine, this.pointer, requestId, cb);
});
}

View File

@@ -23,6 +23,6 @@ class FFIRenderTarget extends RenderTarget {
@override
Future destroy() async {
await withVoidCallback((cb) => RenderTarget_destroyRenderThread(app.engine, renderTarget, cb));
await withVoidCallback((requestId, cb) => RenderTarget_destroyRenderThread(app.engine, renderTarget, requestId, cb));
}
}

View File

@@ -30,8 +30,8 @@ class FFITexture extends Texture {
@override
Future<void> dispose() async {
await withVoidCallback((cb) {
Engine_destroyTextureRenderThread(_engine, pointer, cb);
await withVoidCallback((requestId, cb) {
Engine_destroyTextureRenderThread(_engine, pointer, requestId,cb);
});
}
@@ -183,8 +183,8 @@ class FFILinearImage extends LinearImage {
}
Future<void> destroy() async {
await withVoidCallback((cb) {
Image_destroyRenderThread(this.pointer, cb);
await withVoidCallback((requestId, cb) {
Image_destroyRenderThread(this.pointer, requestId, cb);
});
}
@@ -316,8 +316,8 @@ class FFITextureSampler extends TextureSampler {
// }
Future<void> setAnisotropy(double anisotropy) async {
await withVoidCallback((cb) {
TextureSampler_setAnisotropyRenderThread(pointer, anisotropy, cb);
await withVoidCallback((requestId,cb) {
TextureSampler_setAnisotropyRenderThread(pointer, anisotropy, requestId,cb);
});
}
@@ -334,8 +334,8 @@ class FFITextureSampler extends TextureSampler {
@override
Future dispose() async {
await withVoidCallback((cb) {
TextureSampler_destroyRenderThread(pointer, cb);
await withVoidCallback((requestId,cb) {
TextureSampler_destroyRenderThread(pointer, requestId,cb);
});
}
}

View File

@@ -113,8 +113,8 @@ class FFIView extends View {
@override
Future setBloom(bool enabled, double strength) async {
await withVoidCallback((cb) {
View_setBloomRenderThread(view, enabled, strength, cb);
await withVoidCallback((requestId,cb) {
View_setBloomRenderThread(view, enabled, strength, requestId,cb);
});
}

View File

@@ -116,14 +116,14 @@ class ThermionViewerFFI extends ThermionViewer {
///
@override
Future render() async {
await withVoidCallback((cb) =>
RenderTicker_renderRenderThread(app.renderTicker, 0.toBigInt, cb));
await withVoidCallback((requestId,cb) =>
RenderTicker_renderRenderThread(app.renderTicker, 0.toBigInt, requestId,cb));
if (FILAMENT_SINGLE_THREADED) {
await withVoidCallback(
(cb) => Engine_executeRenderThread(app.engine, cb));
(requestId,cb) => Engine_executeRenderThread(app.engine, requestId,cb));
} else {
await withVoidCallback(
(cb) => Engine_flushAndWaitRenderThread(app.engine, cb));
(requestId,cb) => Engine_flushAndWaitRenderThread(app.engine, requestId,cb));
}
}
@@ -301,7 +301,7 @@ class ThermionViewerFFI extends ThermionViewer {
if (skybox != null) {
await withVoidCallback(
(cb) => Engine_destroySkyboxRenderThread(app.engine, skybox!, cb));
(requestId,cb) => Engine_destroySkyboxRenderThread(app.engine, skybox!, requestId,cb));
skybox = null;
}
}
@@ -313,8 +313,8 @@ class ThermionViewerFFI extends ThermionViewer {
Future removeIbl() async {
if (indirectLight != null) {
Scene_setIndirectLight(scene.scene, nullptr);
await withVoidCallback((cb) => Engine_destroyIndirectLightRenderThread(
app.engine, indirectLight!, cb));
await withVoidCallback((requestId,cb) => Engine_destroyIndirectLightRenderThread(
app.engine, indirectLight!, requestId,cb));
indirectLight = null;
}
}