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).
|
||||
///
|
||||
@JSExport()
|
||||
class ThermionViewerFFIJSDartBridge {
|
||||
class ThermionViewerJSDartBridge {
|
||||
final ThermionViewer viewer;
|
||||
|
||||
ThermionViewerFFIJSDartBridge(this.viewer);
|
||||
ThermionViewerJSDartBridge(this.viewer);
|
||||
|
||||
void bind(
|
||||
{String globalPropertyName = "filamentViewer"}) {
|
||||
var wrapper = createJSInteropWrapper<ThermionViewerFFIJSDartBridge>(this)
|
||||
var wrapper = createJSInteropWrapper<ThermionViewerJSDartBridge>(this)
|
||||
as ThermionViewerJSShim;
|
||||
globalContext.setProperty(globalPropertyName.toJS, wrapper);
|
||||
}
|
||||
@@ -14,15 +14,15 @@ import 'shims/thermion_viewer_js_shim.dart';
|
||||
/// An [ThermionViewer] implementation that forwards calls to
|
||||
/// a corresponding Javascript shim implementation (see [ThermionViewerJSShim]).
|
||||
///
|
||||
class ThermionViewerFFIJS implements ThermionViewer {
|
||||
class ThermionViewerJS implements ThermionViewer {
|
||||
late final ThermionViewerJSShim _shim;
|
||||
|
||||
ThermionViewerFFIJS.fromGlobalProperty(String globalPropertyName) {
|
||||
ThermionViewerJS.fromGlobalProperty(String globalPropertyName) {
|
||||
this._shim = globalContext.getProperty(globalPropertyName.toJS)
|
||||
as ThermionViewerJSShim;
|
||||
}
|
||||
|
||||
ThermionViewerFFIJS(this._shim);
|
||||
ThermionViewerJS(this._shim);
|
||||
|
||||
@override
|
||||
Future<bool> get initialized async {
|
||||
@@ -34,20 +34,19 @@ extension type _EmscriptenModule(JSObject _) implements JSObject {
|
||||
/// An [ThermionViewer] implementation that forwards calls to
|
||||
/// the (Emscripten-generated) ThermionDart JS module.
|
||||
///
|
||||
class ThermionViewerFFIWasm implements ThermionViewer {
|
||||
class ThermionViewerWasm implements ThermionViewer {
|
||||
late _EmscriptenModule _module;
|
||||
|
||||
bool _initialized = false;
|
||||
bool _rendering = false;
|
||||
|
||||
ThermionViewerFFIWasm() {
|
||||
_module = window.getProperty<_EmscriptenModule>("df".toJS);
|
||||
ThermionViewerWasm({String moduleName="thermion_dart"}) {
|
||||
_module = window.getProperty<_EmscriptenModule>(moduleName.toJS);
|
||||
}
|
||||
|
||||
JSBigInt? _viewer;
|
||||
JSBigInt? _sceneManager;
|
||||
JSNumber? _viewer;
|
||||
JSNumber? _sceneManager;
|
||||
|
||||
@override
|
||||
Future initialize(int width, int height, {String? uberArchivePath}) async {
|
||||
final context = _module.ccall("thermion_dart_web_create_gl_context", "int",
|
||||
<JSString>[].toJS, <JSAny>[].toJS, null);
|
||||
@@ -62,11 +61,11 @@ class ThermionViewerFFIWasm implements ThermionViewer {
|
||||
"void*",
|
||||
["void*".toJS, "void*".toJS, "void*".toJS, "string".toJS].toJS,
|
||||
[context, loader, null, uberArchivePath?.toJS].toJS,
|
||||
null) as JSBigInt;
|
||||
null) as JSNumber;
|
||||
await createSwapChain(width, height);
|
||||
_updateViewportAndCameraProjection(width, height, 1.0);
|
||||
_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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user