on macOS, always create stencil buffer by default

This commit is contained in:
Nick Fisher
2025-07-01 10:21:39 +08:00
parent 4b9c20eaa6
commit 584abd6086
4 changed files with 19 additions and 2 deletions

View File

@@ -51,6 +51,12 @@ namespace thermion
/// @param numViews /// @param numViews
void setRenderable(filament::SwapChain *swapChain, filament::View **view, uint8_t numViews); void setRenderable(filament::SwapChain *swapChain, filament::View **view, uint8_t numViews);
/// @brief
/// @param swapChain
/// @param view
/// @param numViews
void removeSwapChain(filament::SwapChain *swapChain);
/// @brief /// @brief
/// @param animationManager /// @param animationManager
void addAnimationManager(AnimationManager* animationManager); void addAnimationManager(AnimationManager* animationManager);

View File

@@ -15,6 +15,7 @@ extern "C"
EMSCRIPTEN_KEEPALIVE void RenderTicker_render(TRenderTicker *tRenderTicker, uint64_t frameTimeInNanos); EMSCRIPTEN_KEEPALIVE void RenderTicker_render(TRenderTicker *tRenderTicker, uint64_t frameTimeInNanos);
EMSCRIPTEN_KEEPALIVE void RenderTicker_setRenderable(TRenderTicker *tRenderTicker, TSwapChain *swapChain, TView **views, uint8_t numViews); EMSCRIPTEN_KEEPALIVE void RenderTicker_setRenderable(TRenderTicker *tRenderTicker, TSwapChain *swapChain, TView **views, uint8_t numViews);
EMSCRIPTEN_KEEPALIVE void RenderTicker_removeSwapChain(TRenderTicker *tRenderTicker, TSwapChain *swapChain);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -61,5 +61,10 @@ EMSCRIPTEN_KEEPALIVE void RenderTicker_setOverlayManager(TRenderTicker *tRenderT
renderTicker->addOverlayManager(overlayManager); renderTicker->addOverlayManager(overlayManager);
} }
EMSCRIPTEN_KEEPALIVE void RenderTicker_removeSwapChain(TRenderTicker *tRenderTicker, TSwapChain *tSwapChain) {
auto *renderTicker = reinterpret_cast<RenderTicker *>(tRenderTicker);
auto *swapChain = reinterpret_cast<filament::SwapChain *>(tSwapChain);
renderTicker->removeSwapChain(swapChain);
}
} }

View File

@@ -22,6 +22,10 @@ class ThermionFlutterMethodChannelPlatform extends ThermionFlutterPlatform {
static SwapChain? _swapChain; static SwapChain? _swapChain;
SwapChain? getActiveSwapchain() {
return _swapChain;
}
ThermionFlutterMethodChannelPlatform._(); ThermionFlutterMethodChannelPlatform._();
static ThermionFlutterMethodChannelPlatform? instance; static ThermionFlutterMethodChannelPlatform? instance;
@@ -114,7 +118,7 @@ class ThermionFlutterMethodChannelPlatform extends ThermionFlutterPlatform {
// TODO - see if we can use `renderStandaloneView` in FilamentViewer to // TODO - see if we can use `renderStandaloneView` in FilamentViewer to
// avoid this // avoid this
if (Platform.isMacOS || Platform.isIOS) { if (Platform.isMacOS || Platform.isIOS) {
_swapChain = await FilamentApp.instance!.createHeadlessSwapChain(1, 1); _swapChain = await FilamentApp.instance!.createHeadlessSwapChain(1, 1, hasStencilBuffer: true);
await FilamentApp.instance!.register(_swapChain!, viewer.view); await FilamentApp.instance!.register(_swapChain!, viewer.view);
await viewer.view.setRenderable(true); await viewer.view.setRenderable(true);
} }
@@ -215,7 +219,8 @@ class ThermionFlutterMethodChannelPlatform extends ThermionFlutterPlatform {
TextureUsage.TEXTURE_USAGE_SAMPLEABLE, TextureUsage.TEXTURE_USAGE_SAMPLEABLE,
TextureUsage.TEXTURE_USAGE_STENCIL_ATTACHMENT TextureUsage.TEXTURE_USAGE_STENCIL_ATTACHMENT
}, },
textureFormat: TextureFormat.DEPTH24_STENCIL8, // TextureFormat.DEPTH32F, textureFormat:
TextureFormat.DEPTH24_STENCIL8, // TextureFormat.DEPTH32F,
textureSamplerType: TextureSamplerType.SAMPLER_2D, textureSamplerType: TextureSamplerType.SAMPLER_2D,
); );