add NativeHandle interface and refactor SwapChain to use getNativeHandle
This commit is contained in:
@@ -145,7 +145,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
RenderTicker_setRenderable(
|
RenderTicker_setRenderable(
|
||||||
renderTicker, swapChain.swapChain, viewsPtr, numRenderable);
|
renderTicker, swapChain.getNativeHandle(), viewsPtr, numRenderable);
|
||||||
_logger.info("Updated render order, $numRenderable renderable views");
|
_logger.info("Updated render order, $numRenderable renderable views");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -223,7 +223,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
_logger.info("Destroying swapchain");
|
_logger.info("Destroying swapchain");
|
||||||
await withVoidCallback((requestId, callback) {
|
await withVoidCallback((requestId, callback) {
|
||||||
Engine_destroySwapChainRenderThread(
|
Engine_destroySwapChainRenderThread(
|
||||||
engine, (swapChain as FFISwapChain).swapChain, requestId, callback);
|
engine, swapChain.getNativeHandle(), requestId, callback);
|
||||||
});
|
});
|
||||||
_swapChains.remove(swapChain);
|
_swapChains.remove(swapChain);
|
||||||
_logger.info("Destroyed swapchain");
|
_logger.info("Destroyed swapchain");
|
||||||
@@ -575,7 +575,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
final view = _swapChains[swapchain]!.first;
|
final view = _swapChains[swapchain]!.first;
|
||||||
await withBoolCallback((cb) {
|
await withBoolCallback((cb) {
|
||||||
Renderer_beginFrameRenderThread(
|
Renderer_beginFrameRenderThread(
|
||||||
renderer, swapchain.swapChain, 0.toBigInt, cb);
|
renderer, swapchain.getNativeHandle(), 0.toBigInt, cb);
|
||||||
});
|
});
|
||||||
await withVoidCallback((requestId, cb) {
|
await withVoidCallback((requestId, cb) {
|
||||||
Renderer_renderRenderThread(
|
Renderer_renderRenderThread(
|
||||||
@@ -622,6 +622,13 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
await updateRenderOrder();
|
await updateRenderOrder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
Future<Iterable<SwapChain>> getSwapChains() async {
|
||||||
|
return _swapChains.keys;
|
||||||
|
}
|
||||||
|
|
||||||
final _hooks = <Future Function()>[];
|
final _hooks = <Future Function()>[];
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -756,7 +763,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
|
|
||||||
final beginFrame = await withBoolCallback((cb) {
|
final beginFrame = await withBoolCallback((cb) {
|
||||||
Renderer_beginFrameRenderThread(
|
Renderer_beginFrameRenderThread(
|
||||||
renderer, swapChain!.swapChain, 0.toBigInt, cb);
|
renderer, swapChain!.getNativeHandle(), 0.toBigInt, cb);
|
||||||
});
|
});
|
||||||
|
|
||||||
final pixelBuffers = <(View, Uint8List)>[];
|
final pixelBuffers = <(View, Uint8List)>[];
|
||||||
@@ -838,7 +845,7 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
|
|||||||
// synchronous, so we'll add a ~2 frame delay to wait for this to be available.
|
// synchronous, so we'll add a ~2 frame delay to wait for this to be available.
|
||||||
if (FILAMENT_SINGLE_THREADED) {
|
if (FILAMENT_SINGLE_THREADED) {
|
||||||
await withBoolCallback((cb) => Renderer_beginFrameRenderThread(
|
await withBoolCallback((cb) => Renderer_beginFrameRenderThread(
|
||||||
renderer, swapChain!.swapChain, 0.toBigInt, cb));
|
renderer, swapChain!.getNativeHandle(), 0.toBigInt, cb));
|
||||||
for (final view in views) {
|
for (final view in views) {
|
||||||
await withVoidCallback((requestId, cb) {
|
await withVoidCallback((requestId, cb) {
|
||||||
Renderer_renderRenderThread(
|
Renderer_renderRenderThread(
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
import 'package:thermion_dart/thermion_dart.dart';
|
import 'package:thermion_dart/thermion_dart.dart';
|
||||||
|
|
||||||
class FFISwapChain extends SwapChain {
|
class FFISwapChain extends SwapChain<Pointer> {
|
||||||
final Pointer<TSwapChain> swapChain;
|
|
||||||
|
final Pointer<TSwapChain> pointer;
|
||||||
|
|
||||||
FFISwapChain(this.swapChain);
|
T getNativeHandle<T>() => pointer as T;
|
||||||
|
|
||||||
|
FFISwapChain(this.pointer);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
/// A top-level interface for any object that need to be passed
|
||||||
|
/// across "native" boundaries (either via FFI or Javascript interop).
|
||||||
|
///
|
||||||
|
/// Currently, [T] must always be a [Pointer] (which is defined and implemented
|
||||||
|
/// differently depending on the target platform). However, T is unbounded so
|
||||||
|
/// this is never checked at compile-time (so getNativeHandle<Matrix4>() is
|
||||||
|
/// not a compile-time error).
|
||||||
|
///
|
||||||
|
abstract class NativeHandle<T> {
|
||||||
|
T getNativeHandle<T>();
|
||||||
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
abstract class SwapChain {
|
import 'native_handle.dart';
|
||||||
|
|
||||||
|
abstract class SwapChain<T> extends NativeHandle<T> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user