From 87da0d3736ad0435ca88b0d27dcad37d184d881b Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Wed, 20 Jul 2022 10:52:09 +0200 Subject: [PATCH 1/2] Alpha premultiplied backbuffer Windows --- .../windows/BabylonReactNative/EngineView.cpp | 2 +- .../react-native/shared/BabylonNative.cpp | 23 +++++++++++++++++++ .../react-native/shared/BabylonNative.h | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/EngineView.cpp b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/EngineView.cpp index 133a0d4d4..2ccdb2c16 100644 --- a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/EngineView.cpp +++ b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/EngineView.cpp @@ -183,7 +183,7 @@ namespace winrt::BabylonReactNative::implementation { if (propertyName == "isTransparent") { bool isTransparent = propertyValue.AsBoolean(); - this->CompositeMode(isTransparent ? ElementCompositeMode::MinBlend : ElementCompositeMode::Inherit); + BabylonNative::UpdateAlphaPremultiplied(isTransparent); } else if (propertyName == "antiAliasing") { auto value = propertyValue.AsUInt8(); diff --git a/Modules/@babylonjs/react-native/shared/BabylonNative.cpp b/Modules/@babylonjs/react-native/shared/BabylonNative.cpp index 7440f6220..b6a5cbb01 100644 --- a/Modules/@babylonjs/react-native/shared/BabylonNative.cpp +++ b/Modules/@babylonjs/react-native/shared/BabylonNative.cpp @@ -89,6 +89,7 @@ namespace BabylonNative g_graphics->UpdateSize(width, height); } g_graphics->UpdateMSAA(mMSAAValue); + g_graphics->UpdateAlphaPremultiplied(mAlphaPremultiplied); g_graphics->EnableRendering(); m_isRenderingEnabled = true; @@ -117,6 +118,15 @@ namespace BabylonNative } } + void UpdateAlphaPremultiplied(bool enabled) + { + mAlphaPremultiplied = enabled; + if (g_graphics) + { + g_graphics->UpdateAlphaPremultiplied(enabled); + } + } + void RenderView() { // If rendering has not been explicitly enabled, or has been explicitly disabled, then don't try to render. @@ -236,6 +246,7 @@ namespace BabylonNative std::shared_ptr m_isXRActive{}; uint8_t mMSAAValue{}; + bool mAlphaPremultiplied{}; }; namespace @@ -284,6 +295,18 @@ namespace BabylonNative } } + void UpdateAlphaPremultiplied(bool enabled) + { + if (auto nativeModule{ g_nativeModule.lock() }) + { + nativeModule->UpdateAlphaPremultiplied(enabled); + } + else + { + throw std::runtime_error{ "UpdateAlphaPremultiplied must not be called before Initialize." }; + } + } + void RenderView() { if (auto nativeModule{ g_nativeModule.lock() }) diff --git a/Modules/@babylonjs/react-native/shared/BabylonNative.h b/Modules/@babylonjs/react-native/shared/BabylonNative.h index a68683d65..3e1539709 100644 --- a/Modules/@babylonjs/react-native/shared/BabylonNative.h +++ b/Modules/@babylonjs/react-native/shared/BabylonNative.h @@ -29,6 +29,7 @@ namespace BabylonNative void UpdateView(WindowType window, size_t width, size_t height); void UpdateMSAA(uint8_t value); + void UpdateAlphaPremultiplied(bool enabled); void RenderView(); void ResetView(); From a38a5f3b54d8ec53c5c213e47ed30c5dbc93db37 Mon Sep 17 00:00:00 2001 From: Cedric Guillemet Date: Fri, 22 Jul 2022 16:37:19 +0200 Subject: [PATCH 2/2] submodule update --- .../@babylonjs/react-native-iosandroid/submodules/BabylonNative | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative b/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative index d042c499e..7c6d12d0e 160000 --- a/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative +++ b/Modules/@babylonjs/react-native-iosandroid/submodules/BabylonNative @@ -1 +1 @@ -Subproject commit d042c499e3b42aa16be668a919304b6bbe6490e6 +Subproject commit 7c6d12d0e13052ae1cc95c0fc0ca54d117432559