From 0dd64a07bba8924629f6faa2ca70ae83422bd6dc Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Mon, 9 Jun 2025 18:12:17 +0800 Subject: [PATCH] add helper method to convert between TStencilFace and MaterialInstance::StencilFace (not strictly necessary, but will help if something upstream changes in future --- .../native/src/c_api/TMaterialInstance.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/thermion_dart/native/src/c_api/TMaterialInstance.cpp b/thermion_dart/native/src/c_api/TMaterialInstance.cpp index 8344f301..31b7d945 100644 --- a/thermion_dart/native/src/c_api/TMaterialInstance.cpp +++ b/thermion_dart/native/src/c_api/TMaterialInstance.cpp @@ -176,13 +176,25 @@ namespace thermion materialInstance->setStencilOpDepthStencilPass(op, face); } + filament::MaterialInstance::StencilFace toStencilFace(TStencilFace tface) { + switch(tface) { + case STENCIL_FACE_FRONT: return filament::MaterialInstance::StencilFace::FRONT; + case STENCIL_FACE_BACK: return filament::MaterialInstance::StencilFace::BACK; + case STENCIL_FACE_FRONT_AND_BACK: return filament::MaterialInstance::StencilFace::FRONT_AND_BACK; + default: throw std::invalid_argument("Invalid TStencilFace value"); + } + } + EMSCRIPTEN_KEEPALIVE void MaterialInstance_setStencilCompareFunction(TMaterialInstance *tMaterialInstance, TSamplerCompareFunc tFunc, TStencilFace tFace) { auto *materialInstance = reinterpret_cast<::filament::MaterialInstance *>(tMaterialInstance); auto func = static_cast(tFunc); - auto face = static_cast(tFace); - materialInstance->setStencilCompareFunction(func, face); + auto face = toStencilFace(tFace); + + materialInstance->setStencilCompareFunction( + func, + face); } EMSCRIPTEN_KEEPALIVE void MaterialInstance_setStencilReferenceValue(TMaterialInstance *tMaterialInstance,