@babylonjs/core 5.0.3 → 5.2.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 (129) hide show
  1. package/Audio/audioSceneComponent.d.ts +2 -0
  2. package/Audio/audioSceneComponent.js +9 -7
  3. package/Audio/audioSceneComponent.js.map +1 -1
  4. package/Cameras/arcRotateCamera.d.ts +5 -0
  5. package/Cameras/arcRotateCamera.js +5 -0
  6. package/Cameras/arcRotateCamera.js.map +1 -1
  7. package/Cameras/camera.d.ts +5 -1
  8. package/Cameras/camera.js +7 -7
  9. package/Cameras/camera.js.map +1 -1
  10. package/Debug/debugLayer.d.ts +5 -0
  11. package/Debug/debugLayer.js +24 -0
  12. package/Debug/debugLayer.js.map +1 -1
  13. package/Engines/Processors/shaderCodeCursor.js +5 -0
  14. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  15. package/Engines/constants.d.ts +25 -1
  16. package/Engines/constants.js +25 -1
  17. package/Engines/constants.js.map +1 -1
  18. package/Engines/engine.d.ts +1 -1
  19. package/Engines/engine.js +1 -1
  20. package/Engines/engine.js.map +1 -1
  21. package/Engines/nativeEngine.d.ts +1 -1
  22. package/Engines/nativeEngine.js +7 -8
  23. package/Engines/nativeEngine.js.map +1 -1
  24. package/Engines/thinEngine.js +2 -2
  25. package/Engines/thinEngine.js.map +1 -1
  26. package/Engines/webgpuEngine.d.ts +4 -0
  27. package/Engines/webgpuEngine.js +2 -0
  28. package/Engines/webgpuEngine.js.map +1 -1
  29. package/Gizmos/boundingBoxGizmo.js +6 -6
  30. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  31. package/Gizmos/gizmo.d.ts +5 -0
  32. package/Gizmos/gizmo.js +8 -2
  33. package/Gizmos/gizmo.js.map +1 -1
  34. package/Inputs/scene.inputManager.js +7 -1
  35. package/Inputs/scene.inputManager.js.map +1 -1
  36. package/Lights/Shadows/shadowGenerator.d.ts +5 -0
  37. package/Lights/Shadows/shadowGenerator.js +20 -2
  38. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  39. package/Loading/Plugins/babylonFileLoader.js +8 -6
  40. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  41. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +4 -0
  42. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +19 -1
  43. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  44. package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +54 -0
  45. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +135 -0
  46. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -0
  47. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +4 -0
  48. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +42 -24
  49. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  50. package/Materials/PBR/index.d.ts +1 -0
  51. package/Materials/PBR/index.js +1 -0
  52. package/Materials/PBR/index.js.map +1 -1
  53. package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
  54. package/Materials/PBR/pbrBaseMaterial.js +2 -0
  55. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  56. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +102 -0
  57. package/Materials/PBR/pbrIridescenceConfiguration.js +257 -0
  58. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -0
  59. package/Materials/Textures/Loaders/ktxTextureLoader.js +31 -0
  60. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  61. package/Materials/Textures/MultiviewRenderTarget.js +1 -0
  62. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  63. package/Materials/Textures/videoTexture.js +12 -12
  64. package/Materials/Textures/videoTexture.js.map +1 -1
  65. package/Materials/materialFlags.d.ts +6 -0
  66. package/Materials/materialFlags.js +18 -0
  67. package/Materials/materialFlags.js.map +1 -1
  68. package/Materials/materialPluginFactoryExport.d.ts +6 -0
  69. package/Materials/materialPluginFactoryExport.js +12 -0
  70. package/Materials/materialPluginFactoryExport.js.map +1 -1
  71. package/Maths/math.color.d.ts +11 -2
  72. package/Maths/math.color.js +12 -7
  73. package/Maths/math.color.js.map +1 -1
  74. package/Meshes/abstractMesh.d.ts +1 -1
  75. package/Meshes/abstractMesh.js +6 -3
  76. package/Meshes/abstractMesh.js.map +1 -1
  77. package/Meshes/mesh.d.ts +2 -2
  78. package/Meshes/mesh.js +11 -3
  79. package/Meshes/mesh.js.map +1 -1
  80. package/Misc/khronosTextureContainer.js +1 -1
  81. package/Misc/khronosTextureContainer.js.map +1 -1
  82. package/Physics/physicsImpostor.js +1 -1
  83. package/Physics/physicsImpostor.js.map +1 -1
  84. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +6 -1
  85. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +13 -2
  86. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  87. package/Rendering/boundingBoxRenderer.js +4 -4
  88. package/Rendering/boundingBoxRenderer.js.map +1 -1
  89. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
  90. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
  91. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  92. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  93. package/Shaders/ShadersInclude/lightFragment.js +1 -1
  94. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  95. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  96. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  97. package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +5 -0
  98. package/Shaders/ShadersInclude/pbrBlockIridescence.js +9 -0
  99. package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -0
  100. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  101. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  102. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  103. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  104. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  105. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  106. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
  107. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  108. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  109. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  110. package/Shaders/pbr.fragment.d.ts +1 -0
  111. package/Shaders/pbr.fragment.js +2 -1
  112. package/Shaders/pbr.fragment.js.map +1 -1
  113. package/Shaders/pbr.vertex.js +1 -1
  114. package/Shaders/pbr.vertex.js.map +1 -1
  115. package/XR/features/WebXRHandTracking.js +1 -1
  116. package/XR/features/WebXRHandTracking.js.map +1 -1
  117. package/XR/features/WebXRImageTracking.d.ts +0 -5
  118. package/XR/features/WebXRImageTracking.js +5 -8
  119. package/XR/features/WebXRImageTracking.js.map +1 -1
  120. package/XR/native/nativeXRFrame.d.ts +2 -1
  121. package/XR/native/nativeXRFrame.js +5 -1
  122. package/XR/native/nativeXRFrame.js.map +1 -1
  123. package/assetContainer.d.ts +13 -1
  124. package/assetContainer.js +130 -17
  125. package/assetContainer.js.map +1 -1
  126. package/package.json +1 -1
  127. package/scene.d.ts +4 -0
  128. package/scene.js +4 -0
  129. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nativeEngine.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/nativeEngine.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable, IndicesArray, DataArray } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../Materials/Textures/internalTextureLoader\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport type { VideoTexture } from \"../Materials/Textures/videoTexture\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { EnvironmentTextureSpecularInfoV1 } from \"../Misc/environmentTextureTools\";\r\nimport { CreateImageDataArrayBufferViews, GetEnvInfo, UploadEnvSpherical } from \"../Misc/environmentTextureTools\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { RenderTargetCreationOptions, TextureSize, DepthTextureCreationOptions } from \"../Materials/Textures/textureCreationOptions\";\r\nimport type { IPipelineContext } from \"./IPipelineContext\";\r\nimport type { IMatrixLike, IVector2Like, IVector3Like, IVector4Like, IColor3Like, IColor4Like, IViewportLike } from \"../Maths/math.like\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Constants } from \"./constants\";\r\nimport type { ISceneLike } from \"./thinEngine\";\r\nimport { ThinEngine } from \"./thinEngine\";\r\nimport type { IWebRequest } from \"../Misc/interfaces/iWebRequest\";\r\nimport { EngineStore } from \"./engineStore\";\r\nimport { ShaderCodeInliner } from \"./Processors/shaderCodeInliner\";\r\nimport { WebGL2ShaderProcessor } from \"../Engines/WebGL/webGL2ShaderProcessors\";\r\nimport type { IMaterialContext } from \"./IMaterialContext\";\r\nimport type { IDrawContext } from \"./IDrawContext\";\r\nimport type { ICanvas, IImage } from \"./ICanvas\";\r\nimport type { IStencilState } from \"../States/IStencilState\";\r\nimport { RenderTargetWrapper } from \"./renderTargetWrapper\";\r\nimport type { NativeData } from \"./Native/nativeDataStream\";\r\nimport { NativeDataStream } from \"./Native/nativeDataStream\";\r\nimport type { INative, INativeCamera, INativeEngine } from \"./Native/nativeInterfaces\";\r\nimport { RuntimeError, ErrorCodes } from \"../Misc/error\";\r\nimport { WebGLHardwareTexture } from \"./WebGL/webGLHardwareTexture\";\r\n\r\ndeclare const _native: INative;\r\n\r\nconst onNativeObjectInitialized = new Observable<INative>();\r\nif (typeof self !== \"undefined\" && !Object.prototype.hasOwnProperty.call(self, \"_native\")) {\r\n let __native: INative;\r\n Object.defineProperty(self, \"_native\", {\r\n get: () => __native,\r\n set: (value: INative) => {\r\n __native = value;\r\n if (__native) {\r\n onNativeObjectInitialized.notifyObservers(__native);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Returns _native only after it has been defined by BabylonNative.\r\n * @hidden\r\n */\r\nexport function AcquireNativeObjectAsync(): Promise<INative> {\r\n return new Promise((resolve) => {\r\n if (typeof _native === \"undefined\") {\r\n onNativeObjectInitialized.addOnce((nativeObject) => resolve(nativeObject));\r\n } else {\r\n resolve(_native);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Registers a constructor on the _native object. See NativeXRFrame for an example.\r\n * @param typeName\r\n * @param constructor\r\n * @hidden\r\n */\r\nexport async function RegisterNativeTypeAsync<Type>(typeName: string, constructor: Type) {\r\n ((await AcquireNativeObjectAsync()) as any)[typeName] = constructor;\r\n}\r\n\r\nclass NativePipelineContext implements IPipelineContext {\r\n // TODO: async should be true?\r\n public isAsync = false;\r\n public isReady = false;\r\n\r\n public _getVertexShaderCode(): string | null {\r\n return null;\r\n }\r\n\r\n public _getFragmentShaderCode(): string | null {\r\n return null;\r\n }\r\n\r\n // TODO: what should this do?\r\n public _handlesSpectorRebuildCallback(onCompiled: (compiledObject: any) => void): void {\r\n throw new Error(\"Not implemented\");\r\n }\r\n\r\n public nativeProgram: any;\r\n\r\n private _valueCache: { [key: string]: any } = {};\r\n private _uniforms: { [key: string]: Nullable<WebGLUniformLocation> };\r\n\r\n public engine: NativeEngine;\r\n public context?: WebGLRenderingContext;\r\n public vertexShader?: WebGLShader;\r\n public fragmentShader?: WebGLShader;\r\n public isParallelCompiled: boolean;\r\n public onCompiled?: () => void;\r\n public transformFeedback?: WebGLTransformFeedback | null;\r\n\r\n constructor(engine: NativeEngine) {\r\n this.engine = engine;\r\n }\r\n\r\n public _fillEffectInformation(\r\n effect: Effect,\r\n uniformBuffersNames: { [key: string]: number },\r\n uniformsNames: string[],\r\n uniforms: { [key: string]: Nullable<WebGLUniformLocation> },\r\n samplerList: string[],\r\n samplers: { [key: string]: number },\r\n attributesNames: string[],\r\n attributes: number[]\r\n ) {\r\n const engine = this.engine;\r\n if (engine.supportsUniformBuffers) {\r\n for (const name in uniformBuffersNames) {\r\n effect.bindUniformBlock(name, uniformBuffersNames[name]);\r\n }\r\n }\r\n\r\n const effectAvailableUniforms = this.engine.getUniforms(this, uniformsNames);\r\n effectAvailableUniforms.forEach((uniform, index) => {\r\n uniforms[uniformsNames[index]] = uniform;\r\n });\r\n this._uniforms = uniforms;\r\n\r\n let index: number;\r\n for (index = 0; index < samplerList.length; index++) {\r\n const sampler = effect.getUniform(samplerList[index]);\r\n if (sampler == null) {\r\n samplerList.splice(index, 1);\r\n index--;\r\n }\r\n }\r\n\r\n samplerList.forEach((name, index) => {\r\n samplers[name] = index;\r\n });\r\n\r\n attributes.push(...engine.getAttributes(this, attributesNames));\r\n }\r\n\r\n /**\r\n * Release all associated resources.\r\n **/\r\n public dispose() {\r\n this._uniforms = {};\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param matrix\r\n * @hidden\r\n */\r\n public _cacheMatrix(uniformName: string, matrix: IMatrixLike): boolean {\r\n const cache = this._valueCache[uniformName];\r\n const flag = matrix.updateFlag;\r\n if (cache !== undefined && cache === flag) {\r\n return false;\r\n }\r\n\r\n this._valueCache[uniformName] = flag;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param x\r\n * @param y\r\n * @hidden\r\n */\r\n public _cacheFloat2(uniformName: string, x: number, y: number): boolean {\r\n let cache = this._valueCache[uniformName];\r\n if (!cache) {\r\n cache = [x, y];\r\n this._valueCache[uniformName] = cache;\r\n return true;\r\n }\r\n\r\n let changed = false;\r\n if (cache[0] !== x) {\r\n cache[0] = x;\r\n changed = true;\r\n }\r\n if (cache[1] !== y) {\r\n cache[1] = y;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param x\r\n * @param y\r\n * @param z\r\n * @hidden\r\n */\r\n public _cacheFloat3(uniformName: string, x: number, y: number, z: number): boolean {\r\n let cache = this._valueCache[uniformName];\r\n if (!cache) {\r\n cache = [x, y, z];\r\n this._valueCache[uniformName] = cache;\r\n return true;\r\n }\r\n\r\n let changed = false;\r\n if (cache[0] !== x) {\r\n cache[0] = x;\r\n changed = true;\r\n }\r\n if (cache[1] !== y) {\r\n cache[1] = y;\r\n changed = true;\r\n }\r\n if (cache[2] !== z) {\r\n cache[2] = z;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param x\r\n * @param y\r\n * @param z\r\n * @param w\r\n * @hidden\r\n */\r\n public _cacheFloat4(uniformName: string, x: number, y: number, z: number, w: number): boolean {\r\n let cache = this._valueCache[uniformName];\r\n if (!cache) {\r\n cache = [x, y, z, w];\r\n this._valueCache[uniformName] = cache;\r\n return true;\r\n }\r\n\r\n let changed = false;\r\n if (cache[0] !== x) {\r\n cache[0] = x;\r\n changed = true;\r\n }\r\n if (cache[1] !== y) {\r\n cache[1] = y;\r\n changed = true;\r\n }\r\n if (cache[2] !== z) {\r\n cache[2] = z;\r\n changed = true;\r\n }\r\n if (cache[3] !== w) {\r\n cache[3] = w;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Sets an integer value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value Value to be set.\r\n */\r\n public setInt(uniformName: string, value: number): void {\r\n const cache = this._valueCache[uniformName];\r\n if (cache !== undefined && cache === value) {\r\n return;\r\n }\r\n\r\n if (this.engine.setInt(this._uniforms[uniformName]!, value)) {\r\n this._valueCache[uniformName] = value;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a int2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int2.\r\n * @param y Second int in int2.\r\n */\r\n public setInt2(uniformName: string, x: number, y: number): void {\r\n if (this._cacheFloat2(uniformName, x, y)) {\r\n if (!this.engine.setInt2(this._uniforms[uniformName], x, y)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a int3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int3.\r\n * @param y Second int in int3.\r\n * @param z Third int in int3.\r\n */\r\n public setInt3(uniformName: string, x: number, y: number, z: number): void {\r\n if (this._cacheFloat3(uniformName, x, y, z)) {\r\n if (!this.engine.setInt3(this._uniforms[uniformName], x, y, z)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a int4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int4.\r\n * @param y Second int in int4.\r\n * @param z Third int in int4.\r\n * @param w Fourth int in int4.\r\n */\r\n public setInt4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (this._cacheFloat4(uniformName, x, y, z, w)) {\r\n if (!this.engine.setInt4(this._uniforms[uniformName], x, y, z, w)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets an int array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray2(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray2(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray3(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray3(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray4(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray4(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray2(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray2(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray3(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray3(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray4(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray4(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray2(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray2(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n * @returns this effect.\r\n */\r\n public setArray3(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray3(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray4(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray4(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets matrices on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrices matrices to be set.\r\n */\r\n public setMatrices(uniformName: string, matrices: Float32Array): void {\r\n if (!matrices) {\r\n return;\r\n }\r\n\r\n this._valueCache[uniformName] = null;\r\n this.engine.setMatrices(this._uniforms[uniformName]!, matrices);\r\n }\r\n\r\n /**\r\n * Sets matrix on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix(uniformName: string, matrix: IMatrixLike): void {\r\n if (this._cacheMatrix(uniformName, matrix)) {\r\n if (!this.engine.setMatrices(this._uniforms[uniformName]!, matrix.toArray() as Float32Array)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a 3x3 matrix on a uniform variable. (Specified as [1,2,3,4,5,6,7,8,9] will result in [1,2,3][4,5,6][7,8,9] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix3x3(uniformName: string, matrix: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setMatrix3x3(this._uniforms[uniformName]!, matrix);\r\n }\r\n\r\n /**\r\n * Sets a 2x2 matrix on a uniform variable. (Specified as [1,2,3,4] will result in [1,2][3,4] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix2x2(uniformName: string, matrix: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setMatrix2x2(this._uniforms[uniformName]!, matrix);\r\n }\r\n\r\n /**\r\n * Sets a float on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value value to be set.\r\n * @returns this effect.\r\n */\r\n public setFloat(uniformName: string, value: number): void {\r\n const cache = this._valueCache[uniformName];\r\n if (cache !== undefined && cache === value) {\r\n return;\r\n }\r\n\r\n if (this.engine.setFloat(this._uniforms[uniformName]!, value)) {\r\n this._valueCache[uniformName] = value;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a boolean on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param bool value to be set.\r\n */\r\n public setBool(uniformName: string, bool: boolean): void {\r\n const cache = this._valueCache[uniformName];\r\n if (cache !== undefined && cache === bool) {\r\n return;\r\n }\r\n\r\n if (this.engine.setInt(this._uniforms[uniformName]!, bool ? 1 : 0)) {\r\n this._valueCache[uniformName] = bool ? 1 : 0;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Vector2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector2 vector2 to be set.\r\n */\r\n public setVector2(uniformName: string, vector2: IVector2Like): void {\r\n if (this._cacheFloat2(uniformName, vector2.x, vector2.y)) {\r\n if (!this.engine.setFloat2(this._uniforms[uniformName]!, vector2.x, vector2.y)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a float2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float2.\r\n * @param y Second float in float2.\r\n */\r\n public setFloat2(uniformName: string, x: number, y: number): void {\r\n if (this._cacheFloat2(uniformName, x, y)) {\r\n if (!this.engine.setFloat2(this._uniforms[uniformName]!, x, y)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Vector3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector3 Value to be set.\r\n */\r\n public setVector3(uniformName: string, vector3: IVector3Like): void {\r\n if (this._cacheFloat3(uniformName, vector3.x, vector3.y, vector3.z)) {\r\n if (!this.engine.setFloat3(this._uniforms[uniformName]!, vector3.x, vector3.y, vector3.z)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a float3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float3.\r\n * @param y Second float in float3.\r\n * @param z Third float in float3.\r\n */\r\n public setFloat3(uniformName: string, x: number, y: number, z: number): void {\r\n if (this._cacheFloat3(uniformName, x, y, z)) {\r\n if (!this.engine.setFloat3(this._uniforms[uniformName]!, x, y, z)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Vector4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector4 Value to be set.\r\n */\r\n public setVector4(uniformName: string, vector4: IVector4Like): void {\r\n if (this._cacheFloat4(uniformName, vector4.x, vector4.y, vector4.z, vector4.w)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, vector4.x, vector4.y, vector4.z, vector4.w)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a float4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float4.\r\n * @param y Second float in float4.\r\n * @param z Third float in float4.\r\n * @param w Fourth float in float4.\r\n * @returns this effect.\r\n */\r\n public setFloat4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (this._cacheFloat4(uniformName, x, y, z, w)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, x, y, z, w)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Color3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n */\r\n public setColor3(uniformName: string, color3: IColor3Like): void {\r\n if (this._cacheFloat3(uniformName, color3.r, color3.g, color3.b)) {\r\n if (!this.engine.setFloat3(this._uniforms[uniformName]!, color3.r, color3.g, color3.b)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n * @param alpha Alpha value to be set.\r\n */\r\n public setColor4(uniformName: string, color3: IColor3Like, alpha: number): void {\r\n if (this._cacheFloat4(uniformName, color3.r, color3.g, color3.b, alpha)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, color3.r, color3.g, color3.b, alpha)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable\r\n * @param uniformName defines the name of the variable\r\n * @param color4 defines the value to be set\r\n */\r\n public setDirectColor4(uniformName: string, color4: IColor4Like): void {\r\n if (this._cacheFloat4(uniformName, color4.r, color4.g, color4.b, color4.a)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, color4.r, color4.g, color4.b, color4.a)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass NativeRenderTargetWrapper extends RenderTargetWrapper {\r\n public override readonly _engine: NativeEngine;\r\n\r\n private __framebuffer: Nullable<WebGLFramebuffer> = null;\r\n private __framebufferDepthStencil: Nullable<WebGLFramebuffer> = null;\r\n\r\n public get _framebuffer(): Nullable<WebGLFramebuffer> {\r\n return this.__framebuffer;\r\n }\r\n\r\n public set _framebuffer(framebuffer: Nullable<WebGLFramebuffer>) {\r\n if (this.__framebuffer) {\r\n this._engine._releaseFramebufferObjects(this.__framebuffer);\r\n }\r\n this.__framebuffer = framebuffer;\r\n }\r\n\r\n public get _framebufferDepthStencil(): Nullable<WebGLFramebuffer> {\r\n return this.__framebufferDepthStencil;\r\n }\r\n\r\n public set _framebufferDepthStencil(framebufferDepthStencil: Nullable<WebGLFramebuffer>) {\r\n if (this.__framebufferDepthStencil) {\r\n this._engine._releaseFramebufferObjects(this.__framebufferDepthStencil);\r\n }\r\n this.__framebufferDepthStencil = framebufferDepthStencil;\r\n }\r\n\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: NativeEngine) {\r\n super(isMulti, isCube, size, engine);\r\n this._engine = engine;\r\n }\r\n\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n this._framebuffer = null;\r\n this._framebufferDepthStencil = null;\r\n\r\n super.dispose(disposeOnlyFramebuffers);\r\n }\r\n}\r\n\r\n/**\r\n * Container for accessors for natively-stored mesh data buffers.\r\n */\r\nclass NativeDataBuffer extends DataBuffer {\r\n /**\r\n * Accessor value used to identify/retrieve a natively-stored index buffer.\r\n */\r\n public nativeIndexBuffer?: NativeData;\r\n\r\n /**\r\n * Accessor value used to identify/retrieve a natively-stored vertex buffer.\r\n */\r\n public nativeVertexBuffer?: NativeData;\r\n}\r\n\r\n/**\r\n * Options to create the Native engine\r\n */\r\nexport interface NativeEngineOptions {\r\n /**\r\n * defines whether to adapt to the device's viewport characteristics (default: false)\r\n */\r\n adaptToDeviceRatio?: boolean;\r\n}\r\n\r\n/** @hidden */\r\nclass CommandBufferEncoder {\r\n private readonly _commandStream: NativeDataStream;\r\n private readonly _pending = new Array<NativeData>();\r\n private _isCommandBufferScopeActive = false;\r\n\r\n public constructor(private readonly _engine: INativeEngine) {\r\n this._commandStream = NativeEngine._createNativeDataStream();\r\n this._engine.setCommandDataStream(this._commandStream);\r\n }\r\n\r\n public beginCommandScope() {\r\n if (this._isCommandBufferScopeActive) {\r\n throw new Error(\"Command scope already active.\");\r\n }\r\n\r\n this._isCommandBufferScopeActive = true;\r\n }\r\n\r\n public endCommandScope() {\r\n if (!this._isCommandBufferScopeActive) {\r\n throw new Error(\"Command scope is not active.\");\r\n }\r\n\r\n this._isCommandBufferScopeActive = false;\r\n this._submit();\r\n }\r\n\r\n public startEncodingCommand(command: NativeData) {\r\n this._commandStream.writeNativeData(command);\r\n }\r\n\r\n public encodeCommandArgAsUInt32(commandArg: number) {\r\n this._commandStream.writeUint32(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsUInt32s(commandArg: Uint32Array) {\r\n this._commandStream.writeUint32Array(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsInt32(commandArg: number) {\r\n this._commandStream.writeInt32(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsInt32s(commandArg: Int32Array) {\r\n this._commandStream.writeInt32Array(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsFloat32(commandArg: number) {\r\n this._commandStream.writeFloat32(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsFloat32s(commandArg: Float32Array) {\r\n this._commandStream.writeFloat32Array(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsNativeData(commandArg: NativeData) {\r\n this._commandStream.writeNativeData(commandArg);\r\n this._pending.push(commandArg);\r\n }\r\n\r\n public finishEncodingCommand() {\r\n if (!this._isCommandBufferScopeActive) {\r\n this._submit();\r\n }\r\n }\r\n\r\n private _submit() {\r\n this._engine.submitCommands();\r\n this._pending.length = 0;\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class NativeEngine extends Engine {\r\n // This must match the protocol version in NativeEngine.cpp\r\n private static readonly PROTOCOL_VERSION = 5;\r\n\r\n private readonly _engine: INativeEngine = new _native.Engine();\r\n private readonly _camera: Nullable<INativeCamera> = _native.Camera ? new _native.Camera() : null;\r\n\r\n private readonly _commandBufferEncoder = new CommandBufferEncoder(this._engine);\r\n\r\n private _boundBuffersVertexArray: any = null;\r\n private _currentDepthTest: number = _native.Engine.DEPTH_TEST_LEQUAL;\r\n private _stencilTest = false;\r\n private _stencilMask: number = 255;\r\n private _stencilFunc: number = Constants.ALWAYS;\r\n private _stencilFuncRef: number = 0;\r\n private _stencilFuncMask: number = 255;\r\n private _stencilOpStencilFail: number = Constants.KEEP;\r\n private _stencilOpDepthFail: number = Constants.KEEP;\r\n private _stencilOpStencilDepthPass: number = Constants.REPLACE;\r\n private _zOffset: number = 0;\r\n private _zOffsetUnits: number = 0;\r\n private _depthWrite: boolean = true;\r\n\r\n public getHardwareScalingLevel(): number {\r\n return this._engine.getHardwareScalingLevel();\r\n }\r\n\r\n public setHardwareScalingLevel(level: number): void {\r\n this._engine.setHardwareScalingLevel(level);\r\n }\r\n\r\n public constructor(options: NativeEngineOptions = {}) {\r\n super(null, false, undefined, options.adaptToDeviceRatio);\r\n\r\n if (_native.Engine.PROTOCOL_VERSION !== NativeEngine.PROTOCOL_VERSION) {\r\n throw new Error(`Protocol version mismatch: ${_native.Engine.PROTOCOL_VERSION} (Native) !== ${NativeEngine.PROTOCOL_VERSION} (JS)`);\r\n }\r\n\r\n this._webGLVersion = 2;\r\n this.disableUniformBuffers = true;\r\n\r\n // TODO: Initialize this more correctly based on the hardware capabilities.\r\n // Init caps\r\n\r\n this._caps = {\r\n maxTexturesImageUnits: 16,\r\n maxVertexTextureImageUnits: 16,\r\n maxCombinedTexturesImageUnits: 32,\r\n maxTextureSize: 512,\r\n maxCubemapTextureSize: 512,\r\n maxRenderTextureSize: 512,\r\n maxVertexAttribs: 16,\r\n maxVaryingVectors: 16,\r\n maxFragmentUniformVectors: 16,\r\n maxVertexUniformVectors: 16,\r\n standardDerivatives: true,\r\n astc: null,\r\n pvrtc: null,\r\n etc1: null,\r\n etc2: null,\r\n bptc: null,\r\n maxAnisotropy: 16, // TODO: Retrieve this smartly. Currently set to D3D11 maximum allowable value.\r\n uintIndices: true,\r\n fragmentDepthSupported: false,\r\n highPrecisionShaderSupported: true,\r\n colorBufferFloat: false,\r\n textureFloat: true,\r\n textureFloatLinearFiltering: false,\r\n textureFloatRender: false,\r\n textureHalfFloat: false,\r\n textureHalfFloatLinearFiltering: false,\r\n textureHalfFloatRender: false,\r\n textureLOD: true,\r\n drawBuffersExtension: false,\r\n depthTextureExtension: false,\r\n vertexArrayObject: true,\r\n instancedArrays: false,\r\n supportOcclusionQuery: false,\r\n canUseTimestampForTimerQuery: false,\r\n blendMinMax: false,\r\n maxMSAASamples: 1,\r\n canUseGLInstanceID: true,\r\n canUseGLVertexID: true,\r\n supportComputeShaders: false,\r\n supportSRGBBuffers: true,\r\n supportTransformFeedbacks: false,\r\n textureMaxLevel: false,\r\n };\r\n\r\n this._features = {\r\n forceBitmapOverHTMLImageElement: false,\r\n supportRenderAndCopyToLodForFloatTextures: false,\r\n supportDepthStencilTexture: false,\r\n supportShadowSamplers: false,\r\n uniformBufferHardCheckMatrix: false,\r\n allowTexturePrefiltering: false,\r\n trackUbosInFrame: false,\r\n checkUbosContentBeforeUpload: false,\r\n supportCSM: false,\r\n basisNeedsPOT: false,\r\n support3DTextures: false,\r\n needTypeSuffixInShaderConstants: false,\r\n supportMSAA: false,\r\n supportSSAO2: false,\r\n supportExtendedTextureFormats: false,\r\n supportSwitchCaseInShader: false,\r\n supportSyncTextureRead: false,\r\n needsInvertingBitmap: true,\r\n useUBOBindingCache: true,\r\n needShaderCodeInlining: true,\r\n needToAlwaysBindUniformBuffers: false,\r\n supportRenderPasses: true,\r\n _collectUbosUpdatedInFrame: false,\r\n };\r\n\r\n Tools.Log(\"Babylon Native (v\" + Engine.Version + \") launched\");\r\n\r\n Tools.LoadScript = function (scriptUrl, onSuccess, onError, scriptId) {\r\n Tools.LoadFile(\r\n scriptUrl,\r\n (data) => {\r\n Function(data as string).apply(null);\r\n if (onSuccess) {\r\n onSuccess();\r\n }\r\n },\r\n undefined,\r\n undefined,\r\n false,\r\n (request, exception) => {\r\n if (onError) {\r\n onError(\"LoadScript Error\", exception);\r\n }\r\n }\r\n );\r\n };\r\n\r\n // Wrappers\r\n if (typeof URL === \"undefined\") {\r\n (window.URL as any) = {\r\n createObjectURL: function () {},\r\n revokeObjectURL: function () {},\r\n };\r\n }\r\n\r\n if (typeof Blob === \"undefined\") {\r\n (window.Blob as any) = function (v: any) {\r\n return v;\r\n };\r\n }\r\n\r\n // Currently we do not fully configure the ThinEngine on construction of NativeEngine.\r\n // Setup resolution scaling based on display settings.\r\n const devicePixelRatio = window ? window.devicePixelRatio || 1.0 : 1.0;\r\n this._hardwareScalingLevel = options.adaptToDeviceRatio ? devicePixelRatio : 1.0;\r\n this.resize();\r\n\r\n const currentDepthFunction = this.getDepthFunction();\r\n if (currentDepthFunction) {\r\n this.setDepthFunction(currentDepthFunction);\r\n }\r\n\r\n // Shader processor\r\n this._shaderProcessor = new WebGL2ShaderProcessor();\r\n\r\n this.onNewSceneAddedObservable.add((scene) => {\r\n const originalRender = scene.render;\r\n scene.render = (...args: Parameters<typeof originalRender>) => {\r\n this._commandBufferEncoder.beginCommandScope();\r\n originalRender.apply(scene, args);\r\n this._commandBufferEncoder.endCommandScope();\r\n };\r\n });\r\n }\r\n\r\n public dispose(): void {\r\n super.dispose();\r\n if (this._boundBuffersVertexArray) {\r\n this._deleteVertexArray(this._boundBuffersVertexArray);\r\n }\r\n this._engine.dispose();\r\n }\r\n\r\n /** @hidden */\r\n public static _createNativeDataStream(): NativeDataStream {\r\n return new NativeDataStream();\r\n }\r\n\r\n /**\r\n * Can be used to override the current requestAnimationFrame requester.\r\n * @param bindedRenderFunction\r\n * @param requester\r\n * @hidden\r\n */\r\n protected _queueNewFrame(bindedRenderFunction: any, requester?: any): number {\r\n // Use the provided requestAnimationFrame, unless the requester is the window. In that case, we will default to the Babylon Native version of requestAnimationFrame.\r\n if (requester.requestAnimationFrame && requester !== window) {\r\n requester.requestAnimationFrame(bindedRenderFunction);\r\n } else {\r\n this._engine.requestAnimationFrame(bindedRenderFunction);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Override default engine behavior.\r\n * @param framebuffer\r\n */\r\n public _bindUnboundFramebuffer(framebuffer: Nullable<WebGLFramebuffer>) {\r\n if (this._currentFramebuffer !== framebuffer) {\r\n if (this._currentFramebuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_UNBINDFRAMEBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(this._currentFramebuffer as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n if (framebuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_BINDFRAMEBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(framebuffer as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n this._currentFramebuffer = framebuffer;\r\n }\r\n }\r\n\r\n /**\r\n * Gets host document\r\n * @returns the host document object\r\n */\r\n public getHostDocument(): Nullable<Document> {\r\n return null;\r\n }\r\n\r\n public clear(color: Nullable<IColor4Like>, backBuffer: boolean, depth: boolean, stencil: boolean = false): void {\r\n if (this.useReverseDepthBuffer) {\r\n throw new Error(\"reverse depth buffer is not currently implemented\");\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_CLEAR);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(backBuffer && color ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.r : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.g : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.b : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.a : 1);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(depth ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(1);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(stencil ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(0);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public createIndexBuffer(indices: IndicesArray, updateable?: boolean): NativeDataBuffer {\r\n const data = this._normalizeIndexData(indices);\r\n const buffer = new NativeDataBuffer();\r\n buffer.references = 1;\r\n buffer.is32Bits = data.BYTES_PER_ELEMENT === 4;\r\n if (data.byteLength) {\r\n buffer.nativeIndexBuffer = this._engine.createIndexBuffer(data.buffer, data.byteOffset, data.byteLength, buffer.is32Bits, updateable ?? false);\r\n }\r\n return buffer;\r\n }\r\n\r\n public createVertexBuffer(vertices: DataArray, updateable?: boolean): NativeDataBuffer {\r\n const data = ArrayBuffer.isView(vertices) ? vertices : new Float32Array(vertices);\r\n const buffer = new NativeDataBuffer();\r\n buffer.references = 1;\r\n if (data.byteLength) {\r\n buffer.nativeVertexBuffer = this._engine.createVertexBuffer(data.buffer, data.byteOffset, data.byteLength, updateable ?? false);\r\n }\r\n return buffer;\r\n }\r\n\r\n protected _recordVertexArrayObject(vertexArray: any, vertexBuffers: { [key: string]: VertexBuffer }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {\r\n if (indexBuffer) {\r\n this._engine.recordIndexBuffer(vertexArray, indexBuffer.nativeIndexBuffer!);\r\n }\r\n\r\n const attributes = effect.getAttributesNames();\r\n for (let index = 0; index < attributes.length; index++) {\r\n const location = effect.getAttributeLocation(index);\r\n if (location >= 0) {\r\n const kind = attributes[index];\r\n const vertexBuffer = vertexBuffers[kind];\r\n if (vertexBuffer) {\r\n const buffer = vertexBuffer.getBuffer() as Nullable<NativeDataBuffer>;\r\n if (buffer) {\r\n this._engine.recordVertexBuffer(\r\n vertexArray,\r\n buffer.nativeVertexBuffer!,\r\n location,\r\n vertexBuffer.byteOffset,\r\n vertexBuffer.byteStride,\r\n vertexBuffer.getSize(),\r\n this._getNativeAttribType(vertexBuffer.type),\r\n vertexBuffer.normalized,\r\n vertexBuffer.getInstanceDivisor()\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public bindBuffers(vertexBuffers: { [key: string]: VertexBuffer }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {\r\n if (this._boundBuffersVertexArray) {\r\n this._deleteVertexArray(this._boundBuffersVertexArray);\r\n }\r\n this._boundBuffersVertexArray = this._engine.createVertexArray();\r\n this._recordVertexArrayObject(this._boundBuffersVertexArray, vertexBuffers, indexBuffer, effect);\r\n this.bindVertexArrayObject(this._boundBuffersVertexArray);\r\n }\r\n\r\n public recordVertexArrayObject(vertexBuffers: { [key: string]: VertexBuffer }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): WebGLVertexArrayObject {\r\n const vertexArray = this._engine.createVertexArray();\r\n this._recordVertexArrayObject(vertexArray, vertexBuffers, indexBuffer, effect);\r\n return vertexArray;\r\n }\r\n\r\n private _deleteVertexArray(vertexArray: unknown) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEVERTEXARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(vertexArray as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public bindVertexArrayObject(vertexArray: WebGLVertexArrayObject): void {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_BINDVERTEXARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(vertexArray as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public releaseVertexArrayObject(vertexArray: WebGLVertexArrayObject) {\r\n this._deleteVertexArray(vertexArray);\r\n }\r\n\r\n public getAttributes(pipelineContext: IPipelineContext, attributesNames: string[]): number[] {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n return this._engine.getAttributes(nativePipelineContext.nativeProgram, attributesNames);\r\n }\r\n\r\n /**\r\n * Draw a list of indexed primitives\r\n * @param fillMode defines the primitive to use\r\n * @param indexStart defines the starting index\r\n * @param indexCount defines the number of index to draw\r\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\r\n */\r\n public drawElementsType(fillMode: number, indexStart: number, indexCount: number, instancesCount?: number): void {\r\n // Apply states\r\n this._drawCalls.addCount(1, false);\r\n\r\n // TODO: Make this implementation more robust like core Engine version.\r\n\r\n // Render\r\n //var indexFormat = this._uintIndicesCurrentlySet ? this._gl.UNSIGNED_INT : this._gl.UNSIGNED_SHORT;\r\n\r\n //var mult = this._uintIndicesCurrentlySet ? 4 : 2;\r\n // if (instancesCount) {\r\n // this._gl.drawElementsInstanced(drawMode, indexCount, indexFormat, indexStart * mult, instancesCount);\r\n // } else {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DRAWINDEXED);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(fillMode);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(indexStart);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(indexCount);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n // }\r\n }\r\n\r\n /**\r\n * Draw a list of unindexed primitives\r\n * @param fillMode defines the primitive to use\r\n * @param verticesStart defines the index of first vertex to draw\r\n * @param verticesCount defines the count of vertices to draw\r\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\r\n */\r\n public drawArraysType(fillMode: number, verticesStart: number, verticesCount: number, instancesCount?: number): void {\r\n // Apply states\r\n this._drawCalls.addCount(1, false);\r\n\r\n // TODO: Make this implementation more robust like core Engine version.\r\n\r\n // if (instancesCount) {\r\n // this._gl.drawArraysInstanced(drawMode, verticesStart, verticesCount, instancesCount);\r\n // } else {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DRAW);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(fillMode);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(verticesStart);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(verticesCount);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n // }\r\n }\r\n\r\n public createPipelineContext(): IPipelineContext {\r\n return new NativePipelineContext(this);\r\n }\r\n\r\n public createMaterialContext(): IMaterialContext | undefined {\r\n return undefined;\r\n }\r\n\r\n public createDrawContext(): IDrawContext | undefined {\r\n return undefined;\r\n }\r\n\r\n public _preparePipelineContext(\r\n pipelineContext: IPipelineContext,\r\n vertexSourceCode: string,\r\n fragmentSourceCode: string,\r\n createAsRaw: boolean,\r\n rawVertexSourceCode: string,\r\n rawFragmentSourceCode: string,\r\n rebuildRebind: any,\r\n defines: Nullable<string>,\r\n transformFeedbackVaryings: Nullable<string[]>\r\n ) {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n\r\n if (createAsRaw) {\r\n nativePipelineContext.nativeProgram = this.createRawShaderProgram(pipelineContext, vertexSourceCode, fragmentSourceCode, undefined, transformFeedbackVaryings);\r\n } else {\r\n nativePipelineContext.nativeProgram = this.createShaderProgram(pipelineContext, vertexSourceCode, fragmentSourceCode, defines, undefined, transformFeedbackVaryings);\r\n }\r\n }\r\n\r\n /**\r\n * @param pipelineContext\r\n * @hidden\r\n */\r\n public _isRenderingStateCompiled(pipelineContext: IPipelineContext): boolean {\r\n // TODO: support async shader compilcation\r\n return true;\r\n }\r\n\r\n /**\r\n * @param pipelineContext\r\n * @param action\r\n * @hidden\r\n */\r\n public _executeWhenRenderingStateIsCompiled(pipelineContext: IPipelineContext, action: () => void) {\r\n // TODO: support async shader compilcation\r\n action();\r\n }\r\n\r\n public createRawShaderProgram(\r\n pipelineContext: IPipelineContext,\r\n vertexCode: string,\r\n fragmentCode: string,\r\n context?: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): any {\r\n throw new Error(\"Not Supported\");\r\n }\r\n\r\n public createShaderProgram(\r\n pipelineContext: IPipelineContext,\r\n vertexCode: string,\r\n fragmentCode: string,\r\n defines: Nullable<string>,\r\n context?: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): any {\r\n this.onBeforeShaderCompilationObservable.notifyObservers(this);\r\n\r\n const vertexInliner = new ShaderCodeInliner(vertexCode);\r\n vertexInliner.processCode();\r\n vertexCode = vertexInliner.code;\r\n\r\n const fragmentInliner = new ShaderCodeInliner(fragmentCode);\r\n fragmentInliner.processCode();\r\n fragmentCode = fragmentInliner.code;\r\n\r\n vertexCode = ThinEngine._ConcatenateShader(vertexCode, defines);\r\n fragmentCode = ThinEngine._ConcatenateShader(fragmentCode, defines);\r\n\r\n const program = this._engine.createProgram(vertexCode, fragmentCode);\r\n this.onAfterShaderCompilationObservable.notifyObservers(this);\r\n return program;\r\n }\r\n\r\n /**\r\n * Inline functions in shader code that are marked to be inlined\r\n * @param code code to inline\r\n * @returns inlined code\r\n */\r\n public inlineShaderCode(code: string): string {\r\n const sci = new ShaderCodeInliner(code);\r\n sci.debug = false;\r\n sci.processCode();\r\n return sci.code;\r\n }\r\n\r\n protected _setProgram(program: WebGLProgram): void {\r\n if (this._currentProgram !== program) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETPROGRAM);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(program as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n this._currentProgram = program;\r\n }\r\n }\r\n\r\n public _deletePipelineContext(pipelineContext: IPipelineContext): void {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n if (nativePipelineContext && nativePipelineContext.nativeProgram) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEPROGRAM);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(nativePipelineContext.nativeProgram);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n public getUniforms(pipelineContext: IPipelineContext, uniformsNames: string[]): WebGLUniformLocation[] {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n return this._engine.getUniforms(nativePipelineContext.nativeProgram, uniformsNames);\r\n }\r\n\r\n public bindUniformBlock(pipelineContext: IPipelineContext, blockName: string, index: number): void {\r\n // TODO\r\n throw new Error(\"Not Implemented\");\r\n }\r\n\r\n public bindSamplers(effect: Effect): void {\r\n const nativePipelineContext = effect.getPipelineContext() as NativePipelineContext;\r\n this._setProgram(nativePipelineContext.nativeProgram);\r\n\r\n // TODO: share this with engine?\r\n const samplers = effect.getSamplers();\r\n for (let index = 0; index < samplers.length; index++) {\r\n const uniform = effect.getUniform(samplers[index]);\r\n\r\n if (uniform) {\r\n this._boundUniforms[index] = uniform;\r\n }\r\n }\r\n this._currentEffect = null;\r\n }\r\n\r\n public setMatrix(uniform: WebGLUniformLocation, matrix: IMatrixLike): void {\r\n if (!uniform) {\r\n return;\r\n }\r\n\r\n const matrixArray = matrix.toArray() as Float32Array;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRIX);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrixArray);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public getRenderWidth(useScreen = false): number {\r\n if (!useScreen && this._currentRenderTarget) {\r\n return this._currentRenderTarget.width;\r\n }\r\n\r\n return this._engine.getRenderWidth();\r\n }\r\n\r\n public getRenderHeight(useScreen = false): number {\r\n if (!useScreen && this._currentRenderTarget) {\r\n return this._currentRenderTarget.height;\r\n }\r\n\r\n return this._engine.getRenderHeight();\r\n }\r\n\r\n public setViewport(viewport: IViewportLike, requiredWidth?: number, requiredHeight?: number): void {\r\n this._cachedViewport = viewport;\r\n this._engine.setViewPort(viewport.x, viewport.y, viewport.width, viewport.height);\r\n }\r\n\r\n public setState(culling: boolean, zOffset: number = 0, force?: boolean, reverseSide = false, cullBackFaces?: boolean, stencil?: IStencilState, zOffsetUnits: number = 0): void {\r\n this._zOffset = zOffset;\r\n this._zOffsetUnits = zOffsetUnits;\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETSTATE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(culling ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(zOffset);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(zOffsetUnits);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(this.cullBackFaces ?? cullBackFaces ?? true ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(reverseSide ? 1 : 0);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Gets the client rect of native canvas. Needed for InputManager.\r\n * @returns a client rectangle\r\n */\r\n public getInputElementClientRect(): Nullable<DOMRect> {\r\n const rect = {\r\n bottom: this.getRenderHeight(),\r\n height: this.getRenderHeight(),\r\n left: 0,\r\n right: this.getRenderWidth(),\r\n top: 0,\r\n width: this.getRenderWidth(),\r\n x: 0,\r\n y: 0,\r\n toJSON: () => {},\r\n };\r\n return rect;\r\n }\r\n\r\n /**\r\n * Set the z offset Factor to apply to current rendering\r\n * @param value defines the offset to apply\r\n */\r\n public setZOffset(value: number): void {\r\n if (value !== this._zOffset) {\r\n this._zOffset = value;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETZOFFSET);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(this.useReverseDepthBuffer ? -value : value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value of the zOffset Factor\r\n * @returns the current zOffset Factor state\r\n */\r\n public getZOffset(): number {\r\n return this._zOffset;\r\n }\r\n\r\n /**\r\n * Set the z offset Units to apply to current rendering\r\n * @param value defines the offset to apply\r\n */\r\n public setZOffsetUnits(value: number): void {\r\n if (value !== this._zOffsetUnits) {\r\n this._zOffsetUnits = value;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETZOFFSETUNITS);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(this.useReverseDepthBuffer ? -value : value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value of the zOffset Units\r\n * @returns the current zOffset Units state\r\n */\r\n public getZOffsetUnits(): number {\r\n return this._zOffsetUnits;\r\n }\r\n\r\n /**\r\n * Enable or disable depth buffering\r\n * @param enable defines the state to set\r\n */\r\n public setDepthBuffer(enable: boolean): void {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHTEST);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(enable ? this._currentDepthTest : _native.Engine.DEPTH_TEST_ALWAYS);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if depth writing is enabled\r\n * @returns the current depth writing state\r\n */\r\n public getDepthWrite(): boolean {\r\n return this._depthWrite;\r\n }\r\n\r\n public getDepthFunction(): Nullable<number> {\r\n switch (this._currentDepthTest) {\r\n case _native.Engine.DEPTH_TEST_NEVER:\r\n return Constants.NEVER;\r\n case _native.Engine.DEPTH_TEST_ALWAYS:\r\n return Constants.ALWAYS;\r\n case _native.Engine.DEPTH_TEST_GREATER:\r\n return Constants.GREATER;\r\n case _native.Engine.DEPTH_TEST_GEQUAL:\r\n return Constants.GEQUAL;\r\n case _native.Engine.DEPTH_TEST_NOTEQUAL:\r\n return Constants.NOTEQUAL;\r\n case _native.Engine.DEPTH_TEST_EQUAL:\r\n return Constants.EQUAL;\r\n case _native.Engine.DEPTH_TEST_LESS:\r\n return Constants.LESS;\r\n case _native.Engine.DEPTH_TEST_LEQUAL:\r\n return Constants.LEQUAL;\r\n }\r\n return null;\r\n }\r\n\r\n public setDepthFunction(depthFunc: number) {\r\n let nativeDepthFunc = 0;\r\n switch (depthFunc) {\r\n case Constants.NEVER:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_NEVER;\r\n break;\r\n case Constants.ALWAYS:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_ALWAYS;\r\n break;\r\n case Constants.GREATER:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_GREATER;\r\n break;\r\n case Constants.GEQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_GEQUAL;\r\n break;\r\n case Constants.NOTEQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_NOTEQUAL;\r\n break;\r\n case Constants.EQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_EQUAL;\r\n break;\r\n case Constants.LESS:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_LESS;\r\n break;\r\n case Constants.LEQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_LEQUAL;\r\n break;\r\n }\r\n\r\n this._currentDepthTest = nativeDepthFunc;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHTEST);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(this._currentDepthTest);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Enable or disable depth writing\r\n * @param enable defines the state to set\r\n */\r\n public setDepthWrite(enable: boolean): void {\r\n this._depthWrite = enable;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHWRITE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(Number(enable));\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Enable or disable color writing\r\n * @param enable defines the state to set\r\n */\r\n public setColorWrite(enable: boolean): void {\r\n this._colorWrite = enable;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETCOLORWRITE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(Number(enable));\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if color writing is enabled\r\n * @returns the current color writing state\r\n */\r\n public getColorWrite(): boolean {\r\n return this._colorWrite;\r\n }\r\n\r\n private applyStencil(): void {\r\n this._setStencil(\r\n this._stencilMask,\r\n this._getStencilOpFail(this._stencilOpStencilFail),\r\n this._getStencilDepthFail(this._stencilOpDepthFail),\r\n this._getStencilDepthPass(this._stencilOpStencilDepthPass),\r\n this._getStencilFunc(this._stencilFunc),\r\n this._stencilFuncRef\r\n );\r\n }\r\n\r\n private _setStencil(mask: number, stencilOpFail: number, depthOpFail: number, depthOpPass: number, func: number, ref: number) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETSTENCIL);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(mask);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(stencilOpFail);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(depthOpFail);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(depthOpPass);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(func);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(ref);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Enable or disable the stencil buffer\r\n * @param enable defines if the stencil buffer must be enabled or disabled\r\n */\r\n public setStencilBuffer(enable: boolean): void {\r\n this._stencilTest = enable;\r\n if (enable) {\r\n this.applyStencil();\r\n } else {\r\n this._setStencil(\r\n 255,\r\n _native.Engine.STENCIL_OP_FAIL_S_KEEP,\r\n _native.Engine.STENCIL_OP_FAIL_Z_KEEP,\r\n _native.Engine.STENCIL_OP_PASS_Z_KEEP,\r\n _native.Engine.STENCIL_TEST_ALWAYS,\r\n 0\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if stencil buffer is enabled\r\n * @returns the current stencil buffer state\r\n */\r\n public getStencilBuffer(): boolean {\r\n return this._stencilTest;\r\n }\r\n\r\n /**\r\n * Gets the current stencil operation when stencil passes\r\n * @returns a number defining stencil operation to use when stencil passes\r\n */\r\n public getStencilOperationPass(): number {\r\n return this._stencilOpStencilDepthPass;\r\n }\r\n\r\n /**\r\n * Sets the stencil operation to use when stencil passes\r\n * @param operation defines the stencil operation to use when stencil passes\r\n */\r\n public setStencilOperationPass(operation: number): void {\r\n this._stencilOpStencilDepthPass = operation;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil mask\r\n * @param mask defines the new stencil mask to use\r\n */\r\n public setStencilMask(mask: number): void {\r\n this._stencilMask = mask;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil function\r\n * @param stencilFunc defines the new stencil function to use\r\n */\r\n public setStencilFunction(stencilFunc: number) {\r\n this._stencilFunc = stencilFunc;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil reference\r\n * @param reference defines the new stencil reference to use\r\n */\r\n public setStencilFunctionReference(reference: number) {\r\n this._stencilFuncRef = reference;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil mask\r\n * @param mask defines the new stencil mask to use\r\n */\r\n public setStencilFunctionMask(mask: number) {\r\n this._stencilFuncMask = mask;\r\n }\r\n\r\n /**\r\n * Sets the stencil operation to use when stencil fails\r\n * @param operation defines the stencil operation to use when stencil fails\r\n */\r\n public setStencilOperationFail(operation: number): void {\r\n this._stencilOpStencilFail = operation;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the stencil operation to use when depth fails\r\n * @param operation defines the stencil operation to use when depth fails\r\n */\r\n public setStencilOperationDepthFail(operation: number): void {\r\n this._stencilOpDepthFail = operation;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Gets the current stencil mask\r\n * @returns a number defining the new stencil mask to use\r\n */\r\n public getStencilMask(): number {\r\n return this._stencilMask;\r\n }\r\n\r\n /**\r\n * Gets the current stencil function\r\n * @returns a number defining the stencil function to use\r\n */\r\n public getStencilFunction(): number {\r\n return this._stencilFunc;\r\n }\r\n\r\n /**\r\n * Gets the current stencil reference value\r\n * @returns a number defining the stencil reference value to use\r\n */\r\n public getStencilFunctionReference(): number {\r\n return this._stencilFuncRef;\r\n }\r\n\r\n /**\r\n * Gets the current stencil mask\r\n * @returns a number defining the stencil mask to use\r\n */\r\n public getStencilFunctionMask(): number {\r\n return this._stencilFuncMask;\r\n }\r\n\r\n /**\r\n * Gets the current stencil operation when stencil fails\r\n * @returns a number defining stencil operation to use when stencil fails\r\n */\r\n public getStencilOperationFail(): number {\r\n return this._stencilOpStencilFail;\r\n }\r\n\r\n /**\r\n * Gets the current stencil operation when depth fails\r\n * @returns a number defining stencil operation to use when depth fails\r\n */\r\n public getStencilOperationDepthFail(): number {\r\n return this._stencilOpDepthFail;\r\n }\r\n\r\n /**\r\n * Sets alpha constants used by some alpha blending modes\r\n * @param r defines the red component\r\n * @param g defines the green component\r\n * @param b defines the blue component\r\n * @param a defines the alpha component\r\n */\r\n public setAlphaConstants(r: number, g: number, b: number, a: number) {\r\n throw new Error(\"Setting alpha blend constant color not yet implemented.\");\r\n }\r\n\r\n /**\r\n * Sets the current alpha mode\r\n * @param mode defines the mode to use (one of the BABYLON.Constants.ALPHA_XXX)\r\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n */\r\n public setAlphaMode(mode: number, noDepthWriteChange: boolean = false): void {\r\n if (this._alphaMode === mode) {\r\n return;\r\n }\r\n\r\n const nativeMode = this._getNativeAlphaMode(mode);\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETBLENDMODE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(nativeMode);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n\r\n if (!noDepthWriteChange) {\r\n this.setDepthWrite(mode === Constants.ALPHA_DISABLE);\r\n }\r\n\r\n this._alphaMode = mode;\r\n }\r\n\r\n /**\r\n * Gets the current alpha mode\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n * @returns the current alpha mode\r\n */\r\n public getAlphaMode(): number {\r\n return this._alphaMode;\r\n }\r\n\r\n public setInt(uniform: WebGLUniformLocation, int: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINT);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32(int);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray2(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray3(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray4(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY4);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray2(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray3(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray4(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY4);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setArray(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray(uniform, new Float32Array(array));\r\n }\r\n\r\n public setArray2(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray2(uniform, new Float32Array(array));\r\n }\r\n\r\n public setArray3(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray3(uniform, new Float32Array(array));\r\n }\r\n\r\n public setArray4(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray4(uniform, new Float32Array(array));\r\n }\r\n\r\n public setMatrices(uniform: WebGLUniformLocation, matrices: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRICES);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrices);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n\r\n return true;\r\n }\r\n\r\n public setMatrix3x3(uniform: WebGLUniformLocation, matrix: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRIX3X3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrix);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setMatrix2x2(uniform: WebGLUniformLocation, matrix: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRIX2X2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrix);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat(uniform: WebGLUniformLocation, value: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat2(uniform: WebGLUniformLocation, x: number, y: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(x);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(y);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat3(uniform: WebGLUniformLocation, x: number, y: number, z: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(x);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(y);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(z);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat4(uniform: WebGLUniformLocation, x: number, y: number, z: number, w: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT4);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(x);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(y);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(z);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(w);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setColor3(uniform: WebGLUniformLocation, color3: IColor3Like): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this.setFloat3(uniform, color3.r, color3.g, color3.b);\r\n return true;\r\n }\r\n\r\n public setColor4(uniform: WebGLUniformLocation, color3: IColor3Like, alpha: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this.setFloat4(uniform, color3.r, color3.g, color3.b, alpha);\r\n return true;\r\n }\r\n\r\n public wipeCaches(bruteForce?: boolean): void {\r\n if (this.preventCacheWipeBetweenFrames) {\r\n return;\r\n }\r\n this.resetTextureCache();\r\n this._currentEffect = null;\r\n\r\n if (bruteForce) {\r\n this._currentProgram = null;\r\n\r\n this._stencilStateComposer.reset();\r\n this._depthCullingState.reset();\r\n this._alphaState.reset();\r\n }\r\n\r\n this._cachedVertexBuffers = null;\r\n this._cachedIndexBuffer = null;\r\n this._cachedEffectForVertexBuffers = null;\r\n }\r\n\r\n protected _createTexture(): WebGLTexture {\r\n return this._engine.createTexture();\r\n }\r\n\r\n protected _deleteTexture(texture: Nullable<WebGLTexture>): void {\r\n if (texture) {\r\n this._engine.deleteTexture(texture);\r\n }\r\n }\r\n\r\n /**\r\n * Update the content of a dynamic texture\r\n * @param texture defines the texture to update\r\n * @param canvas defines the canvas containing the source\r\n * @param invertY defines if data must be stored with Y axis inverted\r\n * @param premulAlpha defines if alpha is stored as premultiplied\r\n * @param format defines the format of the data\r\n */\r\n public updateDynamicTexture(texture: Nullable<InternalTexture>, canvas: any, invertY: boolean, premulAlpha: boolean = false, format?: number): void {\r\n if (premulAlpha === void 0) {\r\n premulAlpha = false;\r\n }\r\n\r\n if (!!texture && !!texture._hardwareTexture) {\r\n const source = canvas.getCanvasTexture();\r\n const destination = texture._hardwareTexture.underlyingResource;\r\n this._engine.copyTexture(destination, source);\r\n texture.isReady = true;\r\n }\r\n }\r\n\r\n public createDynamicTexture(width: number, height: number, generateMipMaps: boolean, samplingMode: number): InternalTexture {\r\n // it's not possible to create 0x0 texture sized. Many bgfx methods assume texture size is at least 1x1(best case).\r\n // Worst case is getting a crash/assert.\r\n width = Math.max(width, 1);\r\n height = Math.max(height, 1);\r\n return this.createRawTexture(new Uint8Array(width * height * 4), width, height, Constants.TEXTUREFORMAT_RGBA, false, false, samplingMode);\r\n }\r\n\r\n public createVideoElement(constraints: MediaTrackConstraints): any {\r\n // create native object depending on stream. Only NativeCamera is supported for now.\r\n if (this._camera) {\r\n return this._camera.createVideo(constraints);\r\n }\r\n return null;\r\n }\r\n\r\n public updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void {\r\n if (texture && texture._hardwareTexture && this._camera) {\r\n const webGLTexture = texture._hardwareTexture.underlyingResource;\r\n this._camera.updateVideoTexture(webGLTexture, video, invertY);\r\n }\r\n }\r\n\r\n public createRawTexture(\r\n data: Nullable<ArrayBufferView>,\r\n width: number,\r\n height: number,\r\n format: number,\r\n generateMipMaps: boolean,\r\n invertY: boolean,\r\n samplingMode: number,\r\n compression: Nullable<string> = null,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_INT\r\n ): InternalTexture {\r\n const texture = new InternalTexture(this, InternalTextureSource.Raw);\r\n\r\n texture.format = format;\r\n texture.generateMipMaps = generateMipMaps;\r\n texture.samplingMode = samplingMode;\r\n texture.invertY = invertY;\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.width = texture.baseWidth;\r\n texture.height = texture.baseHeight;\r\n texture._compression = compression;\r\n texture.type = type;\r\n\r\n this.updateRawTexture(texture, data, format, invertY, compression, type);\r\n\r\n if (texture._hardwareTexture) {\r\n const webGLTexture = texture._hardwareTexture.underlyingResource;\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(webGLTexture, filter);\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n return texture;\r\n }\r\n\r\n public createRawTexture2DArray(\r\n data: Nullable<ArrayBufferView>,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n format: number,\r\n generateMipMaps: boolean,\r\n invertY: boolean,\r\n samplingMode: number,\r\n compression: Nullable<string> = null,\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_INT\r\n ): InternalTexture {\r\n const texture = new InternalTexture(this, InternalTextureSource.Raw2DArray);\r\n\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.baseDepth = depth;\r\n texture.width = width;\r\n texture.height = height;\r\n texture.depth = depth;\r\n texture.format = format;\r\n texture.type = textureType;\r\n texture.generateMipMaps = generateMipMaps;\r\n texture.samplingMode = samplingMode;\r\n texture.is2DArray = true;\r\n\r\n if (texture._hardwareTexture) {\r\n const webGLTexture = texture._hardwareTexture.underlyingResource;\r\n this._engine.loadRawTexture2DArray(webGLTexture, data, width, height, depth, this._getNativeTextureFormat(format, textureType), generateMipMaps, invertY);\r\n\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(webGLTexture, filter);\r\n }\r\n\r\n texture.isReady = true;\r\n\r\n this._internalTexturesCache.push(texture);\r\n return texture;\r\n }\r\n\r\n public updateRawTexture(\r\n texture: Nullable<InternalTexture>,\r\n bufferView: Nullable<ArrayBufferView>,\r\n format: number,\r\n invertY: boolean,\r\n compression: Nullable<string> = null,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_INT\r\n ): void {\r\n if (!texture) {\r\n return;\r\n }\r\n\r\n if (bufferView && texture._hardwareTexture) {\r\n const underlyingResource = texture._hardwareTexture.underlyingResource;\r\n this._engine.loadRawTexture(\r\n underlyingResource,\r\n bufferView,\r\n texture.width,\r\n texture.height,\r\n this._getNativeTextureFormat(format, type),\r\n texture.generateMipMaps,\r\n texture.invertY\r\n );\r\n }\r\n\r\n texture.isReady = true;\r\n }\r\n\r\n // TODO: Refactor to share more logic with babylon.engine.ts version.\r\n /**\r\n * Usually called from Texture.ts.\r\n * Passed information to create a WebGLTexture\r\n * @param url defines a value which contains one of the following:\r\n * * A conventional http URL, e.g. 'http://...' or 'file://...'\r\n * * A base64 string of in-line texture data, e.g. 'data:image/jpg;base64,/...'\r\n * * An indicator that data being passed using the buffer parameter, e.g. 'data:mytexture.jpg'\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated. Ignored for compressed textures. They must be in the file\r\n * @param invertY when true, image is flipped when loaded. You probably want true. Certain compressed textures may invert this if their default is inverted (eg. ktx)\r\n * @param scene needed for loading to the correct scene\r\n * @param samplingMode mode with should be used sample / access the texture (Default: Texture.TRILINEAR_SAMPLINGMODE)\r\n * @param onLoad optional callback to be called upon successful completion\r\n * @param onError optional callback to be called upon failure\r\n * @param buffer a source of a file previously fetched as either a base64 string, an ArrayBuffer (compressed or image format), HTMLImageElement (image format), or a Blob\r\n * @param fallback an internal argument in case the function must be called again, due to etc1 not having alpha capabilities\r\n * @param format internal format. Default: RGB when extension is '.jpg' else RGBA. Ignored for compressed textures\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param mimeType defines an optional mime type\r\n * @param loaderOptions options to be passed to the loader\r\n * @param creationFlags\r\n * @param useSRGBBuffer\r\n * @returns a InternalTexture for assignment back into BABYLON.Texture\r\n */\r\n public createTexture(\r\n url: Nullable<string>,\r\n noMipmap: boolean,\r\n invertY: boolean,\r\n scene: Nullable<ISceneLike>,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message: string, exception: any) => void> = null,\r\n buffer: Nullable<string | ArrayBuffer | ArrayBufferView | HTMLImageElement | Blob | ImageBitmap> = null,\r\n fallback: Nullable<InternalTexture> = null,\r\n format: Nullable<number> = null,\r\n forcedExtension: Nullable<string> = null,\r\n mimeType?: string,\r\n loaderOptions?: any,\r\n creationFlags?: number,\r\n useSRGBBuffer = false\r\n ): InternalTexture {\r\n url = url || \"\";\r\n const fromData = url.substr(0, 5) === \"data:\";\r\n //const fromBlob = url.substr(0, 5) === \"blob:\";\r\n const isBase64 = fromData && url.indexOf(\";base64,\") !== -1;\r\n\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Url);\r\n\r\n const originalUrl = url;\r\n if (this._transformTextureUrl && !isBase64 && !fallback && !buffer) {\r\n url = this._transformTextureUrl(url);\r\n }\r\n\r\n // establish the file extension, if possible\r\n const lastDot = url.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\r\n\r\n let loader: Nullable<IInternalTextureLoader> = null;\r\n for (const availableLoader of Engine._TextureLoaders) {\r\n if (availableLoader.canLoad(extension)) {\r\n loader = availableLoader;\r\n break;\r\n }\r\n }\r\n\r\n if (scene) {\r\n scene._addPendingData(texture);\r\n }\r\n texture.url = url;\r\n texture.generateMipMaps = !noMipmap;\r\n texture.samplingMode = samplingMode;\r\n texture.invertY = invertY;\r\n texture._useSRGBBuffer = this._getUseSRGBBuffer(useSRGBBuffer, noMipmap);\r\n\r\n if (!this.doNotHandleContextLost) {\r\n // Keep a link to the buffer only if we plan to handle context lost\r\n texture._buffer = buffer;\r\n }\r\n\r\n let onLoadObserver: Nullable<Observer<InternalTexture>> = null;\r\n if (onLoad && !fallback) {\r\n onLoadObserver = texture.onLoadedObservable.add(onLoad);\r\n }\r\n\r\n if (!fallback) {\r\n this._internalTexturesCache.push(texture);\r\n }\r\n\r\n const onInternalError = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene._removePendingData(texture);\r\n }\r\n\r\n if (url === originalUrl) {\r\n if (onLoadObserver) {\r\n texture.onLoadedObservable.remove(onLoadObserver);\r\n }\r\n\r\n if (EngineStore.UseFallbackTexture) {\r\n this.createTexture(EngineStore.FallbackTexture, noMipmap, texture.invertY, scene, samplingMode, null, onError, buffer, texture);\r\n }\r\n\r\n if (onError) {\r\n onError((message || \"Unknown error\") + (EngineStore.UseFallbackTexture ? \" - Fallback texture was used\" : \"\"), exception);\r\n }\r\n } else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${url}, falling back to ${originalUrl}`);\r\n this.createTexture(originalUrl, noMipmap, texture.invertY, scene, samplingMode, onLoad, onError, buffer, texture, format, forcedExtension, mimeType, loaderOptions);\r\n }\r\n };\r\n\r\n // processing for non-image formats\r\n if (loader) {\r\n throw new Error(\"Loading textures from IInternalTextureLoader not yet implemented.\");\r\n } else {\r\n const onload = (data: ArrayBufferView) => {\r\n if (!texture._hardwareTexture) {\r\n if (scene) {\r\n scene._removePendingData(texture);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const underlyingResource = texture._hardwareTexture.underlyingResource;\r\n\r\n this._engine.loadTexture(\r\n underlyingResource,\r\n data,\r\n !noMipmap,\r\n invertY,\r\n useSRGBBuffer,\r\n () => {\r\n texture.baseWidth = this._engine.getTextureWidth(underlyingResource);\r\n texture.baseHeight = this._engine.getTextureHeight(underlyingResource);\r\n texture.width = texture.baseWidth;\r\n texture.height = texture.baseHeight;\r\n texture.isReady = true;\r\n\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(underlyingResource, filter);\r\n\r\n if (scene) {\r\n scene._removePendingData(texture);\r\n }\r\n\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n },\r\n () => {\r\n throw new Error(\"Could not load a native texture.\");\r\n }\r\n );\r\n };\r\n\r\n if (fromData && buffer) {\r\n if (buffer instanceof ArrayBuffer) {\r\n onload(new Uint8Array(buffer));\r\n } else if (ArrayBuffer.isView(buffer)) {\r\n onload(buffer);\r\n } else if (typeof buffer === \"string\") {\r\n onload(new Uint8Array(Tools.DecodeBase64(buffer)));\r\n } else {\r\n throw new Error(\"Unsupported buffer type\");\r\n }\r\n } else {\r\n if (isBase64) {\r\n onload(new Uint8Array(Tools.DecodeBase64(url)));\r\n } else {\r\n this._loadFile(\r\n url,\r\n (data) => onload(new Uint8Array(data as ArrayBuffer)),\r\n undefined,\r\n undefined,\r\n true,\r\n (request?: IWebRequest, exception?: any) => {\r\n onInternalError(\"Unable to load \" + (request ? request.responseURL : url, exception));\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Wraps an external native texture in a Babylon texture.\r\n * @param texture defines the external texture\r\n * @returns the babylon internal texture\r\n */\r\n wrapNativeTexture(texture: any): InternalTexture {\r\n // Currently native is using the WebGL wrapper\r\n const hardwareTexture = new WebGLHardwareTexture(texture, this._gl);\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);\r\n internalTexture._hardwareTexture = hardwareTexture;\r\n internalTexture.isReady = true;\r\n return internalTexture;\r\n }\r\n\r\n /**\r\n * Wraps an external web gl texture in a Babylon texture.\r\n * @returns the babylon internal texture\r\n */\r\n wrapWebGLTexture(): InternalTexture {\r\n throw new Error(\"wrapWebGLTexture is not supported, use wrapNativeTexture instead.\");\r\n }\r\n\r\n public _createDepthStencilTexture(size: TextureSize, options: DepthTextureCreationOptions, rtWrapper: RenderTargetWrapper): InternalTexture {\r\n const nativeRTWrapper = rtWrapper as NativeRenderTargetWrapper;\r\n const texture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n\r\n const width = (<{ width: number; height: number; layers?: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number; layers?: number }>size).height || <number>size;\r\n\r\n const framebuffer = this._engine.createFrameBuffer(texture._hardwareTexture!.underlyingResource, width, height, _native.Engine.TEXTURE_FORMAT_RGBA8, false, true, false);\r\n nativeRTWrapper._framebufferDepthStencil = framebuffer;\r\n return texture;\r\n }\r\n\r\n /**\r\n * @param framebuffer\r\n * @hidden\r\n */\r\n public _releaseFramebufferObjects(framebuffer: Nullable<WebGLFramebuffer>): void {\r\n if (framebuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEFRAMEBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(framebuffer as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n /** @hidden */\r\n /**\r\n * Engine abstraction for loading and creating an image bitmap from a given source string.\r\n * @param imageSource source to load the image from.\r\n * @param options An object that sets options for the image's extraction.\r\n * @returns ImageBitmap\r\n */\r\n public createImageBitmapFromSource(imageSource: string, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n const promise = new Promise<ImageBitmap>((resolve, reject) => {\r\n const image = this.createCanvasImage();\r\n image.onload = () => {\r\n const imageBitmap = this._engine.createImageBitmap(image);\r\n if (imageBitmap) {\r\n resolve(imageBitmap);\r\n return;\r\n } else {\r\n reject(`Error loading image ${image.src}`);\r\n }\r\n };\r\n image.onerror = () => {\r\n reject(`Error loading image ${image.src}`);\r\n };\r\n\r\n image.src = imageSource;\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n /**\r\n * Engine abstraction for createImageBitmap\r\n * @param image source for image\r\n * @param options An object that sets options for the image's extraction.\r\n * @returns ImageBitmap\r\n */\r\n public createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n return new Promise((resolve, reject) => {\r\n if (Array.isArray(image)) {\r\n const arr = <Array<ArrayBufferView>>image;\r\n if (arr.length) {\r\n const image = this._engine.createImageBitmap(arr[0]);\r\n if (image) {\r\n resolve(image);\r\n return;\r\n }\r\n }\r\n }\r\n reject(`Unsupported data for createImageBitmap.`);\r\n });\r\n }\r\n\r\n /**\r\n * Resize an image and returns the image data as an uint8array\r\n * @param image image to resize\r\n * @param bufferWidth destination buffer width\r\n * @param bufferHeight destination buffer height\r\n * @returns an uint8array containing RGBA values of bufferWidth * bufferHeight size\r\n */\r\n public resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n return this._engine.resizeImageBitmap(image, bufferWidth, bufferHeight);\r\n }\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials if a polynomial sphere should be created for the cube texture\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param fallback defines texture to use while falling back when (compressed) texture file not found.\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n public createCubeTexture(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap?: boolean,\r\n onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials = false,\r\n lodScale: number = 0,\r\n lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null,\r\n loaderOptions?: any,\r\n useSRGBBuffer = false\r\n ): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n }\r\n\r\n const lastDot = rootUrl.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? rootUrl.substring(lastDot).toLowerCase() : \"\";\r\n\r\n // TODO: use texture loader to load env files?\r\n if (extension === \".env\") {\r\n const onloaddata = (data: ArrayBufferView) => {\r\n const info = GetEnvInfo(data)!;\r\n texture.width = info.width;\r\n texture.height = info.width;\r\n\r\n UploadEnvSpherical(texture, info);\r\n\r\n const specularInfo = info.specular as EnvironmentTextureSpecularInfoV1;\r\n if (!specularInfo) {\r\n throw new Error(`Nothing else parsed so far`);\r\n }\r\n\r\n texture._lodGenerationScale = specularInfo.lodGenerationScale;\r\n const imageData = CreateImageDataArrayBufferViews(data, info);\r\n\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n texture.generateMipMaps = true;\r\n texture.getEngine().updateTextureSamplingMode(Texture.TRILINEAR_SAMPLINGMODE, texture);\r\n texture._isRGBD = true;\r\n texture.invertY = true;\r\n\r\n this._engine.loadCubeTextureWithMips(\r\n texture._hardwareTexture!.underlyingResource,\r\n imageData,\r\n false,\r\n useSRGBBuffer,\r\n () => {\r\n texture.isReady = true;\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n },\r\n () => {\r\n throw new Error(\"Could not load a native cube texture.\");\r\n }\r\n );\r\n };\r\n\r\n if (files && files.length === 6) {\r\n throw new Error(`Multi-file loading not allowed on env files.`);\r\n } else {\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n } else {\r\n if (!files || files.length !== 6) {\r\n throw new Error(\"Cannot load cubemap because 6 files were not defined\");\r\n }\r\n\r\n // Reorder from [+X, +Y, +Z, -X, -Y, -Z] to [+X, -X, +Y, -Y, +Z, -Z].\r\n const reorderedFiles = [files[0], files[3], files[1], files[4], files[2], files[5]];\r\n Promise.all(reorderedFiles.map((file) => Tools.LoadFileAsync(file).then((data) => new Uint8Array(data as ArrayBuffer))))\r\n .then((data) => {\r\n return new Promise<void>((resolve, reject) => {\r\n this._engine.loadCubeTexture(texture._hardwareTexture!.underlyingResource, data, !noMipmap, true, useSRGBBuffer, resolve, reject);\r\n });\r\n })\r\n .then(\r\n () => {\r\n texture.isReady = true;\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n },\r\n (error) => {\r\n if (onError) {\r\n onError(`Failed to load cubemap: ${error.message}`, error);\r\n }\r\n }\r\n );\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * @param isMulti\r\n * @param isCube\r\n * @param size\r\n * @hidden\r\n */\r\n public _createHardwareRenderTargetWrapper(isMulti: boolean, isCube: boolean, size: TextureSize): RenderTargetWrapper {\r\n const rtWrapper = new NativeRenderTargetWrapper(isMulti, isCube, size, this);\r\n this._renderTargetWrapperCache.push(rtWrapper);\r\n return rtWrapper;\r\n }\r\n\r\n public createRenderTargetTexture(size: number | { width: number; height: number }, options: boolean | RenderTargetCreationOptions): RenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size) as NativeRenderTargetWrapper;\r\n\r\n const fullOptions: RenderTargetCreationOptions = {};\r\n\r\n if (options !== undefined && typeof options === \"object\") {\r\n fullOptions.generateMipMaps = options.generateMipMaps;\r\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\r\n fullOptions.type = options.type === undefined ? Constants.TEXTURETYPE_UNSIGNED_INT : options.type;\r\n fullOptions.samplingMode = options.samplingMode === undefined ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : options.samplingMode;\r\n fullOptions.format = options.format === undefined ? Constants.TEXTUREFORMAT_RGBA : options.format;\r\n } else {\r\n fullOptions.generateMipMaps = <boolean>options;\r\n fullOptions.generateDepthBuffer = true;\r\n fullOptions.generateStencilBuffer = false;\r\n fullOptions.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n fullOptions.samplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n fullOptions.format = Constants.TEXTUREFORMAT_RGBA;\r\n }\r\n\r\n if (fullOptions.type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloatLinearFiltering) {\r\n // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE\r\n fullOptions.samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n } else if (fullOptions.type === Constants.TEXTURETYPE_HALF_FLOAT && !this._caps.textureHalfFloatLinearFiltering) {\r\n // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE\r\n fullOptions.samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n }\r\n const texture = new InternalTexture(this, InternalTextureSource.RenderTarget);\r\n\r\n const width = (<{ width: number; height: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number }>size).height || <number>size;\r\n\r\n if (fullOptions.type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloat) {\r\n fullOptions.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n Logger.Warn(\"Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type\");\r\n }\r\n\r\n const framebuffer = this._engine.createFrameBuffer(\r\n texture._hardwareTexture!.underlyingResource,\r\n width,\r\n height,\r\n this._getNativeTextureFormat(fullOptions.format, fullOptions.type),\r\n fullOptions.generateStencilBuffer ? true : false,\r\n fullOptions.generateDepthBuffer,\r\n fullOptions.generateMipMaps ? true : false\r\n );\r\n\r\n rtWrapper._framebuffer = framebuffer;\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\r\n\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.width = width;\r\n texture.height = height;\r\n texture.isReady = true;\r\n texture.samples = 1;\r\n texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;\r\n texture.samplingMode = fullOptions.samplingMode;\r\n texture.type = fullOptions.type;\r\n texture.format = fullOptions.format;\r\n\r\n this._internalTexturesCache.push(texture);\r\n rtWrapper.setTextures(texture);\r\n\r\n return rtWrapper;\r\n }\r\n\r\n public updateTextureSamplingMode(samplingMode: number, texture: InternalTexture): void {\r\n if (texture._hardwareTexture) {\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(texture._hardwareTexture.underlyingResource, filter);\r\n }\r\n texture.samplingMode = samplingMode;\r\n }\r\n\r\n public bindFramebuffer(texture: RenderTargetWrapper, faceIndex?: number, requiredWidth?: number, requiredHeight?: number, forceFullscreenViewport?: boolean): void {\r\n const nativeRTWrapper = texture as NativeRenderTargetWrapper;\r\n\r\n if (faceIndex) {\r\n throw new Error(\"Cuboid frame buffers are not yet supported in NativeEngine.\");\r\n }\r\n\r\n if (requiredWidth || requiredHeight) {\r\n throw new Error(\"Required width/height for frame buffers not yet supported in NativeEngine.\");\r\n }\r\n\r\n if (forceFullscreenViewport) {\r\n //Not supported yet but don't stop rendering\r\n }\r\n\r\n if (nativeRTWrapper._framebufferDepthStencil) {\r\n this._bindUnboundFramebuffer(nativeRTWrapper._framebufferDepthStencil);\r\n } else {\r\n this._bindUnboundFramebuffer(nativeRTWrapper._framebuffer);\r\n }\r\n }\r\n\r\n public unBindFramebuffer(texture: RenderTargetWrapper, disableGenerateMipMaps = false, onBeforeUnbind?: () => void): void {\r\n // NOTE: Disabling mipmap generation is not yet supported in NativeEngine.\r\n\r\n if (onBeforeUnbind) {\r\n onBeforeUnbind();\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n }\r\n\r\n public createDynamicVertexBuffer(data: DataArray): DataBuffer {\r\n return this.createVertexBuffer(data, true);\r\n }\r\n\r\n public updateDynamicIndexBuffer(indexBuffer: DataBuffer, indices: IndicesArray, offset: number = 0): void {\r\n const buffer = indexBuffer as NativeDataBuffer;\r\n const data = this._normalizeIndexData(indices);\r\n buffer.is32Bits = data.BYTES_PER_ELEMENT === 4;\r\n this._engine.updateDynamicIndexBuffer(buffer.nativeIndexBuffer!, data.buffer, data.byteOffset, data.byteLength, offset);\r\n }\r\n\r\n public updateDynamicVertexBuffer(vertexBuffer: DataBuffer, verticies: DataArray, byteOffset?: number, byteLength?: number): void {\r\n const buffer = vertexBuffer as NativeDataBuffer;\r\n const data = ArrayBuffer.isView(verticies) ? verticies : new Float32Array(verticies);\r\n this._engine.updateDynamicVertexBuffer(buffer.nativeVertexBuffer!, data.buffer, data.byteOffset + (byteOffset ?? 0), byteLength ?? data.byteLength);\r\n }\r\n\r\n // TODO: Refactor to share more logic with base Engine implementation.\r\n protected _setTexture(channel: number, texture: Nullable<BaseTexture>, isPartOfTextureArray = false, depthStencilTexture = false): boolean {\r\n const uniform = this._boundUniforms[channel];\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n // Not ready?\r\n if (!texture) {\r\n if (this._boundTexturesCache[channel] != null) {\r\n this._activeChannel = channel;\r\n this._setTextureCore(uniform, null);\r\n }\r\n return false;\r\n }\r\n\r\n // Video\r\n if ((<VideoTexture>texture).video) {\r\n this._activeChannel = channel;\r\n (<VideoTexture>texture).update();\r\n } else if (texture.delayLoadState === Constants.DELAYLOADSTATE_NOTLOADED) {\r\n // Delay loading\r\n texture.delayLoad();\r\n return false;\r\n }\r\n\r\n let internalTexture: InternalTexture;\r\n if (depthStencilTexture) {\r\n internalTexture = (<RenderTargetTexture>texture).depthStencilTexture!;\r\n } else if (texture.isReady()) {\r\n internalTexture = <InternalTexture>texture.getInternalTexture();\r\n } else if (texture.isCube) {\r\n internalTexture = this.emptyCubeTexture;\r\n } else if (texture.is3D) {\r\n internalTexture = this.emptyTexture3D;\r\n } else if (texture.is2DArray) {\r\n internalTexture = this.emptyTexture2DArray;\r\n } else {\r\n internalTexture = this.emptyTexture;\r\n }\r\n\r\n this._activeChannel = channel;\r\n\r\n if (!internalTexture || !internalTexture._hardwareTexture) {\r\n return false;\r\n }\r\n\r\n this._setTextureWrapMode(\r\n internalTexture._hardwareTexture.underlyingResource,\r\n this._getAddressMode(texture.wrapU),\r\n this._getAddressMode(texture.wrapV),\r\n this._getAddressMode(texture.wrapR)\r\n );\r\n this._updateAnisotropicLevel(texture);\r\n\r\n this._setTextureCore(uniform, internalTexture._hardwareTexture.underlyingResource);\r\n\r\n return true;\r\n }\r\n\r\n // filter is a NativeFilter.XXXX value.\r\n private _setTextureSampling(texture: WebGLTexture, filter: number) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTURESAMPLING);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(texture as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(filter);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n // addressModes are NativeAddressMode.XXXX values.\r\n private _setTextureWrapMode(texture: WebGLTexture, addressModeU: number, addressModeV: number, addressModeW: number) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTUREWRAPMODE);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(texture as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(addressModeU);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(addressModeV);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(addressModeW);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n private _setTextureCore(uniform: WebGLUniformLocation, texture: Nullable<WebGLTexture>) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTURE);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(texture as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n // TODO: Share more of this logic with the base implementation.\r\n // TODO: Rename to match naming in base implementation once refactoring allows different parameters.\r\n private _updateAnisotropicLevel(texture: BaseTexture) {\r\n const internalTexture = texture.getInternalTexture();\r\n const value = texture.anisotropicFilteringLevel;\r\n\r\n if (!internalTexture || !internalTexture._hardwareTexture) {\r\n return;\r\n }\r\n\r\n if (internalTexture._cachedAnisotropicFilteringLevel !== value) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTUREANISOTROPICLEVEL);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(internalTexture._hardwareTexture.underlyingResource);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n internalTexture._cachedAnisotropicFilteringLevel = value;\r\n }\r\n }\r\n\r\n // Returns a NativeAddressMode.XXX value.\r\n private _getAddressMode(wrapMode: number): number {\r\n switch (wrapMode) {\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n return _native.Engine.ADDRESS_MODE_WRAP;\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return _native.Engine.ADDRESS_MODE_CLAMP;\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return _native.Engine.ADDRESS_MODE_MIRROR;\r\n default:\r\n throw new Error(\"Unexpected wrap mode: \" + wrapMode + \".\");\r\n }\r\n }\r\n\r\n /**\r\n * @param channel\r\n * @param texture\r\n * @hidden\r\n */\r\n public _bindTexture(channel: number, texture: InternalTexture): void {\r\n const uniform = this._boundUniforms[channel];\r\n if (!uniform) {\r\n return;\r\n }\r\n if (texture && texture._hardwareTexture) {\r\n const underlyingResource = texture._hardwareTexture.underlyingResource;\r\n this._setTextureCore(uniform, underlyingResource);\r\n }\r\n }\r\n\r\n protected _deleteBuffer(buffer: NativeDataBuffer): void {\r\n if (buffer.nativeIndexBuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEINDEXBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(buffer.nativeIndexBuffer);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n delete buffer.nativeIndexBuffer;\r\n }\r\n\r\n if (buffer.nativeVertexBuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEVERTEXBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(buffer.nativeVertexBuffer);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n delete buffer.nativeVertexBuffer;\r\n }\r\n }\r\n\r\n /**\r\n * Create a canvas\r\n * @param width width\r\n * @param height height\r\n * @return ICanvas interface\r\n */\r\n public createCanvas(width: number, height: number): ICanvas {\r\n if (!_native.Canvas) {\r\n throw new Error(\"Native Canvas plugin not available.\");\r\n }\r\n const canvas = new _native.Canvas();\r\n canvas.width = width;\r\n canvas.height = height;\r\n return canvas;\r\n }\r\n\r\n /**\r\n * Create an image to use with canvas\r\n * @return IImage interface\r\n */\r\n public createCanvasImage(): IImage {\r\n if (!_native.Canvas) {\r\n throw new Error(\"Native Canvas plugin not available.\");\r\n }\r\n const image = new _native.Image();\r\n return image;\r\n }\r\n\r\n /**\r\n * Update a portion of an internal texture\r\n * @param texture defines the texture to update\r\n * @param imageData defines the data to store into the texture\r\n * @param xOffset defines the x coordinates of the update rectangle\r\n * @param yOffset defines the y coordinates of the update rectangle\r\n * @param width defines the width of the update rectangle\r\n * @param height defines the height of the update rectangle\r\n * @param faceIndex defines the face index if texture is a cube (0 by default)\r\n * @param lod defines the lod level to update (0 by default)\r\n * @param generateMipMaps defines whether to generate mipmaps or not\r\n */\r\n public updateTextureData(\r\n texture: InternalTexture,\r\n imageData: ArrayBufferView,\r\n xOffset: number,\r\n yOffset: number,\r\n width: number,\r\n height: number,\r\n faceIndex: number = 0,\r\n lod: number = 0,\r\n generateMipMaps = false\r\n ): void {\r\n throw new Error(\"updateTextureData not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param internalFormat\r\n * @param width\r\n * @param height\r\n * @param data\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadCompressedDataToTextureDirectly(\r\n texture: InternalTexture,\r\n internalFormat: number,\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n faceIndex: number = 0,\r\n lod: number = 0\r\n ) {\r\n throw new Error(\"_uploadCompressedDataToTextureDirectly not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param imageData\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadDataToTextureDirectly(texture: InternalTexture, imageData: ArrayBufferView, faceIndex: number = 0, lod: number = 0): void {\r\n throw new Error(\"_uploadDataToTextureDirectly not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param imageData\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadArrayBufferViewToTexture(texture: InternalTexture, imageData: ArrayBufferView, faceIndex: number = 0, lod: number = 0): void {\r\n throw new Error(\"_uploadArrayBufferViewToTexture not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param image\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement, faceIndex: number = 0, lod: number = 0) {\r\n throw new Error(\"_uploadArrayBufferViewToTexture not implemented.\");\r\n }\r\n\r\n // JavaScript-to-Native conversion helper functions.\r\n\r\n private _getNativeSamplingMode(samplingMode: number): number {\r\n switch (samplingMode) {\r\n case Constants.TEXTURE_NEAREST_NEAREST:\r\n return _native.Engine.TEXTURE_NEAREST_NEAREST;\r\n case Constants.TEXTURE_LINEAR_LINEAR:\r\n return _native.Engine.TEXTURE_LINEAR_LINEAR;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR:\r\n return _native.Engine.TEXTURE_LINEAR_LINEAR_MIPLINEAR;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:\r\n return _native.Engine.TEXTURE_NEAREST_NEAREST_MIPNEAREST;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:\r\n return _native.Engine.TEXTURE_NEAREST_LINEAR_MIPNEAREST;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:\r\n return _native.Engine.TEXTURE_NEAREST_LINEAR_MIPLINEAR;\r\n case Constants.TEXTURE_NEAREST_LINEAR:\r\n return _native.Engine.TEXTURE_NEAREST_LINEAR;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:\r\n return _native.Engine.TEXTURE_NEAREST_NEAREST_MIPLINEAR;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:\r\n return _native.Engine.TEXTURE_LINEAR_NEAREST_MIPNEAREST;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:\r\n return _native.Engine.TEXTURE_LINEAR_NEAREST_MIPLINEAR;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:\r\n return _native.Engine.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n case Constants.TEXTURE_LINEAR_NEAREST:\r\n return _native.Engine.TEXTURE_LINEAR_NEAREST;\r\n default:\r\n throw new Error(`Unsupported sampling mode: ${samplingMode}.`);\r\n }\r\n }\r\n\r\n private _getStencilFunc(func: number): number {\r\n switch (func) {\r\n case Constants.LESS:\r\n return _native.Engine.STENCIL_TEST_LESS;\r\n case Constants.LEQUAL:\r\n return _native.Engine.STENCIL_TEST_LEQUAL;\r\n case Constants.EQUAL:\r\n return _native.Engine.STENCIL_TEST_EQUAL;\r\n case Constants.GEQUAL:\r\n return _native.Engine.STENCIL_TEST_GEQUAL;\r\n case Constants.GREATER:\r\n return _native.Engine.STENCIL_TEST_GREATER;\r\n case Constants.NOTEQUAL:\r\n return _native.Engine.STENCIL_TEST_NOTEQUAL;\r\n case Constants.NEVER:\r\n return _native.Engine.STENCIL_TEST_NEVER;\r\n case Constants.ALWAYS:\r\n return _native.Engine.STENCIL_TEST_ALWAYS;\r\n default:\r\n throw new Error(`Unsupported stencil func mode: ${func}.`);\r\n }\r\n }\r\n\r\n private _getStencilOpFail(opFail: number): number {\r\n switch (opFail) {\r\n case Constants.KEEP:\r\n return _native.Engine.STENCIL_OP_FAIL_S_KEEP;\r\n case Constants.ZERO:\r\n return _native.Engine.STENCIL_OP_FAIL_S_ZERO;\r\n case Constants.REPLACE:\r\n return _native.Engine.STENCIL_OP_FAIL_S_REPLACE;\r\n case Constants.INCR:\r\n return _native.Engine.STENCIL_OP_FAIL_S_INCR;\r\n case Constants.DECR:\r\n return _native.Engine.STENCIL_OP_FAIL_S_DECR;\r\n case Constants.INVERT:\r\n return _native.Engine.STENCIL_OP_FAIL_S_INVERT;\r\n case Constants.INCR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_S_INCRSAT;\r\n case Constants.DECR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_S_DECRSAT;\r\n default:\r\n throw new Error(`Unsupported stencil OpFail mode: ${opFail}.`);\r\n }\r\n }\r\n\r\n private _getStencilDepthFail(depthFail: number): number {\r\n switch (depthFail) {\r\n case Constants.KEEP:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_KEEP;\r\n case Constants.ZERO:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_ZERO;\r\n case Constants.REPLACE:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_REPLACE;\r\n case Constants.INCR:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_INCR;\r\n case Constants.DECR:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_DECR;\r\n case Constants.INVERT:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_INVERT;\r\n case Constants.INCR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_INCRSAT;\r\n case Constants.DECR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_DECRSAT;\r\n default:\r\n throw new Error(`Unsupported stencil depthFail mode: ${depthFail}.`);\r\n }\r\n }\r\n\r\n private _getStencilDepthPass(opPass: number): number {\r\n switch (opPass) {\r\n case Constants.KEEP:\r\n return _native.Engine.STENCIL_OP_PASS_Z_KEEP;\r\n case Constants.ZERO:\r\n return _native.Engine.STENCIL_OP_PASS_Z_ZERO;\r\n case Constants.REPLACE:\r\n return _native.Engine.STENCIL_OP_PASS_Z_REPLACE;\r\n case Constants.INCR:\r\n return _native.Engine.STENCIL_OP_PASS_Z_INCR;\r\n case Constants.DECR:\r\n return _native.Engine.STENCIL_OP_PASS_Z_DECR;\r\n case Constants.INVERT:\r\n return _native.Engine.STENCIL_OP_PASS_Z_INVERT;\r\n case Constants.INCR_WRAP:\r\n return _native.Engine.STENCIL_OP_PASS_Z_INCRSAT;\r\n case Constants.DECR_WRAP:\r\n return _native.Engine.STENCIL_OP_PASS_Z_DECRSAT;\r\n default:\r\n throw new Error(`Unsupported stencil opPass mode: ${opPass}.`);\r\n }\r\n }\r\n\r\n private _getNativeTextureFormat(format: number, type: number): number {\r\n if (format == Constants.TEXTUREFORMAT_RGB && type == Constants.TEXTURETYPE_UNSIGNED_INT) {\r\n return _native.Engine.TEXTURE_FORMAT_RGB8;\r\n } else if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_UNSIGNED_INT) {\r\n return _native.Engine.TEXTURE_FORMAT_RGBA8;\r\n } else if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_FLOAT) {\r\n return _native.Engine.TEXTURE_FORMAT_RGBA32F;\r\n } else {\r\n throw new RuntimeError(`Unsupported texture format or type: format ${format}, type ${type}.`, ErrorCodes.UnsupportedTextureError);\r\n }\r\n }\r\n\r\n private _getNativeAlphaMode(mode: number): number {\r\n switch (mode) {\r\n case Constants.ALPHA_DISABLE:\r\n return _native.Engine.ALPHA_DISABLE;\r\n case Constants.ALPHA_ADD:\r\n return _native.Engine.ALPHA_ADD;\r\n case Constants.ALPHA_COMBINE:\r\n return _native.Engine.ALPHA_COMBINE;\r\n case Constants.ALPHA_SUBTRACT:\r\n return _native.Engine.ALPHA_SUBTRACT;\r\n case Constants.ALPHA_MULTIPLY:\r\n return _native.Engine.ALPHA_MULTIPLY;\r\n case Constants.ALPHA_MAXIMIZED:\r\n return _native.Engine.ALPHA_MAXIMIZED;\r\n case Constants.ALPHA_ONEONE:\r\n return _native.Engine.ALPHA_ONEONE;\r\n case Constants.ALPHA_PREMULTIPLIED:\r\n return _native.Engine.ALPHA_PREMULTIPLIED;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n return _native.Engine.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n case Constants.ALPHA_INTERPOLATE:\r\n return _native.Engine.ALPHA_INTERPOLATE;\r\n case Constants.ALPHA_SCREENMODE:\r\n return _native.Engine.ALPHA_SCREENMODE;\r\n default:\r\n throw new Error(`Unsupported alpha mode: ${mode}.`);\r\n }\r\n }\r\n\r\n private _getNativeAttribType(type: number): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE:\r\n return _native.Engine.ATTRIB_TYPE_INT8;\r\n case VertexBuffer.UNSIGNED_BYTE:\r\n return _native.Engine.ATTRIB_TYPE_UINT8;\r\n case VertexBuffer.SHORT:\r\n return _native.Engine.ATTRIB_TYPE_INT16;\r\n case VertexBuffer.UNSIGNED_SHORT:\r\n return _native.Engine.ATTRIB_TYPE_UINT16;\r\n case VertexBuffer.FLOAT:\r\n return _native.Engine.ATTRIB_TYPE_FLOAT;\r\n default:\r\n throw new Error(`Unsupported attribute type: ${type}.`);\r\n }\r\n }\r\n\r\n public getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n // TODO\r\n const result = { ascent: 0, height: 0, descent: 0 };\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nativeEngine.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/nativeEngine.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable, IndicesArray, DataArray } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { IInternalTextureLoader } from \"../Materials/Textures/internalTextureLoader\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport type { VideoTexture } from \"../Materials/Textures/videoTexture\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { EnvironmentTextureSpecularInfoV1 } from \"../Misc/environmentTextureTools\";\r\nimport { CreateImageDataArrayBufferViews, GetEnvInfo, UploadEnvSpherical } from \"../Misc/environmentTextureTools\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { RenderTargetCreationOptions, TextureSize, DepthTextureCreationOptions } from \"../Materials/Textures/textureCreationOptions\";\r\nimport type { IPipelineContext } from \"./IPipelineContext\";\r\nimport type { IMatrixLike, IVector2Like, IVector3Like, IVector4Like, IColor3Like, IColor4Like, IViewportLike } from \"../Maths/math.like\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Constants } from \"./constants\";\r\nimport type { ISceneLike } from \"./thinEngine\";\r\nimport { ThinEngine } from \"./thinEngine\";\r\nimport type { IWebRequest } from \"../Misc/interfaces/iWebRequest\";\r\nimport { EngineStore } from \"./engineStore\";\r\nimport { ShaderCodeInliner } from \"./Processors/shaderCodeInliner\";\r\nimport { WebGL2ShaderProcessor } from \"../Engines/WebGL/webGL2ShaderProcessors\";\r\nimport type { IMaterialContext } from \"./IMaterialContext\";\r\nimport type { IDrawContext } from \"./IDrawContext\";\r\nimport type { ICanvas, IImage } from \"./ICanvas\";\r\nimport type { IStencilState } from \"../States/IStencilState\";\r\nimport { RenderTargetWrapper } from \"./renderTargetWrapper\";\r\nimport type { NativeData } from \"./Native/nativeDataStream\";\r\nimport { NativeDataStream } from \"./Native/nativeDataStream\";\r\nimport type { INative, INativeCamera, INativeEngine } from \"./Native/nativeInterfaces\";\r\nimport { RuntimeError, ErrorCodes } from \"../Misc/error\";\r\nimport { WebGLHardwareTexture } from \"./WebGL/webGLHardwareTexture\";\r\n\r\ndeclare const _native: INative;\r\n\r\nconst onNativeObjectInitialized = new Observable<INative>();\r\nif (typeof self !== \"undefined\" && !Object.prototype.hasOwnProperty.call(self, \"_native\")) {\r\n let __native: INative;\r\n Object.defineProperty(self, \"_native\", {\r\n get: () => __native,\r\n set: (value: INative) => {\r\n __native = value;\r\n if (__native) {\r\n onNativeObjectInitialized.notifyObservers(__native);\r\n }\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Returns _native only after it has been defined by BabylonNative.\r\n * @hidden\r\n */\r\nexport function AcquireNativeObjectAsync(): Promise<INative> {\r\n return new Promise((resolve) => {\r\n if (typeof _native === \"undefined\") {\r\n onNativeObjectInitialized.addOnce((nativeObject) => resolve(nativeObject));\r\n } else {\r\n resolve(_native);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Registers a constructor on the _native object. See NativeXRFrame for an example.\r\n * @param typeName\r\n * @param constructor\r\n * @hidden\r\n */\r\nexport async function RegisterNativeTypeAsync<Type>(typeName: string, constructor: Type) {\r\n ((await AcquireNativeObjectAsync()) as any)[typeName] = constructor;\r\n}\r\n\r\nclass NativePipelineContext implements IPipelineContext {\r\n // TODO: async should be true?\r\n public isAsync = false;\r\n public isReady = false;\r\n\r\n public _getVertexShaderCode(): string | null {\r\n return null;\r\n }\r\n\r\n public _getFragmentShaderCode(): string | null {\r\n return null;\r\n }\r\n\r\n // TODO: what should this do?\r\n public _handlesSpectorRebuildCallback(onCompiled: (compiledObject: any) => void): void {\r\n throw new Error(\"Not implemented\");\r\n }\r\n\r\n public nativeProgram: any;\r\n\r\n private _valueCache: { [key: string]: any } = {};\r\n private _uniforms: { [key: string]: Nullable<WebGLUniformLocation> };\r\n\r\n public engine: NativeEngine;\r\n public context?: WebGLRenderingContext;\r\n public vertexShader?: WebGLShader;\r\n public fragmentShader?: WebGLShader;\r\n public isParallelCompiled: boolean;\r\n public onCompiled?: () => void;\r\n public transformFeedback?: WebGLTransformFeedback | null;\r\n\r\n constructor(engine: NativeEngine) {\r\n this.engine = engine;\r\n }\r\n\r\n public _fillEffectInformation(\r\n effect: Effect,\r\n uniformBuffersNames: { [key: string]: number },\r\n uniformsNames: string[],\r\n uniforms: { [key: string]: Nullable<WebGLUniformLocation> },\r\n samplerList: string[],\r\n samplers: { [key: string]: number },\r\n attributesNames: string[],\r\n attributes: number[]\r\n ) {\r\n const engine = this.engine;\r\n if (engine.supportsUniformBuffers) {\r\n for (const name in uniformBuffersNames) {\r\n effect.bindUniformBlock(name, uniformBuffersNames[name]);\r\n }\r\n }\r\n\r\n const effectAvailableUniforms = this.engine.getUniforms(this, uniformsNames);\r\n effectAvailableUniforms.forEach((uniform, index) => {\r\n uniforms[uniformsNames[index]] = uniform;\r\n });\r\n this._uniforms = uniforms;\r\n\r\n let index: number;\r\n for (index = 0; index < samplerList.length; index++) {\r\n const sampler = effect.getUniform(samplerList[index]);\r\n if (sampler == null) {\r\n samplerList.splice(index, 1);\r\n index--;\r\n }\r\n }\r\n\r\n samplerList.forEach((name, index) => {\r\n samplers[name] = index;\r\n });\r\n\r\n attributes.push(...engine.getAttributes(this, attributesNames));\r\n }\r\n\r\n /**\r\n * Release all associated resources.\r\n **/\r\n public dispose() {\r\n this._uniforms = {};\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param matrix\r\n * @hidden\r\n */\r\n public _cacheMatrix(uniformName: string, matrix: IMatrixLike): boolean {\r\n const cache = this._valueCache[uniformName];\r\n const flag = matrix.updateFlag;\r\n if (cache !== undefined && cache === flag) {\r\n return false;\r\n }\r\n\r\n this._valueCache[uniformName] = flag;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param x\r\n * @param y\r\n * @hidden\r\n */\r\n public _cacheFloat2(uniformName: string, x: number, y: number): boolean {\r\n let cache = this._valueCache[uniformName];\r\n if (!cache) {\r\n cache = [x, y];\r\n this._valueCache[uniformName] = cache;\r\n return true;\r\n }\r\n\r\n let changed = false;\r\n if (cache[0] !== x) {\r\n cache[0] = x;\r\n changed = true;\r\n }\r\n if (cache[1] !== y) {\r\n cache[1] = y;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param x\r\n * @param y\r\n * @param z\r\n * @hidden\r\n */\r\n public _cacheFloat3(uniformName: string, x: number, y: number, z: number): boolean {\r\n let cache = this._valueCache[uniformName];\r\n if (!cache) {\r\n cache = [x, y, z];\r\n this._valueCache[uniformName] = cache;\r\n return true;\r\n }\r\n\r\n let changed = false;\r\n if (cache[0] !== x) {\r\n cache[0] = x;\r\n changed = true;\r\n }\r\n if (cache[1] !== y) {\r\n cache[1] = y;\r\n changed = true;\r\n }\r\n if (cache[2] !== z) {\r\n cache[2] = z;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * @param uniformName\r\n * @param x\r\n * @param y\r\n * @param z\r\n * @param w\r\n * @hidden\r\n */\r\n public _cacheFloat4(uniformName: string, x: number, y: number, z: number, w: number): boolean {\r\n let cache = this._valueCache[uniformName];\r\n if (!cache) {\r\n cache = [x, y, z, w];\r\n this._valueCache[uniformName] = cache;\r\n return true;\r\n }\r\n\r\n let changed = false;\r\n if (cache[0] !== x) {\r\n cache[0] = x;\r\n changed = true;\r\n }\r\n if (cache[1] !== y) {\r\n cache[1] = y;\r\n changed = true;\r\n }\r\n if (cache[2] !== z) {\r\n cache[2] = z;\r\n changed = true;\r\n }\r\n if (cache[3] !== w) {\r\n cache[3] = w;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Sets an integer value on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value Value to be set.\r\n */\r\n public setInt(uniformName: string, value: number): void {\r\n const cache = this._valueCache[uniformName];\r\n if (cache !== undefined && cache === value) {\r\n return;\r\n }\r\n\r\n if (this.engine.setInt(this._uniforms[uniformName]!, value)) {\r\n this._valueCache[uniformName] = value;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a int2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int2.\r\n * @param y Second int in int2.\r\n */\r\n public setInt2(uniformName: string, x: number, y: number): void {\r\n if (this._cacheFloat2(uniformName, x, y)) {\r\n if (!this.engine.setInt2(this._uniforms[uniformName], x, y)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a int3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int3.\r\n * @param y Second int in int3.\r\n * @param z Third int in int3.\r\n */\r\n public setInt3(uniformName: string, x: number, y: number, z: number): void {\r\n if (this._cacheFloat3(uniformName, x, y, z)) {\r\n if (!this.engine.setInt3(this._uniforms[uniformName], x, y, z)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a int4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First int in int4.\r\n * @param y Second int in int4.\r\n * @param z Third int in int4.\r\n * @param w Fourth int in int4.\r\n */\r\n public setInt4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (this._cacheFloat4(uniformName, x, y, z, w)) {\r\n if (!this.engine.setInt4(this._uniforms[uniformName], x, y, z, w)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets an int array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray2(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray2(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray3(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray3(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an int array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setIntArray4(uniformName: string, array: Int32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setIntArray4(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray2(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray2(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray3(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray3(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an float array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setFloatArray4(uniformName: string, array: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setFloatArray4(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array 2 on a uniform variable. (Array is specified as single array eg. [1,2,3,4] will result in [[1,2],[3,4]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray2(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray2(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array 3 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6] will result in [[1,2,3],[4,5,6]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n * @returns this effect.\r\n */\r\n public setArray3(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray3(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets an array 4 on a uniform variable. (Array is specified as single array eg. [1,2,3,4,5,6,7,8] will result in [[1,2,3,4],[5,6,7,8]] in the shader)\r\n * @param uniformName Name of the variable.\r\n * @param array array to be set.\r\n */\r\n public setArray4(uniformName: string, array: number[]): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setArray4(this._uniforms[uniformName]!, array);\r\n }\r\n\r\n /**\r\n * Sets matrices on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrices matrices to be set.\r\n */\r\n public setMatrices(uniformName: string, matrices: Float32Array): void {\r\n if (!matrices) {\r\n return;\r\n }\r\n\r\n this._valueCache[uniformName] = null;\r\n this.engine.setMatrices(this._uniforms[uniformName]!, matrices);\r\n }\r\n\r\n /**\r\n * Sets matrix on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix(uniformName: string, matrix: IMatrixLike): void {\r\n if (this._cacheMatrix(uniformName, matrix)) {\r\n if (!this.engine.setMatrices(this._uniforms[uniformName]!, matrix.toArray() as Float32Array)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a 3x3 matrix on a uniform variable. (Specified as [1,2,3,4,5,6,7,8,9] will result in [1,2,3][4,5,6][7,8,9] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix3x3(uniformName: string, matrix: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setMatrix3x3(this._uniforms[uniformName]!, matrix);\r\n }\r\n\r\n /**\r\n * Sets a 2x2 matrix on a uniform variable. (Specified as [1,2,3,4] will result in [1,2][3,4] matrix)\r\n * @param uniformName Name of the variable.\r\n * @param matrix matrix to be set.\r\n */\r\n public setMatrix2x2(uniformName: string, matrix: Float32Array): void {\r\n this._valueCache[uniformName] = null;\r\n this.engine.setMatrix2x2(this._uniforms[uniformName]!, matrix);\r\n }\r\n\r\n /**\r\n * Sets a float on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param value value to be set.\r\n * @returns this effect.\r\n */\r\n public setFloat(uniformName: string, value: number): void {\r\n const cache = this._valueCache[uniformName];\r\n if (cache !== undefined && cache === value) {\r\n return;\r\n }\r\n\r\n if (this.engine.setFloat(this._uniforms[uniformName]!, value)) {\r\n this._valueCache[uniformName] = value;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a boolean on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param bool value to be set.\r\n */\r\n public setBool(uniformName: string, bool: boolean): void {\r\n const cache = this._valueCache[uniformName];\r\n if (cache !== undefined && cache === bool) {\r\n return;\r\n }\r\n\r\n if (this.engine.setInt(this._uniforms[uniformName]!, bool ? 1 : 0)) {\r\n this._valueCache[uniformName] = bool ? 1 : 0;\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Vector2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector2 vector2 to be set.\r\n */\r\n public setVector2(uniformName: string, vector2: IVector2Like): void {\r\n if (this._cacheFloat2(uniformName, vector2.x, vector2.y)) {\r\n if (!this.engine.setFloat2(this._uniforms[uniformName]!, vector2.x, vector2.y)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a float2 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float2.\r\n * @param y Second float in float2.\r\n */\r\n public setFloat2(uniformName: string, x: number, y: number): void {\r\n if (this._cacheFloat2(uniformName, x, y)) {\r\n if (!this.engine.setFloat2(this._uniforms[uniformName]!, x, y)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Vector3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector3 Value to be set.\r\n */\r\n public setVector3(uniformName: string, vector3: IVector3Like): void {\r\n if (this._cacheFloat3(uniformName, vector3.x, vector3.y, vector3.z)) {\r\n if (!this.engine.setFloat3(this._uniforms[uniformName]!, vector3.x, vector3.y, vector3.z)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a float3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float3.\r\n * @param y Second float in float3.\r\n * @param z Third float in float3.\r\n */\r\n public setFloat3(uniformName: string, x: number, y: number, z: number): void {\r\n if (this._cacheFloat3(uniformName, x, y, z)) {\r\n if (!this.engine.setFloat3(this._uniforms[uniformName]!, x, y, z)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Vector4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param vector4 Value to be set.\r\n */\r\n public setVector4(uniformName: string, vector4: IVector4Like): void {\r\n if (this._cacheFloat4(uniformName, vector4.x, vector4.y, vector4.z, vector4.w)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, vector4.x, vector4.y, vector4.z, vector4.w)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a float4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param x First float in float4.\r\n * @param y Second float in float4.\r\n * @param z Third float in float4.\r\n * @param w Fourth float in float4.\r\n * @returns this effect.\r\n */\r\n public setFloat4(uniformName: string, x: number, y: number, z: number, w: number): void {\r\n if (this._cacheFloat4(uniformName, x, y, z, w)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, x, y, z, w)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Color3 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n */\r\n public setColor3(uniformName: string, color3: IColor3Like): void {\r\n if (this._cacheFloat3(uniformName, color3.r, color3.g, color3.b)) {\r\n if (!this.engine.setFloat3(this._uniforms[uniformName]!, color3.r, color3.g, color3.b)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable.\r\n * @param uniformName Name of the variable.\r\n * @param color3 Value to be set.\r\n * @param alpha Alpha value to be set.\r\n */\r\n public setColor4(uniformName: string, color3: IColor3Like, alpha: number): void {\r\n if (this._cacheFloat4(uniformName, color3.r, color3.g, color3.b, alpha)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, color3.r, color3.g, color3.b, alpha)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets a Color4 on a uniform variable\r\n * @param uniformName defines the name of the variable\r\n * @param color4 defines the value to be set\r\n */\r\n public setDirectColor4(uniformName: string, color4: IColor4Like): void {\r\n if (this._cacheFloat4(uniformName, color4.r, color4.g, color4.b, color4.a)) {\r\n if (!this.engine.setFloat4(this._uniforms[uniformName]!, color4.r, color4.g, color4.b, color4.a)) {\r\n this._valueCache[uniformName] = null;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass NativeRenderTargetWrapper extends RenderTargetWrapper {\r\n public override readonly _engine: NativeEngine;\r\n\r\n private __framebuffer: Nullable<WebGLFramebuffer> = null;\r\n private __framebufferDepthStencil: Nullable<WebGLFramebuffer> = null;\r\n\r\n public get _framebuffer(): Nullable<WebGLFramebuffer> {\r\n return this.__framebuffer;\r\n }\r\n\r\n public set _framebuffer(framebuffer: Nullable<WebGLFramebuffer>) {\r\n if (this.__framebuffer) {\r\n this._engine._releaseFramebufferObjects(this.__framebuffer);\r\n }\r\n this.__framebuffer = framebuffer;\r\n }\r\n\r\n public get _framebufferDepthStencil(): Nullable<WebGLFramebuffer> {\r\n return this.__framebufferDepthStencil;\r\n }\r\n\r\n public set _framebufferDepthStencil(framebufferDepthStencil: Nullable<WebGLFramebuffer>) {\r\n if (this.__framebufferDepthStencil) {\r\n this._engine._releaseFramebufferObjects(this.__framebufferDepthStencil);\r\n }\r\n this.__framebufferDepthStencil = framebufferDepthStencil;\r\n }\r\n\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: NativeEngine) {\r\n super(isMulti, isCube, size, engine);\r\n this._engine = engine;\r\n }\r\n\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n this._framebuffer = null;\r\n this._framebufferDepthStencil = null;\r\n\r\n super.dispose(disposeOnlyFramebuffers);\r\n }\r\n}\r\n\r\n/**\r\n * Container for accessors for natively-stored mesh data buffers.\r\n */\r\nclass NativeDataBuffer extends DataBuffer {\r\n /**\r\n * Accessor value used to identify/retrieve a natively-stored index buffer.\r\n */\r\n public nativeIndexBuffer?: NativeData;\r\n\r\n /**\r\n * Accessor value used to identify/retrieve a natively-stored vertex buffer.\r\n */\r\n public nativeVertexBuffer?: NativeData;\r\n}\r\n\r\n/**\r\n * Options to create the Native engine\r\n */\r\nexport interface NativeEngineOptions {\r\n /**\r\n * defines whether to adapt to the device's viewport characteristics (default: false)\r\n */\r\n adaptToDeviceRatio?: boolean;\r\n}\r\n\r\n/** @hidden */\r\nclass CommandBufferEncoder {\r\n private readonly _commandStream: NativeDataStream;\r\n private readonly _pending = new Array<NativeData>();\r\n private _isCommandBufferScopeActive = false;\r\n\r\n public constructor(private readonly _engine: INativeEngine) {\r\n this._commandStream = NativeEngine._createNativeDataStream();\r\n this._engine.setCommandDataStream(this._commandStream);\r\n }\r\n\r\n public beginCommandScope() {\r\n if (this._isCommandBufferScopeActive) {\r\n throw new Error(\"Command scope already active.\");\r\n }\r\n\r\n this._isCommandBufferScopeActive = true;\r\n }\r\n\r\n public endCommandScope() {\r\n if (!this._isCommandBufferScopeActive) {\r\n throw new Error(\"Command scope is not active.\");\r\n }\r\n\r\n this._isCommandBufferScopeActive = false;\r\n this._submit();\r\n }\r\n\r\n public startEncodingCommand(command: NativeData) {\r\n this._commandStream.writeNativeData(command);\r\n }\r\n\r\n public encodeCommandArgAsUInt32(commandArg: number) {\r\n this._commandStream.writeUint32(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsUInt32s(commandArg: Uint32Array) {\r\n this._commandStream.writeUint32Array(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsInt32(commandArg: number) {\r\n this._commandStream.writeInt32(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsInt32s(commandArg: Int32Array) {\r\n this._commandStream.writeInt32Array(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsFloat32(commandArg: number) {\r\n this._commandStream.writeFloat32(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsFloat32s(commandArg: Float32Array) {\r\n this._commandStream.writeFloat32Array(commandArg);\r\n }\r\n\r\n public encodeCommandArgAsNativeData(commandArg: NativeData) {\r\n this._commandStream.writeNativeData(commandArg);\r\n this._pending.push(commandArg);\r\n }\r\n\r\n public finishEncodingCommand() {\r\n if (!this._isCommandBufferScopeActive) {\r\n this._submit();\r\n }\r\n }\r\n\r\n private _submit() {\r\n this._engine.submitCommands();\r\n this._pending.length = 0;\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class NativeEngine extends Engine {\r\n // This must match the protocol version in NativeEngine.cpp\r\n private static readonly PROTOCOL_VERSION = 5;\r\n\r\n private readonly _engine: INativeEngine = new _native.Engine();\r\n private readonly _camera: Nullable<INativeCamera> = _native.Camera ? new _native.Camera() : null;\r\n\r\n private readonly _commandBufferEncoder = new CommandBufferEncoder(this._engine);\r\n\r\n private _boundBuffersVertexArray: any = null;\r\n private _currentDepthTest: number = _native.Engine.DEPTH_TEST_LEQUAL;\r\n private _stencilTest = false;\r\n private _stencilMask: number = 255;\r\n private _stencilFunc: number = Constants.ALWAYS;\r\n private _stencilFuncRef: number = 0;\r\n private _stencilFuncMask: number = 255;\r\n private _stencilOpStencilFail: number = Constants.KEEP;\r\n private _stencilOpDepthFail: number = Constants.KEEP;\r\n private _stencilOpStencilDepthPass: number = Constants.REPLACE;\r\n private _zOffset: number = 0;\r\n private _zOffsetUnits: number = 0;\r\n private _depthWrite: boolean = true;\r\n\r\n public getHardwareScalingLevel(): number {\r\n return this._engine.getHardwareScalingLevel();\r\n }\r\n\r\n public setHardwareScalingLevel(level: number): void {\r\n this._engine.setHardwareScalingLevel(level);\r\n }\r\n\r\n public constructor(options: NativeEngineOptions = {}) {\r\n super(null, false, undefined, options.adaptToDeviceRatio);\r\n\r\n if (_native.Engine.PROTOCOL_VERSION !== NativeEngine.PROTOCOL_VERSION) {\r\n throw new Error(`Protocol version mismatch: ${_native.Engine.PROTOCOL_VERSION} (Native) !== ${NativeEngine.PROTOCOL_VERSION} (JS)`);\r\n }\r\n\r\n this._webGLVersion = 2;\r\n this.disableUniformBuffers = true;\r\n\r\n // TODO: Initialize this more correctly based on the hardware capabilities.\r\n // Init caps\r\n\r\n this._caps = {\r\n maxTexturesImageUnits: 16,\r\n maxVertexTextureImageUnits: 16,\r\n maxCombinedTexturesImageUnits: 32,\r\n maxTextureSize: 512,\r\n maxCubemapTextureSize: 512,\r\n maxRenderTextureSize: 512,\r\n maxVertexAttribs: 16,\r\n maxVaryingVectors: 16,\r\n maxFragmentUniformVectors: 16,\r\n maxVertexUniformVectors: 16,\r\n standardDerivatives: true,\r\n astc: null,\r\n pvrtc: null,\r\n etc1: null,\r\n etc2: null,\r\n bptc: null,\r\n maxAnisotropy: 16, // TODO: Retrieve this smartly. Currently set to D3D11 maximum allowable value.\r\n uintIndices: true,\r\n fragmentDepthSupported: false,\r\n highPrecisionShaderSupported: true,\r\n colorBufferFloat: false,\r\n textureFloat: true,\r\n textureFloatLinearFiltering: false,\r\n textureFloatRender: false,\r\n textureHalfFloat: false,\r\n textureHalfFloatLinearFiltering: false,\r\n textureHalfFloatRender: false,\r\n textureLOD: true,\r\n drawBuffersExtension: false,\r\n depthTextureExtension: false,\r\n vertexArrayObject: true,\r\n instancedArrays: false,\r\n supportOcclusionQuery: false,\r\n canUseTimestampForTimerQuery: false,\r\n blendMinMax: false,\r\n maxMSAASamples: 1,\r\n canUseGLInstanceID: true,\r\n canUseGLVertexID: true,\r\n supportComputeShaders: false,\r\n supportSRGBBuffers: true,\r\n supportTransformFeedbacks: false,\r\n textureMaxLevel: false,\r\n };\r\n\r\n this._features = {\r\n forceBitmapOverHTMLImageElement: false,\r\n supportRenderAndCopyToLodForFloatTextures: false,\r\n supportDepthStencilTexture: false,\r\n supportShadowSamplers: false,\r\n uniformBufferHardCheckMatrix: false,\r\n allowTexturePrefiltering: false,\r\n trackUbosInFrame: false,\r\n checkUbosContentBeforeUpload: false,\r\n supportCSM: false,\r\n basisNeedsPOT: false,\r\n support3DTextures: false,\r\n needTypeSuffixInShaderConstants: false,\r\n supportMSAA: false,\r\n supportSSAO2: false,\r\n supportExtendedTextureFormats: false,\r\n supportSwitchCaseInShader: false,\r\n supportSyncTextureRead: false,\r\n needsInvertingBitmap: true,\r\n useUBOBindingCache: true,\r\n needShaderCodeInlining: true,\r\n needToAlwaysBindUniformBuffers: false,\r\n supportRenderPasses: true,\r\n _collectUbosUpdatedInFrame: false,\r\n };\r\n\r\n Tools.Log(\"Babylon Native (v\" + Engine.Version + \") launched\");\r\n\r\n Tools.LoadScript = function (scriptUrl, onSuccess, onError, scriptId) {\r\n Tools.LoadFile(\r\n scriptUrl,\r\n (data) => {\r\n Function(data as string).apply(null);\r\n if (onSuccess) {\r\n onSuccess();\r\n }\r\n },\r\n undefined,\r\n undefined,\r\n false,\r\n (request, exception) => {\r\n if (onError) {\r\n onError(\"LoadScript Error\", exception);\r\n }\r\n }\r\n );\r\n };\r\n\r\n // Wrappers\r\n if (typeof URL === \"undefined\") {\r\n (window.URL as any) = {\r\n createObjectURL: function () {},\r\n revokeObjectURL: function () {},\r\n };\r\n }\r\n\r\n if (typeof Blob === \"undefined\") {\r\n (window.Blob as any) = function (v: any) {\r\n return v;\r\n };\r\n }\r\n\r\n // Currently we do not fully configure the ThinEngine on construction of NativeEngine.\r\n // Setup resolution scaling based on display settings.\r\n const devicePixelRatio = window ? window.devicePixelRatio || 1.0 : 1.0;\r\n this._hardwareScalingLevel = options.adaptToDeviceRatio ? devicePixelRatio : 1.0;\r\n this.resize();\r\n\r\n const currentDepthFunction = this.getDepthFunction();\r\n if (currentDepthFunction) {\r\n this.setDepthFunction(currentDepthFunction);\r\n }\r\n\r\n // Shader processor\r\n this._shaderProcessor = new WebGL2ShaderProcessor();\r\n\r\n this.onNewSceneAddedObservable.add((scene) => {\r\n const originalRender = scene.render;\r\n scene.render = (...args: Parameters<typeof originalRender>) => {\r\n this._commandBufferEncoder.beginCommandScope();\r\n originalRender.apply(scene, args);\r\n this._commandBufferEncoder.endCommandScope();\r\n };\r\n });\r\n }\r\n\r\n public dispose(): void {\r\n super.dispose();\r\n if (this._boundBuffersVertexArray) {\r\n this._deleteVertexArray(this._boundBuffersVertexArray);\r\n }\r\n this._engine.dispose();\r\n }\r\n\r\n /** @hidden */\r\n public static _createNativeDataStream(): NativeDataStream {\r\n return new NativeDataStream();\r\n }\r\n\r\n /**\r\n * Can be used to override the current requestAnimationFrame requester.\r\n * @param bindedRenderFunction\r\n * @param requester\r\n * @hidden\r\n */\r\n protected _queueNewFrame(bindedRenderFunction: any, requester?: any): number {\r\n // Use the provided requestAnimationFrame, unless the requester is the window. In that case, we will default to the Babylon Native version of requestAnimationFrame.\r\n if (requester.requestAnimationFrame && requester !== window) {\r\n requester.requestAnimationFrame(bindedRenderFunction);\r\n } else {\r\n this._engine.requestAnimationFrame(bindedRenderFunction);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Override default engine behavior.\r\n * @param framebuffer\r\n */\r\n public _bindUnboundFramebuffer(framebuffer: Nullable<WebGLFramebuffer>) {\r\n if (this._currentFramebuffer !== framebuffer) {\r\n if (this._currentFramebuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_UNBINDFRAMEBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(this._currentFramebuffer as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n if (framebuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_BINDFRAMEBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(framebuffer as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n this._currentFramebuffer = framebuffer;\r\n }\r\n }\r\n\r\n /**\r\n * Gets host document\r\n * @returns the host document object\r\n */\r\n public getHostDocument(): Nullable<Document> {\r\n return null;\r\n }\r\n\r\n public clear(color: Nullable<IColor4Like>, backBuffer: boolean, depth: boolean, stencil: boolean = false): void {\r\n if (this.useReverseDepthBuffer) {\r\n throw new Error(\"reverse depth buffer is not currently implemented\");\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_CLEAR);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(backBuffer && color ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.r : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.g : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.b : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(color ? color.a : 1);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(depth ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(1);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(stencil ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(0);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public createIndexBuffer(indices: IndicesArray, updateable?: boolean): NativeDataBuffer {\r\n const data = this._normalizeIndexData(indices);\r\n const buffer = new NativeDataBuffer();\r\n buffer.references = 1;\r\n buffer.is32Bits = data.BYTES_PER_ELEMENT === 4;\r\n if (data.byteLength) {\r\n buffer.nativeIndexBuffer = this._engine.createIndexBuffer(data.buffer, data.byteOffset, data.byteLength, buffer.is32Bits, updateable ?? false);\r\n }\r\n return buffer;\r\n }\r\n\r\n public createVertexBuffer(vertices: DataArray, updateable?: boolean): NativeDataBuffer {\r\n const data = ArrayBuffer.isView(vertices) ? vertices : new Float32Array(vertices);\r\n const buffer = new NativeDataBuffer();\r\n buffer.references = 1;\r\n if (data.byteLength) {\r\n buffer.nativeVertexBuffer = this._engine.createVertexBuffer(data.buffer, data.byteOffset, data.byteLength, updateable ?? false);\r\n }\r\n return buffer;\r\n }\r\n\r\n protected _recordVertexArrayObject(vertexArray: any, vertexBuffers: { [key: string]: VertexBuffer }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {\r\n if (indexBuffer) {\r\n this._engine.recordIndexBuffer(vertexArray, indexBuffer.nativeIndexBuffer!);\r\n }\r\n\r\n const attributes = effect.getAttributesNames();\r\n for (let index = 0; index < attributes.length; index++) {\r\n const location = effect.getAttributeLocation(index);\r\n if (location >= 0) {\r\n const kind = attributes[index];\r\n const vertexBuffer = vertexBuffers[kind];\r\n if (vertexBuffer) {\r\n const buffer = vertexBuffer.getBuffer() as Nullable<NativeDataBuffer>;\r\n if (buffer) {\r\n this._engine.recordVertexBuffer(\r\n vertexArray,\r\n buffer.nativeVertexBuffer!,\r\n location,\r\n vertexBuffer.byteOffset,\r\n vertexBuffer.byteStride,\r\n vertexBuffer.getSize(),\r\n this._getNativeAttribType(vertexBuffer.type),\r\n vertexBuffer.normalized,\r\n vertexBuffer.getInstanceDivisor()\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public bindBuffers(vertexBuffers: { [key: string]: VertexBuffer }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): void {\r\n if (this._boundBuffersVertexArray) {\r\n this._deleteVertexArray(this._boundBuffersVertexArray);\r\n }\r\n this._boundBuffersVertexArray = this._engine.createVertexArray();\r\n this._recordVertexArrayObject(this._boundBuffersVertexArray, vertexBuffers, indexBuffer, effect);\r\n this.bindVertexArrayObject(this._boundBuffersVertexArray);\r\n }\r\n\r\n public recordVertexArrayObject(vertexBuffers: { [key: string]: VertexBuffer }, indexBuffer: Nullable<NativeDataBuffer>, effect: Effect): WebGLVertexArrayObject {\r\n const vertexArray = this._engine.createVertexArray();\r\n this._recordVertexArrayObject(vertexArray, vertexBuffers, indexBuffer, effect);\r\n return vertexArray;\r\n }\r\n\r\n private _deleteVertexArray(vertexArray: unknown) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEVERTEXARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(vertexArray as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public bindVertexArrayObject(vertexArray: WebGLVertexArrayObject): void {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_BINDVERTEXARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(vertexArray as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public releaseVertexArrayObject(vertexArray: WebGLVertexArrayObject) {\r\n this._deleteVertexArray(vertexArray);\r\n }\r\n\r\n public getAttributes(pipelineContext: IPipelineContext, attributesNames: string[]): number[] {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n return this._engine.getAttributes(nativePipelineContext.nativeProgram, attributesNames);\r\n }\r\n\r\n /**\r\n * Draw a list of indexed primitives\r\n * @param fillMode defines the primitive to use\r\n * @param indexStart defines the starting index\r\n * @param indexCount defines the number of index to draw\r\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\r\n */\r\n public drawElementsType(fillMode: number, indexStart: number, indexCount: number, instancesCount?: number): void {\r\n // Apply states\r\n this._drawCalls.addCount(1, false);\r\n\r\n // TODO: Make this implementation more robust like core Engine version.\r\n\r\n // Render\r\n //var indexFormat = this._uintIndicesCurrentlySet ? this._gl.UNSIGNED_INT : this._gl.UNSIGNED_SHORT;\r\n\r\n //var mult = this._uintIndicesCurrentlySet ? 4 : 2;\r\n // if (instancesCount) {\r\n // this._gl.drawElementsInstanced(drawMode, indexCount, indexFormat, indexStart * mult, instancesCount);\r\n // } else {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DRAWINDEXED);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(fillMode);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(indexStart);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(indexCount);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n // }\r\n }\r\n\r\n /**\r\n * Draw a list of unindexed primitives\r\n * @param fillMode defines the primitive to use\r\n * @param verticesStart defines the index of first vertex to draw\r\n * @param verticesCount defines the count of vertices to draw\r\n * @param instancesCount defines the number of instances to draw (if instantiation is enabled)\r\n */\r\n public drawArraysType(fillMode: number, verticesStart: number, verticesCount: number, instancesCount?: number): void {\r\n // Apply states\r\n this._drawCalls.addCount(1, false);\r\n\r\n // TODO: Make this implementation more robust like core Engine version.\r\n\r\n // if (instancesCount) {\r\n // this._gl.drawArraysInstanced(drawMode, verticesStart, verticesCount, instancesCount);\r\n // } else {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DRAW);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(fillMode);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(verticesStart);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(verticesCount);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n // }\r\n }\r\n\r\n public createPipelineContext(): IPipelineContext {\r\n return new NativePipelineContext(this);\r\n }\r\n\r\n public createMaterialContext(): IMaterialContext | undefined {\r\n return undefined;\r\n }\r\n\r\n public createDrawContext(): IDrawContext | undefined {\r\n return undefined;\r\n }\r\n\r\n public _preparePipelineContext(\r\n pipelineContext: IPipelineContext,\r\n vertexSourceCode: string,\r\n fragmentSourceCode: string,\r\n createAsRaw: boolean,\r\n rawVertexSourceCode: string,\r\n rawFragmentSourceCode: string,\r\n rebuildRebind: any,\r\n defines: Nullable<string>,\r\n transformFeedbackVaryings: Nullable<string[]>\r\n ) {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n\r\n if (createAsRaw) {\r\n nativePipelineContext.nativeProgram = this.createRawShaderProgram(pipelineContext, vertexSourceCode, fragmentSourceCode, undefined, transformFeedbackVaryings);\r\n } else {\r\n nativePipelineContext.nativeProgram = this.createShaderProgram(pipelineContext, vertexSourceCode, fragmentSourceCode, defines, undefined, transformFeedbackVaryings);\r\n }\r\n }\r\n\r\n /**\r\n * @param pipelineContext\r\n * @hidden\r\n */\r\n public _isRenderingStateCompiled(pipelineContext: IPipelineContext): boolean {\r\n // TODO: support async shader compilcation\r\n return true;\r\n }\r\n\r\n /**\r\n * @param pipelineContext\r\n * @param action\r\n * @hidden\r\n */\r\n public _executeWhenRenderingStateIsCompiled(pipelineContext: IPipelineContext, action: () => void) {\r\n // TODO: support async shader compilcation\r\n action();\r\n }\r\n\r\n public createRawShaderProgram(\r\n pipelineContext: IPipelineContext,\r\n vertexCode: string,\r\n fragmentCode: string,\r\n context?: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): any {\r\n throw new Error(\"Not Supported\");\r\n }\r\n\r\n public createShaderProgram(\r\n pipelineContext: IPipelineContext,\r\n vertexCode: string,\r\n fragmentCode: string,\r\n defines: Nullable<string>,\r\n context?: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): any {\r\n this.onBeforeShaderCompilationObservable.notifyObservers(this);\r\n\r\n const vertexInliner = new ShaderCodeInliner(vertexCode);\r\n vertexInliner.processCode();\r\n vertexCode = vertexInliner.code;\r\n\r\n const fragmentInliner = new ShaderCodeInliner(fragmentCode);\r\n fragmentInliner.processCode();\r\n fragmentCode = fragmentInliner.code;\r\n\r\n vertexCode = ThinEngine._ConcatenateShader(vertexCode, defines);\r\n fragmentCode = ThinEngine._ConcatenateShader(fragmentCode, defines);\r\n\r\n const program = this._engine.createProgram(vertexCode, fragmentCode);\r\n this.onAfterShaderCompilationObservable.notifyObservers(this);\r\n return program;\r\n }\r\n\r\n /**\r\n * Inline functions in shader code that are marked to be inlined\r\n * @param code code to inline\r\n * @returns inlined code\r\n */\r\n public inlineShaderCode(code: string): string {\r\n const sci = new ShaderCodeInliner(code);\r\n sci.debug = false;\r\n sci.processCode();\r\n return sci.code;\r\n }\r\n\r\n protected _setProgram(program: WebGLProgram): void {\r\n if (this._currentProgram !== program) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETPROGRAM);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(program as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n this._currentProgram = program;\r\n }\r\n }\r\n\r\n public _deletePipelineContext(pipelineContext: IPipelineContext): void {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n if (nativePipelineContext && nativePipelineContext.nativeProgram) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEPROGRAM);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(nativePipelineContext.nativeProgram);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n public getUniforms(pipelineContext: IPipelineContext, uniformsNames: string[]): WebGLUniformLocation[] {\r\n const nativePipelineContext = pipelineContext as NativePipelineContext;\r\n return this._engine.getUniforms(nativePipelineContext.nativeProgram, uniformsNames);\r\n }\r\n\r\n public bindUniformBlock(pipelineContext: IPipelineContext, blockName: string, index: number): void {\r\n // TODO\r\n throw new Error(\"Not Implemented\");\r\n }\r\n\r\n public bindSamplers(effect: Effect): void {\r\n const nativePipelineContext = effect.getPipelineContext() as NativePipelineContext;\r\n this._setProgram(nativePipelineContext.nativeProgram);\r\n\r\n // TODO: share this with engine?\r\n const samplers = effect.getSamplers();\r\n for (let index = 0; index < samplers.length; index++) {\r\n const uniform = effect.getUniform(samplers[index]);\r\n\r\n if (uniform) {\r\n this._boundUniforms[index] = uniform;\r\n }\r\n }\r\n this._currentEffect = null;\r\n }\r\n\r\n public setMatrix(uniform: WebGLUniformLocation, matrix: IMatrixLike): void {\r\n if (!uniform) {\r\n return;\r\n }\r\n\r\n const matrixArray = matrix.toArray() as Float32Array;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRIX);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrixArray);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n public getRenderWidth(useScreen = false): number {\r\n if (!useScreen && this._currentRenderTarget) {\r\n return this._currentRenderTarget.width;\r\n }\r\n\r\n return this._engine.getRenderWidth();\r\n }\r\n\r\n public getRenderHeight(useScreen = false): number {\r\n if (!useScreen && this._currentRenderTarget) {\r\n return this._currentRenderTarget.height;\r\n }\r\n\r\n return this._engine.getRenderHeight();\r\n }\r\n\r\n public setViewport(viewport: IViewportLike, requiredWidth?: number, requiredHeight?: number): void {\r\n this._cachedViewport = viewport;\r\n this._engine.setViewPort(viewport.x, viewport.y, viewport.width, viewport.height);\r\n }\r\n\r\n public setState(culling: boolean, zOffset: number = 0, force?: boolean, reverseSide = false, cullBackFaces?: boolean, stencil?: IStencilState, zOffsetUnits: number = 0): void {\r\n this._zOffset = zOffset;\r\n this._zOffsetUnits = zOffsetUnits;\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETSTATE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(culling ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(zOffset);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(zOffsetUnits);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(this.cullBackFaces ?? cullBackFaces ?? true ? 1 : 0);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(reverseSide ? 1 : 0);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Gets the client rect of native canvas. Needed for InputManager.\r\n * @returns a client rectangle\r\n */\r\n public getInputElementClientRect(): Nullable<DOMRect> {\r\n const rect = {\r\n bottom: this.getRenderHeight(),\r\n height: this.getRenderHeight(),\r\n left: 0,\r\n right: this.getRenderWidth(),\r\n top: 0,\r\n width: this.getRenderWidth(),\r\n x: 0,\r\n y: 0,\r\n toJSON: () => {},\r\n };\r\n return rect;\r\n }\r\n\r\n /**\r\n * Set the z offset Factor to apply to current rendering\r\n * @param value defines the offset to apply\r\n */\r\n public setZOffset(value: number): void {\r\n if (value !== this._zOffset) {\r\n this._zOffset = value;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETZOFFSET);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(this.useReverseDepthBuffer ? -value : value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value of the zOffset Factor\r\n * @returns the current zOffset Factor state\r\n */\r\n public getZOffset(): number {\r\n return this._zOffset;\r\n }\r\n\r\n /**\r\n * Set the z offset Units to apply to current rendering\r\n * @param value defines the offset to apply\r\n */\r\n public setZOffsetUnits(value: number): void {\r\n if (value !== this._zOffsetUnits) {\r\n this._zOffsetUnits = value;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETZOFFSETUNITS);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(this.useReverseDepthBuffer ? -value : value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value of the zOffset Units\r\n * @returns the current zOffset Units state\r\n */\r\n public getZOffsetUnits(): number {\r\n return this._zOffsetUnits;\r\n }\r\n\r\n /**\r\n * Enable or disable depth buffering\r\n * @param enable defines the state to set\r\n */\r\n public setDepthBuffer(enable: boolean): void {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHTEST);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(enable ? this._currentDepthTest : _native.Engine.DEPTH_TEST_ALWAYS);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if depth writing is enabled\r\n * @returns the current depth writing state\r\n */\r\n public getDepthWrite(): boolean {\r\n return this._depthWrite;\r\n }\r\n\r\n public getDepthFunction(): Nullable<number> {\r\n switch (this._currentDepthTest) {\r\n case _native.Engine.DEPTH_TEST_NEVER:\r\n return Constants.NEVER;\r\n case _native.Engine.DEPTH_TEST_ALWAYS:\r\n return Constants.ALWAYS;\r\n case _native.Engine.DEPTH_TEST_GREATER:\r\n return Constants.GREATER;\r\n case _native.Engine.DEPTH_TEST_GEQUAL:\r\n return Constants.GEQUAL;\r\n case _native.Engine.DEPTH_TEST_NOTEQUAL:\r\n return Constants.NOTEQUAL;\r\n case _native.Engine.DEPTH_TEST_EQUAL:\r\n return Constants.EQUAL;\r\n case _native.Engine.DEPTH_TEST_LESS:\r\n return Constants.LESS;\r\n case _native.Engine.DEPTH_TEST_LEQUAL:\r\n return Constants.LEQUAL;\r\n }\r\n return null;\r\n }\r\n\r\n public setDepthFunction(depthFunc: number) {\r\n let nativeDepthFunc = 0;\r\n switch (depthFunc) {\r\n case Constants.NEVER:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_NEVER;\r\n break;\r\n case Constants.ALWAYS:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_ALWAYS;\r\n break;\r\n case Constants.GREATER:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_GREATER;\r\n break;\r\n case Constants.GEQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_GEQUAL;\r\n break;\r\n case Constants.NOTEQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_NOTEQUAL;\r\n break;\r\n case Constants.EQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_EQUAL;\r\n break;\r\n case Constants.LESS:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_LESS;\r\n break;\r\n case Constants.LEQUAL:\r\n nativeDepthFunc = _native.Engine.DEPTH_TEST_LEQUAL;\r\n break;\r\n }\r\n\r\n this._currentDepthTest = nativeDepthFunc;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHTEST);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(this._currentDepthTest);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Enable or disable depth writing\r\n * @param enable defines the state to set\r\n */\r\n public setDepthWrite(enable: boolean): void {\r\n this._depthWrite = enable;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETDEPTHWRITE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(Number(enable));\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Enable or disable color writing\r\n * @param enable defines the state to set\r\n */\r\n public setColorWrite(enable: boolean): void {\r\n this._colorWrite = enable;\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETCOLORWRITE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(Number(enable));\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if color writing is enabled\r\n * @returns the current color writing state\r\n */\r\n public getColorWrite(): boolean {\r\n return this._colorWrite;\r\n }\r\n\r\n private applyStencil(): void {\r\n this._setStencil(\r\n this._stencilMask,\r\n this._getStencilOpFail(this._stencilOpStencilFail),\r\n this._getStencilDepthFail(this._stencilOpDepthFail),\r\n this._getStencilDepthPass(this._stencilOpStencilDepthPass),\r\n this._getStencilFunc(this._stencilFunc),\r\n this._stencilFuncRef\r\n );\r\n }\r\n\r\n private _setStencil(mask: number, stencilOpFail: number, depthOpFail: number, depthOpPass: number, func: number, ref: number) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETSTENCIL);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(mask);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(stencilOpFail);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(depthOpFail);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(depthOpPass);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(func);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(ref);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n /**\r\n * Enable or disable the stencil buffer\r\n * @param enable defines if the stencil buffer must be enabled or disabled\r\n */\r\n public setStencilBuffer(enable: boolean): void {\r\n this._stencilTest = enable;\r\n if (enable) {\r\n this.applyStencil();\r\n } else {\r\n this._setStencil(\r\n 255,\r\n _native.Engine.STENCIL_OP_FAIL_S_KEEP,\r\n _native.Engine.STENCIL_OP_FAIL_Z_KEEP,\r\n _native.Engine.STENCIL_OP_PASS_Z_KEEP,\r\n _native.Engine.STENCIL_TEST_ALWAYS,\r\n 0\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if stencil buffer is enabled\r\n * @returns the current stencil buffer state\r\n */\r\n public getStencilBuffer(): boolean {\r\n return this._stencilTest;\r\n }\r\n\r\n /**\r\n * Gets the current stencil operation when stencil passes\r\n * @returns a number defining stencil operation to use when stencil passes\r\n */\r\n public getStencilOperationPass(): number {\r\n return this._stencilOpStencilDepthPass;\r\n }\r\n\r\n /**\r\n * Sets the stencil operation to use when stencil passes\r\n * @param operation defines the stencil operation to use when stencil passes\r\n */\r\n public setStencilOperationPass(operation: number): void {\r\n this._stencilOpStencilDepthPass = operation;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil mask\r\n * @param mask defines the new stencil mask to use\r\n */\r\n public setStencilMask(mask: number): void {\r\n this._stencilMask = mask;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil function\r\n * @param stencilFunc defines the new stencil function to use\r\n */\r\n public setStencilFunction(stencilFunc: number) {\r\n this._stencilFunc = stencilFunc;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil reference\r\n * @param reference defines the new stencil reference to use\r\n */\r\n public setStencilFunctionReference(reference: number) {\r\n this._stencilFuncRef = reference;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the current stencil mask\r\n * @param mask defines the new stencil mask to use\r\n */\r\n public setStencilFunctionMask(mask: number) {\r\n this._stencilFuncMask = mask;\r\n }\r\n\r\n /**\r\n * Sets the stencil operation to use when stencil fails\r\n * @param operation defines the stencil operation to use when stencil fails\r\n */\r\n public setStencilOperationFail(operation: number): void {\r\n this._stencilOpStencilFail = operation;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Sets the stencil operation to use when depth fails\r\n * @param operation defines the stencil operation to use when depth fails\r\n */\r\n public setStencilOperationDepthFail(operation: number): void {\r\n this._stencilOpDepthFail = operation;\r\n this.applyStencil();\r\n }\r\n\r\n /**\r\n * Gets the current stencil mask\r\n * @returns a number defining the new stencil mask to use\r\n */\r\n public getStencilMask(): number {\r\n return this._stencilMask;\r\n }\r\n\r\n /**\r\n * Gets the current stencil function\r\n * @returns a number defining the stencil function to use\r\n */\r\n public getStencilFunction(): number {\r\n return this._stencilFunc;\r\n }\r\n\r\n /**\r\n * Gets the current stencil reference value\r\n * @returns a number defining the stencil reference value to use\r\n */\r\n public getStencilFunctionReference(): number {\r\n return this._stencilFuncRef;\r\n }\r\n\r\n /**\r\n * Gets the current stencil mask\r\n * @returns a number defining the stencil mask to use\r\n */\r\n public getStencilFunctionMask(): number {\r\n return this._stencilFuncMask;\r\n }\r\n\r\n /**\r\n * Gets the current stencil operation when stencil fails\r\n * @returns a number defining stencil operation to use when stencil fails\r\n */\r\n public getStencilOperationFail(): number {\r\n return this._stencilOpStencilFail;\r\n }\r\n\r\n /**\r\n * Gets the current stencil operation when depth fails\r\n * @returns a number defining stencil operation to use when depth fails\r\n */\r\n public getStencilOperationDepthFail(): number {\r\n return this._stencilOpDepthFail;\r\n }\r\n\r\n /**\r\n * Sets alpha constants used by some alpha blending modes\r\n * @param r defines the red component\r\n * @param g defines the green component\r\n * @param b defines the blue component\r\n * @param a defines the alpha component\r\n */\r\n public setAlphaConstants(r: number, g: number, b: number, a: number) {\r\n throw new Error(\"Setting alpha blend constant color not yet implemented.\");\r\n }\r\n\r\n /**\r\n * Sets the current alpha mode\r\n * @param mode defines the mode to use (one of the BABYLON.Constants.ALPHA_XXX)\r\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n */\r\n public setAlphaMode(mode: number, noDepthWriteChange: boolean = false): void {\r\n if (this._alphaMode === mode) {\r\n return;\r\n }\r\n\r\n const nativeMode = this._getNativeAlphaMode(mode);\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETBLENDMODE);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(nativeMode);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n\r\n if (!noDepthWriteChange) {\r\n this.setDepthWrite(mode === Constants.ALPHA_DISABLE);\r\n }\r\n\r\n this._alphaMode = mode;\r\n }\r\n\r\n /**\r\n * Gets the current alpha mode\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n * @returns the current alpha mode\r\n */\r\n public getAlphaMode(): number {\r\n return this._alphaMode;\r\n }\r\n\r\n public setInt(uniform: WebGLUniformLocation, int: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINT);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32(int);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray2(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray3(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setIntArray4(uniform: WebGLUniformLocation, array: Int32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETINTARRAY4);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsInt32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray2(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray3(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloatArray4(uniform: WebGLUniformLocation, array: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOATARRAY4);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(array);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setArray(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray(uniform, new Float32Array(array));\r\n }\r\n\r\n public setArray2(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray2(uniform, new Float32Array(array));\r\n }\r\n\r\n public setArray3(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray3(uniform, new Float32Array(array));\r\n }\r\n\r\n public setArray4(uniform: WebGLUniformLocation, array: number[]): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n return this.setFloatArray4(uniform, new Float32Array(array));\r\n }\r\n\r\n public setMatrices(uniform: WebGLUniformLocation, matrices: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRICES);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrices);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n\r\n return true;\r\n }\r\n\r\n public setMatrix3x3(uniform: WebGLUniformLocation, matrix: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRIX3X3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrix);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setMatrix2x2(uniform: WebGLUniformLocation, matrix: Float32Array): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETMATRIX2X2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32s(matrix);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat(uniform: WebGLUniformLocation, value: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat2(uniform: WebGLUniformLocation, x: number, y: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT2);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(x);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(y);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat3(uniform: WebGLUniformLocation, x: number, y: number, z: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT3);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(x);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(y);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(z);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setFloat4(uniform: WebGLUniformLocation, x: number, y: number, z: number, w: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETFLOAT4);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(x);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(y);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(z);\r\n this._commandBufferEncoder.encodeCommandArgAsFloat32(w);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n return true;\r\n }\r\n\r\n public setColor3(uniform: WebGLUniformLocation, color3: IColor3Like): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this.setFloat3(uniform, color3.r, color3.g, color3.b);\r\n return true;\r\n }\r\n\r\n public setColor4(uniform: WebGLUniformLocation, color3: IColor3Like, alpha: number): boolean {\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n this.setFloat4(uniform, color3.r, color3.g, color3.b, alpha);\r\n return true;\r\n }\r\n\r\n public wipeCaches(bruteForce?: boolean): void {\r\n if (this.preventCacheWipeBetweenFrames) {\r\n return;\r\n }\r\n this.resetTextureCache();\r\n this._currentEffect = null;\r\n\r\n if (bruteForce) {\r\n this._currentProgram = null;\r\n\r\n this._stencilStateComposer.reset();\r\n this._depthCullingState.reset();\r\n this._alphaState.reset();\r\n }\r\n\r\n this._cachedVertexBuffers = null;\r\n this._cachedIndexBuffer = null;\r\n this._cachedEffectForVertexBuffers = null;\r\n }\r\n\r\n protected _createTexture(): WebGLTexture {\r\n return this._engine.createTexture();\r\n }\r\n\r\n protected _deleteTexture(texture: Nullable<WebGLTexture>): void {\r\n if (texture) {\r\n this._engine.deleteTexture(texture);\r\n }\r\n }\r\n\r\n /**\r\n * Update the content of a dynamic texture\r\n * @param texture defines the texture to update\r\n * @param canvas defines the canvas containing the source\r\n * @param invertY defines if data must be stored with Y axis inverted\r\n * @param premulAlpha defines if alpha is stored as premultiplied\r\n * @param format defines the format of the data\r\n */\r\n public updateDynamicTexture(texture: Nullable<InternalTexture>, canvas: any, invertY: boolean, premulAlpha: boolean = false, format?: number): void {\r\n if (premulAlpha === void 0) {\r\n premulAlpha = false;\r\n }\r\n\r\n if (!!texture && !!texture._hardwareTexture) {\r\n const source = canvas.getCanvasTexture();\r\n const destination = texture._hardwareTexture.underlyingResource;\r\n this._engine.copyTexture(destination, source);\r\n texture.isReady = true;\r\n }\r\n }\r\n\r\n public createDynamicTexture(width: number, height: number, generateMipMaps: boolean, samplingMode: number): InternalTexture {\r\n // it's not possible to create 0x0 texture sized. Many bgfx methods assume texture size is at least 1x1(best case).\r\n // Worst case is getting a crash/assert.\r\n width = Math.max(width, 1);\r\n height = Math.max(height, 1);\r\n return this.createRawTexture(new Uint8Array(width * height * 4), width, height, Constants.TEXTUREFORMAT_RGBA, false, false, samplingMode);\r\n }\r\n\r\n public createVideoElement(constraints: MediaTrackConstraints): any {\r\n // create native object depending on stream. Only NativeCamera is supported for now.\r\n if (this._camera) {\r\n return this._camera.createVideo(constraints);\r\n }\r\n return null;\r\n }\r\n\r\n public updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void {\r\n if (texture && texture._hardwareTexture && this._camera) {\r\n const webGLTexture = texture._hardwareTexture.underlyingResource;\r\n this._camera.updateVideoTexture(webGLTexture, video, invertY);\r\n }\r\n }\r\n\r\n public createRawTexture(\r\n data: Nullable<ArrayBufferView>,\r\n width: number,\r\n height: number,\r\n format: number,\r\n generateMipMaps: boolean,\r\n invertY: boolean,\r\n samplingMode: number,\r\n compression: Nullable<string> = null,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_INT\r\n ): InternalTexture {\r\n const texture = new InternalTexture(this, InternalTextureSource.Raw);\r\n\r\n texture.format = format;\r\n texture.generateMipMaps = generateMipMaps;\r\n texture.samplingMode = samplingMode;\r\n texture.invertY = invertY;\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.width = texture.baseWidth;\r\n texture.height = texture.baseHeight;\r\n texture._compression = compression;\r\n texture.type = type;\r\n\r\n this.updateRawTexture(texture, data, format, invertY, compression, type);\r\n\r\n if (texture._hardwareTexture) {\r\n const webGLTexture = texture._hardwareTexture.underlyingResource;\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(webGLTexture, filter);\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n return texture;\r\n }\r\n\r\n public createRawTexture2DArray(\r\n data: Nullable<ArrayBufferView>,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n format: number,\r\n generateMipMaps: boolean,\r\n invertY: boolean,\r\n samplingMode: number,\r\n compression: Nullable<string> = null,\r\n textureType = Constants.TEXTURETYPE_UNSIGNED_INT\r\n ): InternalTexture {\r\n const texture = new InternalTexture(this, InternalTextureSource.Raw2DArray);\r\n\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.baseDepth = depth;\r\n texture.width = width;\r\n texture.height = height;\r\n texture.depth = depth;\r\n texture.format = format;\r\n texture.type = textureType;\r\n texture.generateMipMaps = generateMipMaps;\r\n texture.samplingMode = samplingMode;\r\n texture.is2DArray = true;\r\n\r\n if (texture._hardwareTexture) {\r\n const webGLTexture = texture._hardwareTexture.underlyingResource;\r\n this._engine.loadRawTexture2DArray(webGLTexture, data, width, height, depth, this._getNativeTextureFormat(format, textureType), generateMipMaps, invertY);\r\n\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(webGLTexture, filter);\r\n }\r\n\r\n texture.isReady = true;\r\n\r\n this._internalTexturesCache.push(texture);\r\n return texture;\r\n }\r\n\r\n public updateRawTexture(\r\n texture: Nullable<InternalTexture>,\r\n bufferView: Nullable<ArrayBufferView>,\r\n format: number,\r\n invertY: boolean,\r\n compression: Nullable<string> = null,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_INT\r\n ): void {\r\n if (!texture) {\r\n return;\r\n }\r\n\r\n if (bufferView && texture._hardwareTexture) {\r\n const underlyingResource = texture._hardwareTexture.underlyingResource;\r\n this._engine.loadRawTexture(\r\n underlyingResource,\r\n bufferView,\r\n texture.width,\r\n texture.height,\r\n this._getNativeTextureFormat(format, type),\r\n texture.generateMipMaps,\r\n texture.invertY\r\n );\r\n }\r\n\r\n texture.isReady = true;\r\n }\r\n\r\n // TODO: Refactor to share more logic with babylon.engine.ts version.\r\n /**\r\n * Usually called from Texture.ts.\r\n * Passed information to create a WebGLTexture\r\n * @param url defines a value which contains one of the following:\r\n * * A conventional http URL, e.g. 'http://...' or 'file://...'\r\n * * A base64 string of in-line texture data, e.g. 'data:image/jpg;base64,/...'\r\n * * An indicator that data being passed using the buffer parameter, e.g. 'data:mytexture.jpg'\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated. Ignored for compressed textures. They must be in the file\r\n * @param invertY when true, image is flipped when loaded. You probably want true. Certain compressed textures may invert this if their default is inverted (eg. ktx)\r\n * @param scene needed for loading to the correct scene\r\n * @param samplingMode mode with should be used sample / access the texture (Default: Texture.TRILINEAR_SAMPLINGMODE)\r\n * @param onLoad optional callback to be called upon successful completion\r\n * @param onError optional callback to be called upon failure\r\n * @param buffer a source of a file previously fetched as either a base64 string, an ArrayBuffer (compressed or image format), HTMLImageElement (image format), or a Blob\r\n * @param fallback an internal argument in case the function must be called again, due to etc1 not having alpha capabilities\r\n * @param format internal format. Default: RGB when extension is '.jpg' else RGBA. Ignored for compressed textures\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param mimeType defines an optional mime type\r\n * @param loaderOptions options to be passed to the loader\r\n * @param creationFlags\r\n * @param useSRGBBuffer\r\n * @returns a InternalTexture for assignment back into BABYLON.Texture\r\n */\r\n public createTexture(\r\n url: Nullable<string>,\r\n noMipmap: boolean,\r\n invertY: boolean,\r\n scene: Nullable<ISceneLike>,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message: string, exception: any) => void> = null,\r\n buffer: Nullable<string | ArrayBuffer | ArrayBufferView | HTMLImageElement | Blob | ImageBitmap> = null,\r\n fallback: Nullable<InternalTexture> = null,\r\n format: Nullable<number> = null,\r\n forcedExtension: Nullable<string> = null,\r\n mimeType?: string,\r\n loaderOptions?: any,\r\n creationFlags?: number,\r\n useSRGBBuffer = false\r\n ): InternalTexture {\r\n url = url || \"\";\r\n const fromData = url.substr(0, 5) === \"data:\";\r\n //const fromBlob = url.substr(0, 5) === \"blob:\";\r\n const isBase64 = fromData && url.indexOf(\";base64,\") !== -1;\r\n\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Url);\r\n\r\n const originalUrl = url;\r\n if (this._transformTextureUrl && !isBase64 && !fallback && !buffer) {\r\n url = this._transformTextureUrl(url);\r\n }\r\n\r\n // establish the file extension, if possible\r\n const lastDot = url.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\r\n\r\n let loader: Nullable<IInternalTextureLoader> = null;\r\n for (const availableLoader of Engine._TextureLoaders) {\r\n if (availableLoader.canLoad(extension)) {\r\n loader = availableLoader;\r\n break;\r\n }\r\n }\r\n\r\n if (scene) {\r\n scene._addPendingData(texture);\r\n }\r\n texture.url = url;\r\n texture.generateMipMaps = !noMipmap;\r\n texture.samplingMode = samplingMode;\r\n texture.invertY = invertY;\r\n texture._useSRGBBuffer = this._getUseSRGBBuffer(useSRGBBuffer, noMipmap);\r\n\r\n if (!this.doNotHandleContextLost) {\r\n // Keep a link to the buffer only if we plan to handle context lost\r\n texture._buffer = buffer;\r\n }\r\n\r\n let onLoadObserver: Nullable<Observer<InternalTexture>> = null;\r\n if (onLoad && !fallback) {\r\n onLoadObserver = texture.onLoadedObservable.add(onLoad);\r\n }\r\n\r\n if (!fallback) {\r\n this._internalTexturesCache.push(texture);\r\n }\r\n\r\n const onInternalError = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene._removePendingData(texture);\r\n }\r\n\r\n if (url === originalUrl) {\r\n if (onLoadObserver) {\r\n texture.onLoadedObservable.remove(onLoadObserver);\r\n }\r\n\r\n if (EngineStore.UseFallbackTexture) {\r\n this.createTexture(EngineStore.FallbackTexture, noMipmap, texture.invertY, scene, samplingMode, null, onError, buffer, texture);\r\n }\r\n\r\n if (onError) {\r\n onError((message || \"Unknown error\") + (EngineStore.UseFallbackTexture ? \" - Fallback texture was used\" : \"\"), exception);\r\n }\r\n } else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${url}, falling back to ${originalUrl}`);\r\n this.createTexture(originalUrl, noMipmap, texture.invertY, scene, samplingMode, onLoad, onError, buffer, texture, format, forcedExtension, mimeType, loaderOptions);\r\n }\r\n };\r\n\r\n // processing for non-image formats\r\n if (loader) {\r\n throw new Error(\"Loading textures from IInternalTextureLoader not yet implemented.\");\r\n } else {\r\n const onload = (data: ArrayBufferView) => {\r\n if (!texture._hardwareTexture) {\r\n if (scene) {\r\n scene._removePendingData(texture);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const underlyingResource = texture._hardwareTexture.underlyingResource;\r\n\r\n this._engine.loadTexture(\r\n underlyingResource,\r\n data,\r\n !noMipmap,\r\n invertY,\r\n useSRGBBuffer,\r\n () => {\r\n texture.baseWidth = this._engine.getTextureWidth(underlyingResource);\r\n texture.baseHeight = this._engine.getTextureHeight(underlyingResource);\r\n texture.width = texture.baseWidth;\r\n texture.height = texture.baseHeight;\r\n texture.isReady = true;\r\n\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(underlyingResource, filter);\r\n\r\n if (scene) {\r\n scene._removePendingData(texture);\r\n }\r\n\r\n texture.onLoadedObservable.notifyObservers(texture);\r\n texture.onLoadedObservable.clear();\r\n },\r\n () => {\r\n throw new Error(\"Could not load a native texture.\");\r\n }\r\n );\r\n };\r\n\r\n if (fromData && buffer) {\r\n if (buffer instanceof ArrayBuffer) {\r\n onload(new Uint8Array(buffer));\r\n } else if (ArrayBuffer.isView(buffer)) {\r\n onload(buffer);\r\n } else if (typeof buffer === \"string\") {\r\n onload(new Uint8Array(Tools.DecodeBase64(buffer)));\r\n } else {\r\n throw new Error(\"Unsupported buffer type\");\r\n }\r\n } else {\r\n if (isBase64) {\r\n onload(new Uint8Array(Tools.DecodeBase64(url)));\r\n } else {\r\n this._loadFile(\r\n url,\r\n (data) => onload(new Uint8Array(data as ArrayBuffer)),\r\n undefined,\r\n undefined,\r\n true,\r\n (request?: IWebRequest, exception?: any) => {\r\n onInternalError(\"Unable to load \" + (request ? request.responseURL : url, exception));\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Wraps an external native texture in a Babylon texture.\r\n * @param texture defines the external texture\r\n * @returns the babylon internal texture\r\n */\r\n wrapNativeTexture(texture: any): InternalTexture {\r\n // Currently native is using the WebGL wrapper\r\n const hardwareTexture = new WebGLHardwareTexture(texture, this._gl);\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.Unknown, true);\r\n internalTexture._hardwareTexture = hardwareTexture;\r\n internalTexture.isReady = true;\r\n return internalTexture;\r\n }\r\n\r\n /**\r\n * Wraps an external web gl texture in a Babylon texture.\r\n * @returns the babylon internal texture\r\n */\r\n wrapWebGLTexture(): InternalTexture {\r\n throw new Error(\"wrapWebGLTexture is not supported, use wrapNativeTexture instead.\");\r\n }\r\n\r\n public _createDepthStencilTexture(size: TextureSize, options: DepthTextureCreationOptions, rtWrapper: RenderTargetWrapper): InternalTexture {\r\n const nativeRTWrapper = rtWrapper as NativeRenderTargetWrapper;\r\n const texture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n\r\n const width = (<{ width: number; height: number; layers?: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number; layers?: number }>size).height || <number>size;\r\n\r\n const framebuffer = this._engine.createFrameBuffer(texture._hardwareTexture!.underlyingResource, width, height, _native.Engine.TEXTURE_FORMAT_RGBA8, false, true, false);\r\n nativeRTWrapper._framebufferDepthStencil = framebuffer;\r\n return texture;\r\n }\r\n\r\n /**\r\n * @param framebuffer\r\n * @hidden\r\n */\r\n public _releaseFramebufferObjects(framebuffer: Nullable<WebGLFramebuffer>): void {\r\n if (framebuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEFRAMEBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(framebuffer as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n }\r\n\r\n /** @hidden */\r\n /**\r\n * Engine abstraction for loading and creating an image bitmap from a given source string.\r\n * @param imageSource source to load the image from.\r\n * @param options An object that sets options for the image's extraction.\r\n * @returns ImageBitmap\r\n */\r\n public _createImageBitmapFromSource(imageSource: string, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n const promise = new Promise<ImageBitmap>((resolve, reject) => {\r\n const image = this.createCanvasImage();\r\n image.onload = () => {\r\n try {\r\n const imageBitmap = this._engine.createImageBitmap(image);\r\n resolve(imageBitmap);\r\n } catch (error) {\r\n reject(`Error loading image ${image.src} with exception: ${error}`);\r\n }\r\n };\r\n image.onerror = (error) => {\r\n reject(`Error loading image ${image.src} with exception: ${error}`);\r\n };\r\n\r\n image.src = imageSource;\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n /**\r\n * Engine abstraction for createImageBitmap\r\n * @param image source for image\r\n * @param options An object that sets options for the image's extraction.\r\n * @returns ImageBitmap\r\n */\r\n public createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n return new Promise((resolve, reject) => {\r\n if (Array.isArray(image)) {\r\n const arr = <Array<ArrayBufferView>>image;\r\n if (arr.length) {\r\n const image = this._engine.createImageBitmap(arr[0]);\r\n if (image) {\r\n resolve(image);\r\n return;\r\n }\r\n }\r\n }\r\n reject(`Unsupported data for createImageBitmap.`);\r\n });\r\n }\r\n\r\n /**\r\n * Resize an image and returns the image data as an uint8array\r\n * @param image image to resize\r\n * @param bufferWidth destination buffer width\r\n * @param bufferHeight destination buffer height\r\n * @returns an uint8array containing RGBA values of bufferWidth * bufferHeight size\r\n */\r\n public resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n return this._engine.resizeImageBitmap(image, bufferWidth, bufferHeight);\r\n }\r\n\r\n /**\r\n * Creates a cube texture\r\n * @param rootUrl defines the url where the files to load is located\r\n * @param scene defines the current scene\r\n * @param files defines the list of files to load (1 per face)\r\n * @param noMipmap defines a boolean indicating that no mipmaps shall be generated (false by default)\r\n * @param onLoad defines an optional callback raised when the texture is loaded\r\n * @param onError defines an optional callback raised if there is an issue to load the texture\r\n * @param format defines the format of the data\r\n * @param forcedExtension defines the extension to use to pick the right loader\r\n * @param createPolynomials if a polynomial sphere should be created for the cube texture\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param fallback defines texture to use while falling back when (compressed) texture file not found.\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU).\r\n * @returns the cube texture as an InternalTexture\r\n */\r\n public createCubeTexture(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap?: boolean,\r\n onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials = false,\r\n lodScale: number = 0,\r\n lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null,\r\n loaderOptions?: any,\r\n useSRGBBuffer = false\r\n ): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n }\r\n\r\n const lastDot = rootUrl.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? rootUrl.substring(lastDot).toLowerCase() : \"\";\r\n\r\n // TODO: use texture loader to load env files?\r\n if (extension === \".env\") {\r\n const onloaddata = (data: ArrayBufferView) => {\r\n const info = GetEnvInfo(data)!;\r\n texture.width = info.width;\r\n texture.height = info.width;\r\n\r\n UploadEnvSpherical(texture, info);\r\n\r\n const specularInfo = info.specular as EnvironmentTextureSpecularInfoV1;\r\n if (!specularInfo) {\r\n throw new Error(`Nothing else parsed so far`);\r\n }\r\n\r\n texture._lodGenerationScale = specularInfo.lodGenerationScale;\r\n const imageData = CreateImageDataArrayBufferViews(data, info);\r\n\r\n texture.format = Constants.TEXTUREFORMAT_RGBA;\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n texture.generateMipMaps = true;\r\n texture.getEngine().updateTextureSamplingMode(Texture.TRILINEAR_SAMPLINGMODE, texture);\r\n texture._isRGBD = true;\r\n texture.invertY = true;\r\n\r\n this._engine.loadCubeTextureWithMips(\r\n texture._hardwareTexture!.underlyingResource,\r\n imageData,\r\n false,\r\n useSRGBBuffer,\r\n () => {\r\n texture.isReady = true;\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n },\r\n () => {\r\n throw new Error(\"Could not load a native cube texture.\");\r\n }\r\n );\r\n };\r\n\r\n if (files && files.length === 6) {\r\n throw new Error(`Multi-file loading not allowed on env files.`);\r\n } else {\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n } else {\r\n if (!files || files.length !== 6) {\r\n throw new Error(\"Cannot load cubemap because 6 files were not defined\");\r\n }\r\n\r\n // Reorder from [+X, +Y, +Z, -X, -Y, -Z] to [+X, -X, +Y, -Y, +Z, -Z].\r\n const reorderedFiles = [files[0], files[3], files[1], files[4], files[2], files[5]];\r\n Promise.all(reorderedFiles.map((file) => Tools.LoadFileAsync(file).then((data) => new Uint8Array(data as ArrayBuffer))))\r\n .then((data) => {\r\n return new Promise<void>((resolve, reject) => {\r\n this._engine.loadCubeTexture(texture._hardwareTexture!.underlyingResource, data, !noMipmap, true, useSRGBBuffer, resolve, reject);\r\n });\r\n })\r\n .then(\r\n () => {\r\n texture.isReady = true;\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n },\r\n (error) => {\r\n if (onError) {\r\n onError(`Failed to load cubemap: ${error.message}`, error);\r\n }\r\n }\r\n );\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * @param isMulti\r\n * @param isCube\r\n * @param size\r\n * @hidden\r\n */\r\n public _createHardwareRenderTargetWrapper(isMulti: boolean, isCube: boolean, size: TextureSize): RenderTargetWrapper {\r\n const rtWrapper = new NativeRenderTargetWrapper(isMulti, isCube, size, this);\r\n this._renderTargetWrapperCache.push(rtWrapper);\r\n return rtWrapper;\r\n }\r\n\r\n public createRenderTargetTexture(size: number | { width: number; height: number }, options: boolean | RenderTargetCreationOptions): RenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size) as NativeRenderTargetWrapper;\r\n\r\n const fullOptions: RenderTargetCreationOptions = {};\r\n\r\n if (options !== undefined && typeof options === \"object\") {\r\n fullOptions.generateMipMaps = options.generateMipMaps;\r\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\r\n fullOptions.type = options.type === undefined ? Constants.TEXTURETYPE_UNSIGNED_INT : options.type;\r\n fullOptions.samplingMode = options.samplingMode === undefined ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : options.samplingMode;\r\n fullOptions.format = options.format === undefined ? Constants.TEXTUREFORMAT_RGBA : options.format;\r\n } else {\r\n fullOptions.generateMipMaps = <boolean>options;\r\n fullOptions.generateDepthBuffer = true;\r\n fullOptions.generateStencilBuffer = false;\r\n fullOptions.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n fullOptions.samplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n fullOptions.format = Constants.TEXTUREFORMAT_RGBA;\r\n }\r\n\r\n if (fullOptions.type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloatLinearFiltering) {\r\n // if floating point linear (gl.FLOAT) then force to NEAREST_SAMPLINGMODE\r\n fullOptions.samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n } else if (fullOptions.type === Constants.TEXTURETYPE_HALF_FLOAT && !this._caps.textureHalfFloatLinearFiltering) {\r\n // if floating point linear (HALF_FLOAT) then force to NEAREST_SAMPLINGMODE\r\n fullOptions.samplingMode = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n }\r\n const texture = new InternalTexture(this, InternalTextureSource.RenderTarget);\r\n\r\n const width = (<{ width: number; height: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number }>size).height || <number>size;\r\n\r\n if (fullOptions.type === Constants.TEXTURETYPE_FLOAT && !this._caps.textureFloat) {\r\n fullOptions.type = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n Logger.Warn(\"Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type\");\r\n }\r\n\r\n const framebuffer = this._engine.createFrameBuffer(\r\n texture._hardwareTexture!.underlyingResource,\r\n width,\r\n height,\r\n this._getNativeTextureFormat(fullOptions.format, fullOptions.type),\r\n fullOptions.generateStencilBuffer ? true : false,\r\n fullOptions.generateDepthBuffer,\r\n fullOptions.generateMipMaps ? true : false\r\n );\r\n\r\n rtWrapper._framebuffer = framebuffer;\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\r\n\r\n texture.baseWidth = width;\r\n texture.baseHeight = height;\r\n texture.width = width;\r\n texture.height = height;\r\n texture.isReady = true;\r\n texture.samples = 1;\r\n texture.generateMipMaps = fullOptions.generateMipMaps ? true : false;\r\n texture.samplingMode = fullOptions.samplingMode;\r\n texture.type = fullOptions.type;\r\n texture.format = fullOptions.format;\r\n\r\n this._internalTexturesCache.push(texture);\r\n rtWrapper.setTextures(texture);\r\n\r\n return rtWrapper;\r\n }\r\n\r\n public updateTextureSamplingMode(samplingMode: number, texture: InternalTexture): void {\r\n if (texture._hardwareTexture) {\r\n const filter = this._getNativeSamplingMode(samplingMode);\r\n this._setTextureSampling(texture._hardwareTexture.underlyingResource, filter);\r\n }\r\n texture.samplingMode = samplingMode;\r\n }\r\n\r\n public bindFramebuffer(texture: RenderTargetWrapper, faceIndex?: number, requiredWidth?: number, requiredHeight?: number, forceFullscreenViewport?: boolean): void {\r\n const nativeRTWrapper = texture as NativeRenderTargetWrapper;\r\n\r\n if (faceIndex) {\r\n throw new Error(\"Cuboid frame buffers are not yet supported in NativeEngine.\");\r\n }\r\n\r\n if (requiredWidth || requiredHeight) {\r\n throw new Error(\"Required width/height for frame buffers not yet supported in NativeEngine.\");\r\n }\r\n\r\n if (forceFullscreenViewport) {\r\n //Not supported yet but don't stop rendering\r\n }\r\n\r\n if (nativeRTWrapper._framebufferDepthStencil) {\r\n this._bindUnboundFramebuffer(nativeRTWrapper._framebufferDepthStencil);\r\n } else {\r\n this._bindUnboundFramebuffer(nativeRTWrapper._framebuffer);\r\n }\r\n }\r\n\r\n public unBindFramebuffer(texture: RenderTargetWrapper, disableGenerateMipMaps = false, onBeforeUnbind?: () => void): void {\r\n // NOTE: Disabling mipmap generation is not yet supported in NativeEngine.\r\n\r\n if (onBeforeUnbind) {\r\n onBeforeUnbind();\r\n }\r\n\r\n this._bindUnboundFramebuffer(null);\r\n }\r\n\r\n public createDynamicVertexBuffer(data: DataArray): DataBuffer {\r\n return this.createVertexBuffer(data, true);\r\n }\r\n\r\n public updateDynamicIndexBuffer(indexBuffer: DataBuffer, indices: IndicesArray, offset: number = 0): void {\r\n const buffer = indexBuffer as NativeDataBuffer;\r\n const data = this._normalizeIndexData(indices);\r\n buffer.is32Bits = data.BYTES_PER_ELEMENT === 4;\r\n this._engine.updateDynamicIndexBuffer(buffer.nativeIndexBuffer!, data.buffer, data.byteOffset, data.byteLength, offset);\r\n }\r\n\r\n public updateDynamicVertexBuffer(vertexBuffer: DataBuffer, verticies: DataArray, byteOffset?: number, byteLength?: number): void {\r\n const buffer = vertexBuffer as NativeDataBuffer;\r\n const data = ArrayBuffer.isView(verticies) ? verticies : new Float32Array(verticies);\r\n this._engine.updateDynamicVertexBuffer(buffer.nativeVertexBuffer!, data.buffer, data.byteOffset + (byteOffset ?? 0), byteLength ?? data.byteLength);\r\n }\r\n\r\n // TODO: Refactor to share more logic with base Engine implementation.\r\n protected _setTexture(channel: number, texture: Nullable<BaseTexture>, isPartOfTextureArray = false, depthStencilTexture = false): boolean {\r\n const uniform = this._boundUniforms[channel];\r\n if (!uniform) {\r\n return false;\r\n }\r\n\r\n // Not ready?\r\n if (!texture) {\r\n if (this._boundTexturesCache[channel] != null) {\r\n this._activeChannel = channel;\r\n this._setTextureCore(uniform, null);\r\n }\r\n return false;\r\n }\r\n\r\n // Video\r\n if ((<VideoTexture>texture).video) {\r\n this._activeChannel = channel;\r\n (<VideoTexture>texture).update();\r\n } else if (texture.delayLoadState === Constants.DELAYLOADSTATE_NOTLOADED) {\r\n // Delay loading\r\n texture.delayLoad();\r\n return false;\r\n }\r\n\r\n let internalTexture: InternalTexture;\r\n if (depthStencilTexture) {\r\n internalTexture = (<RenderTargetTexture>texture).depthStencilTexture!;\r\n } else if (texture.isReady()) {\r\n internalTexture = <InternalTexture>texture.getInternalTexture();\r\n } else if (texture.isCube) {\r\n internalTexture = this.emptyCubeTexture;\r\n } else if (texture.is3D) {\r\n internalTexture = this.emptyTexture3D;\r\n } else if (texture.is2DArray) {\r\n internalTexture = this.emptyTexture2DArray;\r\n } else {\r\n internalTexture = this.emptyTexture;\r\n }\r\n\r\n this._activeChannel = channel;\r\n\r\n if (!internalTexture || !internalTexture._hardwareTexture) {\r\n return false;\r\n }\r\n\r\n this._setTextureWrapMode(\r\n internalTexture._hardwareTexture.underlyingResource,\r\n this._getAddressMode(texture.wrapU),\r\n this._getAddressMode(texture.wrapV),\r\n this._getAddressMode(texture.wrapR)\r\n );\r\n this._updateAnisotropicLevel(texture);\r\n\r\n this._setTextureCore(uniform, internalTexture._hardwareTexture.underlyingResource);\r\n\r\n return true;\r\n }\r\n\r\n // filter is a NativeFilter.XXXX value.\r\n private _setTextureSampling(texture: WebGLTexture, filter: number) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTURESAMPLING);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(texture as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(filter);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n // addressModes are NativeAddressMode.XXXX values.\r\n private _setTextureWrapMode(texture: WebGLTexture, addressModeU: number, addressModeV: number, addressModeW: number) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTUREWRAPMODE);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(texture as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(addressModeU);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(addressModeV);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(addressModeW);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n private _setTextureCore(uniform: WebGLUniformLocation, texture: Nullable<WebGLTexture>) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTURE);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(uniform as any as NativeData);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(texture as NativeData);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n }\r\n\r\n // TODO: Share more of this logic with the base implementation.\r\n // TODO: Rename to match naming in base implementation once refactoring allows different parameters.\r\n private _updateAnisotropicLevel(texture: BaseTexture) {\r\n const internalTexture = texture.getInternalTexture();\r\n const value = texture.anisotropicFilteringLevel;\r\n\r\n if (!internalTexture || !internalTexture._hardwareTexture) {\r\n return;\r\n }\r\n\r\n if (internalTexture._cachedAnisotropicFilteringLevel !== value) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_SETTEXTUREANISOTROPICLEVEL);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(internalTexture._hardwareTexture.underlyingResource);\r\n this._commandBufferEncoder.encodeCommandArgAsUInt32(value);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n internalTexture._cachedAnisotropicFilteringLevel = value;\r\n }\r\n }\r\n\r\n // Returns a NativeAddressMode.XXX value.\r\n private _getAddressMode(wrapMode: number): number {\r\n switch (wrapMode) {\r\n case Constants.TEXTURE_WRAP_ADDRESSMODE:\r\n return _native.Engine.ADDRESS_MODE_WRAP;\r\n case Constants.TEXTURE_CLAMP_ADDRESSMODE:\r\n return _native.Engine.ADDRESS_MODE_CLAMP;\r\n case Constants.TEXTURE_MIRROR_ADDRESSMODE:\r\n return _native.Engine.ADDRESS_MODE_MIRROR;\r\n default:\r\n throw new Error(\"Unexpected wrap mode: \" + wrapMode + \".\");\r\n }\r\n }\r\n\r\n /**\r\n * @param channel\r\n * @param texture\r\n * @hidden\r\n */\r\n public _bindTexture(channel: number, texture: InternalTexture): void {\r\n const uniform = this._boundUniforms[channel];\r\n if (!uniform) {\r\n return;\r\n }\r\n if (texture && texture._hardwareTexture) {\r\n const underlyingResource = texture._hardwareTexture.underlyingResource;\r\n this._setTextureCore(uniform, underlyingResource);\r\n }\r\n }\r\n\r\n protected _deleteBuffer(buffer: NativeDataBuffer): void {\r\n if (buffer.nativeIndexBuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEINDEXBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(buffer.nativeIndexBuffer);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n delete buffer.nativeIndexBuffer;\r\n }\r\n\r\n if (buffer.nativeVertexBuffer) {\r\n this._commandBufferEncoder.startEncodingCommand(_native.Engine.COMMAND_DELETEVERTEXBUFFER);\r\n this._commandBufferEncoder.encodeCommandArgAsNativeData(buffer.nativeVertexBuffer);\r\n this._commandBufferEncoder.finishEncodingCommand();\r\n delete buffer.nativeVertexBuffer;\r\n }\r\n }\r\n\r\n /**\r\n * Create a canvas\r\n * @param width width\r\n * @param height height\r\n * @return ICanvas interface\r\n */\r\n public createCanvas(width: number, height: number): ICanvas {\r\n if (!_native.Canvas) {\r\n throw new Error(\"Native Canvas plugin not available.\");\r\n }\r\n const canvas = new _native.Canvas();\r\n canvas.width = width;\r\n canvas.height = height;\r\n return canvas;\r\n }\r\n\r\n /**\r\n * Create an image to use with canvas\r\n * @return IImage interface\r\n */\r\n public createCanvasImage(): IImage {\r\n if (!_native.Canvas) {\r\n throw new Error(\"Native Canvas plugin not available.\");\r\n }\r\n const image = new _native.Image();\r\n return image;\r\n }\r\n\r\n /**\r\n * Update a portion of an internal texture\r\n * @param texture defines the texture to update\r\n * @param imageData defines the data to store into the texture\r\n * @param xOffset defines the x coordinates of the update rectangle\r\n * @param yOffset defines the y coordinates of the update rectangle\r\n * @param width defines the width of the update rectangle\r\n * @param height defines the height of the update rectangle\r\n * @param faceIndex defines the face index if texture is a cube (0 by default)\r\n * @param lod defines the lod level to update (0 by default)\r\n * @param generateMipMaps defines whether to generate mipmaps or not\r\n */\r\n public updateTextureData(\r\n texture: InternalTexture,\r\n imageData: ArrayBufferView,\r\n xOffset: number,\r\n yOffset: number,\r\n width: number,\r\n height: number,\r\n faceIndex: number = 0,\r\n lod: number = 0,\r\n generateMipMaps = false\r\n ): void {\r\n throw new Error(\"updateTextureData not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param internalFormat\r\n * @param width\r\n * @param height\r\n * @param data\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadCompressedDataToTextureDirectly(\r\n texture: InternalTexture,\r\n internalFormat: number,\r\n width: number,\r\n height: number,\r\n data: ArrayBufferView,\r\n faceIndex: number = 0,\r\n lod: number = 0\r\n ) {\r\n throw new Error(\"_uploadCompressedDataToTextureDirectly not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param imageData\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadDataToTextureDirectly(texture: InternalTexture, imageData: ArrayBufferView, faceIndex: number = 0, lod: number = 0): void {\r\n throw new Error(\"_uploadDataToTextureDirectly not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param imageData\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadArrayBufferViewToTexture(texture: InternalTexture, imageData: ArrayBufferView, faceIndex: number = 0, lod: number = 0): void {\r\n throw new Error(\"_uploadArrayBufferViewToTexture not implemented.\");\r\n }\r\n\r\n /**\r\n * @param texture\r\n * @param image\r\n * @param faceIndex\r\n * @param lod\r\n * @hidden\r\n */\r\n public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement, faceIndex: number = 0, lod: number = 0) {\r\n throw new Error(\"_uploadArrayBufferViewToTexture not implemented.\");\r\n }\r\n\r\n // JavaScript-to-Native conversion helper functions.\r\n\r\n private _getNativeSamplingMode(samplingMode: number): number {\r\n switch (samplingMode) {\r\n case Constants.TEXTURE_NEAREST_NEAREST:\r\n return _native.Engine.TEXTURE_NEAREST_NEAREST;\r\n case Constants.TEXTURE_LINEAR_LINEAR:\r\n return _native.Engine.TEXTURE_LINEAR_LINEAR;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR:\r\n return _native.Engine.TEXTURE_LINEAR_LINEAR_MIPLINEAR;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST:\r\n return _native.Engine.TEXTURE_NEAREST_NEAREST_MIPNEAREST;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST:\r\n return _native.Engine.TEXTURE_NEAREST_LINEAR_MIPNEAREST;\r\n case Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR:\r\n return _native.Engine.TEXTURE_NEAREST_LINEAR_MIPLINEAR;\r\n case Constants.TEXTURE_NEAREST_LINEAR:\r\n return _native.Engine.TEXTURE_NEAREST_LINEAR;\r\n case Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR:\r\n return _native.Engine.TEXTURE_NEAREST_NEAREST_MIPLINEAR;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST:\r\n return _native.Engine.TEXTURE_LINEAR_NEAREST_MIPNEAREST;\r\n case Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR:\r\n return _native.Engine.TEXTURE_LINEAR_NEAREST_MIPLINEAR;\r\n case Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST:\r\n return _native.Engine.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n case Constants.TEXTURE_LINEAR_NEAREST:\r\n return _native.Engine.TEXTURE_LINEAR_NEAREST;\r\n default:\r\n throw new Error(`Unsupported sampling mode: ${samplingMode}.`);\r\n }\r\n }\r\n\r\n private _getStencilFunc(func: number): number {\r\n switch (func) {\r\n case Constants.LESS:\r\n return _native.Engine.STENCIL_TEST_LESS;\r\n case Constants.LEQUAL:\r\n return _native.Engine.STENCIL_TEST_LEQUAL;\r\n case Constants.EQUAL:\r\n return _native.Engine.STENCIL_TEST_EQUAL;\r\n case Constants.GEQUAL:\r\n return _native.Engine.STENCIL_TEST_GEQUAL;\r\n case Constants.GREATER:\r\n return _native.Engine.STENCIL_TEST_GREATER;\r\n case Constants.NOTEQUAL:\r\n return _native.Engine.STENCIL_TEST_NOTEQUAL;\r\n case Constants.NEVER:\r\n return _native.Engine.STENCIL_TEST_NEVER;\r\n case Constants.ALWAYS:\r\n return _native.Engine.STENCIL_TEST_ALWAYS;\r\n default:\r\n throw new Error(`Unsupported stencil func mode: ${func}.`);\r\n }\r\n }\r\n\r\n private _getStencilOpFail(opFail: number): number {\r\n switch (opFail) {\r\n case Constants.KEEP:\r\n return _native.Engine.STENCIL_OP_FAIL_S_KEEP;\r\n case Constants.ZERO:\r\n return _native.Engine.STENCIL_OP_FAIL_S_ZERO;\r\n case Constants.REPLACE:\r\n return _native.Engine.STENCIL_OP_FAIL_S_REPLACE;\r\n case Constants.INCR:\r\n return _native.Engine.STENCIL_OP_FAIL_S_INCR;\r\n case Constants.DECR:\r\n return _native.Engine.STENCIL_OP_FAIL_S_DECR;\r\n case Constants.INVERT:\r\n return _native.Engine.STENCIL_OP_FAIL_S_INVERT;\r\n case Constants.INCR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_S_INCRSAT;\r\n case Constants.DECR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_S_DECRSAT;\r\n default:\r\n throw new Error(`Unsupported stencil OpFail mode: ${opFail}.`);\r\n }\r\n }\r\n\r\n private _getStencilDepthFail(depthFail: number): number {\r\n switch (depthFail) {\r\n case Constants.KEEP:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_KEEP;\r\n case Constants.ZERO:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_ZERO;\r\n case Constants.REPLACE:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_REPLACE;\r\n case Constants.INCR:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_INCR;\r\n case Constants.DECR:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_DECR;\r\n case Constants.INVERT:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_INVERT;\r\n case Constants.INCR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_INCRSAT;\r\n case Constants.DECR_WRAP:\r\n return _native.Engine.STENCIL_OP_FAIL_Z_DECRSAT;\r\n default:\r\n throw new Error(`Unsupported stencil depthFail mode: ${depthFail}.`);\r\n }\r\n }\r\n\r\n private _getStencilDepthPass(opPass: number): number {\r\n switch (opPass) {\r\n case Constants.KEEP:\r\n return _native.Engine.STENCIL_OP_PASS_Z_KEEP;\r\n case Constants.ZERO:\r\n return _native.Engine.STENCIL_OP_PASS_Z_ZERO;\r\n case Constants.REPLACE:\r\n return _native.Engine.STENCIL_OP_PASS_Z_REPLACE;\r\n case Constants.INCR:\r\n return _native.Engine.STENCIL_OP_PASS_Z_INCR;\r\n case Constants.DECR:\r\n return _native.Engine.STENCIL_OP_PASS_Z_DECR;\r\n case Constants.INVERT:\r\n return _native.Engine.STENCIL_OP_PASS_Z_INVERT;\r\n case Constants.INCR_WRAP:\r\n return _native.Engine.STENCIL_OP_PASS_Z_INCRSAT;\r\n case Constants.DECR_WRAP:\r\n return _native.Engine.STENCIL_OP_PASS_Z_DECRSAT;\r\n default:\r\n throw new Error(`Unsupported stencil opPass mode: ${opPass}.`);\r\n }\r\n }\r\n\r\n private _getNativeTextureFormat(format: number, type: number): number {\r\n if (format == Constants.TEXTUREFORMAT_RGB && type == Constants.TEXTURETYPE_UNSIGNED_INT) {\r\n return _native.Engine.TEXTURE_FORMAT_RGB8;\r\n } else if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_UNSIGNED_INT) {\r\n return _native.Engine.TEXTURE_FORMAT_RGBA8;\r\n } else if (format == Constants.TEXTUREFORMAT_RGBA && type == Constants.TEXTURETYPE_FLOAT) {\r\n return _native.Engine.TEXTURE_FORMAT_RGBA32F;\r\n } else {\r\n throw new RuntimeError(`Unsupported texture format or type: format ${format}, type ${type}.`, ErrorCodes.UnsupportedTextureError);\r\n }\r\n }\r\n\r\n private _getNativeAlphaMode(mode: number): number {\r\n switch (mode) {\r\n case Constants.ALPHA_DISABLE:\r\n return _native.Engine.ALPHA_DISABLE;\r\n case Constants.ALPHA_ADD:\r\n return _native.Engine.ALPHA_ADD;\r\n case Constants.ALPHA_COMBINE:\r\n return _native.Engine.ALPHA_COMBINE;\r\n case Constants.ALPHA_SUBTRACT:\r\n return _native.Engine.ALPHA_SUBTRACT;\r\n case Constants.ALPHA_MULTIPLY:\r\n return _native.Engine.ALPHA_MULTIPLY;\r\n case Constants.ALPHA_MAXIMIZED:\r\n return _native.Engine.ALPHA_MAXIMIZED;\r\n case Constants.ALPHA_ONEONE:\r\n return _native.Engine.ALPHA_ONEONE;\r\n case Constants.ALPHA_PREMULTIPLIED:\r\n return _native.Engine.ALPHA_PREMULTIPLIED;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n return _native.Engine.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n case Constants.ALPHA_INTERPOLATE:\r\n return _native.Engine.ALPHA_INTERPOLATE;\r\n case Constants.ALPHA_SCREENMODE:\r\n return _native.Engine.ALPHA_SCREENMODE;\r\n default:\r\n throw new Error(`Unsupported alpha mode: ${mode}.`);\r\n }\r\n }\r\n\r\n private _getNativeAttribType(type: number): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE:\r\n return _native.Engine.ATTRIB_TYPE_INT8;\r\n case VertexBuffer.UNSIGNED_BYTE:\r\n return _native.Engine.ATTRIB_TYPE_UINT8;\r\n case VertexBuffer.SHORT:\r\n return _native.Engine.ATTRIB_TYPE_INT16;\r\n case VertexBuffer.UNSIGNED_SHORT:\r\n return _native.Engine.ATTRIB_TYPE_UINT16;\r\n case VertexBuffer.FLOAT:\r\n return _native.Engine.ATTRIB_TYPE_FLOAT;\r\n default:\r\n throw new Error(`Unsupported attribute type: ${type}.`);\r\n }\r\n }\r\n\r\n public getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n // TODO\r\n const result = { ascent: 0, height: 0, descent: 0 };\r\n return result;\r\n }\r\n}\r\n"]}