Skip to content

[Native] Report engine.name "Native" and implement updateTextureData#18566

Merged
bkaradzic-microsoft merged 3 commits into
masterfrom
native-engine-name-update-texture-data
Jun 22, 2026
Merged

[Native] Report engine.name "Native" and implement updateTextureData#18566
bkaradzic-microsoft merged 3 commits into
masterfrom
native-engine-name-update-texture-data

Conversation

@bkaradzic-microsoft

@bkaradzic-microsoft bkaradzic-microsoft commented Jun 11, 2026

Copy link
Copy Markdown
Member

Paired native PR: BabylonJS/BabylonNative#1751

What

  1. engine.name"Native". The native engine inherited "WebGL" from ThinEngine, so external code gating WebGL-only _gl access on engine.name === "WebGL" ran on native and dereferenced the null _gl (e.g. TypeError: ... 'TEXTURE_2D' of null). It now reports "Native" (as WebGPU reports "WebGPU"). No internal === "WebGL" checks exist (selection uses _shaderPlatformName/isWebGPU), so only external name-branching code is affected — exactly the code already broken on native.

  2. updateTextureData implemented (was throwing "not implemented"). Forwards the sub-rectangle with invertY; ignores generateMipMaps (no partial-update mip regen on Native). The native binding is optional + existence-checked, so old native binaries get the explicit "updateTextureData not implemented." instead of ... is not a function.

Changes (packages/dev/core/src/Engines)

  • thinNativeEngine.pure.ts: set _name = "Native"; implement updateTextureData (early-return without _hardwareTexture, existence-check before forwarding).
  • Native/nativeInterfaces.ts: add optional updateTextureData? signature (matching setRenderResetCallback? / sortSplats?).

Testing

Built babylon.max.js + ran the BabylonNative Playground validation suite (D3D11): the "Test updateTextureData" scene (previously crashed on _gl.TEXTURE_2D) renders and passes pixel comparison, stable across runs.

Landing order

Co-dependent with NativeEngine::UpdateTextureData in BabylonJS/BabylonNative#1751:

  1. This PR first — TS overrides (no WebGL behavior change).
  2. A babylonjs npm release ships them.
  3. NativeEngine: implement updateTextureData (re-enables Test updateTextureData) BabylonNative#1751 last — bumps bundled babylonjs + re-enables the validation test (passes only with the paired JS).

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

Please make sure to label your PR with "bug", "new feature" or "breaking change" label(s).
To prevent this PR from going to the changelog marked it with the "skip changelog" label.

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

Snapshot stored with reference name:
refs/pull/18566/merge

Test environment:
https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/refs/pull/18566/merge/index.html

To test a playground add it to the URL, for example:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/refs/pull/18566/merge/index.html#WGZLGJ#4600

Links to test your changes to core in the published versions of the Babylon tools (does not contain changes you made to the tools themselves):

https://playground.babylonjs.com/?snapshot=refs/pull/18566/merge
https://sandbox.babylonjs.com/?snapshot=refs/pull/18566/merge
https://gui.babylonjs.com/?snapshot=refs/pull/18566/merge
https://nme.babylonjs.com/?snapshot=refs/pull/18566/merge

To test the snapshot in the playground with a playground ID add it after the snapshot query string:

https://playground.babylonjs.com/?snapshot=refs/pull/18566/merge#BCU1XR#0

If you made changes to the sandbox or playground in this PR, additional comments will be generated soon containing links to the dev versions of those tools.

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

⚡ Performance Test Results

🟢 All performance tests passed — no regressions detected.

@bkaradzic-microsoft bkaradzic-microsoft force-pushed the native-engine-name-update-texture-data branch from 0333ba6 to 373db14 Compare June 16, 2026 17:04

@bghgary bghgary left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Reviewed by Copilot on behalf of @bghgary]

Compat concern inline.

Comment thread packages/dev/core/src/Engines/thinNativeEngine.pure.ts
@bkaradzic-microsoft bkaradzic-microsoft force-pushed the native-engine-name-update-texture-data branch from 373db14 to d01c82c Compare June 16, 2026 23:50
@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

⚡ Performance Test Results

🟢 All performance tests passed — no regressions detected.

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bkaradzic-microsoft bkaradzic-microsoft force-pushed the native-engine-name-update-texture-data branch from 3bc4613 to aab7a48 Compare June 17, 2026 22:32
@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

