start migrating from covariant (for FFIAsset) to getNativeHandle()
This commit is contained in:
@@ -8,6 +8,7 @@ import 'package:thermion_dart/src/filament/src/implementation/ffi_texture.dart';
|
|||||||
import 'package:thermion_dart/thermion_dart.dart';
|
import 'package:thermion_dart/thermion_dart.dart';
|
||||||
|
|
||||||
class BackgroundImage extends ThermionAsset {
|
class BackgroundImage extends ThermionAsset {
|
||||||
|
|
||||||
final ThermionAsset asset;
|
final ThermionAsset asset;
|
||||||
|
|
||||||
ThermionEntity get entity => asset.entity;
|
ThermionEntity get entity => asset.entity;
|
||||||
@@ -307,13 +308,11 @@ class BackgroundImage extends ThermionAsset {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future removeAnimationComponent() {
|
Future removeAnimationComponent() {
|
||||||
// TODO: implement removeAnimationComponent
|
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future resetBones() {
|
Future resetBones() {
|
||||||
// TODO: implement resetBones
|
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,7 +320,6 @@ class BackgroundImage extends ThermionAsset {
|
|||||||
Future setBoneTransform(
|
Future setBoneTransform(
|
||||||
ThermionEntity entity, int boneIndex, Matrix4 transform,
|
ThermionEntity entity, int boneIndex, Matrix4 transform,
|
||||||
{int skinIndex = 0}) {
|
{int skinIndex = 0}) {
|
||||||
// TODO: implement setBoneTransform
|
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:animation_tools_dart/animation_tools_dart.dart';
|
import 'package:animation_tools_dart/animation_tools_dart.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:thermion_dart/src/utils/src/matrix.dart';
|
import 'package:thermion_dart/src/utils/src/matrix.dart';
|
||||||
@@ -7,6 +9,10 @@ import 'package:thermion_dart/thermion_dart.dart';
|
|||||||
import 'package:vector_math/vector_math_64.dart' as v64;
|
import 'package:vector_math/vector_math_64.dart' as v64;
|
||||||
|
|
||||||
class FFIAsset extends ThermionAsset {
|
class FFIAsset extends ThermionAsset {
|
||||||
|
T getHandle<T>() {
|
||||||
|
return asset as T;
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@@ -190,11 +196,6 @@ class FFIAsset extends ThermionAsset {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
|
||||||
///
|
|
||||||
///
|
|
||||||
ThermionAsset? boundingBoxAsset;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@@ -226,143 +227,6 @@ class FFIAsset extends ThermionAsset {
|
|||||||
return boundingBox;
|
return boundingBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
|
||||||
///
|
|
||||||
///
|
|
||||||
Future<ThermionAsset> createBoundingBoxAsset() async {
|
|
||||||
if (boundingBoxAsset == null) {
|
|
||||||
final boundingBox = await SceneAsset_getBoundingBox(asset);
|
|
||||||
|
|
||||||
final min = [
|
|
||||||
boundingBox.centerX - boundingBox.halfExtentX,
|
|
||||||
boundingBox.centerY - boundingBox.halfExtentY,
|
|
||||||
boundingBox.centerZ - boundingBox.halfExtentZ
|
|
||||||
];
|
|
||||||
final max = [
|
|
||||||
boundingBox.centerX + boundingBox.halfExtentX,
|
|
||||||
boundingBox.centerY + boundingBox.halfExtentY,
|
|
||||||
boundingBox.centerZ + boundingBox.halfExtentZ
|
|
||||||
];
|
|
||||||
|
|
||||||
// Create vertices for the bounding box wireframe
|
|
||||||
// 8 vertices for a cube
|
|
||||||
final vertices = Float32List(8 * 3);
|
|
||||||
|
|
||||||
// Bottom vertices
|
|
||||||
vertices[0] = min[0];
|
|
||||||
vertices[1] = min[1];
|
|
||||||
vertices[2] = min[2]; // v0
|
|
||||||
vertices[3] = max[0];
|
|
||||||
vertices[4] = min[1];
|
|
||||||
vertices[5] = min[2]; // v1
|
|
||||||
vertices[6] = max[0];
|
|
||||||
vertices[7] = min[1];
|
|
||||||
vertices[8] = max[2]; // v2
|
|
||||||
vertices[9] = min[0];
|
|
||||||
vertices[10] = min[1];
|
|
||||||
vertices[11] = max[2]; // v3
|
|
||||||
|
|
||||||
// Top vertices
|
|
||||||
vertices[12] = min[0];
|
|
||||||
vertices[13] = max[1];
|
|
||||||
vertices[14] = min[2]; // v4
|
|
||||||
vertices[15] = max[0];
|
|
||||||
vertices[16] = max[1];
|
|
||||||
vertices[17] = min[2]; // v5
|
|
||||||
vertices[18] = max[0];
|
|
||||||
vertices[19] = max[1];
|
|
||||||
vertices[20] = max[2]; // v6
|
|
||||||
vertices[21] = min[0];
|
|
||||||
vertices[22] = max[1];
|
|
||||||
vertices[23] = max[2]; // v7
|
|
||||||
|
|
||||||
// Indices for lines (24 indices for 12 lines)
|
|
||||||
final indices = Uint16List.fromList([
|
|
||||||
// Bottom face
|
|
||||||
0, 1, 1, 2, 2, 3, 3, 0,
|
|
||||||
// Top face
|
|
||||||
4, 5, 5, 6, 6, 7, 7, 4,
|
|
||||||
// Vertical edges
|
|
||||||
0, 4, 1, 5, 2, 6, 3, 7
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Create unlit material instance for the wireframe
|
|
||||||
final materialInstancePtr =
|
|
||||||
await withPointerCallback<TMaterialInstance>((cb) {
|
|
||||||
MaterialProvider_createMaterialInstanceRenderThread(
|
|
||||||
app.ubershaderMaterialProvider,
|
|
||||||
false,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
cb);
|
|
||||||
});
|
|
||||||
|
|
||||||
final material = FFIMaterialInstance(materialInstancePtr, app);
|
|
||||||
await material.setParameterFloat4(
|
|
||||||
"baseColorFactor", 1.0, 1.0, 0.0, 1.0); // Yellow wireframe
|
|
||||||
|
|
||||||
// Create geometry for the bounding box
|
|
||||||
final geometry = Geometry(
|
|
||||||
vertices,
|
|
||||||
indices,
|
|
||||||
primitiveType: PrimitiveType.LINES,
|
|
||||||
);
|
|
||||||
|
|
||||||
boundingBoxAsset = await FilamentApp.instance!.createGeometry(
|
|
||||||
geometry,
|
|
||||||
animationManager,
|
|
||||||
materialInstances: [material],
|
|
||||||
keepData: false,
|
|
||||||
) as FFIAsset;
|
|
||||||
|
|
||||||
await boundingBoxAsset!.setCastShadows(false);
|
|
||||||
await boundingBoxAsset!.setReceiveShadows(false);
|
|
||||||
|
|
||||||
TransformManager_setParent(Engine_getTransformManager(app.engine),
|
|
||||||
boundingBoxAsset!.entity, entity, false);
|
|
||||||
geometry.uvs?.free();
|
|
||||||
geometry.normals?.free();
|
|
||||||
geometry.vertices.free();
|
|
||||||
geometry.indices.free();
|
|
||||||
}
|
|
||||||
return boundingBoxAsset!;
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ class FFIScene extends Scene {
|
|||||||
FFIScene(this.scene);
|
FFIScene(this.scene);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future add(covariant FFIAsset asset) async {
|
Future add(ThermionAsset asset) async {
|
||||||
SceneAsset_addToScene(asset.asset, scene);
|
SceneAsset_addToScene(asset.getHandle(), scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
@@ -30,8 +30,8 @@ class FFIScene extends Scene {
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
@override
|
@override
|
||||||
Future remove(covariant FFIAsset asset) async {
|
Future remove(ThermionAsset asset) async {
|
||||||
SceneAsset_removeFromScene(asset.asset, scene);
|
SceneAsset_removeFromScene(asset.getHandle(), scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ abstract class Scene {
|
|||||||
/// Removes all renderable entities in [asset] from this scene.
|
/// Removes all renderable entities in [asset] from this scene.
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
Future remove(covariant ThermionAsset asset);
|
Future remove(ThermionAsset asset);
|
||||||
|
|
||||||
/// Removes [entity] from this scene.
|
/// Removes [entity] from this scene.
|
||||||
///
|
///
|
||||||
|
|||||||
Reference in New Issue
Block a user