don't require SwapChain to be passed to viewer.render - this will just render into all registered swapchains
This commit is contained in:
@@ -203,8 +203,8 @@ abstract class FilamentApp<T> {
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
Future setMaterialInstanceAt(
|
Future setMaterialInstanceAt(ThermionEntity entity, int primitiveIndex,
|
||||||
ThermionEntity entity, int primitiveIndex, MaterialInstance materialInstance);
|
MaterialInstance materialInstance);
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@@ -216,6 +216,11 @@ abstract class FilamentApp<T> {
|
|||||||
///
|
///
|
||||||
Future unregister(covariant SwapChain swapChain, covariant View view);
|
Future unregister(covariant SwapChain swapChain, covariant View view);
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
Future<Iterable<SwapChain>> getSwapChains();
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -123,25 +123,29 @@ class ThermionViewerFFI extends ThermionViewer {
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
@override
|
@override
|
||||||
Future render(SwapChain swapchain) async {
|
Future render() async {
|
||||||
await withBoolCallback(
|
final swapChains =
|
||||||
(cb) => Renderer_beginFrameRenderThread(
|
await (FilamentApp.instance as FFIFilamentApp).getSwapChains();
|
||||||
app.renderer,
|
for (final swapChain in swapChains) {
|
||||||
(swapchain as FFISwapChain).swapChain,
|
await withBoolCallback(
|
||||||
0.toBigInt,
|
(cb) => Renderer_beginFrameRenderThread(
|
||||||
cb,
|
app.renderer,
|
||||||
),
|
swapChain.getNativeHandle(),
|
||||||
);
|
0.toBigInt,
|
||||||
|
cb,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
await withVoidCallback(
|
await withVoidCallback(
|
||||||
(requestId, cb) =>
|
(requestId, cb) =>
|
||||||
Renderer_renderRenderThread(app.renderer, view.view, requestId, cb),
|
Renderer_renderRenderThread(app.renderer, view.view, requestId, cb),
|
||||||
);
|
);
|
||||||
await withVoidCallback(
|
await withVoidCallback(
|
||||||
(requestId, cb) =>
|
(requestId, cb) =>
|
||||||
Renderer_endFrameRenderThread(app.renderer, requestId, cb),
|
Renderer_endFrameRenderThread(app.renderer, requestId, cb),
|
||||||
);
|
);
|
||||||
await FilamentApp.instance!.flush();
|
await FilamentApp.instance!.flush();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double _msPerFrame = 1000.0 / 60.0;
|
double _msPerFrame = 1000.0 / 60.0;
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ abstract class ThermionViewer {
|
|||||||
Future setRendering(bool render);
|
Future setRendering(bool render);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Render a single frame immediately.
|
/// Render a single frame immediately into all registered swapchains.
|
||||||
///
|
///
|
||||||
Future render(SwapChain swapChain);
|
Future render();
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -13,20 +13,11 @@ void main() async {
|
|||||||
test("request frame on render thread", () async {
|
test("request frame on render thread", () async {
|
||||||
await testHelper.withViewer((viewer) async {
|
await testHelper.withViewer((viewer) async {
|
||||||
await viewer.render();
|
await viewer.render();
|
||||||
|
await Future.delayed(Duration(seconds: 1));
|
||||||
await Future.delayed(Duration(milliseconds: 1));
|
|
||||||
|
|
||||||
// var data = viewer.metalTexture.getTextureBytes()!;
|
|
||||||
// var pixels = data.bytes.cast<Uint8>().asTypedList(data.length);
|
|
||||||
|
|
||||||
// savePixelBufferToBmp(
|
|
||||||
// pixels, 500, 500, "${testHelper.testDir}/request_frame.bmp");
|
|
||||||
|
|
||||||
await viewer.setRendering(true);
|
await viewer.setRendering(true);
|
||||||
|
|
||||||
await Future.delayed(Duration(seconds: 1));
|
await Future.delayed(Duration(seconds: 1));
|
||||||
await FilamentApp.instance!.requestFrame();
|
await FilamentApp.instance!.requestFrame();
|
||||||
await testHelper.capture(viewer.view, "render_thread_2");
|
await testHelper.capture(viewer.view, "render_thread_2");
|
||||||
});
|
}, addSkybox: true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user