@babylonjs/core 5.49.0 → 5.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  2. package/Engines/Native/nativeInterfaces.js.map +1 -1
  3. package/Engines/Native/nativePipelineContext.d.ts +6 -2
  4. package/Engines/Native/nativePipelineContext.js +12 -3
  5. package/Engines/Native/nativePipelineContext.js.map +1 -1
  6. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  7. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  8. package/Engines/WebGPU/webgpuTintWASM.js +1 -1
  9. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  10. package/Engines/engine.d.ts +53 -0
  11. package/Engines/nativeEngine.d.ts +2 -5
  12. package/Engines/nativeEngine.js +44 -12
  13. package/Engines/nativeEngine.js.map +1 -1
  14. package/Engines/thinEngine.js +2 -2
  15. package/Engines/thinEngine.js.map +1 -1
  16. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  17. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  18. package/Materials/PBR/pbrMaterial.decalMap.d.ts +12 -0
  19. package/Materials/PBR/pbrMaterial.decalMap.js +18 -0
  20. package/Materials/PBR/pbrMaterial.decalMap.js.map +1 -0
  21. package/Materials/Textures/renderTargetTexture.js +2 -4
  22. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  23. package/Materials/index.d.ts +2 -0
  24. package/Materials/index.js +2 -0
  25. package/Materials/index.js.map +1 -1
  26. package/Materials/material.decalMap.d.ts +3 -0
  27. package/Materials/material.decalMap.js +4 -0
  28. package/Materials/material.decalMap.js.map +1 -0
  29. package/Materials/material.decalMapConfiguration.d.ts +63 -0
  30. package/Materials/material.decalMapConfiguration.js +119 -0
  31. package/Materials/material.decalMapConfiguration.js.map +1 -0
  32. package/Materials/materialFlags.d.ts +6 -0
  33. package/Materials/materialFlags.js +14 -0
  34. package/Materials/materialFlags.js.map +1 -1
  35. package/Materials/standardMaterial.decalMap.d.ts +12 -0
  36. package/Materials/standardMaterial.decalMap.js +18 -0
  37. package/Materials/standardMaterial.decalMap.js.map +1 -0
  38. package/Materials/standardMaterial.js +1 -0
  39. package/Materials/standardMaterial.js.map +1 -1
  40. package/Maths/math.vector.d.ts +10 -0
  41. package/Maths/math.vector.js +14 -0
  42. package/Maths/math.vector.js.map +1 -1
  43. package/Meshes/abstractMesh.decalMap.d.ts +12 -0
  44. package/Meshes/abstractMesh.decalMap.js +12 -0
  45. package/Meshes/abstractMesh.decalMap.js.map +1 -0
  46. package/Meshes/index.d.ts +2 -0
  47. package/Meshes/index.js +2 -0
  48. package/Meshes/index.js.map +1 -1
  49. package/Meshes/meshUVSpaceRenderer.d.ts +94 -0
  50. package/Meshes/meshUVSpaceRenderer.js +141 -0
  51. package/Meshes/meshUVSpaceRenderer.js.map +1 -0
  52. package/Particles/gpuParticleSystem.js +1 -1
  53. package/Particles/gpuParticleSystem.js.map +1 -1
  54. package/Physics/v2/physicsAggregate.d.ts +4 -0
  55. package/Physics/v2/physicsAggregate.js +4 -4
  56. package/Physics/v2/physicsAggregate.js.map +1 -1
  57. package/Physics/v2/physicsBody.d.ts +18 -2
  58. package/Physics/v2/physicsBody.js +66 -1
  59. package/Physics/v2/physicsBody.js.map +1 -1
  60. package/Rendering/fluidRenderer/fluidRenderer.js +2 -1
  61. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  62. package/Rendering/renderingManager.js +4 -2
  63. package/Rendering/renderingManager.js.map +1 -1
  64. package/Shaders/ShadersInclude/decalFragment.d.ts +5 -0
  65. package/Shaders/ShadersInclude/decalFragment.js +15 -0
  66. package/Shaders/ShadersInclude/decalFragment.js.map +1 -0
  67. package/Shaders/ShadersInclude/decalFragmentDeclaration.d.ts +5 -0
  68. package/Shaders/ShadersInclude/decalFragmentDeclaration.js +11 -0
  69. package/Shaders/ShadersInclude/decalFragmentDeclaration.js.map +1 -0
  70. package/Shaders/ShadersInclude/decalVertexDeclaration.d.ts +5 -0
  71. package/Shaders/ShadersInclude/decalVertexDeclaration.js +11 -0
  72. package/Shaders/ShadersInclude/decalVertexDeclaration.js.map +1 -0
  73. package/Shaders/ShadersInclude/defaultFragmentDeclaration.d.ts +1 -0
  74. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +2 -0
  75. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  76. package/Shaders/ShadersInclude/defaultVertexDeclaration.d.ts +1 -0
  77. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +2 -0
  78. package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
  79. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -0
  80. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +4 -0
  81. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  82. package/Shaders/ShadersInclude/pbrFragmentDeclaration.d.ts +1 -0
  83. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +2 -0
  84. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  85. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
  86. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  87. package/Shaders/ShadersInclude/pbrVertexDeclaration.d.ts +1 -0
  88. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +2 -0
  89. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  90. package/Shaders/default.fragment.d.ts +1 -0
  91. package/Shaders/default.fragment.js +5 -0
  92. package/Shaders/default.fragment.js.map +1 -1
  93. package/Shaders/default.vertex.js +2 -0
  94. package/Shaders/default.vertex.js.map +1 -1
  95. package/Shaders/geometry.fragment.js +1 -1
  96. package/Shaders/geometry.fragment.js.map +1 -1
  97. package/Shaders/meshUVSpaceRenderer.fragment.d.ts +5 -0
  98. package/Shaders/meshUVSpaceRenderer.fragment.js +9 -0
  99. package/Shaders/meshUVSpaceRenderer.fragment.js.map +1 -0
  100. package/Shaders/meshUVSpaceRenderer.vertex.d.ts +15 -0
  101. package/Shaders/meshUVSpaceRenderer.vertex.js +34 -0
  102. package/Shaders/meshUVSpaceRenderer.vertex.js.map +1 -0
  103. package/Shaders/pbr.fragment.js +4 -0
  104. package/Shaders/pbr.fragment.js.map +1 -1
  105. package/Shaders/pbr.vertex.js +2 -0
  106. package/Shaders/pbr.vertex.js.map +1 -1
  107. package/Shaders/screenSpaceReflection2.fragment.js +1 -1
  108. package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
  109. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  110. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  111. package/Sprites/spriteManager.js +5 -3
  112. package/Sprites/spriteManager.js.map +1 -1
  113. package/Sprites/spriteSceneComponent.d.ts +1 -1
  114. package/Sprites/spriteSceneComponent.js +7 -4
  115. package/Sprites/spriteSceneComponent.js.map +1 -1
  116. package/XR/features/WebXRDepthSensing.d.ts +118 -0
  117. package/XR/features/WebXRDepthSensing.js +268 -0
  118. package/XR/features/WebXRDepthSensing.js.map +1 -0
  119. package/XR/features/index.d.ts +1 -0
  120. package/XR/features/index.js +1 -0
  121. package/XR/features/index.js.map +1 -1
  122. package/XR/native/nativeXRFrame.d.ts +1 -0
  123. package/XR/native/nativeXRFrame.js +4 -0
  124. package/XR/native/nativeXRFrame.js.map +1 -1
  125. package/XR/webXRCamera.d.ts +1 -0
  126. package/XR/webXRCamera.js +4 -0
  127. package/XR/webXRCamera.js.map +1 -1
  128. package/XR/webXRFeaturesManager.d.ts +4 -0
  129. package/XR/webXRFeaturesManager.js +4 -0
  130. package/XR/webXRFeaturesManager.js.map +1 -1
  131. package/assetContainer.js +13 -5
  132. package/assetContainer.js.map +1 -1
  133. package/package.json +1 -1
