From 6055bd3fa72c035a3ebd1068607d2446f74fec3e Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Mon, 9 Jun 2025 18:10:07 +0800 Subject: [PATCH] fix FFIMaterial so it correctly translates between StencilFace (Dart) and TStencilFace (Dart FFI) enums --- .../src/implementation/ffi_material.dart | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart index 373b2168..8624077a 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_material.dart @@ -113,32 +113,33 @@ class FFIMaterialInstance extends MaterialInstance { @override Future setStencilCompareFunction(SamplerCompareFunction func, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { - MaterialInstance_setStencilCompareFunction(pointer, func.index, face.index); + MaterialInstance_setStencilCompareFunction( + pointer, func.index, face.toFFI()); } @override Future setStencilOpDepthFail(StencilOperation op, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { - MaterialInstance_setStencilOpDepthFail(pointer, op.index, face.index); + MaterialInstance_setStencilOpDepthFail(pointer, op.index, face.toFFI()); } @override Future setStencilOpDepthStencilPass(StencilOperation op, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { MaterialInstance_setStencilOpDepthStencilPass( - pointer, op.index, face.index); + pointer, op.index, face.toFFI()); } @override Future setStencilOpStencilFail(StencilOperation op, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { - MaterialInstance_setStencilOpStencilFail(pointer, op.index, face.index); + MaterialInstance_setStencilOpStencilFail(pointer, op.index, face.toFFI()); } @override Future setStencilReferenceValue(int value, [StencilFace face = StencilFace.FRONT_AND_BACK]) async { - MaterialInstance_setStencilReferenceValue(pointer, value, face.index); + MaterialInstance_setStencilReferenceValue(pointer, value, face.toFFI()); } @override @@ -169,7 +170,8 @@ class FFIMaterialInstance extends MaterialInstance { Future destroy() async { await withVoidCallback((requestId, cb) { - Engine_destroyMaterialInstanceRenderThread(app.engine, this.pointer, requestId, cb); + Engine_destroyMaterialInstanceRenderThread( + app.engine, this.pointer, requestId, cb); }); } @@ -197,3 +199,13 @@ class FFIMaterialInstance extends MaterialInstance { pointer, name.toNativeUtf8().cast(), matrix.storage.address); } } + +extension TStencilFaceExt on StencilFace { + int toFFI() { + return switch (this) { + StencilFace.FRONT => TStencilFace.STENCIL_FACE_FRONT, + StencilFace.BACK => TStencilFace.STENCIL_FACE_BACK, + StencilFace.FRONT_AND_BACK => TStencilFace.STENCIL_FACE_FRONT_AND_BACK + }; + } +}