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(
|
||||
ThermionEntity entity, int primitiveIndex, MaterialInstance materialInstance);
|
||||
Future setMaterialInstanceAt(ThermionEntity entity, int primitiveIndex,
|
||||
MaterialInstance materialInstance);
|
||||
|
||||
///
|
||||
///
|
||||
@@ -216,6 +216,11 @@ abstract class FilamentApp<T> {
|
||||
///
|
||||
Future unregister(covariant SwapChain swapChain, covariant View view);
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
Future<Iterable<SwapChain>> getSwapChains();
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
|
||||
@@ -123,25 +123,29 @@ class ThermionViewerFFI extends ThermionViewer {
|
||||
///
|
||||
///
|
||||
@override
|
||||
Future render(SwapChain swapchain) async {
|
||||
await withBoolCallback(
|
||||
(cb) => Renderer_beginFrameRenderThread(
|
||||
app.renderer,
|
||||
(swapchain as FFISwapChain).swapChain,
|
||||
0.toBigInt,
|
||||
cb,
|
||||
),
|
||||
);
|
||||
Future render() async {
|
||||
final swapChains =
|
||||
await (FilamentApp.instance as FFIFilamentApp).getSwapChains();
|
||||
for (final swapChain in swapChains) {
|
||||
await withBoolCallback(
|
||||
(cb) => Renderer_beginFrameRenderThread(
|
||||
app.renderer,
|
||||
swapChain.getNativeHandle(),
|
||||
0.toBigInt,
|
||||
cb,
|
||||
),
|
||||
);
|
||||
|
||||
await withVoidCallback(
|
||||
(requestId, cb) =>
|
||||
Renderer_renderRenderThread(app.renderer, view.view, requestId, cb),
|
||||
);
|
||||
await withVoidCallback(
|
||||
(requestId, cb) =>
|
||||
Renderer_endFrameRenderThread(app.renderer, requestId, cb),
|
||||
);
|
||||
await FilamentApp.instance!.flush();
|
||||
await withVoidCallback(
|
||||
(requestId, cb) =>
|
||||
Renderer_renderRenderThread(app.renderer, view.view, requestId, cb),
|
||||
);
|
||||
await withVoidCallback(
|
||||
(requestId, cb) =>
|
||||
Renderer_endFrameRenderThread(app.renderer, requestId, cb),
|
||||
);
|
||||
await FilamentApp.instance!.flush();
|
||||
}
|
||||
}
|
||||
|
||||
double _msPerFrame = 1000.0 / 60.0;
|
||||
|
||||
@@ -39,9 +39,9 @@ abstract class ThermionViewer {
|
||||
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 {
|
||||
await testHelper.withViewer((viewer) async {
|
||||
await viewer.render();
|
||||
|
||||
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 Future.delayed(Duration(seconds: 1));
|
||||
await viewer.setRendering(true);
|
||||
|
||||
await Future.delayed(Duration(seconds: 1));
|
||||
await FilamentApp.instance!.requestFrame();
|
||||
await testHelper.capture(viewer.view, "render_thread_2");
|
||||
});
|
||||
}, addSkybox: true);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user