@babylonjs/core 6.7.0 → 6.8.0

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 (74) hide show
  1. package/Culling/ray.d.ts +7 -2
  2. package/Culling/ray.js +8 -3
  3. package/Culling/ray.js.map +1 -1
  4. package/Engines/Extensions/engine.multiview.d.ts +6 -1
  5. package/Engines/Extensions/engine.multiview.js +27 -7
  6. package/Engines/Extensions/engine.multiview.js.map +1 -1
  7. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  8. package/Engines/Native/nativeInterfaces.js.map +1 -1
  9. package/Engines/Processors/Expressions/shaderDefineExpression.d.ts +37 -0
  10. package/Engines/Processors/Expressions/shaderDefineExpression.js +57 -0
  11. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  12. package/Engines/Processors/shaderProcessor.js +26 -13
  13. package/Engines/Processors/shaderProcessor.js.map +1 -1
  14. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +19 -0
  15. package/Engines/WebGL/webGLRenderTargetWrapper.js +20 -1
  16. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  17. package/Engines/engine.d.ts +8 -1
  18. package/Engines/engineCapabilities.d.ts +2 -0
  19. package/Engines/engineCapabilities.js.map +1 -1
  20. package/Engines/nativeEngine.d.ts +2 -0
  21. package/Engines/nativeEngine.js +16 -0
  22. package/Engines/nativeEngine.js.map +1 -1
  23. package/Engines/thinEngine.js +6 -9
  24. package/Engines/thinEngine.js.map +1 -1
  25. package/Loading/sceneLoader.d.ts +8 -8
  26. package/Loading/sceneLoader.js +35 -19
  27. package/Loading/sceneLoader.js.map +1 -1
  28. package/Materials/Node/nodeMaterial.d.ts +6 -1
  29. package/Materials/Node/nodeMaterial.js +7 -5
  30. package/Materials/Node/nodeMaterial.js.map +1 -1
  31. package/Materials/multiMaterial.js +1 -1
  32. package/Materials/multiMaterial.js.map +1 -1
  33. package/Materials/shaderMaterial.d.ts +23 -4
  34. package/Materials/shaderMaterial.js +38 -5
  35. package/Materials/shaderMaterial.js.map +1 -1
  36. package/Meshes/abstractMesh.d.ts +2 -1
  37. package/Meshes/abstractMesh.js +2 -1
  38. package/Meshes/abstractMesh.js.map +1 -1
  39. package/Misc/deepCopier.js +1 -1
  40. package/Misc/deepCopier.js.map +1 -1
  41. package/Misc/observable.d.ts +11 -0
  42. package/Misc/observable.js +26 -1
  43. package/Misc/observable.js.map +1 -1
  44. package/Particles/gpuParticleSystem.d.ts +1 -0
  45. package/Particles/gpuParticleSystem.js +3 -2
  46. package/Particles/gpuParticleSystem.js.map +1 -1
  47. package/Rendering/boundingBoxRenderer.js +2 -4
  48. package/Rendering/boundingBoxRenderer.js.map +1 -1
  49. package/Shaders/ShadersInclude/pbrDebug.js +8 -1
  50. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  51. package/Shaders/velocity.fragment.d.ts +5 -0
  52. package/Shaders/velocity.fragment.js +13 -0
  53. package/Shaders/velocity.fragment.js.map +1 -0
  54. package/Shaders/velocity.vertex.d.ts +7 -0
  55. package/Shaders/velocity.vertex.js +23 -0
  56. package/Shaders/velocity.vertex.js.map +1 -0
  57. package/XR/features/WebXRLayers.js +16 -6
  58. package/XR/features/WebXRLayers.js.map +1 -1
  59. package/XR/features/WebXRSpaceWarp.d.ts +138 -0
  60. package/XR/features/WebXRSpaceWarp.js +290 -0
  61. package/XR/features/WebXRSpaceWarp.js.map +1 -0
  62. package/XR/features/index.d.ts +1 -0
  63. package/XR/features/index.js +1 -0
  64. package/XR/features/index.js.map +1 -1
  65. package/XR/webXRFeaturesManager.d.ts +4 -0
  66. package/XR/webXRFeaturesManager.js +4 -0
  67. package/XR/webXRFeaturesManager.js.map +1 -1
  68. package/XR/webXRSessionManager.d.ts +4 -0
  69. package/XR/webXRSessionManager.js +6 -0
  70. package/XR/webXRSessionManager.js.map +1 -1
  71. package/package.json +1 -1
  72. package/scene.d.ts +5 -2
  73. package/scene.js +5 -2
  74. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webGLRenderTargetWrapper.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGL/webGLRenderTargetWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Engine } from \"../engine\";\r\nimport { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { ThinEngine } from \"../thinEngine\";\r\n\r\n/** @internal */\r\nexport class WebGLRenderTargetWrapper extends RenderTargetWrapper {\r\n private _context: WebGLRenderingContext;\r\n\r\n public _framebuffer: Nullable<WebGLFramebuffer> = null;\r\n public _depthStencilBuffer: Nullable<WebGLRenderbuffer> = null;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public _MSAAFramebuffer: Nullable<WebGLFramebuffer> = null;\r\n\r\n // Multiview\r\n public _colorTextureArray: Nullable<WebGLTexture> = null;\r\n public _depthStencilTextureArray: Nullable<WebGLTexture> = null;\r\n\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: ThinEngine, context: WebGLRenderingContext) {\r\n super(isMulti, isCube, size, engine);\r\n\r\n this._context = context;\r\n }\r\n\r\n protected _cloneRenderTargetWrapper(): Nullable<RenderTargetWrapper> {\r\n let rtw: Nullable<RenderTargetWrapper> = null;\r\n\r\n if (this._colorTextureArray && this._depthStencilTextureArray) {\r\n rtw = (this._engine as Engine).createMultiviewRenderTargetTexture(this.width, this.height);\r\n rtw.texture!.isReady = true;\r\n } else {\r\n rtw = super._cloneRenderTargetWrapper();\r\n }\r\n\r\n return rtw;\r\n }\r\n\r\n protected _swapRenderTargetWrapper(target: WebGLRenderTargetWrapper): void {\r\n super._swapRenderTargetWrapper(target);\r\n\r\n target._framebuffer = this._framebuffer;\r\n target._depthStencilBuffer = this._depthStencilBuffer;\r\n target._MSAAFramebuffer = this._MSAAFramebuffer;\r\n target._colorTextureArray = this._colorTextureArray;\r\n target._depthStencilTextureArray = this._depthStencilTextureArray;\r\n\r\n this._framebuffer = this._depthStencilBuffer = this._MSAAFramebuffer = this._colorTextureArray = this._depthStencilTextureArray = null;\r\n }\r\n\r\n /**\r\n * Shares the depth buffer of this render target with another render target.\r\n * @internal\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public _shareDepth(renderTarget: WebGLRenderTargetWrapper): void {\r\n super._shareDepth(renderTarget);\r\n\r\n const gl = this._context;\r\n const depthbuffer = this._depthStencilBuffer;\r\n const framebuffer = renderTarget._MSAAFramebuffer || renderTarget._framebuffer;\r\n\r\n if (renderTarget._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(renderTarget._depthStencilBuffer);\r\n }\r\n renderTarget._depthStencilBuffer = this._depthStencilBuffer;\r\n\r\n this._engine._bindUnboundFramebuffer(framebuffer);\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthbuffer);\r\n this._engine._bindUnboundFramebuffer(null);\r\n }\r\n\r\n /**\r\n * Binds a texture to this render target on a specific attachment\r\n * @param texture The texture to bind to the framebuffer\r\n * @param attachmentIndex Index of the attachment\r\n * @param faceIndexOrLayer The face or layer of the texture to render to in case of cube texture or array texture\r\n * @param lodLevel defines the lod level to bind to the frame buffer\r\n */\r\n private _bindTextureRenderTarget(texture: InternalTexture, attachmentIndex: number = 0, faceIndexOrLayer?: number, lodLevel: number = 0) {\r\n if (!texture._hardwareTexture) {\r\n return;\r\n }\r\n\r\n const framebuffer = this._framebuffer;\r\n\r\n const currentFB = this._engine._currentFramebuffer;\r\n this._engine._bindUnboundFramebuffer(framebuffer);\r\n\r\n if (this._engine.webGLVersion > 1) {\r\n const gl = this._context as WebGL2RenderingContext;\r\n\r\n const attachment = (<any>gl)[\"COLOR_ATTACHMENT\" + attachmentIndex];\r\n if (texture.is2DArray || texture.is3D) {\r\n faceIndexOrLayer = faceIndexOrLayer ?? this.layerIndices?.[attachmentIndex] ?? 0;\r\n gl.framebufferTextureLayer(gl.FRAMEBUFFER, attachment, texture._hardwareTexture.underlyingResource, lodLevel, faceIndexOrLayer);\r\n } else if (texture.isCube) {\r\n // if face index is not specified, try to query it from faceIndices\r\n // default is face 0\r\n faceIndexOrLayer = faceIndexOrLayer ?? this.faceIndices?.[attachmentIndex] ?? 0;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndexOrLayer, texture._hardwareTexture.underlyingResource, lodLevel);\r\n } else {\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, texture._hardwareTexture.underlyingResource, lodLevel);\r\n }\r\n } else {\r\n // Default behavior (WebGL)\r\n const gl = this._context;\r\n\r\n const attachment = (<any>gl)[\"COLOR_ATTACHMENT\" + attachmentIndex + \"_WEBGL\"];\r\n const target = faceIndexOrLayer !== undefined ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndexOrLayer : gl.TEXTURE_2D;\r\n\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, target, texture._hardwareTexture.underlyingResource, lodLevel);\r\n }\r\n\r\n this._engine._bindUnboundFramebuffer(currentFB);\r\n }\r\n\r\n /**\r\n * Set a texture in the textures array\r\n * @param texture the texture to set\r\n * @param index the index in the textures array to set\r\n * @param disposePrevious If this function should dispose the previous texture\r\n */\r\n public setTexture(texture: InternalTexture, index: number = 0, disposePrevious: boolean = true) {\r\n super.setTexture(texture, index, disposePrevious);\r\n this._bindTextureRenderTarget(texture, index);\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of every render target texture\r\n * @param layers The layer of the texture to be set (make negative to not modify)\r\n * @param faces The face of the texture to be set (make negative to not modify)\r\n */\r\n public setLayerAndFaceIndices(layers: number[], faces: number[]) {\r\n super.setLayerAndFaceIndices(layers, faces);\r\n\r\n if (!this.textures || !this.layerIndices || !this.faceIndices) {\r\n return;\r\n }\r\n\r\n // the length of this._attachments is the right one as it does not count the depth texture, in case we generated it\r\n const textureCount = this._attachments?.length ?? this.textures.length;\r\n for (let index = 0; index < textureCount; index++) {\r\n const texture = this.textures[index];\r\n if (!texture) {\r\n // The target type was probably -1 at creation time and setTexture has not been called yet for this index\r\n continue;\r\n }\r\n if (texture.is2DArray || texture.is3D) {\r\n this._bindTextureRenderTarget(texture, index, this.layerIndices[index]);\r\n } else if (texture.isCube) {\r\n this._bindTextureRenderTarget(texture, index, this.faceIndices[index]);\r\n } else {\r\n this._bindTextureRenderTarget(texture, index);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the face and layer indices of a texture in the textures array\r\n * @param index The index of the texture in the textures array to modify\r\n * @param layer The layer of the texture to be set\r\n * @param face The face of the texture to be set\r\n */\r\n public setLayerAndFaceIndex(index: number = 0, layer?: number, face?: number): void {\r\n super.setLayerAndFaceIndex(index, layer, face);\r\n\r\n if (!this.textures || !this.layerIndices || !this.faceIndices) {\r\n return;\r\n }\r\n\r\n const texture = this.textures[index];\r\n if (texture.is2DArray || texture.is3D) {\r\n this._bindTextureRenderTarget(this.textures[index], index, this.layerIndices[index]);\r\n } else if (texture.isCube) {\r\n this._bindTextureRenderTarget(this.textures[index], index, this.faceIndices[index]);\r\n }\r\n }\r\n\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n const gl = this._context;\r\n\r\n if (!disposeOnlyFramebuffers) {\r\n if (this._colorTextureArray) {\r\n this._context.deleteTexture(this._colorTextureArray);\r\n this._colorTextureArray = null;\r\n }\r\n if (this._depthStencilTextureArray) {\r\n this._context.deleteTexture(this._depthStencilTextureArray);\r\n this._depthStencilTextureArray = null;\r\n }\r\n }\r\n\r\n if (this._framebuffer) {\r\n gl.deleteFramebuffer(this._framebuffer);\r\n this._framebuffer = null;\r\n }\r\n\r\n if (this._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(this._depthStencilBuffer);\r\n this._depthStencilBuffer = null;\r\n }\r\n\r\n if (this._MSAAFramebuffer) {\r\n gl.deleteFramebuffer(this._MSAAFramebuffer);\r\n this._MSAAFramebuffer = null;\r\n }\r\n\r\n super.dispose(disposeOnlyFramebuffers);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webGLRenderTargetWrapper.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGL/webGLRenderTargetWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Engine } from \"../engine\";\r\nimport { RenderTargetWrapper } from \"../renderTargetWrapper\";\r\nimport type { ThinEngine } from \"../thinEngine\";\r\n\r\n/** @internal */\r\nexport class WebGLRenderTargetWrapper extends RenderTargetWrapper {\r\n private _context: WebGLRenderingContext;\r\n\r\n /**\r\n * @internal\r\n */\r\n public _framebuffer: Nullable<WebGLFramebuffer> = null;\r\n /**\r\n * @internal\r\n */\r\n public _depthStencilBuffer: Nullable<WebGLRenderbuffer> = null;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n /**\r\n * @internal\r\n */\r\n public _MSAAFramebuffer: Nullable<WebGLFramebuffer> = null;\r\n\r\n // Multiview\r\n /**\r\n * @internal\r\n */\r\n public _colorTextureArray: Nullable<WebGLTexture> = null;\r\n /**\r\n * @internal\r\n */\r\n public _depthStencilTextureArray: Nullable<WebGLTexture> = null;\r\n /**\r\n * @internal\r\n */\r\n public _disposeOnlyFramebuffers = false;\r\n\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: ThinEngine, context: WebGLRenderingContext) {\r\n super(isMulti, isCube, size, engine);\r\n\r\n this._context = context;\r\n }\r\n\r\n protected _cloneRenderTargetWrapper(): Nullable<RenderTargetWrapper> {\r\n let rtw: Nullable<RenderTargetWrapper> = null;\r\n\r\n if (this._colorTextureArray && this._depthStencilTextureArray) {\r\n rtw = (this._engine as Engine).createMultiviewRenderTargetTexture(this.width, this.height);\r\n rtw.texture!.isReady = true;\r\n } else {\r\n rtw = super._cloneRenderTargetWrapper();\r\n }\r\n\r\n return rtw;\r\n }\r\n\r\n protected _swapRenderTargetWrapper(target: WebGLRenderTargetWrapper): void {\r\n super._swapRenderTargetWrapper(target);\r\n\r\n target._framebuffer = this._framebuffer;\r\n target._depthStencilBuffer = this._depthStencilBuffer;\r\n target._MSAAFramebuffer = this._MSAAFramebuffer;\r\n target._colorTextureArray = this._colorTextureArray;\r\n target._depthStencilTextureArray = this._depthStencilTextureArray;\r\n\r\n this._framebuffer = this._depthStencilBuffer = this._MSAAFramebuffer = this._colorTextureArray = this._depthStencilTextureArray = null;\r\n }\r\n\r\n /**\r\n * Shares the depth buffer of this render target with another render target.\r\n * @internal\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public _shareDepth(renderTarget: WebGLRenderTargetWrapper): void {\r\n super._shareDepth(renderTarget);\r\n\r\n const gl = this._context;\r\n const depthbuffer = this._depthStencilBuffer;\r\n const framebuffer = renderTarget._MSAAFramebuffer || renderTarget._framebuffer;\r\n\r\n if (renderTarget._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(renderTarget._depthStencilBuffer);\r\n }\r\n renderTarget._depthStencilBuffer = this._depthStencilBuffer;\r\n\r\n this._engine._bindUnboundFramebuffer(framebuffer);\r\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthbuffer);\r\n this._engine._bindUnboundFramebuffer(null);\r\n }\r\n\r\n /**\r\n * Binds a texture to this render target on a specific attachment\r\n * @param texture The texture to bind to the framebuffer\r\n * @param attachmentIndex Index of the attachment\r\n * @param faceIndexOrLayer The face or layer of the texture to render to in case of cube texture or array texture\r\n * @param lodLevel defines the lod level to bind to the frame buffer\r\n */\r\n private _bindTextureRenderTarget(texture: InternalTexture, attachmentIndex: number = 0, faceIndexOrLayer?: number, lodLevel: number = 0) {\r\n if (!texture._hardwareTexture) {\r\n return;\r\n }\r\n\r\n const framebuffer = this._framebuffer;\r\n\r\n const currentFB = this._engine._currentFramebuffer;\r\n this._engine._bindUnboundFramebuffer(framebuffer);\r\n\r\n if (this._engine.webGLVersion > 1) {\r\n const gl = this._context as WebGL2RenderingContext;\r\n\r\n const attachment = (<any>gl)[\"COLOR_ATTACHMENT\" + attachmentIndex];\r\n if (texture.is2DArray || texture.is3D) {\r\n faceIndexOrLayer = faceIndexOrLayer ?? this.layerIndices?.[attachmentIndex] ?? 0;\r\n gl.framebufferTextureLayer(gl.FRAMEBUFFER, attachment, texture._hardwareTexture.underlyingResource, lodLevel, faceIndexOrLayer);\r\n } else if (texture.isCube) {\r\n // if face index is not specified, try to query it from faceIndices\r\n // default is face 0\r\n faceIndexOrLayer = faceIndexOrLayer ?? this.faceIndices?.[attachmentIndex] ?? 0;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndexOrLayer, texture._hardwareTexture.underlyingResource, lodLevel);\r\n } else {\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, texture._hardwareTexture.underlyingResource, lodLevel);\r\n }\r\n } else {\r\n // Default behavior (WebGL)\r\n const gl = this._context;\r\n\r\n const attachment = (<any>gl)[\"COLOR_ATTACHMENT\" + attachmentIndex + \"_WEBGL\"];\r\n const target = faceIndexOrLayer !== undefined ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndexOrLayer : gl.TEXTURE_2D;\r\n\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, target, texture._hardwareTexture.underlyingResource, lodLevel);\r\n }\r\n\r\n this._engine._bindUnboundFramebuffer(currentFB);\r\n }\r\n\r\n /**\r\n * Set a texture in the textures array\r\n * @param texture the texture to set\r\n * @param index the index in the textures array to set\r\n * @param disposePrevious If this function should dispose the previous texture\r\n */\r\n public setTexture(texture: InternalTexture, index: number = 0, disposePrevious: boolean = true) {\r\n super.setTexture(texture, index, disposePrevious);\r\n this._bindTextureRenderTarget(texture, index);\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of every render target texture\r\n * @param layers The layer of the texture to be set (make negative to not modify)\r\n * @param faces The face of the texture to be set (make negative to not modify)\r\n */\r\n public setLayerAndFaceIndices(layers: number[], faces: number[]) {\r\n super.setLayerAndFaceIndices(layers, faces);\r\n\r\n if (!this.textures || !this.layerIndices || !this.faceIndices) {\r\n return;\r\n }\r\n\r\n // the length of this._attachments is the right one as it does not count the depth texture, in case we generated it\r\n const textureCount = this._attachments?.length ?? this.textures.length;\r\n for (let index = 0; index < textureCount; index++) {\r\n const texture = this.textures[index];\r\n if (!texture) {\r\n // The target type was probably -1 at creation time and setTexture has not been called yet for this index\r\n continue;\r\n }\r\n if (texture.is2DArray || texture.is3D) {\r\n this._bindTextureRenderTarget(texture, index, this.layerIndices[index]);\r\n } else if (texture.isCube) {\r\n this._bindTextureRenderTarget(texture, index, this.faceIndices[index]);\r\n } else {\r\n this._bindTextureRenderTarget(texture, index);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the face and layer indices of a texture in the textures array\r\n * @param index The index of the texture in the textures array to modify\r\n * @param layer The layer of the texture to be set\r\n * @param face The face of the texture to be set\r\n */\r\n public setLayerAndFaceIndex(index: number = 0, layer?: number, face?: number): void {\r\n super.setLayerAndFaceIndex(index, layer, face);\r\n\r\n if (!this.textures || !this.layerIndices || !this.faceIndices) {\r\n return;\r\n }\r\n\r\n const texture = this.textures[index];\r\n if (texture.is2DArray || texture.is3D) {\r\n this._bindTextureRenderTarget(this.textures[index], index, this.layerIndices[index]);\r\n } else if (texture.isCube) {\r\n this._bindTextureRenderTarget(this.textures[index], index, this.faceIndices[index]);\r\n }\r\n }\r\n\r\n public dispose(disposeOnlyFramebuffers = this._disposeOnlyFramebuffers): void {\r\n const gl = this._context;\r\n\r\n if (!disposeOnlyFramebuffers) {\r\n if (this._colorTextureArray) {\r\n this._context.deleteTexture(this._colorTextureArray);\r\n this._colorTextureArray = null;\r\n }\r\n if (this._depthStencilTextureArray) {\r\n this._context.deleteTexture(this._depthStencilTextureArray);\r\n this._depthStencilTextureArray = null;\r\n }\r\n }\r\n\r\n if (this._framebuffer) {\r\n gl.deleteFramebuffer(this._framebuffer);\r\n this._framebuffer = null;\r\n }\r\n\r\n if (this._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(this._depthStencilBuffer);\r\n this._depthStencilBuffer = null;\r\n }\r\n\r\n if (this._MSAAFramebuffer) {\r\n gl.deleteFramebuffer(this._MSAAFramebuffer);\r\n this._MSAAFramebuffer = null;\r\n }\r\n\r\n super.dispose(disposeOnlyFramebuffers);\r\n }\r\n}\r\n"]}
