From 92025983e8389989922fa7c22aee186decece11a Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Fri, 23 Oct 2020 14:57:15 -0700 Subject: [PATCH 1/3] Partially tested changes to use new graphics --- .../@babylonjs/react-native/android/CMakeLists.txt | 1 - .../android/src/main/cpp/BabylonNativeInterop.cpp | 10 ++++------ .../@babylonjs/react-native/ios/BabylonNative.cpp | 12 +++++------- Modules/@babylonjs/react-native/ios/CMakeLists.txt | 1 - .../react-native/react-native-babylon.podspec | 1 - .../@babylonjs/react-native/submodules/BabylonNative | 2 +- Package/gulpfile.js | 1 - Package/iOS/CMakeLists.txt | 1 - 8 files changed, 10 insertions(+), 19 deletions(-) diff --git a/Modules/@babylonjs/react-native/android/CMakeLists.txt b/Modules/@babylonjs/react-native/android/CMakeLists.txt index bdf8ab98b..dd11974d1 100644 --- a/Modules/@babylonjs/react-native/android/CMakeLists.txt +++ b/Modules/@babylonjs/react-native/android/CMakeLists.txt @@ -71,7 +71,6 @@ target_link_libraries(BabylonNative AndroidExtensions Graphics JsRuntime - NativeWindow NativeEngine NativeInput NativeXr diff --git a/Modules/@babylonjs/react-native/android/src/main/cpp/BabylonNativeInterop.cpp b/Modules/@babylonjs/react-native/android/src/main/cpp/BabylonNativeInterop.cpp index 6f30571d7..4669cabee 100644 --- a/Modules/@babylonjs/react-native/android/src/main/cpp/BabylonNativeInterop.cpp +++ b/Modules/@babylonjs/react-native/android/src/main/cpp/BabylonNativeInterop.cpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -48,11 +47,10 @@ namespace Babylon auto width = static_cast(ANativeWindow_getWidth(windowPtr)); auto height = static_cast(ANativeWindow_getHeight(windowPtr)); - m_graphics = Graphics::InitializeFromWindow(windowPtr, width, height); + m_graphics = Graphics::CreateGraphics(reinterpret_cast(windowPtr), width, height); m_graphics->AddToJavaScript(m_env); - Plugins::NativeEngine::Initialize(m_env); - Plugins::NativeWindow::Initialize(m_env, windowPtr, width, height); + Plugins::NativeEngine::Initialize(m_env, true); Plugins::NativeXr::Initialize(m_env); Polyfills::Window::Initialize(m_env); @@ -73,8 +71,8 @@ namespace Babylon { auto width = static_cast(ANativeWindow_getWidth(windowPtr)); auto height = static_cast(ANativeWindow_getHeight(windowPtr)); - m_graphics->ReinitializeFromWindow(windowPtr, width, height); - Plugins::NativeWindow::Reinitialize(m_env, windowPtr, width, height); + m_graphics->UpdateWindow(windowPtr); + m_graphics->UpdateSize(width, height); } void SetPointerButtonState(uint32_t pointerId, uint32_t buttonId, bool isDown, uint32_t x, uint32_t y) diff --git a/Modules/@babylonjs/react-native/ios/BabylonNative.cpp b/Modules/@babylonjs/react-native/ios/BabylonNative.cpp index 4bae09ee8..347728f79 100644 --- a/Modules/@babylonjs/react-native/ios/BabylonNative.cpp +++ b/Modules/@babylonjs/react-native/ios/BabylonNative.cpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -45,7 +44,7 @@ namespace Babylon : m_impl{ std::make_unique(jsiRuntime, callInvoker) } { dispatch_sync(dispatch_get_main_queue(), ^{ - m_impl->m_graphics = Graphics::InitializeFromWindow(windowPtr, width, height); + m_impl->m_graphics = Graphics::CreateGraphics(reinterpret_cast(windowPtr), width, height); }); m_impl->runtime = &JsRuntime::CreateForJavaScript(m_impl->env, CreateJsRuntimeDispatcher(m_impl->env, jsiRuntime, callInvoker)); @@ -57,8 +56,7 @@ namespace Babylon // React Native's implementation, but rather adds a second one scoped to Babylon and used by WebRequest.ts. Polyfills::XMLHttpRequest::Initialize(m_impl->env); - Plugins::NativeWindow::Initialize(m_impl->env, windowPtr, width, height); - Plugins::NativeEngine::Initialize(m_impl->env); + Plugins::NativeEngine::Initialize(m_impl->env, true); Plugins::NativeXr::Initialize(m_impl->env); m_impl->nativeInput = &Babylon::Plugins::NativeInput::CreateForJavaScript(m_impl->env); @@ -70,13 +68,13 @@ namespace Babylon void Native::Refresh(void* windowPtr, size_t width, size_t height) { - m_impl->m_graphics->ReinitializeFromWindow(windowPtr, width, height); - Plugins::NativeWindow::Reinitialize(m_impl->env, windowPtr, width, height); + m_impl->m_graphics->UpdateWindow(windowPtr); + m_impl->m_graphics->UpdateSize(width, height); } void Native::Resize(size_t width, size_t height) { - Plugins::NativeWindow::UpdateSize(m_impl->env, width, height); + m_impl->m_graphics->UpdateSize(width, height); } void Native::SetPointerButtonState(uint32_t pointerId, uint32_t buttonId, bool isDown, uint32_t x, uint32_t y) diff --git a/Modules/@babylonjs/react-native/ios/CMakeLists.txt b/Modules/@babylonjs/react-native/ios/CMakeLists.txt index 2fe30f790..4dbf11777 100644 --- a/Modules/@babylonjs/react-native/ios/CMakeLists.txt +++ b/Modules/@babylonjs/react-native/ios/CMakeLists.txt @@ -43,7 +43,6 @@ target_link_libraries(BabylonNative reactnative BabylonReactNativeShared JsRuntime - NativeWindow NativeEngine NativeInput NativeXr diff --git a/Modules/@babylonjs/react-native/react-native-babylon.podspec b/Modules/@babylonjs/react-native/react-native-babylon.podspec index 2f4d559f4..8638e7abb 100644 --- a/Modules/@babylonjs/react-native/react-native-babylon.podspec +++ b/Modules/@babylonjs/react-native/react-native-babylon.podspec @@ -33,7 +33,6 @@ Pod::Spec.new do |s| 'napi', 'NativeEngine', 'NativeInput', - 'NativeWindow', 'NativeXR', 'SPIRV', 'spirv-cross-core', diff --git a/Modules/@babylonjs/react-native/submodules/BabylonNative b/Modules/@babylonjs/react-native/submodules/BabylonNative index e81f65f12..8d90d5143 160000 --- a/Modules/@babylonjs/react-native/submodules/BabylonNative +++ b/Modules/@babylonjs/react-native/submodules/BabylonNative @@ -1 +1 @@ -Subproject commit e81f65f129e5f93a343ab79e0fc93a18f4f10899 +Subproject commit 8d90d514368a21e8918f0e4e4eac4aad97cf8498 diff --git a/Package/gulpfile.js b/Package/gulpfile.js index 47325dadc..4cd308add 100644 --- a/Package/gulpfile.js +++ b/Package/gulpfile.js @@ -94,7 +94,6 @@ Assembled/ios/libs/libWindow.a Assembled/ios/libs/libbimg.a Assembled/ios/libs/libOGLCompiler.a Assembled/ios/libs/libastc.a -Assembled/ios/libs/libNativeWindow.a Assembled/ios/libs/libNativeEngine.a Assembled/ios/libs/libNativeXr.a Assembled/ios/libs/libspirv-cross-glsl.a diff --git a/Package/iOS/CMakeLists.txt b/Package/iOS/CMakeLists.txt index 103887869..7df2c4dde 100644 --- a/Package/iOS/CMakeLists.txt +++ b/Package/iOS/CMakeLists.txt @@ -18,7 +18,6 @@ set(PACKAGED_LIBS napi NativeEngine NativeInput - NativeWindow NativeXr SPIRV spirv-cross-core From 39555773d368310ed2a40b79c55358965bd7af5c Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Wed, 28 Oct 2020 11:44:55 -0700 Subject: [PATCH 2/3] Update BabylonNative to master --- Modules/@babylonjs/react-native/submodules/BabylonNative | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/@babylonjs/react-native/submodules/BabylonNative b/Modules/@babylonjs/react-native/submodules/BabylonNative index 6ccc88303..0a2911e72 160000 --- a/Modules/@babylonjs/react-native/submodules/BabylonNative +++ b/Modules/@babylonjs/react-native/submodules/BabylonNative @@ -1 +1 @@ -Subproject commit 6ccc8830399060bbfd949e944d1ee3530b8b5b29 +Subproject commit 0a2911e72c5e29fb20d2d5f3a342c8394b08afd6 From 9f034ec8a2cd4d3302e4d720ef0855182736acc5 Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Wed, 28 Oct 2020 14:18:55 -0700 Subject: [PATCH 3/3] Await graphics init --- Modules/@babylonjs/react-native/EngineHook.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Modules/@babylonjs/react-native/EngineHook.ts b/Modules/@babylonjs/react-native/EngineHook.ts index e3b20156f..8a4bc2594 100644 --- a/Modules/@babylonjs/react-native/EngineHook.ts +++ b/Modules/@babylonjs/react-native/EngineHook.ts @@ -62,6 +62,11 @@ class DOMException { declare const global: any; global.atob = base64.decode; +// This global object is part of Babylon Native. +declare const _native: { + graphicsInitializationPromise: Promise; +} + export function useEngine(): Engine | undefined { const [engine, setEngine] = useState(); @@ -72,6 +77,7 @@ export function useEngine(): Engine | undefined { (async () => { if (await BabylonModule.initialize() && !disposed) { + await _native.graphicsInitializationPromise; engine = new NativeEngine(); setEngine(engine); }