@@ -35,7 +35,7 @@ export class WebGPUTintWASM {
35
35
  console.log(ccode);
36
36
  console.log("***********************************************");
37
37
  }
38
- return ccode;
38
+ return "diagnostic(off, derivative_uniformity);\n" + ccode;
39
39
  }
40
40
  }
41
41
  // Default twgsl options.
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuTintWASM.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuTintWASM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAsBzC,gBAAgB;AAChB,MAAM,OAAO,cAAc;IAA3B;QASY,WAAM,GAAQ,IAAI,CAAC;IAsC/B,CAAC;IApCU,KAAK,CAAC,SAAS,CAAC,YAA2B;QAC9C,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;QAClC,YAAY,GAAG;YACX,GAAG,cAAc,CAAC,oBAAoB;YACtC,GAAG,YAAY;SAClB,CAAC;QAEF,IAAI,YAAY,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QAED,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE;YAC9C,IAAI,mBAAmB,EAAE,EAAE;gBACvB,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACpD;iBAAM;gBACH,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACtC;SACJ;QAED,IAAK,IAAY,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,MAAM,GAAG,MAAO,IAAY,CAAC,KAAK,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACrD,CAAC;IAEM,iBAAiB,CAAC,IAAiB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,cAAc,CAAC,kBAAkB,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;SAClE;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;;AA7CD,yBAAyB;AACD,mCAAoB,GAAiB;IACzD,MAAM,EAAE,8CAA8C;IACtD,QAAQ,EAAE,gDAAgD;CAC7D,CAAC;AAEY,iCAAkB,GAAG,KAAK,CAAC","sourcesContent":["import { IsWindowObjectExist } from \"../../Misc/domManagement\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * Options to load the associated Twgsl library\r\n */\r\nexport interface TwgslOptions {\r\n /**\r\n * Defines an existing instance of Twgsl (useful in modules who do not access the global instance).\r\n */\r\n twgsl?: any;\r\n /**\r\n * Defines the URL of the twgsl JS File.\r\n */\r\n jsPath?: string;\r\n /**\r\n * Defines the URL of the twgsl WASM File.\r\n */\r\n wasmPath?: string;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUTintWASM {\r\n // Default twgsl options.\r\n private static readonly _TWgslDefaultOptions: TwgslOptions = {\r\n jsPath: \"https://preview.babylonjs.com/twgsl/twgsl.js\",\r\n wasmPath: \"https://preview.babylonjs.com/twgsl/twgsl.wasm\",\r\n };\r\n\r\n public static ShowWGSLShaderCode = false;\r\n\r\n private _twgsl: any = null;\r\n\r\n public async initTwgsl(twgslOptions?: TwgslOptions): Promise<void> {\r\n twgslOptions = twgslOptions || {};\r\n twgslOptions = {\r\n ...WebGPUTintWASM._TWgslDefaultOptions,\r\n ...twgslOptions,\r\n };\r\n\r\n if (twgslOptions.twgsl) {\r\n this._twgsl = twgslOptions.twgsl;\r\n return Promise.resolve();\r\n }\r\n\r\n if (twgslOptions.jsPath && twgslOptions.wasmPath) {\r\n if (IsWindowObjectExist()) {\r\n await Tools.LoadScriptAsync(twgslOptions.jsPath);\r\n } else {\r\n importScripts(twgslOptions.jsPath);\r\n }\r\n }\r\n\r\n if ((self as any).twgsl) {\r\n this._twgsl = await (self as any).twgsl(twgslOptions!.wasmPath);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"twgsl is not available.\");\r\n }\r\n\r\n public convertSpirV2WGSL(code: Uint32Array): string {\r\n const ccode = this._twgsl.convertSpirV2WGSL(code);\r\n if (WebGPUTintWASM.ShowWGSLShaderCode) {\r\n console.log(ccode);\r\n console.log(\"***********************************************\");\r\n }\r\n return ccode;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuTintWASM.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuTintWASM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAsBzC,gBAAgB;AAChB,MAAM,OAAO,cAAc;IAA3B;QASY,WAAM,GAAQ,IAAI,CAAC;IAsC/B,CAAC;IApCU,KAAK,CAAC,SAAS,CAAC,YAA2B;QAC9C,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;QAClC,YAAY,GAAG;YACX,GAAG,cAAc,CAAC,oBAAoB;YACtC,GAAG,YAAY;SAClB,CAAC;QAEF,IAAI,YAAY,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QAED,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE;YAC9C,IAAI,mBAAmB,EAAE,EAAE;gBACvB,MAAM,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACpD;iBAAM;gBACH,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACtC;SACJ;QAED,IAAK,IAAY,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,MAAM,GAAG,MAAO,IAAY,CAAC,KAAK,CAAC,YAAa,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACrD,CAAC;IAEM,iBAAiB,CAAC,IAAiB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,cAAc,CAAC,kBAAkB,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;SAClE;QACD,OAAO,2CAA2C,GAAG,KAAK,CAAC;IAC/D,CAAC;;AA7CD,yBAAyB;AACD,mCAAoB,GAAiB;IACzD,MAAM,EAAE,8CAA8C;IACtD,QAAQ,EAAE,gDAAgD;CAC7D,CAAC;AAEY,iCAAkB,GAAG,KAAK,CAAC","sourcesContent":["import { IsWindowObjectExist } from \"../../Misc/domManagement\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * Options to load the associated Twgsl library\r\n */\r\nexport interface TwgslOptions {\r\n /**\r\n * Defines an existing instance of Twgsl (useful in modules who do not access the global instance).\r\n */\r\n twgsl?: any;\r\n /**\r\n * Defines the URL of the twgsl JS File.\r\n */\r\n jsPath?: string;\r\n /**\r\n * Defines the URL of the twgsl WASM File.\r\n */\r\n wasmPath?: string;\r\n}\r\n\r\n/** @internal */\r\nexport class WebGPUTintWASM {\r\n // Default twgsl options.\r\n private static readonly _TWgslDefaultOptions: TwgslOptions = {\r\n jsPath: \"https://preview.babylonjs.com/twgsl/twgsl.js\",\r\n wasmPath: \"https://preview.babylonjs.com/twgsl/twgsl.wasm\",\r\n };\r\n\r\n public static ShowWGSLShaderCode = false;\r\n\r\n private _twgsl: any = null;\r\n\r\n public async initTwgsl(twgslOptions?: TwgslOptions): Promise<void> {\r\n twgslOptions = twgslOptions || {};\r\n twgslOptions = {\r\n ...WebGPUTintWASM._TWgslDefaultOptions,\r\n ...twgslOptions,\r\n };\r\n\r\n if (twgslOptions.twgsl) {\r\n this._twgsl = twgslOptions.twgsl;\r\n return Promise.resolve();\r\n }\r\n\r\n if (twgslOptions.jsPath && twgslOptions.wasmPath) {\r\n if (IsWindowObjectExist()) {\r\n await Tools.LoadScriptAsync(twgslOptions.jsPath);\r\n } else {\r\n importScripts(twgslOptions.jsPath);\r\n }\r\n }\r\n\r\n if ((self as any).twgsl) {\r\n this._twgsl = await (self as any).twgsl(twgslOptions!.wasmPath);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"twgsl is not available.\");\r\n }\r\n\r\n public convertSpirV2WGSL(code: Uint32Array): string {\r\n const ccode = this._twgsl.convertSpirV2WGSL(code);\r\n if (WebGPUTintWASM.ShowWGSLShaderCode) {\r\n console.log(ccode);\r\n console.log(\"***********************************************\");\r\n }\r\n return \"diagnostic(off, derivative_uniformity);\\n\" + ccode;\r\n }\r\n}\r\n"]}
@@ -3481,6 +3481,59 @@ interface XRLightProbe extends EventTarget {
3481
3481
  * END: WebXR DOM Overlays Module
3482
3482
  * https://immersive-web.github.io/dom-overlays/
3483
3483
  */
3484
+
3485
+ /**
3486
+ * BEGIN: WebXR Depth Sensing Moudle
3487
+ * https://www.w3.org/TR/webxr-depth-sensing-1/
3488
+ */
3489
+
3490
+ type XRDepthUsage = "cpu-optimized" | "gpu-optimized";
3491
+ type XRDepthDataFormat = "luminance-alpha" | "float32";
3492
+
3493
+ type XRDepthStateInit = {
3494
+ readonly usagePreference: XRDepthUsage[];
3495
+ readonly dataFormatPreference: XRDepthDataFormat[];
3496
+ };
3497
+
3498
+ interface XRSessionInit {
3499
+ depthSensing?: XRDepthStateInit;
3500
+ }
3501
+
3502
+ interface XRSession {
3503
+ readonly depthUsage: XRDepthUsage;
3504
+ readonly depthDataFormat: XRDepthDataFormat;
3505
+ }
3506
+
3507
+ interface XRDepthInformation {
3508
+ readonly width: number;
3509
+ readonly height: number;
3510
+
3511
+ readonly normDepthBufferFromNormView: XRRigidTransform;
3512
+ readonly rawValueToMeters: number;
3513
+ }
3514
+
3515
+ interface XRCPUDepthInformation extends XRDepthInformation {
3516
+ readonly data: ArrayBuffer;
3517
+
3518
+ getDepthInMeters(x: number, y: number): number;
3519
+ }
3520
+
3521
+ interface XRFrame {
3522
+ getDepthInformation(view: XRView): ?XRCPUDepthInformation;
3523
+ }
3524
+
3525
+ interface XRWebGLDepthInformation extends XRDepthInformation {
3526
+ readonly texture: WebGLTexture;
3527
+ }
3528
+
3529
+ interface XRWebGLBinding {
3530
+ getDepthInformation(view: XRView): ?XRWebGLDepthInformation;
3531
+ }
3532
+
3533
+ /**
3534
+ * END: WebXR Depth Sensing Moudle
3535
+ * https://www.w3.org/TR/webxr-depth-sensing-1/
3536
+ */
3484
3537
 
3485
3538
  // This file contains native only extensions for WebXR. These APIs are not supported in the browser yet.
3486
3539
  // They are intended for use with either Babylon Native https://github.com/BabylonJS/BabylonNative or
@@ -130,16 +130,13 @@ export declare class NativeEngine extends Engine {
130
130
  createMaterialContext(): IMaterialContext | undefined;
131
131
  createDrawContext(): IDrawContext | undefined;
132
132
  _preparePipelineContext(pipelineContext: IPipelineContext, vertexSourceCode: string, fragmentSourceCode: string, createAsRaw: boolean, _rawVertexSourceCode: string, _rawFragmentSourceCode: string, _rebuildRebind: any, defines: Nullable<string>): void;
133
- /**
134
- * @internal
135
- */
136
- _isRenderingStateCompiled(pipelineContext: IPipelineContext): boolean;
133
+ isAsync(pipelineContext: IPipelineContext): boolean;
137
134
  /**
138
135
  * @internal
139
136
  */
140
137
  _executeWhenRenderingStateIsCompiled(pipelineContext: IPipelineContext, action: () => void): void;
141
138
  createRawShaderProgram(): WebGLProgram;
142
- createShaderProgram(_pipelineContext: IPipelineContext, vertexCode: string, fragmentCode: string, defines: Nullable<string>): WebGLProgram;
139
+ createShaderProgram(pipelineContext: IPipelineContext, vertexCode: string, fragmentCode: string, defines: Nullable<string>): WebGLProgram;
143
140
  /**
144
141
  * Inline functions in shader code that are marked to be inlined
145
142
  * @param code code to inline
@@ -488,24 +488,37 @@ export class NativeEngine extends Engine {
488
488
  nativePipelineContext.nativeProgram = this.createShaderProgram(pipelineContext, vertexSourceCode, fragmentSourceCode, defines);
489
489
  }
490
490
  }
491
- /**
492
- * @internal
493
- */
494
- _isRenderingStateCompiled(pipelineContext) {
495
- // TODO: support async shader compilcation
496
- return true;
491
+ isAsync(pipelineContext) {
492
+ return !!(pipelineContext.isAsync && this._engine.createProgramAsync);
497
493
  }
498
494
  /**
499
495
  * @internal
500
496
  */
501
497
  _executeWhenRenderingStateIsCompiled(pipelineContext, action) {
502
- // TODO: support async shader compilcation
503
- action();
498
+ const nativePipelineContext = pipelineContext;
499
+ if (!this.isAsync(pipelineContext)) {
500
+ action();
501
+ return;
502
+ }
503
+ const oldHandler = nativePipelineContext.onCompiled;
504
+ if (oldHandler) {
505
+ nativePipelineContext.onCompiled = () => {
506
+ oldHandler();
507
+ action();
508
+ };
509
+ }
510
+ else {
511
+ nativePipelineContext.onCompiled = action;
512
+ }
504
513
  }
505
514
  createRawShaderProgram() {
506
515
  throw new Error("Not Supported");
507
516
  }
508
- createShaderProgram(_pipelineContext, vertexCode, fragmentCode, defines) {
517
+ createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines) {
518
+ const nativePipelineContext = pipelineContext;
519
+ if (nativePipelineContext.nativeProgram) {
520
+ throw new Error("Tried to create a second program in the same NativePipelineContext");
521
+ }
509
522
  this.onBeforeShaderCompilationObservable.notifyObservers(this);
510
523
  const vertexInliner = new ShaderCodeInliner(vertexCode);
511
524
  vertexInliner.processCode();
@@ -515,9 +528,28 @@ export class NativeEngine extends Engine {
515
528
  fragmentCode = fragmentInliner.code;
516
529
  vertexCode = ThinEngine._ConcatenateShader(vertexCode, defines);
517
530
  fragmentCode = ThinEngine._ConcatenateShader(fragmentCode, defines);
518
- const program = this._engine.createProgram(vertexCode, fragmentCode);
519
- this.onAfterShaderCompilationObservable.notifyObservers(this);
520
- return program;
531
+ const onSuccess = () => {
532
+ var _a;
533
+ nativePipelineContext.isCompiled = true;
534
+ (_a = nativePipelineContext.onCompiled) === null || _a === void 0 ? void 0 : _a.call(nativePipelineContext);
535
+ this.onAfterShaderCompilationObservable.notifyObservers(this);
536
+ };
537
+ if (this.isAsync(pipelineContext)) {
538
+ return this._engine.createProgramAsync(vertexCode, fragmentCode, onSuccess, (error) => {
539
+ nativePipelineContext.compilationError = error;
540
+ });
541
+ }
542
+ else {
543
+ try {
544
+ const program = (nativePipelineContext.nativeProgram = this._engine.createProgram(vertexCode, fragmentCode));
545
+ onSuccess();
546
+ return program;
547
+ }
548
+ catch (e) {
549
+ const message = e === null || e === void 0 ? void 0 : e.message;
550
+ throw new Error("SHADER ERROR" + (typeof message === "string" ? "\n" + message : ""));
551
+ }
552
+ }
521
553
  }
522
554
  /**
523
555
  * Inline functions in shader code that are marked to be inlined