@babylonjs/core 8.45.4 → 8.45.5
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.
- package/AudioV2/webAudio/components/webAudioParameterComponent.js +5 -1
- package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.loadFile.d.ts +11 -0
- package/Engines/AbstractEngine/abstractEngine.loadFile.js +12 -0
- package/Engines/AbstractEngine/abstractEngine.loadFile.js.map +1 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.d.ts +1 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.js +4 -0
- package/Engines/AbstractEngine/abstractEngine.textureLoaders.js.map +1 -0
- package/Engines/AbstractEngine/index.d.ts +2 -0
- package/Engines/AbstractEngine/index.js +2 -0
- package/Engines/AbstractEngine/index.js.map +1 -1
- package/Engines/Native/Extensions/index.d.ts +1 -0
- package/Engines/Native/Extensions/index.js +2 -0
- package/Engines/Native/Extensions/index.js.map +1 -0
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.d.ts +27 -0
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.js +96 -0
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.js.map +1 -0
- package/Engines/Native/nativePipelineContext.d.ts +2 -2
- package/Engines/Native/nativePipelineContext.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +3 -3
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Native/validatedNativeDataStream.js +2 -2
- package/Engines/Native/validatedNativeDataStream.js.map +1 -1
- package/Engines/abstractEngine.d.ts +9 -0
- package/Engines/abstractEngine.js +13 -4
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +2 -6
- package/Engines/engine.js +2 -13
- package/Engines/engine.js.map +1 -1
- package/Engines/index.d.ts +1 -0
- package/Engines/index.js +1 -0
- package/Engines/index.js.map +1 -1
- package/Engines/nativeEngine.d.ts +19 -536
- package/Engines/nativeEngine.js +27 -2127
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +2 -0
- package/Engines/nullEngine.js +2 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinNativeEngine.d.ts +537 -0
- package/Engines/thinNativeEngine.js +2033 -0
- package/Engines/thinNativeEngine.js.map +1 -0
- package/Engines/webgpuEngine.d.ts +2 -0
- package/Engines/webgpuEngine.js +2 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Misc/tools.d.ts +3 -1
- package/Misc/tools.js +76 -59
- package/Misc/tools.js.map +1 -1
- package/Particles/Node/Blocks/index.d.ts +2 -0
- package/Particles/Node/Blocks/index.js +2 -0
- package/Particles/Node/Blocks/index.js.map +1 -1
- package/Particles/Node/Blocks/particleClampBlock.d.ts +42 -0
- package/Particles/Node/Blocks/particleClampBlock.js +114 -0
- package/Particles/Node/Blocks/particleClampBlock.js.map +1 -0
- package/XR/native/nativeXRFrame.js +1 -1
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/package.json +1 -1
package/Engines/engine.d.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import type { Nullable } from "../types.js";
|
|
3
3
|
import type { Scene } from "../scene.js";
|
|
4
4
|
import { InternalTexture } from "../Materials/Textures/internalTexture.js";
|
|
5
|
-
import type { IOfflineProvider } from "../Offline/IOfflineProvider.js";
|
|
6
5
|
import type { ILoadingScreen } from "../Loading/loadingScreen.js";
|
|
7
6
|
import type { WebGLPipelineContext } from "./WebGL/webGLPipelineContext.js";
|
|
8
7
|
import type { IPipelineContext } from "./IPipelineContext.js";
|
|
@@ -29,6 +28,8 @@ import "./AbstractEngine/abstractEngine.states.js";
|
|
|
29
28
|
import "./AbstractEngine/abstractEngine.stencil.js";
|
|
30
29
|
import "./AbstractEngine/abstractEngine.renderPass.js";
|
|
31
30
|
import "./AbstractEngine/abstractEngine.texture.js";
|
|
31
|
+
import "./AbstractEngine/abstractEngine.loadFile.js";
|
|
32
|
+
import "./AbstractEngine/abstractEngine.textureLoaders.js";
|
|
32
33
|
import { AbstractEngine } from "./abstractEngine.js";
|
|
33
34
|
/**
|
|
34
35
|
* The engine class is responsible for interfacing with all lower-level APIs such as WebGL and Audio
|
|
@@ -361,11 +362,6 @@ export declare class Engine extends ThinEngine {
|
|
|
361
362
|
* Disable previously set scissor test rectangle
|
|
362
363
|
*/
|
|
363
364
|
disableScissor(): void;
|
|
364
|
-
/**
|
|
365
|
-
* @internal
|
|
366
|
-
*/
|
|
367
|
-
_loadFileAsync(url: string, offlineProvider?: IOfflineProvider, useArrayBuffer?: false): Promise<string>;
|
|
368
|
-
_loadFileAsync(url: string, offlineProvider?: IOfflineProvider, useArrayBuffer?: true): Promise<ArrayBuffer>;
|
|
369
365
|
/**
|
|
370
366
|
* Gets the source code of the vertex shader associated with a specific webGL program
|
|
371
367
|
* @param program defines the program to use
|
package/Engines/engine.js
CHANGED
|
@@ -22,6 +22,8 @@ import "./AbstractEngine/abstractEngine.states.js";
|
|
|
22
22
|
import "./AbstractEngine/abstractEngine.stencil.js";
|
|
23
23
|
import "./AbstractEngine/abstractEngine.renderPass.js";
|
|
24
24
|
import "./AbstractEngine/abstractEngine.texture.js";
|
|
25
|
+
import "./AbstractEngine/abstractEngine.loadFile.js";
|
|
26
|
+
import "./AbstractEngine/abstractEngine.textureLoaders.js";
|
|
25
27
|
import { AbstractEngine } from "./abstractEngine.js";
|
|
26
28
|
import { CreateImageBitmapFromSource, ExitFullscreen, ExitPointerlock, GetFontOffset, RequestFullscreen, RequestPointerlock, ResizeImageBitmap, _CommonDispose, _CommonInit, } from "./engine.common.js";
|
|
27
29
|
import { PerfCounter } from "../Misc/perfCounter.js";
|
|
@@ -245,19 +247,6 @@ export class Engine extends ThinEngine {
|
|
|
245
247
|
const gl = this._gl;
|
|
246
248
|
gl.disable(gl.SCISSOR_TEST);
|
|
247
249
|
}
|
|
248
|
-
/**
|
|
249
|
-
* @internal
|
|
250
|
-
*/
|
|
251
|
-
async _loadFileAsync(url, offlineProvider, useArrayBuffer) {
|
|
252
|
-
return await new Promise((resolve, reject) => {
|
|
253
|
-
this._loadFile(url, (data) => {
|
|
254
|
-
resolve(data);
|
|
255
|
-
}, undefined, offlineProvider, useArrayBuffer, (request, exception) => {
|
|
256
|
-
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
257
|
-
reject(exception);
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
250
|
/**
|
|
262
251
|
* Gets the source code of the vertex shader associated with a specific webGL program
|
|
263
252
|
* @param program defines the program to use
|
package/Engines/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/engine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { IOfflineProvider } from \"../Offline/IOfflineProvider\";\r\nimport type { ILoadingScreen } from \"../Loading/loadingScreen\";\r\nimport { EngineStore } from \"./engineStore\";\r\nimport type { WebGLPipelineContext } from \"./WebGL/webGLPipelineContext\";\r\nimport type { IPipelineContext } from \"./IPipelineContext\";\r\nimport type { ICustomAnimationFrameRequester } from \"../Misc/customAnimationFrameRequester\";\r\nimport type { EngineOptions } from \"./thinEngine\";\r\nimport { ThinEngine } from \"./thinEngine\";\r\nimport { Constants } from \"./constants\";\r\nimport type { IViewportLike, IColor4Like } from \"../Maths/math.like\";\r\nimport { PerformanceMonitor } from \"../Misc/performanceMonitor\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { WebGLDataBuffer } from \"../Meshes/WebGL/webGLDataBuffer\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { RenderTargetWrapper } from \"./renderTargetWrapper\";\r\nimport { WebGLHardwareTexture } from \"./WebGL/webGLHardwareTexture\";\r\n\r\nimport \"./Extensions/engine.alpha\";\r\nimport \"./Extensions/engine.rawTexture\";\r\nimport \"./Extensions/engine.readTexture\";\r\nimport \"./Extensions/engine.dynamicBuffer\";\r\nimport \"./Extensions/engine.cubeTexture\";\r\nimport \"./Extensions/engine.renderTarget\";\r\nimport \"./Extensions/engine.renderTargetTexture\";\r\nimport \"./Extensions/engine.renderTargetCube\";\r\nimport \"./Extensions/engine.prefilteredCubeTexture\";\r\nimport \"./Extensions/engine.uniformBuffer\";\r\nimport \"./AbstractEngine/abstractEngine.loadingScreen\";\r\nimport \"./AbstractEngine/abstractEngine.dom\";\r\nimport \"./AbstractEngine/abstractEngine.states\";\r\nimport \"./AbstractEngine/abstractEngine.stencil\";\r\nimport \"./AbstractEngine/abstractEngine.renderPass\";\r\nimport \"./AbstractEngine/abstractEngine.texture\";\r\n\r\nimport type { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { AbstractEngine } from \"./abstractEngine\";\r\nimport {\r\n CreateImageBitmapFromSource,\r\n ExitFullscreen,\r\n ExitPointerlock,\r\n GetFontOffset,\r\n RequestFullscreen,\r\n RequestPointerlock,\r\n ResizeImageBitmap,\r\n _CommonDispose,\r\n _CommonInit,\r\n} from \"./engine.common\";\r\nimport { PerfCounter } from \"../Misc/perfCounter\";\r\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\r\n\r\n/**\r\n * The engine class is responsible for interfacing with all lower-level APIs such as WebGL and Audio\r\n */\r\nexport class Engine extends ThinEngine {\r\n // Const statics\r\n\r\n /** Defines that alpha blending is disabled */\r\n public static readonly ALPHA_DISABLE = Constants.ALPHA_DISABLE;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + DEST */\r\n public static readonly ALPHA_ADD = Constants.ALPHA_ADD;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_COMBINE = Constants.ALPHA_COMBINE;\r\n /** Defines that alpha blending to DEST - SRC * DEST */\r\n public static readonly ALPHA_SUBTRACT = Constants.ALPHA_SUBTRACT;\r\n /** Defines that alpha blending to SRC * DEST */\r\n public static readonly ALPHA_MULTIPLY = Constants.ALPHA_MULTIPLY;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC) * DEST */\r\n public static readonly ALPHA_MAXIMIZED = Constants.ALPHA_MAXIMIZED;\r\n /** Defines that alpha blending to SRC + DEST */\r\n public static readonly ALPHA_ONEONE = Constants.ALPHA_ONEONE;\r\n /** Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_PREMULTIPLIED = Constants.ALPHA_PREMULTIPLIED;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST\r\n * Alpha will be set to (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_PREMULTIPLIED_PORTERDUFF = Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n /** Defines that alpha blending to CST * SRC + (1 - CST) * DEST */\r\n public static readonly ALPHA_INTERPOLATE = Constants.ALPHA_INTERPOLATE;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC) * DEST\r\n * Alpha will be set to SRC ALPHA + (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_SCREENMODE = Constants.ALPHA_SCREENMODE;\r\n\r\n /** Defines that the resource is not delayed*/\r\n public static readonly DELAYLOADSTATE_NONE = Constants.DELAYLOADSTATE_NONE;\r\n /** Defines that the resource was successfully delay loaded */\r\n public static readonly DELAYLOADSTATE_LOADED = Constants.DELAYLOADSTATE_LOADED;\r\n /** Defines that the resource is currently delay loading */\r\n public static readonly DELAYLOADSTATE_LOADING = Constants.DELAYLOADSTATE_LOADING;\r\n /** Defines that the resource is delayed and has not started loading */\r\n public static readonly DELAYLOADSTATE_NOTLOADED = Constants.DELAYLOADSTATE_NOTLOADED;\r\n\r\n // Depht or Stencil test Constants.\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn */\r\n public static readonly NEVER = Constants.NEVER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value */\r\n public static readonly LESS = Constants.LESS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value */\r\n public static readonly EQUAL = Constants.EQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value */\r\n public static readonly LEQUAL = Constants.LEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value */\r\n public static readonly GREATER = Constants.GREATER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value */\r\n public static readonly GEQUAL = Constants.GEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value */\r\n public static readonly NOTEQUAL = Constants.NOTEQUAL;\r\n\r\n // Stencil Actions Constants.\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented */\r\n public static readonly INCR = Constants.INCR;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented */\r\n public static readonly DECR = Constants.DECR;\r\n /** Passed to stencilOperation to specify that stencil value must be inverted */\r\n public static readonly INVERT = Constants.INVERT;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented with wrapping */\r\n public static readonly INCR_WRAP = Constants.INCR_WRAP;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented with wrapping */\r\n public static readonly DECR_WRAP = Constants.DECR_WRAP;\r\n\r\n /** Texture is not repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_CLAMP_ADDRESSMODE = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n /** Texture is repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_WRAP_ADDRESSMODE = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n /** Texture is repeating and mirrored */\r\n public static readonly TEXTURE_MIRROR_ADDRESSMODE = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n\r\n /** ALPHA */\r\n public static readonly TEXTUREFORMAT_ALPHA = Constants.TEXTUREFORMAT_ALPHA;\r\n /** LUMINANCE */\r\n public static readonly TEXTUREFORMAT_LUMINANCE = Constants.TEXTUREFORMAT_LUMINANCE;\r\n /** LUMINANCE_ALPHA */\r\n public static readonly TEXTUREFORMAT_LUMINANCE_ALPHA = Constants.TEXTUREFORMAT_LUMINANCE_ALPHA;\r\n /** RGB */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB = Constants.TEXTUREFORMAT_RGB;\r\n /** RGBA */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA = Constants.TEXTUREFORMAT_RGBA;\r\n /** RED */\r\n public static readonly TEXTUREFORMAT_RED = Constants.TEXTUREFORMAT_RED;\r\n /** RED (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R = Constants.TEXTUREFORMAT_R;\r\n /** RED unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_UNORM = Constants.TEXTUREFORMAT_R16_UNORM;\r\n /** RG unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_UNORM = Constants.TEXTUREFORMAT_RG16_UNORM;\r\n /** RGB unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_UNORM = Constants.TEXTUREFORMAT_RGB16_UNORM;\r\n /** RGBA unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_UNORM = Constants.TEXTUREFORMAT_RGBA16_UNORM;\r\n /** RED signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_SNORM = Constants.TEXTUREFORMAT_R16_SNORM;\r\n /** RG signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_SNORM = Constants.TEXTUREFORMAT_RG16_SNORM;\r\n /** RGB signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_SNORM = Constants.TEXTUREFORMAT_RGB16_SNORM;\r\n /** RGBA signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_SNORM = Constants.TEXTUREFORMAT_RGBA16_SNORM;\r\n /** RG */\r\n public static readonly TEXTUREFORMAT_RG = Constants.TEXTUREFORMAT_RG;\r\n /** RED_INTEGER */\r\n public static readonly TEXTUREFORMAT_RED_INTEGER = Constants.TEXTUREFORMAT_RED_INTEGER;\r\n /** RED_INTEGER (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R_INTEGER = Constants.TEXTUREFORMAT_R_INTEGER;\r\n /** RG_INTEGER */\r\n public static readonly TEXTUREFORMAT_RG_INTEGER = Constants.TEXTUREFORMAT_RG_INTEGER;\r\n /** RGB_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB_INTEGER = Constants.TEXTUREFORMAT_RGB_INTEGER;\r\n /** RGBA_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA_INTEGER = Constants.TEXTUREFORMAT_RGBA_INTEGER;\r\n\r\n /** UNSIGNED_BYTE */\r\n public static readonly TEXTURETYPE_UNSIGNED_BYTE = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n /** @deprecated use more explicit TEXTURETYPE_UNSIGNED_BYTE instead. Use TEXTURETYPE_UNSIGNED_INTEGER for 32bits values.*/\r\n public static readonly TEXTURETYPE_UNSIGNED_INT = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n /** FLOAT */\r\n public static readonly TEXTURETYPE_FLOAT = Constants.TEXTURETYPE_FLOAT;\r\n /** HALF_FLOAT */\r\n public static readonly TEXTURETYPE_HALF_FLOAT = Constants.TEXTURETYPE_HALF_FLOAT;\r\n /** BYTE */\r\n public static readonly TEXTURETYPE_BYTE = Constants.TEXTURETYPE_BYTE;\r\n /** SHORT */\r\n public static readonly TEXTURETYPE_SHORT = Constants.TEXTURETYPE_SHORT;\r\n /** UNSIGNED_SHORT */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT = Constants.TEXTURETYPE_UNSIGNED_SHORT;\r\n /** INT */\r\n public static readonly TEXTURETYPE_INT = Constants.TEXTURETYPE_INT;\r\n /** UNSIGNED_INT */\r\n public static readonly TEXTURETYPE_UNSIGNED_INTEGER = Constants.TEXTURETYPE_UNSIGNED_INTEGER;\r\n /** UNSIGNED_SHORT_4_4_4_4 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 = Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4;\r\n /** UNSIGNED_SHORT_5_5_5_1 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1;\r\n /** UNSIGNED_SHORT_5_6_5 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_6_5 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n /** UNSIGNED_INT_2_10_10_10_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV = Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV;\r\n /** UNSIGNED_INT_24_8 */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_24_8 = Constants.TEXTURETYPE_UNSIGNED_INT_24_8;\r\n /** UNSIGNED_INT_10F_11F_11F_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV = Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n /** UNSIGNED_INT_5_9_9_9_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV = Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV;\r\n /** FLOAT_32_UNSIGNED_INT_24_8_REV */\r\n public static readonly TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV = Constants.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV;\r\n\r\n /** nearest is mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_SAMPLINGMODE = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_BILINEAR_SAMPLINGMODE = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_TRILINEAR_SAMPLINGMODE = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n /** nearest is mag = nearest and min = nearest and mip = linear */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR = Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST = Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR = Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST = Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST = Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = linear */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR = Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = linear and mip = none */\r\n public static readonly TEXTURE_NEAREST_LINEAR = Constants.TEXTURE_NEAREST_LINEAR;\r\n /** mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_NEAREST = Constants.TEXTURE_NEAREST_NEAREST;\r\n /** mag = linear and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST = Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST;\r\n /** mag = linear and min = nearest and mip = linear */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR = Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR;\r\n /** mag = linear and min = linear and mip = none */\r\n public static readonly TEXTURE_LINEAR_LINEAR = Constants.TEXTURE_LINEAR_LINEAR;\r\n /** mag = linear and min = nearest and mip = none */\r\n public static readonly TEXTURE_LINEAR_NEAREST = Constants.TEXTURE_LINEAR_NEAREST;\r\n\r\n /** Explicit coordinates mode */\r\n public static readonly TEXTURE_EXPLICIT_MODE = Constants.TEXTURE_EXPLICIT_MODE;\r\n /** Spherical coordinates mode */\r\n public static readonly TEXTURE_SPHERICAL_MODE = Constants.TEXTURE_SPHERICAL_MODE;\r\n /** Planar coordinates mode */\r\n public static readonly TEXTURE_PLANAR_MODE = Constants.TEXTURE_PLANAR_MODE;\r\n /** Cubic coordinates mode */\r\n public static readonly TEXTURE_CUBIC_MODE = Constants.TEXTURE_CUBIC_MODE;\r\n /** Projection coordinates mode */\r\n public static readonly TEXTURE_PROJECTION_MODE = Constants.TEXTURE_PROJECTION_MODE;\r\n /** Skybox coordinates mode */\r\n public static readonly TEXTURE_SKYBOX_MODE = Constants.TEXTURE_SKYBOX_MODE;\r\n /** Inverse Cubic coordinates mode */\r\n public static readonly TEXTURE_INVCUBIC_MODE = Constants.TEXTURE_INVCUBIC_MODE;\r\n /** Equirectangular coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_EQUIRECTANGULAR_MODE = Constants.TEXTURE_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed Mirrored coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE;\r\n\r\n // Texture rescaling mode\r\n /** Defines that texture rescaling will use a floor to find the closer power of 2 size */\r\n public static readonly SCALEMODE_FLOOR = Constants.SCALEMODE_FLOOR;\r\n /** Defines that texture rescaling will look for the nearest power of 2 size */\r\n public static readonly SCALEMODE_NEAREST = Constants.SCALEMODE_NEAREST;\r\n /** Defines that texture rescaling will use a ceil to find the closer power of 2 size */\r\n public static readonly SCALEMODE_CEILING = Constants.SCALEMODE_CEILING;\r\n\r\n /**\r\n * Returns the current npm package of the sdk\r\n */\r\n // Not mixed with Version for tooling purpose.\r\n public static override get NpmPackage(): string {\r\n return AbstractEngine.NpmPackage;\r\n }\r\n\r\n /**\r\n * Returns the current version of the framework\r\n */\r\n public static override get Version(): string {\r\n return AbstractEngine.Version;\r\n }\r\n\r\n /** Gets the list of created engines */\r\n public static get Instances(): AbstractEngine[] {\r\n return EngineStore.Instances;\r\n }\r\n\r\n /**\r\n * Gets the latest created engine\r\n */\r\n public static get LastCreatedEngine(): Nullable<AbstractEngine> {\r\n return EngineStore.LastCreatedEngine;\r\n }\r\n\r\n /**\r\n * Gets the latest created scene\r\n */\r\n public static get LastCreatedScene(): Nullable<Scene> {\r\n return EngineStore.LastCreatedScene;\r\n }\r\n\r\n /** @internal */\r\n\r\n // eslint-disable-next-line jsdoc/require-returns-check\r\n /**\r\n * Method called to create the default loading screen.\r\n * This can be overridden in your own app.\r\n * @param canvas The rendering canvas element\r\n * @returns The loading screen\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override DefaultLoadingScreenFactory(canvas: HTMLCanvasElement): ILoadingScreen {\r\n return AbstractEngine.DefaultLoadingScreenFactory(canvas);\r\n }\r\n\r\n // Members\r\n\r\n /**\r\n * If set, will be used to request the next animation frame for the render loop\r\n */\r\n public customAnimationFrameRequester: Nullable<ICustomAnimationFrameRequester> = null;\r\n\r\n private _rescalePostProcess: Nullable<PostProcess>;\r\n\r\n protected override get _supportsHardwareTextureRescaling() {\r\n return !!Engine._RescalePostProcessFactory;\r\n }\r\n\r\n private _measureFps(): void {\r\n this._performanceMonitor.sampleFrame();\r\n this._fps = this._performanceMonitor.averageFPS;\r\n this._deltaTime = this._performanceMonitor.instantaneousFrameTime || 0;\r\n }\r\n\r\n private _performanceMonitor = new PerformanceMonitor();\r\n /**\r\n * Gets the performance monitor attached to this engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#engineinstrumentation\r\n */\r\n public override get performanceMonitor(): PerformanceMonitor {\r\n return this._performanceMonitor;\r\n }\r\n\r\n // Events\r\n\r\n /**\r\n * Creates a new engine\r\n * @param canvasOrContext defines the canvas or WebGL context to use for rendering. If you provide a WebGL context, Babylon.js will not hook events on the canvas (like pointers, keyboards, etc...) so no event observables will be available. This is mostly used when Babylon.js is used as a plugin on a system which already used the WebGL context\r\n * @param antialias defines enable antialiasing (default: false)\r\n * @param options defines further options to be sent to the getContext() function\r\n * @param adaptToDeviceRatio defines whether to adapt to the device's viewport characteristics (default: false)\r\n */\r\n constructor(\r\n canvasOrContext: Nullable<HTMLCanvasElement | OffscreenCanvas | WebGLRenderingContext | WebGL2RenderingContext>,\r\n antialias?: boolean,\r\n options?: EngineOptions,\r\n adaptToDeviceRatio: boolean = false\r\n ) {\r\n super(canvasOrContext, antialias, options, adaptToDeviceRatio);\r\n\r\n this._drawCalls = new PerfCounter();\r\n\r\n if (!canvasOrContext) {\r\n return;\r\n }\r\n\r\n this._features.supportRenderPasses = true;\r\n\r\n options = this._creationOptions;\r\n }\r\n\r\n protected override _initGLContext(): void {\r\n super._initGLContext();\r\n\r\n this._rescalePostProcess = null;\r\n }\r\n\r\n /**\r\n * Shared initialization across engines types.\r\n * @param canvas The canvas associated with this instance of the engine.\r\n */\r\n protected override _sharedInit(canvas: HTMLCanvasElement) {\r\n super._sharedInit(canvas);\r\n\r\n _CommonInit(this, canvas, this._creationOptions);\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 override resizeImageBitmap(image: HTMLImageElement | ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n return ResizeImageBitmap(this, image, bufferWidth, bufferHeight);\r\n }\r\n\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 // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async _createImageBitmapFromSource(imageSource: string, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n return await CreateImageBitmapFromSource(this, imageSource, options);\r\n }\r\n\r\n /**\r\n * Toggle full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override switchFullscreen(requestPointerLock: boolean): void {\r\n if (this.isFullscreen) {\r\n this.exitFullscreen();\r\n } else {\r\n this.enterFullscreen(requestPointerLock);\r\n }\r\n }\r\n\r\n /**\r\n * Enters full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override enterFullscreen(requestPointerLock: boolean): void {\r\n if (!this.isFullscreen) {\r\n this._pointerLockRequested = requestPointerLock;\r\n if (this._renderingCanvas) {\r\n RequestFullscreen(this._renderingCanvas);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Exits full screen mode\r\n */\r\n public override exitFullscreen(): void {\r\n if (this.isFullscreen) {\r\n ExitFullscreen();\r\n }\r\n }\r\n\r\n /** States */\r\n\r\n /**\r\n * Sets a boolean indicating if the dithering state is enabled or disabled\r\n * @param value defines the dithering state\r\n */\r\n public setDitheringState(value: boolean): void {\r\n if (value) {\r\n this._gl.enable(this._gl.DITHER);\r\n } else {\r\n this._gl.disable(this._gl.DITHER);\r\n }\r\n }\r\n\r\n /**\r\n * Sets a boolean indicating if the rasterizer state is enabled or disabled\r\n * @param value defines the rasterizer state\r\n */\r\n public setRasterizerState(value: boolean): void {\r\n if (value) {\r\n this._gl.disable(this._gl.RASTERIZER_DISCARD);\r\n } else {\r\n this._gl.enable(this._gl.RASTERIZER_DISCARD);\r\n }\r\n }\r\n\r\n /**\r\n * Directly set the WebGL Viewport\r\n * @param x defines the x coordinate of the viewport (in screen space)\r\n * @param y defines the y coordinate of the viewport (in screen space)\r\n * @param width defines the width of the viewport (in screen space)\r\n * @param height defines the height of the viewport (in screen space)\r\n * @returns the current viewport Object (if any) that is being replaced by this call. You can restore this viewport later on to go back to the original state\r\n */\r\n public setDirectViewport(x: number, y: number, width: number, height: number): Nullable<IViewportLike> {\r\n const currentViewport = this._cachedViewport;\r\n this._cachedViewport = null;\r\n\r\n this._viewport(x, y, width, height);\r\n\r\n return currentViewport;\r\n }\r\n\r\n /**\r\n * Executes a scissor clear (ie. a clear on a specific portion of the screen)\r\n * @param x defines the x-coordinate of the bottom left corner of the clear rectangle\r\n * @param y defines the y-coordinate of the corner of the clear rectangle\r\n * @param width defines the width of the clear rectangle\r\n * @param height defines the height of the clear rectangle\r\n * @param clearColor defines the clear color\r\n */\r\n public scissorClear(x: number, y: number, width: number, height: number, clearColor: IColor4Like): void {\r\n this.enableScissor(x, y, width, height);\r\n this.clear(clearColor, true, true, true);\r\n this.disableScissor();\r\n }\r\n\r\n /**\r\n * Enable scissor test on a specific rectangle (ie. render will only be executed on a specific portion of the screen)\r\n * @param x defines the x-coordinate of the bottom left corner of the clear rectangle\r\n * @param y defines the y-coordinate of the corner of the clear rectangle\r\n * @param width defines the width of the clear rectangle\r\n * @param height defines the height of the clear rectangle\r\n */\r\n public enableScissor(x: number, y: number, width: number, height: number): void {\r\n const gl = this._gl;\r\n\r\n // Change state\r\n gl.enable(gl.SCISSOR_TEST);\r\n gl.scissor(x, y, width, height);\r\n }\r\n\r\n /**\r\n * Disable previously set scissor test rectangle\r\n */\r\n public disableScissor() {\r\n const gl = this._gl;\r\n\r\n gl.disable(gl.SCISSOR_TEST);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public async _loadFileAsync(url: string, offlineProvider?: IOfflineProvider, useArrayBuffer?: false): Promise<string>;\r\n public async _loadFileAsync(url: string, offlineProvider?: IOfflineProvider, useArrayBuffer?: true): Promise<ArrayBuffer>;\r\n\r\n /**\r\n * @internal\r\n */\r\n public async _loadFileAsync(url: string, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean): Promise<string | ArrayBuffer> {\r\n return await new Promise((resolve, reject) => {\r\n this._loadFile(\r\n url,\r\n (data) => {\r\n resolve(data);\r\n },\r\n undefined,\r\n offlineProvider,\r\n useArrayBuffer,\r\n (request, exception) => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(exception);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Gets the source code of the vertex shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the vertex shader associated with the program\r\n */\r\n public getVertexShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[0]);\r\n }\r\n\r\n /**\r\n * Gets the source code of the fragment shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the fragment shader associated with the program\r\n */\r\n public getFragmentShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[1]);\r\n }\r\n\r\n /**\r\n * sets the object from which width and height will be taken from when getting render width and height\r\n * Will fallback to the gl object\r\n * @param dimensions the framebuffer width and height that will be used.\r\n */\r\n public override set framebufferDimensionsObject(dimensions: Nullable<{ framebufferWidth: number; framebufferHeight: number }>) {\r\n this._framebufferDimensionsObject = dimensions;\r\n if (this._framebufferDimensionsObject) {\r\n this.onResizeObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n protected override _rebuildBuffers(): void {\r\n // Index / Vertex\r\n for (const scene of this.scenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n for (const scene of this._virtualScenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n super._rebuildBuffers();\r\n }\r\n\r\n /**\r\n * Get Font size information\r\n * @param font font name\r\n * @returns an object containing ascent, height and descent\r\n */\r\n public override getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n return GetFontOffset(font);\r\n }\r\n\r\n protected override _cancelFrame() {\r\n if (this.customAnimationFrameRequester) {\r\n if (this._frameHandler !== 0) {\r\n this._frameHandler = 0;\r\n const { cancelAnimationFrame } = this.customAnimationFrameRequester;\r\n if (cancelAnimationFrame) {\r\n cancelAnimationFrame(this.customAnimationFrameRequester.requestID);\r\n }\r\n }\r\n } else {\r\n super._cancelFrame();\r\n }\r\n }\r\n\r\n public override _renderLoop(timestamp?: number): void {\r\n this._processFrame(timestamp);\r\n\r\n // The first condition prevents queuing another frame if we no longer have active render loops (e.g., if\r\n // `stopRenderLoop` is called mid frame). The second condition prevents queuing another frame if one has\r\n // already been queued (e.g., if `stopRenderLoop` and `runRenderLoop` is called mid frame).\r\n if (this._activeRenderLoops.length > 0 && this._frameHandler === 0) {\r\n if (this.customAnimationFrameRequester) {\r\n this.customAnimationFrameRequester.requestID = this._queueNewFrame(\r\n this.customAnimationFrameRequester.renderFunction || this._boundRenderFunction,\r\n this.customAnimationFrameRequester\r\n );\r\n this._frameHandler = this.customAnimationFrameRequester.requestID;\r\n } else {\r\n this._frameHandler = this._queueNewFrame(this._boundRenderFunction, this.getHostWindow());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Enters Pointerlock mode\r\n */\r\n public enterPointerlock(): void {\r\n if (this._renderingCanvas) {\r\n RequestPointerlock(this._renderingCanvas);\r\n }\r\n }\r\n\r\n /**\r\n * Exits Pointerlock mode\r\n */\r\n public exitPointerlock(): void {\r\n ExitPointerlock();\r\n }\r\n\r\n /**\r\n * Begin a new frame\r\n */\r\n public override beginFrame(): void {\r\n this._measureFps();\r\n super.beginFrame();\r\n }\r\n\r\n public override _deletePipelineContext(pipelineContext: IPipelineContext): void {\r\n const webGLPipelineContext = pipelineContext as WebGLPipelineContext;\r\n if (webGLPipelineContext && webGLPipelineContext.program) {\r\n if (webGLPipelineContext.transformFeedback) {\r\n this.deleteTransformFeedback(webGLPipelineContext.transformFeedback);\r\n webGLPipelineContext.transformFeedback = null;\r\n }\r\n }\r\n super._deletePipelineContext(pipelineContext);\r\n }\r\n\r\n public override 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 ): WebGLProgram {\r\n context = context || this._gl;\r\n\r\n this.onBeforeShaderCompilationObservable.notifyObservers(this);\r\n\r\n const program = super.createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context, transformFeedbackVaryings);\r\n this.onAfterShaderCompilationObservable.notifyObservers(this);\r\n\r\n return program;\r\n }\r\n\r\n protected override _createShaderProgram(\r\n pipelineContext: WebGLPipelineContext,\r\n vertexShader: WebGLShader,\r\n fragmentShader: WebGLShader,\r\n context: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): WebGLProgram {\r\n const shaderProgram = context.createProgram();\r\n pipelineContext.program = shaderProgram;\r\n\r\n if (!shaderProgram) {\r\n throw new Error(\"Unable to create program\");\r\n }\r\n\r\n context.attachShader(shaderProgram, vertexShader);\r\n context.attachShader(shaderProgram, fragmentShader);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n const transformFeedback = this.createTransformFeedback();\r\n\r\n this.bindTransformFeedback(transformFeedback);\r\n this.setTranformFeedbackVaryings(shaderProgram, transformFeedbackVaryings);\r\n pipelineContext.transformFeedback = transformFeedback;\r\n }\r\n\r\n context.linkProgram(shaderProgram);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n this.bindTransformFeedback(null);\r\n }\r\n\r\n pipelineContext.context = context;\r\n pipelineContext.vertexShader = vertexShader;\r\n pipelineContext.fragmentShader = fragmentShader;\r\n\r\n if (!pipelineContext.isParallelCompiled) {\r\n this._finalizePipelineContext(pipelineContext);\r\n }\r\n\r\n return shaderProgram;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseTexture(texture: InternalTexture): void {\r\n super._releaseTexture(texture);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseRenderTargetWrapper(rtWrapper: RenderTargetWrapper): void {\r\n super._releaseRenderTargetWrapper(rtWrapper);\r\n\r\n // Set output texture of post process to null if the framebuffer has been released/disposed\r\n for (const scene of this.scenes) {\r\n for (const postProcess of scene.postProcesses) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n for (const camera of scene.cameras) {\r\n for (const postProcess of camera._postProcesses) {\r\n if (postProcess) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Rescales a texture\r\n * @param source input texture\r\n * @param destination destination texture\r\n * @param scene scene to use to render the resize\r\n * @param internalFormat format to use when resizing\r\n * @param onComplete callback to be called when resize has completed\r\n */\r\n public override _rescaleTexture(source: InternalTexture, destination: InternalTexture, scene: Nullable<any>, internalFormat: number, onComplete: () => void): void {\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MAG_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MIN_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_S, this._gl.CLAMP_TO_EDGE);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_T, this._gl.CLAMP_TO_EDGE);\r\n\r\n const rtt = this.createRenderTargetTexture(\r\n {\r\n width: destination.width,\r\n height: destination.height,\r\n },\r\n {\r\n generateMipMaps: false,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateStencilBuffer: false,\r\n }\r\n );\r\n\r\n if (!this._rescalePostProcess && Engine._RescalePostProcessFactory) {\r\n this._rescalePostProcess = Engine._RescalePostProcessFactory(this);\r\n }\r\n\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.externalTextureSamplerBinding = true;\r\n const onCompiled = () => {\r\n this._rescalePostProcess!.onApply = function (effect) {\r\n effect._bindTexture(\"textureSampler\", source);\r\n };\r\n\r\n let hostingScene: Scene = scene;\r\n\r\n if (!hostingScene) {\r\n hostingScene = this.scenes[this.scenes.length - 1];\r\n }\r\n hostingScene.postProcessManager.directRender([this._rescalePostProcess!], rtt, true);\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, destination, true);\r\n this._gl.copyTexImage2D(this._gl.TEXTURE_2D, 0, internalFormat, 0, 0, destination.width, destination.height, 0);\r\n\r\n this.unBindFramebuffer(rtt);\r\n rtt.dispose();\r\n\r\n if (onComplete) {\r\n onComplete();\r\n }\r\n };\r\n const effect = this._rescalePostProcess.getEffect();\r\n if (effect) {\r\n effect.executeWhenCompiled(onCompiled);\r\n } else {\r\n this._rescalePostProcess.onEffectCreatedObservable.addOnce((effect) => {\r\n effect.executeWhenCompiled(onCompiled);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Wraps an external web gl texture in a Babylon texture.\r\n * @param texture defines the external texture\r\n * @param hasMipMaps defines whether the external texture has mip maps (default: false)\r\n * @param samplingMode defines the sampling mode for the external texture (default: Constants.TEXTURE_TRILINEAR_SAMPLINGMODE)\r\n * @param width defines the width for the external texture (default: 0)\r\n * @param height defines the height for the external texture (default: 0)\r\n * @returns the babylon internal texture\r\n */\r\n public wrapWebGLTexture(\r\n texture: WebGLTexture,\r\n hasMipMaps: boolean = false,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n width: number = 0,\r\n height: number = 0\r\n ): InternalTexture {\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.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isReady = true;\r\n internalTexture.useMipMaps = hasMipMaps;\r\n this.updateTextureSamplingMode(samplingMode, internalTexture);\r\n return internalTexture;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement | ImageBitmap, faceIndex: number = 0, lod: number = 0) {\r\n const gl = this._gl;\r\n\r\n const textureType = this._getWebGLTextureType(texture.type);\r\n const format = this._getInternalFormat(texture.format);\r\n const internalFormat = this._getRGBABufferInternalSizedFormat(texture.type, format);\r\n\r\n const bindTarget = texture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n this._bindTextureDirectly(bindTarget, texture, true);\r\n this._unpackFlipY(texture.invertY);\r\n\r\n let target: GLenum = gl.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex;\r\n }\r\n\r\n gl.texImage2D(target, lod, internalFormat, format, textureType, image);\r\n this._bindTextureDirectly(bindTarget, null, true);\r\n }\r\n\r\n /**\r\n * Updates a depth texture Comparison Mode and Function.\r\n * If the comparison Function is equal to 0, the mode will be set to none.\r\n * Otherwise, this only works in webgl 2 and requires a shadow sampler in the shader.\r\n * @param texture The texture to set the comparison function for\r\n * @param comparisonFunction The comparison function to set, 0 if no comparison required\r\n */\r\n public updateTextureComparisonFunction(texture: InternalTexture, comparisonFunction: number): void {\r\n if (this.webGLVersion === 1) {\r\n Logger.Error(\"WebGL 1 does not support texture comparison.\");\r\n return;\r\n }\r\n\r\n const gl = this._gl;\r\n\r\n if (texture.isCube) {\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null);\r\n } else {\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, null);\r\n }\r\n\r\n texture._comparisonFunction = comparisonFunction;\r\n }\r\n\r\n /**\r\n * Creates a webGL buffer to use with instantiation\r\n * @param capacity defines the size of the buffer\r\n * @returns the webGL buffer\r\n */\r\n public createInstancesBuffer(capacity: number): DataBuffer {\r\n const buffer = this._gl.createBuffer();\r\n\r\n if (!buffer) {\r\n throw new Error(\"Unable to create instance buffer\");\r\n }\r\n\r\n const result = new WebGLDataBuffer(buffer);\r\n result.capacity = capacity;\r\n\r\n this.bindArrayBuffer(result);\r\n this._gl.bufferData(this._gl.ARRAY_BUFFER, capacity, this._gl.DYNAMIC_DRAW);\r\n\r\n result.references = 1;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Delete a webGL buffer used with instantiation\r\n * @param buffer defines the webGL buffer to delete\r\n */\r\n public deleteInstancesBuffer(buffer: WebGLBuffer): void {\r\n this._gl.deleteBuffer(buffer);\r\n }\r\n\r\n private async _clientWaitAsync(sync: WebGLSync, flags = 0, intervalms = 10): Promise<void> {\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n return await new Promise((resolve, reject) => {\r\n _RetryWithInterval(\r\n () => {\r\n const res = gl.clientWaitSync(sync, flags, 0);\r\n if (res == gl.WAIT_FAILED) {\r\n throw new Error(\"clientWaitSync failed\");\r\n }\r\n if (res == gl.TIMEOUT_EXPIRED) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n resolve,\r\n reject,\r\n intervalms\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * This function might return null synchronously, so it is technically not async.\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public _readPixelsAsync(x: number, y: number, w: number, h: number, format: number, type: number, outputBuffer: ArrayBufferView): Nullable<Promise<ArrayBufferView>> {\r\n if (this._webGLVersion < 2) {\r\n throw new Error(\"_readPixelsAsync only work on WebGL2+\");\r\n }\r\n\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n const buf = gl.createBuffer();\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.bufferData(gl.PIXEL_PACK_BUFFER, outputBuffer.byteLength, gl.STREAM_READ);\r\n gl.readPixels(x, y, w, h, format, type, 0);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n\r\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n if (!sync) {\r\n return null;\r\n }\r\n\r\n gl.flush();\r\n\r\n // eslint-disable-next-line github/no-then\r\n return this._clientWaitAsync(sync, 0, 10).then(() => {\r\n gl.deleteSync(sync);\r\n\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, outputBuffer);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n gl.deleteBuffer(buf);\r\n\r\n return outputBuffer;\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.hideLoadingUI();\r\n\r\n // Rescale PP\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.dispose();\r\n }\r\n\r\n _CommonDispose(this, this._renderingCanvas);\r\n\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/engine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { ILoadingScreen } from \"../Loading/loadingScreen\";\r\nimport { EngineStore } from \"./engineStore\";\r\nimport type { WebGLPipelineContext } from \"./WebGL/webGLPipelineContext\";\r\nimport type { IPipelineContext } from \"./IPipelineContext\";\r\nimport type { ICustomAnimationFrameRequester } from \"../Misc/customAnimationFrameRequester\";\r\nimport type { EngineOptions } from \"./thinEngine\";\r\nimport { ThinEngine } from \"./thinEngine\";\r\nimport { Constants } from \"./constants\";\r\nimport type { IViewportLike, IColor4Like } from \"../Maths/math.like\";\r\nimport { PerformanceMonitor } from \"../Misc/performanceMonitor\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { WebGLDataBuffer } from \"../Meshes/WebGL/webGLDataBuffer\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { RenderTargetWrapper } from \"./renderTargetWrapper\";\r\nimport { WebGLHardwareTexture } from \"./WebGL/webGLHardwareTexture\";\r\n\r\nimport \"./Extensions/engine.alpha\";\r\nimport \"./Extensions/engine.rawTexture\";\r\nimport \"./Extensions/engine.readTexture\";\r\nimport \"./Extensions/engine.dynamicBuffer\";\r\nimport \"./Extensions/engine.cubeTexture\";\r\nimport \"./Extensions/engine.renderTarget\";\r\nimport \"./Extensions/engine.renderTargetTexture\";\r\nimport \"./Extensions/engine.renderTargetCube\";\r\nimport \"./Extensions/engine.prefilteredCubeTexture\";\r\nimport \"./Extensions/engine.uniformBuffer\";\r\nimport \"./AbstractEngine/abstractEngine.loadingScreen\";\r\nimport \"./AbstractEngine/abstractEngine.dom\";\r\nimport \"./AbstractEngine/abstractEngine.states\";\r\nimport \"./AbstractEngine/abstractEngine.stencil\";\r\nimport \"./AbstractEngine/abstractEngine.renderPass\";\r\nimport \"./AbstractEngine/abstractEngine.texture\";\r\nimport \"./AbstractEngine/abstractEngine.loadFile\";\r\nimport \"./AbstractEngine/abstractEngine.textureLoaders\";\r\n\r\nimport type { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { AbstractEngine } from \"./abstractEngine\";\r\nimport {\r\n CreateImageBitmapFromSource,\r\n ExitFullscreen,\r\n ExitPointerlock,\r\n GetFontOffset,\r\n RequestFullscreen,\r\n RequestPointerlock,\r\n ResizeImageBitmap,\r\n _CommonDispose,\r\n _CommonInit,\r\n} from \"./engine.common\";\r\nimport { PerfCounter } from \"../Misc/perfCounter\";\r\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\r\n\r\n/**\r\n * The engine class is responsible for interfacing with all lower-level APIs such as WebGL and Audio\r\n */\r\nexport class Engine extends ThinEngine {\r\n // Const statics\r\n\r\n /** Defines that alpha blending is disabled */\r\n public static readonly ALPHA_DISABLE = Constants.ALPHA_DISABLE;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + DEST */\r\n public static readonly ALPHA_ADD = Constants.ALPHA_ADD;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_COMBINE = Constants.ALPHA_COMBINE;\r\n /** Defines that alpha blending to DEST - SRC * DEST */\r\n public static readonly ALPHA_SUBTRACT = Constants.ALPHA_SUBTRACT;\r\n /** Defines that alpha blending to SRC * DEST */\r\n public static readonly ALPHA_MULTIPLY = Constants.ALPHA_MULTIPLY;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC) * DEST */\r\n public static readonly ALPHA_MAXIMIZED = Constants.ALPHA_MAXIMIZED;\r\n /** Defines that alpha blending to SRC + DEST */\r\n public static readonly ALPHA_ONEONE = Constants.ALPHA_ONEONE;\r\n /** Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_PREMULTIPLIED = Constants.ALPHA_PREMULTIPLIED;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST\r\n * Alpha will be set to (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_PREMULTIPLIED_PORTERDUFF = Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n /** Defines that alpha blending to CST * SRC + (1 - CST) * DEST */\r\n public static readonly ALPHA_INTERPOLATE = Constants.ALPHA_INTERPOLATE;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC) * DEST\r\n * Alpha will be set to SRC ALPHA + (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_SCREENMODE = Constants.ALPHA_SCREENMODE;\r\n\r\n /** Defines that the resource is not delayed*/\r\n public static readonly DELAYLOADSTATE_NONE = Constants.DELAYLOADSTATE_NONE;\r\n /** Defines that the resource was successfully delay loaded */\r\n public static readonly DELAYLOADSTATE_LOADED = Constants.DELAYLOADSTATE_LOADED;\r\n /** Defines that the resource is currently delay loading */\r\n public static readonly DELAYLOADSTATE_LOADING = Constants.DELAYLOADSTATE_LOADING;\r\n /** Defines that the resource is delayed and has not started loading */\r\n public static readonly DELAYLOADSTATE_NOTLOADED = Constants.DELAYLOADSTATE_NOTLOADED;\r\n\r\n // Depht or Stencil test Constants.\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn */\r\n public static readonly NEVER = Constants.NEVER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value */\r\n public static readonly LESS = Constants.LESS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value */\r\n public static readonly EQUAL = Constants.EQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value */\r\n public static readonly LEQUAL = Constants.LEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value */\r\n public static readonly GREATER = Constants.GREATER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value */\r\n public static readonly GEQUAL = Constants.GEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value */\r\n public static readonly NOTEQUAL = Constants.NOTEQUAL;\r\n\r\n // Stencil Actions Constants.\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented */\r\n public static readonly INCR = Constants.INCR;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented */\r\n public static readonly DECR = Constants.DECR;\r\n /** Passed to stencilOperation to specify that stencil value must be inverted */\r\n public static readonly INVERT = Constants.INVERT;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented with wrapping */\r\n public static readonly INCR_WRAP = Constants.INCR_WRAP;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented with wrapping */\r\n public static readonly DECR_WRAP = Constants.DECR_WRAP;\r\n\r\n /** Texture is not repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_CLAMP_ADDRESSMODE = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n /** Texture is repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_WRAP_ADDRESSMODE = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n /** Texture is repeating and mirrored */\r\n public static readonly TEXTURE_MIRROR_ADDRESSMODE = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n\r\n /** ALPHA */\r\n public static readonly TEXTUREFORMAT_ALPHA = Constants.TEXTUREFORMAT_ALPHA;\r\n /** LUMINANCE */\r\n public static readonly TEXTUREFORMAT_LUMINANCE = Constants.TEXTUREFORMAT_LUMINANCE;\r\n /** LUMINANCE_ALPHA */\r\n public static readonly TEXTUREFORMAT_LUMINANCE_ALPHA = Constants.TEXTUREFORMAT_LUMINANCE_ALPHA;\r\n /** RGB */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB = Constants.TEXTUREFORMAT_RGB;\r\n /** RGBA */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA = Constants.TEXTUREFORMAT_RGBA;\r\n /** RED */\r\n public static readonly TEXTUREFORMAT_RED = Constants.TEXTUREFORMAT_RED;\r\n /** RED (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R = Constants.TEXTUREFORMAT_R;\r\n /** RED unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_UNORM = Constants.TEXTUREFORMAT_R16_UNORM;\r\n /** RG unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_UNORM = Constants.TEXTUREFORMAT_RG16_UNORM;\r\n /** RGB unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_UNORM = Constants.TEXTUREFORMAT_RGB16_UNORM;\r\n /** RGBA unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_UNORM = Constants.TEXTUREFORMAT_RGBA16_UNORM;\r\n /** RED signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_SNORM = Constants.TEXTUREFORMAT_R16_SNORM;\r\n /** RG signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_SNORM = Constants.TEXTUREFORMAT_RG16_SNORM;\r\n /** RGB signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_SNORM = Constants.TEXTUREFORMAT_RGB16_SNORM;\r\n /** RGBA signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_SNORM = Constants.TEXTUREFORMAT_RGBA16_SNORM;\r\n /** RG */\r\n public static readonly TEXTUREFORMAT_RG = Constants.TEXTUREFORMAT_RG;\r\n /** RED_INTEGER */\r\n public static readonly TEXTUREFORMAT_RED_INTEGER = Constants.TEXTUREFORMAT_RED_INTEGER;\r\n /** RED_INTEGER (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R_INTEGER = Constants.TEXTUREFORMAT_R_INTEGER;\r\n /** RG_INTEGER */\r\n public static readonly TEXTUREFORMAT_RG_INTEGER = Constants.TEXTUREFORMAT_RG_INTEGER;\r\n /** RGB_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB_INTEGER = Constants.TEXTUREFORMAT_RGB_INTEGER;\r\n /** RGBA_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA_INTEGER = Constants.TEXTUREFORMAT_RGBA_INTEGER;\r\n\r\n /** UNSIGNED_BYTE */\r\n public static readonly TEXTURETYPE_UNSIGNED_BYTE = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n /** @deprecated use more explicit TEXTURETYPE_UNSIGNED_BYTE instead. Use TEXTURETYPE_UNSIGNED_INTEGER for 32bits values.*/\r\n public static readonly TEXTURETYPE_UNSIGNED_INT = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n /** FLOAT */\r\n public static readonly TEXTURETYPE_FLOAT = Constants.TEXTURETYPE_FLOAT;\r\n /** HALF_FLOAT */\r\n public static readonly TEXTURETYPE_HALF_FLOAT = Constants.TEXTURETYPE_HALF_FLOAT;\r\n /** BYTE */\r\n public static readonly TEXTURETYPE_BYTE = Constants.TEXTURETYPE_BYTE;\r\n /** SHORT */\r\n public static readonly TEXTURETYPE_SHORT = Constants.TEXTURETYPE_SHORT;\r\n /** UNSIGNED_SHORT */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT = Constants.TEXTURETYPE_UNSIGNED_SHORT;\r\n /** INT */\r\n public static readonly TEXTURETYPE_INT = Constants.TEXTURETYPE_INT;\r\n /** UNSIGNED_INT */\r\n public static readonly TEXTURETYPE_UNSIGNED_INTEGER = Constants.TEXTURETYPE_UNSIGNED_INTEGER;\r\n /** UNSIGNED_SHORT_4_4_4_4 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 = Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4;\r\n /** UNSIGNED_SHORT_5_5_5_1 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1;\r\n /** UNSIGNED_SHORT_5_6_5 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_6_5 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n /** UNSIGNED_INT_2_10_10_10_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV = Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV;\r\n /** UNSIGNED_INT_24_8 */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_24_8 = Constants.TEXTURETYPE_UNSIGNED_INT_24_8;\r\n /** UNSIGNED_INT_10F_11F_11F_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV = Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n /** UNSIGNED_INT_5_9_9_9_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV = Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV;\r\n /** FLOAT_32_UNSIGNED_INT_24_8_REV */\r\n public static readonly TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV = Constants.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV;\r\n\r\n /** nearest is mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_SAMPLINGMODE = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_BILINEAR_SAMPLINGMODE = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_TRILINEAR_SAMPLINGMODE = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n /** nearest is mag = nearest and min = nearest and mip = linear */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR = Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST = Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR = Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST = Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST = Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = linear */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR = Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = linear and mip = none */\r\n public static readonly TEXTURE_NEAREST_LINEAR = Constants.TEXTURE_NEAREST_LINEAR;\r\n /** mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_NEAREST = Constants.TEXTURE_NEAREST_NEAREST;\r\n /** mag = linear and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST = Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST;\r\n /** mag = linear and min = nearest and mip = linear */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR = Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR;\r\n /** mag = linear and min = linear and mip = none */\r\n public static readonly TEXTURE_LINEAR_LINEAR = Constants.TEXTURE_LINEAR_LINEAR;\r\n /** mag = linear and min = nearest and mip = none */\r\n public static readonly TEXTURE_LINEAR_NEAREST = Constants.TEXTURE_LINEAR_NEAREST;\r\n\r\n /** Explicit coordinates mode */\r\n public static readonly TEXTURE_EXPLICIT_MODE = Constants.TEXTURE_EXPLICIT_MODE;\r\n /** Spherical coordinates mode */\r\n public static readonly TEXTURE_SPHERICAL_MODE = Constants.TEXTURE_SPHERICAL_MODE;\r\n /** Planar coordinates mode */\r\n public static readonly TEXTURE_PLANAR_MODE = Constants.TEXTURE_PLANAR_MODE;\r\n /** Cubic coordinates mode */\r\n public static readonly TEXTURE_CUBIC_MODE = Constants.TEXTURE_CUBIC_MODE;\r\n /** Projection coordinates mode */\r\n public static readonly TEXTURE_PROJECTION_MODE = Constants.TEXTURE_PROJECTION_MODE;\r\n /** Skybox coordinates mode */\r\n public static readonly TEXTURE_SKYBOX_MODE = Constants.TEXTURE_SKYBOX_MODE;\r\n /** Inverse Cubic coordinates mode */\r\n public static readonly TEXTURE_INVCUBIC_MODE = Constants.TEXTURE_INVCUBIC_MODE;\r\n /** Equirectangular coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_EQUIRECTANGULAR_MODE = Constants.TEXTURE_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed Mirrored coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE;\r\n\r\n // Texture rescaling mode\r\n /** Defines that texture rescaling will use a floor to find the closer power of 2 size */\r\n public static readonly SCALEMODE_FLOOR = Constants.SCALEMODE_FLOOR;\r\n /** Defines that texture rescaling will look for the nearest power of 2 size */\r\n public static readonly SCALEMODE_NEAREST = Constants.SCALEMODE_NEAREST;\r\n /** Defines that texture rescaling will use a ceil to find the closer power of 2 size */\r\n public static readonly SCALEMODE_CEILING = Constants.SCALEMODE_CEILING;\r\n\r\n /**\r\n * Returns the current npm package of the sdk\r\n */\r\n // Not mixed with Version for tooling purpose.\r\n public static override get NpmPackage(): string {\r\n return AbstractEngine.NpmPackage;\r\n }\r\n\r\n /**\r\n * Returns the current version of the framework\r\n */\r\n public static override get Version(): string {\r\n return AbstractEngine.Version;\r\n }\r\n\r\n /** Gets the list of created engines */\r\n public static get Instances(): AbstractEngine[] {\r\n return EngineStore.Instances;\r\n }\r\n\r\n /**\r\n * Gets the latest created engine\r\n */\r\n public static get LastCreatedEngine(): Nullable<AbstractEngine> {\r\n return EngineStore.LastCreatedEngine;\r\n }\r\n\r\n /**\r\n * Gets the latest created scene\r\n */\r\n public static get LastCreatedScene(): Nullable<Scene> {\r\n return EngineStore.LastCreatedScene;\r\n }\r\n\r\n /** @internal */\r\n\r\n // eslint-disable-next-line jsdoc/require-returns-check\r\n /**\r\n * Method called to create the default loading screen.\r\n * This can be overridden in your own app.\r\n * @param canvas The rendering canvas element\r\n * @returns The loading screen\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override DefaultLoadingScreenFactory(canvas: HTMLCanvasElement): ILoadingScreen {\r\n return AbstractEngine.DefaultLoadingScreenFactory(canvas);\r\n }\r\n\r\n // Members\r\n\r\n /**\r\n * If set, will be used to request the next animation frame for the render loop\r\n */\r\n public customAnimationFrameRequester: Nullable<ICustomAnimationFrameRequester> = null;\r\n\r\n private _rescalePostProcess: Nullable<PostProcess>;\r\n\r\n protected override get _supportsHardwareTextureRescaling() {\r\n return !!Engine._RescalePostProcessFactory;\r\n }\r\n\r\n private _measureFps(): void {\r\n this._performanceMonitor.sampleFrame();\r\n this._fps = this._performanceMonitor.averageFPS;\r\n this._deltaTime = this._performanceMonitor.instantaneousFrameTime || 0;\r\n }\r\n\r\n private _performanceMonitor = new PerformanceMonitor();\r\n /**\r\n * Gets the performance monitor attached to this engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#engineinstrumentation\r\n */\r\n public override get performanceMonitor(): PerformanceMonitor {\r\n return this._performanceMonitor;\r\n }\r\n\r\n // Events\r\n\r\n /**\r\n * Creates a new engine\r\n * @param canvasOrContext defines the canvas or WebGL context to use for rendering. If you provide a WebGL context, Babylon.js will not hook events on the canvas (like pointers, keyboards, etc...) so no event observables will be available. This is mostly used when Babylon.js is used as a plugin on a system which already used the WebGL context\r\n * @param antialias defines enable antialiasing (default: false)\r\n * @param options defines further options to be sent to the getContext() function\r\n * @param adaptToDeviceRatio defines whether to adapt to the device's viewport characteristics (default: false)\r\n */\r\n constructor(\r\n canvasOrContext: Nullable<HTMLCanvasElement | OffscreenCanvas | WebGLRenderingContext | WebGL2RenderingContext>,\r\n antialias?: boolean,\r\n options?: EngineOptions,\r\n adaptToDeviceRatio: boolean = false\r\n ) {\r\n super(canvasOrContext, antialias, options, adaptToDeviceRatio);\r\n\r\n this._drawCalls = new PerfCounter();\r\n\r\n if (!canvasOrContext) {\r\n return;\r\n }\r\n\r\n this._features.supportRenderPasses = true;\r\n\r\n options = this._creationOptions;\r\n }\r\n\r\n protected override _initGLContext(): void {\r\n super._initGLContext();\r\n\r\n this._rescalePostProcess = null;\r\n }\r\n\r\n /**\r\n * Shared initialization across engines types.\r\n * @param canvas The canvas associated with this instance of the engine.\r\n */\r\n protected override _sharedInit(canvas: HTMLCanvasElement) {\r\n super._sharedInit(canvas);\r\n\r\n _CommonInit(this, canvas, this._creationOptions);\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 override resizeImageBitmap(image: HTMLImageElement | ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n return ResizeImageBitmap(this, image, bufferWidth, bufferHeight);\r\n }\r\n\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 // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async _createImageBitmapFromSource(imageSource: string, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n return await CreateImageBitmapFromSource(this, imageSource, options);\r\n }\r\n\r\n /**\r\n * Toggle full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override switchFullscreen(requestPointerLock: boolean): void {\r\n if (this.isFullscreen) {\r\n this.exitFullscreen();\r\n } else {\r\n this.enterFullscreen(requestPointerLock);\r\n }\r\n }\r\n\r\n /**\r\n * Enters full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override enterFullscreen(requestPointerLock: boolean): void {\r\n if (!this.isFullscreen) {\r\n this._pointerLockRequested = requestPointerLock;\r\n if (this._renderingCanvas) {\r\n RequestFullscreen(this._renderingCanvas);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Exits full screen mode\r\n */\r\n public override exitFullscreen(): void {\r\n if (this.isFullscreen) {\r\n ExitFullscreen();\r\n }\r\n }\r\n\r\n /** States */\r\n\r\n /**\r\n * Sets a boolean indicating if the dithering state is enabled or disabled\r\n * @param value defines the dithering state\r\n */\r\n public setDitheringState(value: boolean): void {\r\n if (value) {\r\n this._gl.enable(this._gl.DITHER);\r\n } else {\r\n this._gl.disable(this._gl.DITHER);\r\n }\r\n }\r\n\r\n /**\r\n * Sets a boolean indicating if the rasterizer state is enabled or disabled\r\n * @param value defines the rasterizer state\r\n */\r\n public setRasterizerState(value: boolean): void {\r\n if (value) {\r\n this._gl.disable(this._gl.RASTERIZER_DISCARD);\r\n } else {\r\n this._gl.enable(this._gl.RASTERIZER_DISCARD);\r\n }\r\n }\r\n\r\n /**\r\n * Directly set the WebGL Viewport\r\n * @param x defines the x coordinate of the viewport (in screen space)\r\n * @param y defines the y coordinate of the viewport (in screen space)\r\n * @param width defines the width of the viewport (in screen space)\r\n * @param height defines the height of the viewport (in screen space)\r\n * @returns the current viewport Object (if any) that is being replaced by this call. You can restore this viewport later on to go back to the original state\r\n */\r\n public setDirectViewport(x: number, y: number, width: number, height: number): Nullable<IViewportLike> {\r\n const currentViewport = this._cachedViewport;\r\n this._cachedViewport = null;\r\n\r\n this._viewport(x, y, width, height);\r\n\r\n return currentViewport;\r\n }\r\n\r\n /**\r\n * Executes a scissor clear (ie. a clear on a specific portion of the screen)\r\n * @param x defines the x-coordinate of the bottom left corner of the clear rectangle\r\n * @param y defines the y-coordinate of the corner of the clear rectangle\r\n * @param width defines the width of the clear rectangle\r\n * @param height defines the height of the clear rectangle\r\n * @param clearColor defines the clear color\r\n */\r\n public scissorClear(x: number, y: number, width: number, height: number, clearColor: IColor4Like): void {\r\n this.enableScissor(x, y, width, height);\r\n this.clear(clearColor, true, true, true);\r\n this.disableScissor();\r\n }\r\n\r\n /**\r\n * Enable scissor test on a specific rectangle (ie. render will only be executed on a specific portion of the screen)\r\n * @param x defines the x-coordinate of the bottom left corner of the clear rectangle\r\n * @param y defines the y-coordinate of the corner of the clear rectangle\r\n * @param width defines the width of the clear rectangle\r\n * @param height defines the height of the clear rectangle\r\n */\r\n public enableScissor(x: number, y: number, width: number, height: number): void {\r\n const gl = this._gl;\r\n\r\n // Change state\r\n gl.enable(gl.SCISSOR_TEST);\r\n gl.scissor(x, y, width, height);\r\n }\r\n\r\n /**\r\n * Disable previously set scissor test rectangle\r\n */\r\n public disableScissor() {\r\n const gl = this._gl;\r\n\r\n gl.disable(gl.SCISSOR_TEST);\r\n }\r\n\r\n /**\r\n * Gets the source code of the vertex shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the vertex shader associated with the program\r\n */\r\n public getVertexShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[0]);\r\n }\r\n\r\n /**\r\n * Gets the source code of the fragment shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the fragment shader associated with the program\r\n */\r\n public getFragmentShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[1]);\r\n }\r\n\r\n /**\r\n * sets the object from which width and height will be taken from when getting render width and height\r\n * Will fallback to the gl object\r\n * @param dimensions the framebuffer width and height that will be used.\r\n */\r\n public override set framebufferDimensionsObject(dimensions: Nullable<{ framebufferWidth: number; framebufferHeight: number }>) {\r\n this._framebufferDimensionsObject = dimensions;\r\n if (this._framebufferDimensionsObject) {\r\n this.onResizeObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n protected override _rebuildBuffers(): void {\r\n // Index / Vertex\r\n for (const scene of this.scenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n for (const scene of this._virtualScenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n super._rebuildBuffers();\r\n }\r\n\r\n /**\r\n * Get Font size information\r\n * @param font font name\r\n * @returns an object containing ascent, height and descent\r\n */\r\n public override getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n return GetFontOffset(font);\r\n }\r\n\r\n protected override _cancelFrame() {\r\n if (this.customAnimationFrameRequester) {\r\n if (this._frameHandler !== 0) {\r\n this._frameHandler = 0;\r\n const { cancelAnimationFrame } = this.customAnimationFrameRequester;\r\n if (cancelAnimationFrame) {\r\n cancelAnimationFrame(this.customAnimationFrameRequester.requestID);\r\n }\r\n }\r\n } else {\r\n super._cancelFrame();\r\n }\r\n }\r\n\r\n public override _renderLoop(timestamp?: number): void {\r\n this._processFrame(timestamp);\r\n\r\n // The first condition prevents queuing another frame if we no longer have active render loops (e.g., if\r\n // `stopRenderLoop` is called mid frame). The second condition prevents queuing another frame if one has\r\n // already been queued (e.g., if `stopRenderLoop` and `runRenderLoop` is called mid frame).\r\n if (this._activeRenderLoops.length > 0 && this._frameHandler === 0) {\r\n if (this.customAnimationFrameRequester) {\r\n this.customAnimationFrameRequester.requestID = this._queueNewFrame(\r\n this.customAnimationFrameRequester.renderFunction || this._boundRenderFunction,\r\n this.customAnimationFrameRequester\r\n );\r\n this._frameHandler = this.customAnimationFrameRequester.requestID;\r\n } else {\r\n this._frameHandler = this._queueNewFrame(this._boundRenderFunction, this.getHostWindow());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Enters Pointerlock mode\r\n */\r\n public enterPointerlock(): void {\r\n if (this._renderingCanvas) {\r\n RequestPointerlock(this._renderingCanvas);\r\n }\r\n }\r\n\r\n /**\r\n * Exits Pointerlock mode\r\n */\r\n public exitPointerlock(): void {\r\n ExitPointerlock();\r\n }\r\n\r\n /**\r\n * Begin a new frame\r\n */\r\n public override beginFrame(): void {\r\n this._measureFps();\r\n super.beginFrame();\r\n }\r\n\r\n public override _deletePipelineContext(pipelineContext: IPipelineContext): void {\r\n const webGLPipelineContext = pipelineContext as WebGLPipelineContext;\r\n if (webGLPipelineContext && webGLPipelineContext.program) {\r\n if (webGLPipelineContext.transformFeedback) {\r\n this.deleteTransformFeedback(webGLPipelineContext.transformFeedback);\r\n webGLPipelineContext.transformFeedback = null;\r\n }\r\n }\r\n super._deletePipelineContext(pipelineContext);\r\n }\r\n\r\n public override 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 ): WebGLProgram {\r\n context = context || this._gl;\r\n\r\n this.onBeforeShaderCompilationObservable.notifyObservers(this);\r\n\r\n const program = super.createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context, transformFeedbackVaryings);\r\n this.onAfterShaderCompilationObservable.notifyObservers(this);\r\n\r\n return program;\r\n }\r\n\r\n protected override _createShaderProgram(\r\n pipelineContext: WebGLPipelineContext,\r\n vertexShader: WebGLShader,\r\n fragmentShader: WebGLShader,\r\n context: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): WebGLProgram {\r\n const shaderProgram = context.createProgram();\r\n pipelineContext.program = shaderProgram;\r\n\r\n if (!shaderProgram) {\r\n throw new Error(\"Unable to create program\");\r\n }\r\n\r\n context.attachShader(shaderProgram, vertexShader);\r\n context.attachShader(shaderProgram, fragmentShader);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n const transformFeedback = this.createTransformFeedback();\r\n\r\n this.bindTransformFeedback(transformFeedback);\r\n this.setTranformFeedbackVaryings(shaderProgram, transformFeedbackVaryings);\r\n pipelineContext.transformFeedback = transformFeedback;\r\n }\r\n\r\n context.linkProgram(shaderProgram);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n this.bindTransformFeedback(null);\r\n }\r\n\r\n pipelineContext.context = context;\r\n pipelineContext.vertexShader = vertexShader;\r\n pipelineContext.fragmentShader = fragmentShader;\r\n\r\n if (!pipelineContext.isParallelCompiled) {\r\n this._finalizePipelineContext(pipelineContext);\r\n }\r\n\r\n return shaderProgram;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseTexture(texture: InternalTexture): void {\r\n super._releaseTexture(texture);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseRenderTargetWrapper(rtWrapper: RenderTargetWrapper): void {\r\n super._releaseRenderTargetWrapper(rtWrapper);\r\n\r\n // Set output texture of post process to null if the framebuffer has been released/disposed\r\n for (const scene of this.scenes) {\r\n for (const postProcess of scene.postProcesses) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n for (const camera of scene.cameras) {\r\n for (const postProcess of camera._postProcesses) {\r\n if (postProcess) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Rescales a texture\r\n * @param source input texture\r\n * @param destination destination texture\r\n * @param scene scene to use to render the resize\r\n * @param internalFormat format to use when resizing\r\n * @param onComplete callback to be called when resize has completed\r\n */\r\n public override _rescaleTexture(source: InternalTexture, destination: InternalTexture, scene: Nullable<any>, internalFormat: number, onComplete: () => void): void {\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MAG_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MIN_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_S, this._gl.CLAMP_TO_EDGE);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_T, this._gl.CLAMP_TO_EDGE);\r\n\r\n const rtt = this.createRenderTargetTexture(\r\n {\r\n width: destination.width,\r\n height: destination.height,\r\n },\r\n {\r\n generateMipMaps: false,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateStencilBuffer: false,\r\n }\r\n );\r\n\r\n if (!this._rescalePostProcess && Engine._RescalePostProcessFactory) {\r\n this._rescalePostProcess = Engine._RescalePostProcessFactory(this);\r\n }\r\n\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.externalTextureSamplerBinding = true;\r\n const onCompiled = () => {\r\n this._rescalePostProcess!.onApply = function (effect) {\r\n effect._bindTexture(\"textureSampler\", source);\r\n };\r\n\r\n let hostingScene: Scene = scene;\r\n\r\n if (!hostingScene) {\r\n hostingScene = this.scenes[this.scenes.length - 1];\r\n }\r\n hostingScene.postProcessManager.directRender([this._rescalePostProcess!], rtt, true);\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, destination, true);\r\n this._gl.copyTexImage2D(this._gl.TEXTURE_2D, 0, internalFormat, 0, 0, destination.width, destination.height, 0);\r\n\r\n this.unBindFramebuffer(rtt);\r\n rtt.dispose();\r\n\r\n if (onComplete) {\r\n onComplete();\r\n }\r\n };\r\n const effect = this._rescalePostProcess.getEffect();\r\n if (effect) {\r\n effect.executeWhenCompiled(onCompiled);\r\n } else {\r\n this._rescalePostProcess.onEffectCreatedObservable.addOnce((effect) => {\r\n effect.executeWhenCompiled(onCompiled);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Wraps an external web gl texture in a Babylon texture.\r\n * @param texture defines the external texture\r\n * @param hasMipMaps defines whether the external texture has mip maps (default: false)\r\n * @param samplingMode defines the sampling mode for the external texture (default: Constants.TEXTURE_TRILINEAR_SAMPLINGMODE)\r\n * @param width defines the width for the external texture (default: 0)\r\n * @param height defines the height for the external texture (default: 0)\r\n * @returns the babylon internal texture\r\n */\r\n public wrapWebGLTexture(\r\n texture: WebGLTexture,\r\n hasMipMaps: boolean = false,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n width: number = 0,\r\n height: number = 0\r\n ): InternalTexture {\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.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isReady = true;\r\n internalTexture.useMipMaps = hasMipMaps;\r\n this.updateTextureSamplingMode(samplingMode, internalTexture);\r\n return internalTexture;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement | ImageBitmap, faceIndex: number = 0, lod: number = 0) {\r\n const gl = this._gl;\r\n\r\n const textureType = this._getWebGLTextureType(texture.type);\r\n const format = this._getInternalFormat(texture.format);\r\n const internalFormat = this._getRGBABufferInternalSizedFormat(texture.type, format);\r\n\r\n const bindTarget = texture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n this._bindTextureDirectly(bindTarget, texture, true);\r\n this._unpackFlipY(texture.invertY);\r\n\r\n let target: GLenum = gl.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex;\r\n }\r\n\r\n gl.texImage2D(target, lod, internalFormat, format, textureType, image);\r\n this._bindTextureDirectly(bindTarget, null, true);\r\n }\r\n\r\n /**\r\n * Updates a depth texture Comparison Mode and Function.\r\n * If the comparison Function is equal to 0, the mode will be set to none.\r\n * Otherwise, this only works in webgl 2 and requires a shadow sampler in the shader.\r\n * @param texture The texture to set the comparison function for\r\n * @param comparisonFunction The comparison function to set, 0 if no comparison required\r\n */\r\n public updateTextureComparisonFunction(texture: InternalTexture, comparisonFunction: number): void {\r\n if (this.webGLVersion === 1) {\r\n Logger.Error(\"WebGL 1 does not support texture comparison.\");\r\n return;\r\n }\r\n\r\n const gl = this._gl;\r\n\r\n if (texture.isCube) {\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null);\r\n } else {\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, null);\r\n }\r\n\r\n texture._comparisonFunction = comparisonFunction;\r\n }\r\n\r\n /**\r\n * Creates a webGL buffer to use with instantiation\r\n * @param capacity defines the size of the buffer\r\n * @returns the webGL buffer\r\n */\r\n public createInstancesBuffer(capacity: number): DataBuffer {\r\n const buffer = this._gl.createBuffer();\r\n\r\n if (!buffer) {\r\n throw new Error(\"Unable to create instance buffer\");\r\n }\r\n\r\n const result = new WebGLDataBuffer(buffer);\r\n result.capacity = capacity;\r\n\r\n this.bindArrayBuffer(result);\r\n this._gl.bufferData(this._gl.ARRAY_BUFFER, capacity, this._gl.DYNAMIC_DRAW);\r\n\r\n result.references = 1;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Delete a webGL buffer used with instantiation\r\n * @param buffer defines the webGL buffer to delete\r\n */\r\n public deleteInstancesBuffer(buffer: WebGLBuffer): void {\r\n this._gl.deleteBuffer(buffer);\r\n }\r\n\r\n private async _clientWaitAsync(sync: WebGLSync, flags = 0, intervalms = 10): Promise<void> {\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n return await new Promise((resolve, reject) => {\r\n _RetryWithInterval(\r\n () => {\r\n const res = gl.clientWaitSync(sync, flags, 0);\r\n if (res == gl.WAIT_FAILED) {\r\n throw new Error(\"clientWaitSync failed\");\r\n }\r\n if (res == gl.TIMEOUT_EXPIRED) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n resolve,\r\n reject,\r\n intervalms\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * This function might return null synchronously, so it is technically not async.\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public _readPixelsAsync(x: number, y: number, w: number, h: number, format: number, type: number, outputBuffer: ArrayBufferView): Nullable<Promise<ArrayBufferView>> {\r\n if (this._webGLVersion < 2) {\r\n throw new Error(\"_readPixelsAsync only work on WebGL2+\");\r\n }\r\n\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n const buf = gl.createBuffer();\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.bufferData(gl.PIXEL_PACK_BUFFER, outputBuffer.byteLength, gl.STREAM_READ);\r\n gl.readPixels(x, y, w, h, format, type, 0);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n\r\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n if (!sync) {\r\n return null;\r\n }\r\n\r\n gl.flush();\r\n\r\n // eslint-disable-next-line github/no-then\r\n return this._clientWaitAsync(sync, 0, 10).then(() => {\r\n gl.deleteSync(sync);\r\n\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, outputBuffer);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n gl.deleteBuffer(buf);\r\n\r\n return outputBuffer;\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.hideLoadingUI();\r\n\r\n // Rescale PP\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.dispose();\r\n }\r\n\r\n _CommonDispose(this, this._renderingCanvas);\r\n\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
package/Engines/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./engineCapabilities.js";
|
|
|
3
3
|
export * from "./instancingAttributeInfo.js";
|
|
4
4
|
export * from "./abstractEngine.js";
|
|
5
5
|
export * from "./thinEngine.js";
|
|
6
|
+
export * from "./thinNativeEngine.js";
|
|
6
7
|
export * from "./engine.js";
|
|
7
8
|
export * from "./engineStore.js";
|
|
8
9
|
export * from "./nullEngine.js";
|
package/Engines/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./engineCapabilities.js";
|
|
|
4
4
|
export * from "./instancingAttributeInfo.js";
|
|
5
5
|
export * from "./abstractEngine.js";
|
|
6
6
|
export * from "./thinEngine.js";
|
|
7
|
+
export * from "./thinNativeEngine.js";
|
|
7
8
|
export * from "./engine.js";
|
|
8
9
|
export * from "./engineStore.js";
|
|
9
10
|
export * from "./nullEngine.js";
|
package/Engines/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./constants\";\r\nexport * from \"./engineCapabilities\";\r\nexport * from \"./instancingAttributeInfo\";\r\nexport * from \"./abstractEngine\";\r\nexport * from \"./thinEngine\";\r\nexport * from \"./engine\";\r\nexport * from \"./engineStore\";\r\nexport * from \"./nullEngine\";\r\nexport * from \"./AbstractEngine/index\";\r\nexport * from \"./Extensions/index\";\r\nexport * from \"./Native/index\";\r\nexport * from \"./WebGPU/Extensions/index\";\r\nexport * from \"./IPipelineContext\";\r\nexport * from \"./ICanvas\";\r\nexport * from \"./WebGL/webGLPipelineContext\";\r\nexport * from \"./WebGL/webGLHardwareTexture\";\r\nexport * from \"./WebGPU/webgpuConstants\";\r\nexport * from \"./webgpuEngine\";\r\nexport * from \"./WebGPU/webgpuCacheRenderPipeline\";\r\nexport * from \"./WebGPU/webgpuCacheRenderPipelineTree\";\r\nexport * from \"./WebGPU/webgpuCacheBindGroups\";\r\nexport * from \"./WebGPU/webgpuCacheSampler\";\r\nexport * from \"./WebGPU/webgpuDrawContext\";\r\nexport * from \"./WebGPU/webgpuPipelineContext\";\r\nexport * from \"./WebGPU/webgpuRenderTargetWrapper\";\r\nexport * from \"./WebGPU/webgpuShaderProcessor\";\r\nexport * from \"./WebGPU/webgpuTintWASM\";\r\nexport * from \"./WebGL/webGL2ShaderProcessors\";\r\nexport * from \"./nativeEngine\";\r\nexport * from \"./Processors/shaderCodeInliner\";\r\nexport * from \"./performanceConfigurator\";\r\nexport * from \"./engineFeatures\";\r\nexport * from \"./engineFactory\";\r\nexport * from \"./IMaterialContext\";\r\nexport * from \"./IDrawContext\";\r\nexport * from \"./shaderStore\";\r\nexport * from \"./renderTargetWrapper\";\r\nexport * from \"./Processors/iShaderProcessor\";\r\nexport * from \"./engine.common\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./constants\";\r\nexport * from \"./engineCapabilities\";\r\nexport * from \"./instancingAttributeInfo\";\r\nexport * from \"./abstractEngine\";\r\nexport * from \"./thinEngine\";\r\nexport * from \"./thinNativeEngine\";\r\nexport * from \"./engine\";\r\nexport * from \"./engineStore\";\r\nexport * from \"./nullEngine\";\r\nexport * from \"./AbstractEngine/index\";\r\nexport * from \"./Extensions/index\";\r\nexport * from \"./Native/index\";\r\nexport * from \"./WebGPU/Extensions/index\";\r\nexport * from \"./IPipelineContext\";\r\nexport * from \"./ICanvas\";\r\nexport * from \"./WebGL/webGLPipelineContext\";\r\nexport * from \"./WebGL/webGLHardwareTexture\";\r\nexport * from \"./WebGPU/webgpuConstants\";\r\nexport * from \"./webgpuEngine\";\r\nexport * from \"./WebGPU/webgpuCacheRenderPipeline\";\r\nexport * from \"./WebGPU/webgpuCacheRenderPipelineTree\";\r\nexport * from \"./WebGPU/webgpuCacheBindGroups\";\r\nexport * from \"./WebGPU/webgpuCacheSampler\";\r\nexport * from \"./WebGPU/webgpuDrawContext\";\r\nexport * from \"./WebGPU/webgpuPipelineContext\";\r\nexport * from \"./WebGPU/webgpuRenderTargetWrapper\";\r\nexport * from \"./WebGPU/webgpuShaderProcessor\";\r\nexport * from \"./WebGPU/webgpuTintWASM\";\r\nexport * from \"./WebGL/webGL2ShaderProcessors\";\r\nexport * from \"./nativeEngine\";\r\nexport * from \"./Processors/shaderCodeInliner\";\r\nexport * from \"./performanceConfigurator\";\r\nexport * from \"./engineFeatures\";\r\nexport * from \"./engineFactory\";\r\nexport * from \"./IMaterialContext\";\r\nexport * from \"./IDrawContext\";\r\nexport * from \"./shaderStore\";\r\nexport * from \"./renderTargetWrapper\";\r\nexport * from \"./Processors/iShaderProcessor\";\r\nexport * from \"./engine.common\";\r\n"]}
|