@@ -3407,10 +3407,17 @@ abstract class XRSubImage implements XRSubImage {}
3407
3407
 
3408
3408
  interface XRWebGLSubImage extends XRSubImage {
3409
3409
  readonly colorTexture: WebGLTexture;
3410
- readonly depthStencilTexture: WebGLTexture;
3410
+ readonly depthStencilTexture?: WebGLTexture;
3411
+ readonly motionVectorTexture?: WebGLTexture;
3411
3412
  readonly imageIndex: number;
3412
3413
  readonly textureWidth: number;
3413
3414
  readonly textureHeight: number;
3415
+ readonly colorTextureWidth?: number;
3416
+ readonly colorTextureHeight?: number;
3417
+ readonly depthStencilTextureWidth?: number;
3418
+ readonly depthStencilTextureHeight?: number;
3419
+ readonly motionVectorTextureWidth?: number;
3420
+ readonly motionVectorTextureHeight?: number;
3414
3421
  }
3415
3422
 
3416
3423
  abstract class XRWebGLSubImage implements XRWebGLSubImage {}
@@ -76,6 +76,8 @@ export interface EngineCapabilities {
76
76
  depthTextureExtension: boolean;
77
77
  /** Defines if float color buffer are supported */
78
78
  colorBufferFloat: boolean;
79
+ /** Defines if half float color buffer are supported */
80
+ colorBufferHalfFloat?: boolean;
79
81
  /** Gets disjoint timer query extension (null if not supported) */
80
82
  timerQuery?: EXT_disjoint_timer_query;
81
83
  /** Defines if timestamp can be used with timer query */
@@ -1 +1 @@
1
- {"version":3,"file":"engineCapabilities.js","sourceRoot":"","sources":["../../../../lts/core/generated/Engines/engineCapabilities.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Interface used to describe the capabilities of the engine relatively to the current browser\r\n */\r\nexport interface EngineCapabilities {\r\n /** Maximum textures units per fragment shader */\r\n maxTexturesImageUnits: number;\r\n /** Maximum texture units per vertex shader */\r\n maxVertexTextureImageUnits: number;\r\n /** Maximum textures units in the entire pipeline */\r\n maxCombinedTexturesImageUnits: number;\r\n /** Maximum texture size */\r\n maxTextureSize: number;\r\n /** Maximum texture samples */\r\n maxSamples?: number;\r\n /** Maximum cube texture size */\r\n maxCubemapTextureSize: number;\r\n /** Maximum render texture size */\r\n maxRenderTextureSize: number;\r\n /** Maximum number of vertex attributes */\r\n maxVertexAttribs: number;\r\n /** Maximum number of varyings */\r\n maxVaryingVectors: number;\r\n /** Maximum number of uniforms per vertex shader */\r\n maxVertexUniformVectors: number;\r\n /** Maximum number of uniforms per fragment shader */\r\n maxFragmentUniformVectors: number;\r\n /** Defines if standard derivatives (dx/dy) are supported */\r\n standardDerivatives: boolean;\r\n /** Defines if s3tc texture compression is supported */\r\n s3tc?: WEBGL_compressed_texture_s3tc;\r\n /** Defines if s3tc sRGB texture compression is supported */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n s3tc_srgb?: WEBGL_compressed_texture_s3tc_srgb;\r\n /** Defines if pvrtc texture compression is supported */\r\n pvrtc: any; //WEBGL_compressed_texture_pvrtc;\r\n /** Defines if etc1 texture compression is supported */\r\n etc1: any; //WEBGL_compressed_texture_etc1;\r\n /** Defines if etc2 texture compression is supported */\r\n etc2: any; //WEBGL_compressed_texture_etc;\r\n /** Defines if astc texture compression is supported */\r\n astc: any; //WEBGL_compressed_texture_astc;\r\n /** Defines if bptc texture compression is supported */\r\n bptc: any; //EXT_texture_compression_bptc;\r\n /** Defines if float textures are supported */\r\n textureFloat: boolean;\r\n /** Defines if vertex array objects are supported */\r\n vertexArrayObject: boolean;\r\n /** Gets the webgl extension for anisotropic filtering (null if not supported) */\r\n textureAnisotropicFilterExtension?: EXT_texture_filter_anisotropic;\r\n /** Gets the maximum level of anisotropy supported */\r\n maxAnisotropy: number;\r\n /** Defines if instancing is supported */\r\n instancedArrays: boolean;\r\n /** Defines if 32 bits indices are supported */\r\n uintIndices: boolean;\r\n /** Defines if high precision shaders are supported */\r\n highPrecisionShaderSupported: boolean;\r\n /** Defines if depth reading in the fragment shader is supported */\r\n fragmentDepthSupported: boolean;\r\n /** Defines if float texture linear filtering is supported*/\r\n textureFloatLinearFiltering: boolean;\r\n /** Defines if rendering to float textures is supported */\r\n textureFloatRender: boolean;\r\n /** Defines if half float textures are supported*/\r\n textureHalfFloat: boolean;\r\n /** Defines if half float texture linear filtering is supported*/\r\n textureHalfFloatLinearFiltering: boolean;\r\n /** Defines if rendering to half float textures is supported */\r\n textureHalfFloatRender: boolean;\r\n /** Defines if textureLOD shader command is supported */\r\n textureLOD: boolean;\r\n /** Defines if texelFetch shader command is supported */\r\n texelFetch: boolean;\r\n /** Defines if draw buffers extension is supported */\r\n drawBuffersExtension: boolean;\r\n /** Defines if depth textures are supported */\r\n depthTextureExtension: boolean;\r\n /** Defines if float color buffer are supported */\r\n colorBufferFloat: boolean;\r\n /** Gets disjoint timer query extension (null if not supported) */\r\n timerQuery?: EXT_disjoint_timer_query;\r\n /** Defines if timestamp can be used with timer query */\r\n canUseTimestampForTimerQuery: boolean;\r\n /** Defines if occlusion queries are supported by the engine */\r\n supportOcclusionQuery: boolean;\r\n /** Defines if multiview is supported (https://www.khronos.org/registry/webgl/extensions/WEBGL_multiview/) */\r\n multiview?: any;\r\n /** Defines if oculus multiview is supported (https://developer.oculus.com/documentation/oculus-browser/latest/concepts/browser-multiview/) */\r\n oculusMultiview?: any;\r\n /** Function used to let the system compiles shaders in background */\r\n parallelShaderCompile?: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n COMPLETION_STATUS_KHR: number;\r\n };\r\n /** Max number of texture samples for MSAA */\r\n maxMSAASamples: number;\r\n /** Defines if the blend min max extension is supported */\r\n blendMinMax: boolean;\r\n /** In some iOS + WebGL1, gl_InstanceID (and gl_InstanceIDEXT) is undefined even if instancedArrays is true. So don't use gl_InstanceID in those cases */\r\n canUseGLInstanceID: boolean;\r\n /** Defines if gl_vertexID is available */\r\n canUseGLVertexID: boolean;\r\n /** Defines if compute shaders are supported by the engine */\r\n supportComputeShaders: boolean;\r\n /** Defines if sRGB texture formats are supported */\r\n supportSRGBBuffers: boolean;\r\n /** Defines if transform feedbacks are supported */\r\n supportTransformFeedbacks: boolean;\r\n /** Defines if texture max level are supported */\r\n textureMaxLevel: boolean;\r\n\r\n /** Defines the maximum layer count for a 2D Texture array. */\r\n texture2DArrayMaxLayerCount: number;\r\n /** Defines if the morph target texture is supported. */\r\n disableMorphTargetTexture: boolean;\r\n}\r\n"]}
1
+ {"version":3,"file":"engineCapabilities.js","sourceRoot":"","sources":["../../../../lts/core/generated/Engines/engineCapabilities.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Interface used to describe the capabilities of the engine relatively to the current browser\r\n */\r\nexport interface EngineCapabilities {\r\n /** Maximum textures units per fragment shader */\r\n maxTexturesImageUnits: number;\r\n /** Maximum texture units per vertex shader */\r\n maxVertexTextureImageUnits: number;\r\n /** Maximum textures units in the entire pipeline */\r\n maxCombinedTexturesImageUnits: number;\r\n /** Maximum texture size */\r\n maxTextureSize: number;\r\n /** Maximum texture samples */\r\n maxSamples?: number;\r\n /** Maximum cube texture size */\r\n maxCubemapTextureSize: number;\r\n /** Maximum render texture size */\r\n maxRenderTextureSize: number;\r\n /** Maximum number of vertex attributes */\r\n maxVertexAttribs: number;\r\n /** Maximum number of varyings */\r\n maxVaryingVectors: number;\r\n /** Maximum number of uniforms per vertex shader */\r\n maxVertexUniformVectors: number;\r\n /** Maximum number of uniforms per fragment shader */\r\n maxFragmentUniformVectors: number;\r\n /** Defines if standard derivatives (dx/dy) are supported */\r\n standardDerivatives: boolean;\r\n /** Defines if s3tc texture compression is supported */\r\n s3tc?: WEBGL_compressed_texture_s3tc;\r\n /** Defines if s3tc sRGB texture compression is supported */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n s3tc_srgb?: WEBGL_compressed_texture_s3tc_srgb;\r\n /** Defines if pvrtc texture compression is supported */\r\n pvrtc: any; //WEBGL_compressed_texture_pvrtc;\r\n /** Defines if etc1 texture compression is supported */\r\n etc1: any; //WEBGL_compressed_texture_etc1;\r\n /** Defines if etc2 texture compression is supported */\r\n etc2: any; //WEBGL_compressed_texture_etc;\r\n /** Defines if astc texture compression is supported */\r\n astc: any; //WEBGL_compressed_texture_astc;\r\n /** Defines if bptc texture compression is supported */\r\n bptc: any; //EXT_texture_compression_bptc;\r\n /** Defines if float textures are supported */\r\n textureFloat: boolean;\r\n /** Defines if vertex array objects are supported */\r\n vertexArrayObject: boolean;\r\n /** Gets the webgl extension for anisotropic filtering (null if not supported) */\r\n textureAnisotropicFilterExtension?: EXT_texture_filter_anisotropic;\r\n /** Gets the maximum level of anisotropy supported */\r\n maxAnisotropy: number;\r\n /** Defines if instancing is supported */\r\n instancedArrays: boolean;\r\n /** Defines if 32 bits indices are supported */\r\n uintIndices: boolean;\r\n /** Defines if high precision shaders are supported */\r\n highPrecisionShaderSupported: boolean;\r\n /** Defines if depth reading in the fragment shader is supported */\r\n fragmentDepthSupported: boolean;\r\n /** Defines if float texture linear filtering is supported*/\r\n textureFloatLinearFiltering: boolean;\r\n /** Defines if rendering to float textures is supported */\r\n textureFloatRender: boolean;\r\n /** Defines if half float textures are supported*/\r\n textureHalfFloat: boolean;\r\n /** Defines if half float texture linear filtering is supported*/\r\n textureHalfFloatLinearFiltering: boolean;\r\n /** Defines if rendering to half float textures is supported */\r\n textureHalfFloatRender: boolean;\r\n /** Defines if textureLOD shader command is supported */\r\n textureLOD: boolean;\r\n /** Defines if texelFetch shader command is supported */\r\n texelFetch: boolean;\r\n /** Defines if draw buffers extension is supported */\r\n drawBuffersExtension: boolean;\r\n /** Defines if depth textures are supported */\r\n depthTextureExtension: boolean;\r\n /** Defines if float color buffer are supported */\r\n colorBufferFloat: boolean;\r\n /** Defines if half float color buffer are supported */\r\n colorBufferHalfFloat?: boolean;\r\n /** Gets disjoint timer query extension (null if not supported) */\r\n timerQuery?: EXT_disjoint_timer_query;\r\n /** Defines if timestamp can be used with timer query */\r\n canUseTimestampForTimerQuery: boolean;\r\n /** Defines if occlusion queries are supported by the engine */\r\n supportOcclusionQuery: boolean;\r\n /** Defines if multiview is supported (https://www.khronos.org/registry/webgl/extensions/WEBGL_multiview/) */\r\n multiview?: any;\r\n /** Defines if oculus multiview is supported (https://developer.oculus.com/documentation/oculus-browser/latest/concepts/browser-multiview/) */\r\n oculusMultiview?: any;\r\n /** Function used to let the system compiles shaders in background */\r\n parallelShaderCompile?: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n COMPLETION_STATUS_KHR: number;\r\n };\r\n /** Max number of texture samples for MSAA */\r\n maxMSAASamples: number;\r\n /** Defines if the blend min max extension is supported */\r\n blendMinMax: boolean;\r\n /** In some iOS + WebGL1, gl_InstanceID (and gl_InstanceIDEXT) is undefined even if instancedArrays is true. So don't use gl_InstanceID in those cases */\r\n canUseGLInstanceID: boolean;\r\n /** Defines if gl_vertexID is available */\r\n canUseGLVertexID: boolean;\r\n /** Defines if compute shaders are supported by the engine */\r\n supportComputeShaders: boolean;\r\n /** Defines if sRGB texture formats are supported */\r\n supportSRGBBuffers: boolean;\r\n /** Defines if transform feedbacks are supported */\r\n supportTransformFeedbacks: boolean;\r\n /** Defines if texture max level are supported */\r\n textureMaxLevel: boolean;\r\n\r\n /** Defines the maximum layer count for a 2D Texture array. */\r\n texture2DArrayMaxLayerCount: number;\r\n /** Defines if the morph target texture is supported. */\r\n disableMorphTargetTexture: boolean;\r\n}\r\n"]}
@@ -151,6 +151,8 @@ export declare class NativeEngine extends Engine {
151
151
  getRenderWidth(useScreen?: boolean): number;
152
152
  getRenderHeight(useScreen?: boolean): number;
153
153
  setViewport(viewport: IViewportLike, requiredWidth?: number, requiredHeight?: number): void;
154
+ enableScissor(x: number, y: number, width: number, height: number): void;
155
+ disableScissor(): void;
154
156
  setState(culling: boolean, zOffset?: number, force?: boolean, reverseSide?: boolean, cullBackFaces?: boolean, stencil?: IStencilState, zOffsetUnits?: number): void;
155
157
  /**
156
158
  * Gets the client rect of native canvas. Needed for InputManager.
@@ -622,6 +622,22 @@ export class NativeEngine extends Engine {
622
622
  this._commandBufferEncoder.encodeCommandArgAsFloat32(viewport.height);
623
623
  this._commandBufferEncoder.finishEncodingCommand();
624
624
  }
625
+ enableScissor(x, y, width, height) {
626
+ this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETSCISSOR);
627
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(x);
628
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(y);
629
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(width);
630
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(height);
631
+ this._commandBufferEncoder.finishEncodingCommand();
632
+ }
633
+ disableScissor() {
634
+ this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETSCISSOR);
635
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(0);
636
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(0);
637
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(0);
638
+ this._commandBufferEncoder.encodeCommandArgAsFloat32(0);
639
+ this._commandBufferEncoder.finishEncodingCommand();
640
+ }
625
641
  setState(culling, zOffset = 0, force, reverseSide = false, cullBackFaces, stencil, zOffsetUnits = 0) {
626
642
  var _a, _b;
627
643
  this._zOffset = zOffset;