use getNativeHandle for MaterialInstance

This commit is contained in:
Nick Fisher
2025-06-27 09:36:20 +08:00
parent ceba3915a7
commit bc392bd933
3 changed files with 10 additions and 4 deletions

View File

@@ -321,7 +321,7 @@ class FFIAsset extends ThermionAsset {
///
///
@override
Future setMaterialInstanceAt(FFIMaterialInstance instance,
Future setMaterialInstanceAt(MaterialInstance instance,
{int? entity = null, int primitiveIndex = 0}) async {
if (entity != null &&
!RenderableManager_isRenderable(app.renderableManager, entity)) {
@@ -350,7 +350,7 @@ class FFIAsset extends ThermionAsset {
Engine_getRenderableManager(app.engine),
entity,
primitiveIndex,
instance.pointer)) {
instance.getNativeHandle())) {
_logger.warning(
"Failed to set material instance for entity $entity at primitive index ${primitiveIndex}");
}

View File

@@ -30,7 +30,7 @@ class FFIMaterial extends Material {
}
}
class FFIMaterialInstance extends MaterialInstance {
class FFIMaterialInstance extends MaterialInstance<Pointer<TMaterialInstance>> {
final Pointer<TMaterialInstance> pointer;
final FFIFilamentApp app;
@@ -198,6 +198,11 @@ class FFIMaterialInstance extends MaterialInstance {
MaterialInstance_setParameterMat4(
pointer, name.toNativeUtf8().cast<Char>(), matrix.storage.address);
}
@override
T getNativeHandle<T>() {
return pointer as T;
}
}
extension TStencilFaceExt on StencilFace {

View File

@@ -1,3 +1,4 @@
import 'package:thermion_dart/src/filament/src/interface/native_handle.dart';
import 'package:thermion_dart/thermion_dart.dart';
import 'package:vector_math/vector_math_64.dart';
@@ -98,7 +99,7 @@ abstract class Material {
Future destroy();
}
abstract class MaterialInstance {
abstract class MaterialInstance<T> extends NativeHandle<T> {
Future<bool> isStencilWriteEnabled();
Future setDepthWriteEnabled(bool enabled);
Future setDepthFunc(SamplerCompareFunction depthFunc);