rename web interop classes
This commit is contained in:
@@ -0,0 +1,118 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
import 'dart:js_interop';
|
||||||
|
import 'package:thermion_dart/thermion_dart/compatibility/web/interop.dart';
|
||||||
|
|
||||||
|
import "allocator.dart";
|
||||||
|
|
||||||
|
export "allocator.dart";
|
||||||
|
export "thermion_dart.g.dart";
|
||||||
|
|
||||||
|
export 'package:ffi/ffi.dart' hide StringUtf8Pointer, Utf8Pointer;
|
||||||
|
export 'dart:ffi'
|
||||||
|
hide
|
||||||
|
Uint8Pointer,
|
||||||
|
FloatPointer,
|
||||||
|
DoublePointer,
|
||||||
|
Int32Pointer,
|
||||||
|
Int64Pointer,
|
||||||
|
PointerPointer,
|
||||||
|
Allocator;
|
||||||
|
|
||||||
|
const allocator = Allocator();
|
||||||
|
|
||||||
|
@AbiSpecificIntegerMapping({
|
||||||
|
Abi.androidArm: Uint8(),
|
||||||
|
Abi.androidArm64: Uint8(),
|
||||||
|
Abi.androidIA32: Int8(),
|
||||||
|
Abi.androidX64: Int8(),
|
||||||
|
Abi.androidRiscv64: Uint8(),
|
||||||
|
Abi.fuchsiaArm64: Uint8(),
|
||||||
|
Abi.fuchsiaX64: Int8(),
|
||||||
|
Abi.fuchsiaRiscv64: Uint8(),
|
||||||
|
Abi.iosArm: Int8(),
|
||||||
|
Abi.iosArm64: Int8(),
|
||||||
|
Abi.iosX64: Int8(),
|
||||||
|
Abi.linuxArm: Uint8(),
|
||||||
|
Abi.linuxArm64: Uint8(),
|
||||||
|
Abi.linuxIA32: Int8(),
|
||||||
|
Abi.linuxX64: Int8(),
|
||||||
|
Abi.linuxRiscv32: Uint8(),
|
||||||
|
Abi.linuxRiscv64: Uint8(),
|
||||||
|
Abi.macosArm64: Int8(),
|
||||||
|
Abi.macosX64: Int8(),
|
||||||
|
Abi.windowsArm64: Int8(),
|
||||||
|
Abi.windowsIA32: Int8(),
|
||||||
|
Abi.windowsX64: Int8(),
|
||||||
|
})
|
||||||
|
final class FooChar extends AbiSpecificInteger {
|
||||||
|
const FooChar();
|
||||||
|
}
|
||||||
|
|
||||||
|
class Compatibility {
|
||||||
|
final _foo = FooChar();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> withVoidCallback(
|
||||||
|
Function(Pointer<NativeFunction<Void Function()>>) func) async {
|
||||||
|
JSArray retVal = createVoidCallback();
|
||||||
|
var promise = retVal.toDart[0] as JSPromise<JSNumber>;
|
||||||
|
var fnPtrAddress = retVal.toDart[1] as JSNumber;
|
||||||
|
var fnPtr = Pointer<NativeFunction<Void Function()>>.fromAddress(
|
||||||
|
fnPtrAddress.toDartInt);
|
||||||
|
func(fnPtr);
|
||||||
|
await promise.toDart;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<int> withVoidPointerCallback(
|
||||||
|
void Function(Pointer<NativeFunction<Void Function(Pointer<Void>)>>)
|
||||||
|
func) async {
|
||||||
|
JSArray retVal = createVoidPointerCallback();
|
||||||
|
var promise = retVal.toDart[0] as JSPromise<JSNumber>;
|
||||||
|
|
||||||
|
var fnPtrAddress = retVal.toDart[1] as JSNumber;
|
||||||
|
var fnPtr = Pointer<NativeFunction<Void Function(Pointer<Void>)>>.fromAddress(
|
||||||
|
fnPtrAddress.toDartInt);
|
||||||
|
func(fnPtr);
|
||||||
|
final addr = await promise.toDart;
|
||||||
|
return addr.toDartInt;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> withBoolCallback(
|
||||||
|
Function(Pointer<NativeFunction<Void Function(Bool)>>) func) async {
|
||||||
|
JSArray retVal = createBoolCallback();
|
||||||
|
var promise = retVal.toDart[0] as JSPromise<JSBoolean>;
|
||||||
|
|
||||||
|
var fnPtrAddress = retVal.toDart[1] as JSNumber;
|
||||||
|
var fnPtr = Pointer<NativeFunction<Void Function(Bool)>>.fromAddress(
|
||||||
|
fnPtrAddress.toDartInt);
|
||||||
|
func(fnPtr);
|
||||||
|
final addr = await promise.toDart;
|
||||||
|
return addr.toDart;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<int> withIntCallback(
|
||||||
|
Function(Pointer<NativeFunction<Void Function(Int32)>>) func) async {
|
||||||
|
JSArray retVal = createBoolCallback();
|
||||||
|
var promise = retVal.toDart[0] as JSPromise<JSNumber>;
|
||||||
|
|
||||||
|
var fnPtrAddress = retVal.toDart[1] as JSNumber;
|
||||||
|
var fnPtr = Pointer<NativeFunction<Void Function(Int32)>>.fromAddress(
|
||||||
|
fnPtrAddress.toDartInt);
|
||||||
|
func(fnPtr);
|
||||||
|
final addr = await promise.toDart;
|
||||||
|
return addr.toDartInt;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> withCharPtrCallback(
|
||||||
|
Function(Pointer<NativeFunction<Void Function(Pointer<Char>)>>)
|
||||||
|
func) async {
|
||||||
|
JSArray retVal = createVoidPointerCallback();
|
||||||
|
var promise = retVal.toDart[0] as JSPromise<JSNumber>;
|
||||||
|
|
||||||
|
var fnPtrAddress = retVal.toDart[1] as JSNumber;
|
||||||
|
var fnPtr = Pointer<NativeFunction<Void Function(Pointer<Char>)>>.fromAddress(
|
||||||
|
fnPtrAddress.toDartInt);
|
||||||
|
func(fnPtr);
|
||||||
|
final addr = await promise.toDart;
|
||||||
|
return Pointer<Utf8>.fromAddress(addr.toDartInt).toDartString();
|
||||||
|
}
|
||||||
@@ -20,14 +20,14 @@ import 'package:vector_math/vector_math_64.dart';
|
|||||||
/// the browser console).
|
/// the browser console).
|
||||||
///
|
///
|
||||||
@JSExport()
|
@JSExport()
|
||||||
class ThermionViewerFFIJSDartBridge {
|
class ThermionViewerJSDartBridge {
|
||||||
final ThermionViewer viewer;
|
final ThermionViewer viewer;
|
||||||
|
|
||||||
ThermionViewerFFIJSDartBridge(this.viewer);
|
ThermionViewerJSDartBridge(this.viewer);
|
||||||
|
|
||||||
void bind(
|
void bind(
|
||||||
{String globalPropertyName = "filamentViewer"}) {
|
{String globalPropertyName = "filamentViewer"}) {
|
||||||
var wrapper = createJSInteropWrapper<ThermionViewerFFIJSDartBridge>(this)
|
var wrapper = createJSInteropWrapper<ThermionViewerJSDartBridge>(this)
|
||||||
as ThermionViewerJSShim;
|
as ThermionViewerJSShim;
|
||||||
globalContext.setProperty(globalPropertyName.toJS, wrapper);
|
globalContext.setProperty(globalPropertyName.toJS, wrapper);
|
||||||
}
|
}
|
||||||
@@ -14,15 +14,15 @@ import 'shims/thermion_viewer_js_shim.dart';
|
|||||||
/// An [ThermionViewer] implementation that forwards calls to
|
/// An [ThermionViewer] implementation that forwards calls to
|
||||||
/// a corresponding Javascript shim implementation (see [ThermionViewerJSShim]).
|
/// a corresponding Javascript shim implementation (see [ThermionViewerJSShim]).
|
||||||
///
|
///
|
||||||
class ThermionViewerFFIJS implements ThermionViewer {
|
class ThermionViewerJS implements ThermionViewer {
|
||||||
late final ThermionViewerJSShim _shim;
|
late final ThermionViewerJSShim _shim;
|
||||||
|
|
||||||
ThermionViewerFFIJS.fromGlobalProperty(String globalPropertyName) {
|
ThermionViewerJS.fromGlobalProperty(String globalPropertyName) {
|
||||||
this._shim = globalContext.getProperty(globalPropertyName.toJS)
|
this._shim = globalContext.getProperty(globalPropertyName.toJS)
|
||||||
as ThermionViewerJSShim;
|
as ThermionViewerJSShim;
|
||||||
}
|
}
|
||||||
|
|
||||||
ThermionViewerFFIJS(this._shim);
|
ThermionViewerJS(this._shim);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> get initialized async {
|
Future<bool> get initialized async {
|
||||||
@@ -34,20 +34,19 @@ extension type _EmscriptenModule(JSObject _) implements JSObject {
|
|||||||
/// An [ThermionViewer] implementation that forwards calls to
|
/// An [ThermionViewer] implementation that forwards calls to
|
||||||
/// the (Emscripten-generated) ThermionDart JS module.
|
/// the (Emscripten-generated) ThermionDart JS module.
|
||||||
///
|
///
|
||||||
class ThermionViewerFFIWasm implements ThermionViewer {
|
class ThermionViewerWasm implements ThermionViewer {
|
||||||
late _EmscriptenModule _module;
|
late _EmscriptenModule _module;
|
||||||
|
|
||||||
bool _initialized = false;
|
bool _initialized = false;
|
||||||
bool _rendering = false;
|
bool _rendering = false;
|
||||||
|
|
||||||
ThermionViewerFFIWasm() {
|
ThermionViewerWasm({String moduleName="thermion_dart"}) {
|
||||||
_module = window.getProperty<_EmscriptenModule>("df".toJS);
|
_module = window.getProperty<_EmscriptenModule>(moduleName.toJS);
|
||||||
}
|
}
|
||||||
|
|
||||||
JSBigInt? _viewer;
|
JSNumber? _viewer;
|
||||||
JSBigInt? _sceneManager;
|
JSNumber? _sceneManager;
|
||||||
|
|
||||||
@override
|
|
||||||
Future initialize(int width, int height, {String? uberArchivePath}) async {
|
Future initialize(int width, int height, {String? uberArchivePath}) async {
|
||||||
final context = _module.ccall("thermion_dart_web_create_gl_context", "int",
|
final context = _module.ccall("thermion_dart_web_create_gl_context", "int",
|
||||||
<JSString>[].toJS, <JSAny>[].toJS, null);
|
<JSString>[].toJS, <JSAny>[].toJS, null);
|
||||||
@@ -62,11 +61,11 @@ class ThermionViewerFFIWasm implements ThermionViewer {
|
|||||||
"void*",
|
"void*",
|
||||||
["void*".toJS, "void*".toJS, "void*".toJS, "string".toJS].toJS,
|
["void*".toJS, "void*".toJS, "void*".toJS, "string".toJS].toJS,
|
||||||
[context, loader, null, uberArchivePath?.toJS].toJS,
|
[context, loader, null, uberArchivePath?.toJS].toJS,
|
||||||
null) as JSBigInt;
|
null) as JSNumber;
|
||||||
await createSwapChain(width, height);
|
await createSwapChain(width, height);
|
||||||
_updateViewportAndCameraProjection(width, height, 1.0);
|
_updateViewportAndCameraProjection(width, height, 1.0);
|
||||||
_sceneManager = _module.ccall("get_scene_manager", "void*",
|
_sceneManager = _module.ccall("get_scene_manager", "void*",
|
||||||
["void*".toJS].toJS, [_viewer!].toJS, null) as JSBigInt;
|
["void*".toJS].toJS, [_viewer!].toJS, null) as JSNumber;
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user