fix FFIMaterial so it correctly translates between StencilFace (Dart) and TStencilFace (Dart FFI) enums

This commit is contained in:
Nick Fisher
2025-06-09 18:10:07 +08:00
parent f3a576005a
commit 6055bd3fa7

View File

@@ -113,32 +113,33 @@ class FFIMaterialInstance extends MaterialInstance {
@override @override
Future setStencilCompareFunction(SamplerCompareFunction func, Future setStencilCompareFunction(SamplerCompareFunction func,
[StencilFace face = StencilFace.FRONT_AND_BACK]) async { [StencilFace face = StencilFace.FRONT_AND_BACK]) async {
MaterialInstance_setStencilCompareFunction(pointer, func.index, face.index); MaterialInstance_setStencilCompareFunction(
pointer, func.index, face.toFFI());
} }
@override @override
Future setStencilOpDepthFail(StencilOperation op, Future setStencilOpDepthFail(StencilOperation op,
[StencilFace face = StencilFace.FRONT_AND_BACK]) async { [StencilFace face = StencilFace.FRONT_AND_BACK]) async {
MaterialInstance_setStencilOpDepthFail(pointer, op.index, face.index); MaterialInstance_setStencilOpDepthFail(pointer, op.index, face.toFFI());
} }
@override @override
Future setStencilOpDepthStencilPass(StencilOperation op, Future setStencilOpDepthStencilPass(StencilOperation op,
[StencilFace face = StencilFace.FRONT_AND_BACK]) async { [StencilFace face = StencilFace.FRONT_AND_BACK]) async {
MaterialInstance_setStencilOpDepthStencilPass( MaterialInstance_setStencilOpDepthStencilPass(
pointer, op.index, face.index); pointer, op.index, face.toFFI());
} }
@override @override
Future setStencilOpStencilFail(StencilOperation op, Future setStencilOpStencilFail(StencilOperation op,
[StencilFace face = StencilFace.FRONT_AND_BACK]) async { [StencilFace face = StencilFace.FRONT_AND_BACK]) async {
MaterialInstance_setStencilOpStencilFail(pointer, op.index, face.index); MaterialInstance_setStencilOpStencilFail(pointer, op.index, face.toFFI());
} }
@override @override
Future setStencilReferenceValue(int value, Future setStencilReferenceValue(int value,
[StencilFace face = StencilFace.FRONT_AND_BACK]) async { [StencilFace face = StencilFace.FRONT_AND_BACK]) async {
MaterialInstance_setStencilReferenceValue(pointer, value, face.index); MaterialInstance_setStencilReferenceValue(pointer, value, face.toFFI());
} }
@override @override
@@ -169,7 +170,8 @@ class FFIMaterialInstance extends MaterialInstance {
Future destroy() async { Future destroy() async {
await withVoidCallback((requestId, cb) { 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<Char>(), matrix.storage.address); pointer, name.toNativeUtf8().cast<Char>(), 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
};
}
}