@bkaradzic-microsoft bkaradzic-microsoft marked this pull request as ready for review June 17, 2026 23:26
Copilot AI review requested due to automatic review settings June 17, 2026 23:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Babylon Native (ThinNativeEngine) implementation to (1) report a distinct engine.name value ("Native") instead of inheriting "WebGL" from ThinEngine, and (2) implement updateTextureData by forwarding sub-rectangle texture updates to the native engine bridge.

Changes:

  • Set the native engine name to "Native" to prevent WebGL-only code paths from running on Native (which has no _gl).
  • Implement ThinNativeEngine.updateTextureData to call into a new optional native bridge method.
  • Extend the native engine interface with an updateTextureData signature.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
packages/dev/core/src/Engines/thinNativeEngine.pure.ts Sets _name = "Native" and forwards updateTextureData calls to the native bridge.
packages/dev/core/src/Engines/Native/nativeInterfaces.ts Adds the optional INativeEngine.updateTextureData method signature.

Comment thread packages/dev/core/src/Engines/thinNativeEngine.pure.ts
@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

⚡ Performance Test Results

🟢 All performance tests passed — no regressions detected.

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bkaradzic-microsoft bkaradzic-microsoft force-pushed the native-engine-name-update-texture-data branch from aab7a48 to 3f8fe1c Compare June 18, 2026 15:12
@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

⚡ Performance Test Results

🟢 All performance tests passed — no regressions detected.

bkaradzic and others added 3 commits June 18, 2026 14:00
The native engine inherited engine.name === "WebGL" from ThinEngine, so code
that guards WebGL-only _gl access with �ngine.name === "WebGL" ran on the
native engine and dereferenced the null _gl context (e.g. TEXTURE_2D undefined).
updateTextureData also threw "not implemented".

- Report a distinct engine name ("Native"), mirroring how the WebGPU engine
  reports "WebGPU", so name-gated WebGL-only code paths skip the native engine.
- Implement updateTextureData: forward the sub-rectangle (plus invertY, so the
  native side can match the base texture's vertical orientation) to the native
  engine. generateMipMaps is ignored (mip regeneration after a partial update is
  not supported on Native).

Pairs with the BabylonNative change adding NativeEngine::UpdateTextureData.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Addresses review: existence-check before calling this._engine.updateTextureData so older native binaries (PROTOCOL_VERSION not bumped) restore the explicit 'updateTextureData not implemented.' error instead of a raw 'is not a function'.
@bkaradzic-microsoft bkaradzic-microsoft force-pushed the native-engine-name-update-texture-data branch from 3f8fe1c to 56b98ff Compare June 18, 2026 21:01
@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

🟢 Memory Leak Test Results

13 passed, 0 leaked out of 13 scenarios

🟢 All memory leak tests passed — no leaks detected.

Passed Scenarios (13)
Scenario Package
Core Feature Stack @babylonjs/core
Core Rendering Materials Shadows Stack @babylonjs/core
Core Textures Render Targets PostProcess Stack @babylonjs/core
GUI Fullscreen UI Controls @babylonjs/gui
GUI Mesh ADT Controls @babylonjs/gui
Loaders Boombox Import @babylonjs/loaders
Loaders OBJ Direct Load @babylonjs/loaders
Loaders STL Direct Load @babylonjs/loaders
Materials Library Stack @babylonjs/materials
Serializers glTF Export @babylonjs/serializers
Serializers GLB Export @babylonjs/serializers
PostProcesses Digital Rain Stack @babylonjs/post-processes
Procedural Textures Stack @babylonjs/procedural-textures

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

@bjsplat

bjsplat commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

⚡ Performance Test Results

Baseline: Latest · Candidate: Dev

Metric Value
🟢 Average 4.4%25 faster
Median 4.4%25 faster
Tests 1 conclusive, 0 inconclusive
🔘 Not Significant — p ≥ 0.05 (1)
Test Baseline Candidate Diff p-value
KTX2 decoder test [#EIJH8L#27] (webgl2) 11.0ms 10.6ms 4.4%25 faster 0.7997

@bkaradzic-microsoft bkaradzic-microsoft enabled auto-merge (squash) June 19, 2026 00:18

@bghgary bghgary left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Reviewed by Copilot on behalf of @bghgary]

Addressed — the existence-check restores the explicit error for old-native (PROTOCOL_VERSION unbumped). LGTM.

@bkaradzic-microsoft bkaradzic-microsoft merged commit 562d145 into master Jun 22, 2026
22 checks passed
@bkaradzic-microsoft bkaradzic-microsoft deleted the native-engine-name-update-texture-data branch June 22, 2026 21:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants