feat! js_interop improvements

This commit is contained in:
Nick Fisher
2025-05-07 17:06:38 +08:00
parent 63e2dcd0ca
commit 2f16908992
159 changed files with 12989 additions and 8377 deletions

View File

@@ -1,30 +0,0 @@
import 'dart:ffi';
import 'dart:io';
import 'package:ffi/ffi.dart';
import '../../viewer/src/ffi/src/thermion_dart.g.dart';
class DartResourceLoader {
static final _assets = <int, Pointer>{};
static void loadResource(Pointer<Char> uri, Pointer<ResourceBuffer> out) {
try {
var data = File(uri.cast<Utf8>().toDartString().replaceAll("file://", ""))
.readAsBytesSync();
var ptr = calloc<Uint8>(data.lengthInBytes);
ptr.asTypedList(data.lengthInBytes).setRange(0, data.lengthInBytes, data);
out.ref.data = ptr.cast<Void>();
out.ref.size = data.lengthInBytes;
out.ref.id = _assets.length;
_assets[out.ref.id] = ptr;
} catch (err) {
print(err);
out.ref.size = -1;
}
}
static void freeResource(ResourceBuffer rb) {
calloc.free(_assets[rb.id]!);
}
}

View File

@@ -1,13 +1,11 @@
import 'dart:math';
import 'dart:typed_data';
import 'dart:math' ;
import '../../../thermion_dart.dart';
class GeometryHelper {
static Geometry fullscreenQuad() {
final vertices =
Float32List.fromList([-1.0, -1.0, 1.0, 3.0, -1.0, 1.0, -1.0, 3.0, 1.0]);
final indices = [0, 1, 2];
final vertices = Float32List.fromList([-1.0, -1.0, 1.0, 3.0, -1.0, 1.0, -1.0, 3.0, 1.0]);
final indices = Uint16List.fromList([0, 1, 2]);
return Geometry(vertices, indices);
}
@@ -56,7 +54,7 @@ class GeometryHelper {
Float32List? _normals = normals ? Float32List.fromList(normalsList) : null;
Float32List? _uvs = uvs ? Float32List.fromList(uvsList) : null;
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
return Geometry(vertices, Uint16List.fromList(indices), normals: _normals, uvs: _uvs);
}
static Geometry cube(
@@ -236,7 +234,7 @@ class GeometryHelper {
20, 21, 22, 20, 22, 23 // 4,0,3,4,3,7
];
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
return Geometry(vertices, Uint16List.fromList(indices), normals: _normals, uvs: _uvs);
}
// Helper function to flip the Y coordinate of UV coordinates (y = 1.0 - y)
@@ -316,7 +314,7 @@ class GeometryHelper {
Float32List? _normals = normals ? Float32List.fromList(normalsList) : null;
Float32List? _uvs = uvs ? Float32List.fromList(uvsList) : null;
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
return Geometry(vertices, Uint16List.fromList(indices), normals: _normals, uvs: _uvs);
}
static Geometry conic(
@@ -440,7 +438,7 @@ class GeometryHelper {
Float32List? _normals = normals ? Float32List.fromList(normalsList) : null;
Float32List? _uvs = uvs ? Float32List.fromList(uvsList) : null;
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
return Geometry(vertices, Uint16List.fromList(indices), normals: _normals, uvs: _uvs);
}
static Geometry plane(
@@ -493,14 +491,14 @@ class GeometryHelper {
])
: null;
List<int> indices = [
final indices = Uint16List.fromList([
0,
1,
2,
0,
2,
3,
];
]);
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
}
@@ -640,7 +638,7 @@ class GeometryHelper {
Float32List? _normals = normals ? Float32List.fromList(normalsList) : null;
Float32List? _uvs = uvs ? Float32List.fromList(uvsList) : null;
return Geometry(vertices, indices,
return Geometry(vertices, Uint16List.fromList(indices),
normals: _normals, uvs: _uvs, primitiveType: PrimitiveType.LINES);
}
@@ -794,7 +792,7 @@ class GeometryHelper {
])
: null;
final indices = [
final indices = Uint16List.fromList([
// Front face
0, 1, 2, 0, 2, 3,
// Back face
@@ -807,7 +805,7 @@ class GeometryHelper {
16, 17, 18, 16, 18, 19,
// Left face
20, 21, 22, 20, 22, 23
];
]);
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
}
@@ -865,7 +863,7 @@ class GeometryHelper {
: null;
// Define indices for triangular faces
List<int> indices = [
Uint16List indices = Uint16List.fromList([
// Bottom face (rectangle)
0, 1, 2,
0, 2, 3,
@@ -883,7 +881,7 @@ class GeometryHelper {
// Back rectangular face
2, 3, 4,
2, 4, 5,
];
]);
return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
}

View File

@@ -1,6 +1,7 @@
import 'dart:math';
import 'dart:typed_data';
import 'package:image/image.dart' as img;
import 'package:thermion_dart/thermion_dart.dart';
Future<Uint8List> pixelBufferToBmp(Uint8List pixelBuffer, int width, int height,
{bool hasAlpha = true, bool isFloat = false}) async {

View File

@@ -1,9 +1,8 @@
// Helper function to convert double4x4 to Matrix4
import 'package:thermion_dart/src/viewer/src/ffi/src/thermion_dart.g.dart';
import 'package:thermion_dart/src/bindings/bindings.dart';
import 'package:vector_math/vector_math_64.dart';
import 'dart:ffi';
Matrix4 double4x4ToMatrix4(double4x4 mat) {
return Matrix4.fromList([
mat.col1[0],
mat.col1[1],
@@ -26,12 +25,16 @@ Matrix4 double4x4ToMatrix4(double4x4 mat) {
double4x4 matrix4ToDouble4x4(Matrix4 mat) {
final out = Struct.create<double4x4>();
Array<Float64> col1 =out.col1;
Array<Float64> col2 = out.col2;
Array<Float64> col3 =out.col3;
Array<Float64> col4= out.col4;
for (int i = 0; i < 4; i++) {
out.col1[i] = mat.storage[i];
out.col2[i] = mat.storage[i + 4];
out.col3[i] = mat.storage[i + 8];
out.col4[i] = mat.storage[i + 12];
col1[i] = mat.storage[i];
col2[i] = mat.storage[i + 4];
col3[i] = mat.storage[i + 8];
col4[i] = mat.storage[i + 12];
}
return out;

View File

@@ -1,9 +1,9 @@
import 'dart:io';
import 'dart:typed_data';
import 'package:thermion_dart/src/viewer/src/ffi/src/ffi_render_target.dart';
import 'package:thermion_dart/src/viewer/src/ffi/src/ffi_scene.dart';
import 'package:thermion_dart/src/viewer/src/ffi/src/ffi_view.dart';
import 'package:thermion_dart/src/filament/src/implementation/ffi_render_target.dart';
import 'package:thermion_dart/src/filament/src/implementation/ffi_scene.dart';
import 'package:thermion_dart/src/filament/src/implementation/ffi_view.dart';
import 'package:thermion_dart/thermion_dart.dart';
class TextureProjection {