diff --git a/Apps/Playground/Android/BabylonNative/CMakeLists.txt b/Apps/Playground/Android/BabylonNative/CMakeLists.txt index 6764be52c..4d6e6e2d8 100644 --- a/Apps/Playground/Android/BabylonNative/CMakeLists.txt +++ b/Apps/Playground/Android/BabylonNative/CMakeLists.txt @@ -25,10 +25,12 @@ target_link_libraries(BabylonNativeJNI -lz AndroidExtensions AppRuntime + Blob Canvas Console GraphicsDevice NativeCamera + NativeEncoding NativeEngine NativeInput NativeOptimizations diff --git a/Apps/Playground/Android/BabylonNative/src/main/cpp/BabylonNativeJNI.cpp b/Apps/Playground/Android/BabylonNative/src/main/cpp/BabylonNativeJNI.cpp index c7a2b6be9..b8e5ef7bb 100644 --- a/Apps/Playground/Android/BabylonNative/src/main/cpp/BabylonNativeJNI.cpp +++ b/Apps/Playground/Android/BabylonNative/src/main/cpp/BabylonNativeJNI.cpp @@ -13,11 +13,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -98,6 +100,8 @@ extern "C" { device->AddToJavaScript(env); + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, Babylon::Polyfills::Console::LogLevel level) { switch (level) @@ -114,6 +118,7 @@ extern "C" } }); + Babylon::Plugins::NativeEncoding::Initialize(env); Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -136,6 +141,7 @@ extern "C" scriptLoader->LoadScript("app:///Scripts/babylonjs.loaders.js"); scriptLoader->LoadScript("app:///Scripts/babylonjs.materials.js"); scriptLoader->LoadScript("app:///Scripts/babylon.gui.js"); + scriptLoader->LoadScript("app:///Scripts/babylonjs.serializers.js"); } } diff --git a/Apps/Playground/Android/app/build.gradle b/Apps/Playground/Android/app/build.gradle index c2a4dd72e..02d7de1e4 100644 --- a/Apps/Playground/Android/app/build.gradle +++ b/Apps/Playground/Android/app/build.gradle @@ -116,6 +116,12 @@ task copyFiles { into 'src/main/assets/Scripts' } copy + { + from '../../../node_modules/babylonjs-serializers' + include "babylonjs.serializers.js" + into 'src/main/assets/Scripts' + } + copy { from '../../../Dependencies' include "*.js" diff --git a/Apps/Playground/CMakeLists.txt b/Apps/Playground/CMakeLists.txt index 2e4003db9..f0e0ff173 100644 --- a/Apps/Playground/CMakeLists.txt +++ b/Apps/Playground/CMakeLists.txt @@ -4,7 +4,8 @@ set(BABYLON_SCRIPTS "../node_modules/babylonjs-loaders/babylonjs.loaders.js" "../node_modules/babylonjs/babylon.max.js" "../node_modules/babylonjs-materials/babylonjs.materials.js" - "../node_modules/babylonjs-gui/babylon.gui.js") + "../node_modules/babylonjs-gui/babylon.gui.js" + "../node_modules/babylonjs-serializers/babylonjs.serializers.js") set(DEPENDENCIES "../Dependencies/ammo.js" @@ -126,11 +127,13 @@ target_include_directories(Playground PRIVATE "Source" ".") target_link_libraries(Playground PRIVATE AppRuntime + PRIVATE Blob PRIVATE Canvas PRIVATE Console PRIVATE ExternalTexture PRIVATE GraphicsDevice PRIVATE NativeCapture + PRIVATE NativeEncoding PRIVATE NativeEngine PRIVATE NativeInput PRIVATE NativeOptimizations diff --git a/Apps/Playground/ReferenceImages/glTFSerializerMultimaterial.png b/Apps/Playground/ReferenceImages/glTFSerializerMultimaterial.png new file mode 100644 index 000000000..81860d735 Binary files /dev/null and b/Apps/Playground/ReferenceImages/glTFSerializerMultimaterial.png differ diff --git a/Apps/Playground/Scripts/config.json b/Apps/Playground/Scripts/config.json index 6b1c29936..80cb01d19 100644 --- a/Apps/Playground/Scripts/config.json +++ b/Apps/Playground/Scripts/config.json @@ -88,6 +88,11 @@ "playgroundId": "#YG3BBF#2", "referenceImage": "glTFSheen.png" }, + { + "title": "GLTF Serializer multimaterial with raw texture", + "playgroundId": "#KU72PX", + "referenceImage": "glTFSerializerMultimaterial.png" + }, { "title": "GLTF Extension KHR_materials_specular", "playgroundId": "#RNT7K4#9", diff --git a/Apps/Playground/UWP/App.cpp b/Apps/Playground/UWP/App.cpp index 17d1dd21b..566bf4a91 100644 --- a/Apps/Playground/UWP/App.cpp +++ b/Apps/Playground/UWP/App.cpp @@ -2,8 +2,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -386,6 +388,8 @@ void App::RestartRuntime(Windows::Foundation::Rect bounds) m_runtime->Dispatch([this](Napi::Env env) { m_device->AddToJavaScript(env); + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, auto) { OutputDebugStringA(message); }); @@ -396,6 +400,8 @@ void App::RestartRuntime(Windows::Foundation::Rect bounds) Babylon::Polyfills::XMLHttpRequest::Initialize(env); + Babylon::Plugins::NativeEncoding::Initialize(env); + Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -411,6 +417,7 @@ void App::RestartRuntime(Windows::Foundation::Rect bounds) loader.LoadScript("app:///Scripts/babylonjs.loaders.js"); loader.LoadScript("app:///Scripts/babylonjs.materials.js"); loader.LoadScript("app:///Scripts/babylon.gui.js"); + loader.LoadScript("app:///Scripts/babylonjs.serializers.js"); if (m_files == nullptr) { diff --git a/Apps/Playground/Win32/App.cpp b/Apps/Playground/Win32/App.cpp index 9f4f8a767..ecbdf24fc 100644 --- a/Apps/Playground/Win32/App.cpp +++ b/Apps/Playground/Win32/App.cpp @@ -15,11 +15,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -167,6 +169,8 @@ namespace runtime->Dispatch([hWnd](Napi::Env env) { device->AddToJavaScript(env); + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, Babylon::Polyfills::Console::LogLevel logLevel) { std::ostringstream ss{}; ss << "[" << GetLogLevelString(logLevel) << "] " << message << std::endl; @@ -182,6 +186,8 @@ namespace nativeCanvas.emplace(Babylon::Polyfills::Canvas::Initialize(env)); + Babylon::Plugins::NativeEncoding::Initialize(env); + Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -204,6 +210,7 @@ namespace loader.LoadScript("app:///Scripts/babylonjs.materials.js"); loader.LoadScript("app:///Scripts/babylon.gui.js"); loader.LoadScript("app:///Scripts/meshwriter.min.js"); + loader.LoadScript("app:///Scripts/babylonjs.serializers.js"); std::vector scripts = GetCommandLineArguments(); if (scripts.empty()) diff --git a/Apps/Playground/X11/App.cpp b/Apps/Playground/X11/App.cpp index 992bf2548..b5395b8a4 100644 --- a/Apps/Playground/X11/App.cpp +++ b/Apps/Playground/X11/App.cpp @@ -11,10 +11,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -70,6 +72,8 @@ namespace runtime.emplace(); runtime->Dispatch([window](Napi::Env env) { + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, auto) { printf("%s\n", message); fflush(stdout); @@ -79,8 +83,11 @@ namespace Babylon::Polyfills::XMLHttpRequest::Initialize(env); nativeCanvas.emplace(Babylon::Polyfills::Canvas::Initialize(env)); - // Initialize NativeEngine plugin. device->AddToJavaScript(env); + + Babylon::Plugins::NativeEncoding::Initialize(env); + + // Initialize NativeEngine plugin. Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -98,6 +105,7 @@ namespace loader.LoadScript("app:///Scripts/babylonjs.loaders.js"); loader.LoadScript("app:///Scripts/babylonjs.materials.js"); loader.LoadScript("app:///Scripts/babylon.gui.js"); + loader.LoadScript("app:///Scripts/babylonjs.serializers.js"); if (scripts.empty()) { diff --git a/Apps/Playground/iOS/LibNativeBridge.mm b/Apps/Playground/iOS/LibNativeBridge.mm index aacfecb74..35472363b 100644 --- a/Apps/Playground/iOS/LibNativeBridge.mm +++ b/Apps/Playground/iOS/LibNativeBridge.mm @@ -4,10 +4,12 @@ #import #import #import +#import #import #import #import #import +#import #import #import #import @@ -74,6 +76,8 @@ - (void)init:(MTKView*)view screenScale:(float)inScreenScale width:(int)inWidth { device->AddToJavaScript(env); + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, auto) { NSLog(@"%s", message); }); @@ -86,6 +90,8 @@ - (void)init:(MTKView*)view screenScale:(float)inScreenScale width:(int)inWidth Babylon::Plugins::NativeCamera::Initialize(env); + Babylon::Plugins::NativeEncoding::Initialize(env); + Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -104,6 +110,7 @@ - (void)init:(MTKView*)view screenScale:(float)inScreenScale width:(int)inWidth loader.LoadScript("app:///Scripts/babylonjs.loaders.js"); loader.LoadScript("app:///Scripts/babylonjs.materials.js"); loader.LoadScript("app:///Scripts/babylon.gui.js"); + loader.LoadScript("app:///Scripts/babylonjs.serializers.js"); loader.LoadScript("app:///Scripts/experience.js"); } diff --git a/Apps/Playground/macOS/ViewController.mm b/Apps/Playground/macOS/ViewController.mm index 81190ccdf..7d15cf2dc 100644 --- a/Apps/Playground/macOS/ViewController.mm +++ b/Apps/Playground/macOS/ViewController.mm @@ -2,8 +2,10 @@ #import #import +#import #import #import +#import #import #import #import @@ -118,6 +120,8 @@ - (void)refreshBabylon { { device->AddToJavaScript(env); + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, auto) { NSLog(@"%s", message); }); @@ -130,6 +134,8 @@ - (void)refreshBabylon { Babylon::Plugins::NativeCamera::Initialize(env); + Babylon::Plugins::NativeEncoding::Initialize(env); + Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -145,6 +151,7 @@ - (void)refreshBabylon { loader.LoadScript("app:///Scripts/babylonjs.loaders.js"); loader.LoadScript("app:///Scripts/babylonjs.materials.js"); loader.LoadScript("app:///Scripts/babylon.gui.js"); + loader.LoadScript("app:///Scripts/babylonjs.serializers.js"); if (scripts.empty()) { diff --git a/Apps/Playground/visionOS/LibNativeBridge.mm b/Apps/Playground/visionOS/LibNativeBridge.mm index bd3043881..34797843d 100644 --- a/Apps/Playground/visionOS/LibNativeBridge.mm +++ b/Apps/Playground/visionOS/LibNativeBridge.mm @@ -2,9 +2,11 @@ #import #import #import +#import #import #import #import +#import #import #import #import @@ -53,6 +55,8 @@ - (bool)initializeWithWidth:(NSInteger)width height:(NSInteger)height { _runtime->Dispatch([self](Napi::Env env) { self->_device->AddToJavaScript(env); + Babylon::Polyfills::Blob::Initialize(env); + Babylon::Polyfills::Console::Initialize(env, [](const char* message, auto) { NSLog(@"%s", message); }); @@ -63,6 +67,8 @@ - (bool)initializeWithWidth:(NSInteger)width height:(NSInteger)height { Babylon::Polyfills::XMLHttpRequest::Initialize(env); + Babylon::Plugins::NativeEncoding::Initialize(env); + Babylon::Plugins::NativeEngine::Initialize(env); Babylon::Plugins::NativeOptimizations::Initialize(env); @@ -77,6 +83,7 @@ - (bool)initializeWithWidth:(NSInteger)width height:(NSInteger)height { loader.LoadScript("app:///Scripts/babylonjs.loaders.js"); loader.LoadScript("app:///Scripts/babylonjs.materials.js"); loader.LoadScript("app:///Scripts/babylon.gui.js"); + loader.LoadScript("app:///Scripts/babylonjs.serializers.js"); loader.LoadScript("app:///Scripts/experience.js"); self.initialized = YES; diff --git a/Apps/package-lock.json b/Apps/package-lock.json index aca8e20fd..5fe9e4168 100644 --- a/Apps/package-lock.json +++ b/Apps/package-lock.json @@ -11,11 +11,12 @@ "UnitTests" ], "dependencies": { - "babylonjs": "^8.28.2", - "babylonjs-gltf2interface": "^8.28.2", - "babylonjs-gui": "^8.28.2", - "babylonjs-loaders": "^8.28.2", - "babylonjs-materials": "^8.28.2", + "babylonjs": "^8.36.1", + "babylonjs-gltf2interface": "^8.36.1", + "babylonjs-gui": "^8.36.1", + "babylonjs-loaders": "^8.36.1", + "babylonjs-materials": "^8.36.1", + "babylonjs-serializers": "^8.36.1", "jsc-android": "^241213.1.0", "v8-android": "^7.8.2" } @@ -2600,44 +2601,54 @@ } }, "node_modules/babylonjs": { - "version": "8.28.2", - "resolved": "https://registry.npmjs.org/babylonjs/-/babylonjs-8.28.2.tgz", - "integrity": "sha512-mid1cYg2VGXKj4neNy+78MHwSV8tMCHbvSEaIXQuEj1JxKmEb+UQ6/XwqiSGMrw1IoFxRZ693kelfe1tuSdKJg==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/babylonjs/-/babylonjs-8.36.1.tgz", + "integrity": "sha512-8O3gTTeo4wqFbtg+uSrYj22gk9thYCHjjS/QPisKJZxMgC7bpOVACqHjd2R/Ksb7L18Vcu4Ta0BSN3qnHMnAxg==", "hasInstallScript": true, "license": "Apache-2.0" }, "node_modules/babylonjs-gltf2interface": { - "version": "8.28.2", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.28.2.tgz", - "integrity": "sha512-TGusApjAPNkPhyyU/05FNoiEc9l85Kd4ZGHO/5hsRkLLYVXvmsqAEa9yGIVLhYM3Yezf/b1DFwMPvY1D/NEiVA==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-8.36.1.tgz", + "integrity": "sha512-YzucievP+37reZoFjFnmf5Rn4fLkDR6CgANlu1flolawgiNovqratCzZBD45VTLNBHDHN7uZoLdXie2A+2PEow==", "license": "Apache-2.0" }, "node_modules/babylonjs-gui": { - "version": "8.28.2", - "resolved": "https://registry.npmjs.org/babylonjs-gui/-/babylonjs-gui-8.28.2.tgz", - "integrity": "sha512-sFURHbGEfPiRPGQM4jKsPbG4ZxWj9cejNbaxbjNMCB8izc33rzXB67+yHxDdSfjkiEeB1VM30OdhdEW6/JAq+g==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/babylonjs-gui/-/babylonjs-gui-8.36.1.tgz", + "integrity": "sha512-PpMnd4RFZVQbyJnhS8vcQJzepeYBQxUjo6/GWnb3kkjZ/A4fTA5DSgdNTGca50+UkeQqI+LceP8CJ7BJlbRSMg==", "license": "Apache-2.0", "dependencies": { - "babylonjs": "^8.28.2" + "babylonjs": "^8.36.1" } }, "node_modules/babylonjs-loaders": { - "version": "8.28.2", - "resolved": "https://registry.npmjs.org/babylonjs-loaders/-/babylonjs-loaders-8.28.2.tgz", - "integrity": "sha512-WIbR3gaHhxSvRzs7Yuz578YlhPXqlB36tEEqIo0E+s5FqgzFy+o2TBN0O8nWnGuyk7s4wAZpA8CBQ58KsGfw5Q==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/babylonjs-loaders/-/babylonjs-loaders-8.36.1.tgz", + "integrity": "sha512-b6MkjeYVtykzsBm8A9DGKKNSmcQu7jPvec1lHnhfYCQwpCcBcShKHkscTlaezKwPG1DUnLu5boxnAyN4sFOWBw==", "license": "Apache-2.0", "dependencies": { - "babylonjs": "^8.28.2", - "babylonjs-gltf2interface": "^8.28.2" + "babylonjs": "^8.36.1", + "babylonjs-gltf2interface": "^8.36.1" } }, "node_modules/babylonjs-materials": { - "version": "8.28.2", - "resolved": "https://registry.npmjs.org/babylonjs-materials/-/babylonjs-materials-8.28.2.tgz", - "integrity": "sha512-5/pURv40ugE7tIeiuW/6C4Eo6VXOcHZJhtjrwdLDlpfMFpAU7d2JTNyaa9NqnHkRVRqXtad3/cu6FoVw6+AsZw==", + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/babylonjs-materials/-/babylonjs-materials-8.36.1.tgz", + "integrity": "sha512-bDt2CJtXjSJqJq83aobEiLB6UiAX+e2ldyxDjW25Cn5KhpgCJ9YzZ/MKNdUwbAKIW3kAVUH3n4k/6XfRcRpvHQ==", "license": "Apache-2.0", "dependencies": { - "babylonjs": "^8.28.2" + "babylonjs": "^8.36.1" + } + }, + "node_modules/babylonjs-serializers": { + "version": "8.36.1", + "resolved": "https://registry.npmjs.org/babylonjs-serializers/-/babylonjs-serializers-8.36.1.tgz", + "integrity": "sha512-4tbrfhUY/ZeY8cYup4YZ6lCb6xC4mzEiK0X7lVlDfylBobH/6WHXLH/SpWSCJyXIKo4rp5w5GoU8KZJaRb3l0A==", + "license": "Apache-2.0", + "dependencies": { + "babylonjs": "^8.36.1", + "babylonjs-gltf2interface": "^8.36.1" } }, "node_modules/balanced-match": { diff --git a/Apps/package.json b/Apps/package.json index 10eb897c7..89c481a4b 100644 --- a/Apps/package.json +++ b/Apps/package.json @@ -9,11 +9,12 @@ "getNightly": "node scripts/getNightly.js" }, "dependencies": { - "babylonjs": "^8.28.2", - "babylonjs-gltf2interface": "^8.28.2", - "babylonjs-gui": "^8.28.2", - "babylonjs-loaders": "^8.28.2", - "babylonjs-materials": "^8.28.2", + "babylonjs": "^8.36.1", + "babylonjs-gltf2interface": "^8.36.1", + "babylonjs-gui": "^8.36.1", + "babylonjs-loaders": "^8.36.1", + "babylonjs-materials": "^8.36.1", + "babylonjs-serializers": "^8.36.1", "jsc-android": "^241213.1.0", "v8-android": "^7.8.2" } diff --git a/Apps/scripts/getNightly.js b/Apps/scripts/getNightly.js index 89666dafd..52d13cb03 100644 --- a/Apps/scripts/getNightly.js +++ b/Apps/scripts/getNightly.js @@ -17,3 +17,5 @@ download('node_modules/babylonjs-loaders/babylonjs.loaders.js', 'https://preview download('node_modules/babylonjs-loaders/babylonjs.loaders.js.map', 'https://preview.babylonjs.com/loaders/babylonjs.loaders.js.map'); download('node_modules/babylonjs-gui/babylon.gui.js', 'https://preview.babylonjs.com/gui/babylon.gui.js'); download('node_modules/babylonjs-gui/babylon.gui.js.map', 'https://preview.babylonjs.com/gui/babylon.gui.js.map'); +download('node_modules/babylonjs-serializers/babylonjs.serializers.js', 'https://preview.babylonjs.com/serializers/babylonjs.serializers.js'); +download('node_modules/babylonjs-serializers/babylonjs.serializers.js.map', 'https://preview.babylonjs.com/serializers/babylonjs.serializers.js.map'); diff --git a/Install/Test/CMakeLists.txt b/Install/Test/CMakeLists.txt index ca24bb2a0..db7b308d8 100644 --- a/Install/Test/CMakeLists.txt +++ b/Install/Test/CMakeLists.txt @@ -134,14 +134,18 @@ endif() target_link_libraries(TestInstall AppRuntime arcana - bimg_encode - bimg_decode - minz bgfx bimg + bimg_decode + bimg_encode + Blob bx Canvas + chakrart Console + d3d11 + d3d12 + d3dcompiler ExternalTexture Foundation GenericCodeGen @@ -155,30 +159,27 @@ target_link_libraries(TestInstall libwebpdecoder.lib libwebpdemux.lib MachineIndependent + minz napi NativeCamera NativeCapture + NativeEncoding NativeEngine NativeInput NativeOptimizations NativeTracing - NativeEncoding OGLCompiler OSDependent - ScriptLoader + Pathcch + runtimeobject.lib # for WINRT_IMPL_RoXXX functions Scheduling + ScriptLoader + SPIRV spirv-cross-core spirv-cross-hlsl - SPIRV UrlLib Window XMLHttpRequest - chakrart - d3d11 - d3d12 - d3dcompiler - Pathcch - runtimeobject.lib # for WINRT_IMPL_RoXXX functions ${ADDITIONAL_LIBRARIES} )