@babylonjs/core 7.49.0 → 7.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Behaviors/Cameras/framingBehavior.js +3 -0
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +10 -9
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +4 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Buffers/bufferUtils.d.ts +9 -10
- package/Buffers/bufferUtils.js +16 -0
- package/Buffers/bufferUtils.js.map +1 -1
- package/Culling/Helper/transformFeedbackBoundingHelper.js +2 -1
- package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +2 -3
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +23 -22
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/thinEngine.functions.js +5 -3
- package/Engines/thinEngine.functions.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.d.ts +43 -0
- package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.js +83 -0
- package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +35 -0
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +40 -0
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -0
- package/FrameGraph/frameGraph.d.ts +4 -0
- package/FrameGraph/frameGraph.js +6 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +2 -2
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Layers/thinEffectLayer.js +3 -1
- package/Layers/thinEffectLayer.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +3 -1
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Loading/loadingScreen.js +4 -1
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +9 -20
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +8 -19
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.d.ts +8 -0
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js +36 -0
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +6 -3
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +8 -0
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +48 -0
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +2 -0
- package/Materials/Node/nodeMaterial.js +14 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.js +2 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +17 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/shaderMaterial.js +3 -1
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +2 -0
- package/Materials/standardMaterial.js +2 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +4 -0
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +11 -2
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.d.ts +4 -0
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +11 -2
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.d.ts +4 -0
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +11 -2
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/boxBlock.js +4 -4
- package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/gridBlock.js +3 -3
- package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/planeBlock.js +3 -3
- package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/subdivideBlock.d.ts +45 -0
- package/Meshes/Node/Blocks/subdivideBlock.js +98 -0
- package/Meshes/Node/Blocks/subdivideBlock.js.map +1 -0
- package/Meshes/Node/index.d.ts +1 -0
- package/Meshes/Node/index.js +1 -0
- package/Meshes/Node/index.js.map +1 -1
- package/Meshes/abstractMesh.js +6 -0
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg2.js +18 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geometry.js +1 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/index.d.ts +1 -0
- package/Meshes/index.js +1 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/mesh.d.ts +47 -1
- package/Meshes/mesh.js +28 -1
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/mesh.vertexData.subdivide.d.ts +28 -0
- package/Meshes/mesh.vertexData.subdivide.js +400 -0
- package/Meshes/mesh.vertexData.subdivide.js.map +1 -0
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/screenshotTools.js +3 -0
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/urlTools.d.ts +6 -0
- package/Misc/urlTools.js +12 -0
- package/Misc/urlTools.js.map +1 -0
- package/Morph/morphTarget.d.ts +12 -0
- package/Morph/morphTarget.js +35 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +13 -0
- package/Morph/morphTargetManager.js +30 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +3 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +5 -3
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +3 -1
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +3 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +3 -1
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.d.ts +3 -1
- package/Rendering/utilityLayerRenderer.js +16 -7
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +1 -1
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js +9 -0
- package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +3 -0
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +5 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +2 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.js +2 -2
- package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
- package/Shaders/background.vertex.js +1 -1
- package/Shaders/background.vertex.js.map +1 -1
- package/Shaders/color.vertex.js +3 -0
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/default.vertex.js +3 -0
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/greasedLine.vertex.js +1 -2
- package/Shaders/greasedLine.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.js +3 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +6 -0
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +2 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/boundingInfo.compute.js +3 -0
- package/ShadersWGSL/boundingInfo.compute.js.map +1 -1
- package/ShadersWGSL/color.vertex.js +3 -0
- package/ShadersWGSL/color.vertex.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +3 -0
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/greasedLine.vertex.js +2 -3
- package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +1 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +3 -0
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.d.ts +4 -0
- package/XR/features/WebXRAnchorSystem.js +8 -5
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +1 -0
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +2 -0
- package/scene.js +13 -9
- package/scene.js.map +1 -1
- package/types.d.ts +22 -0
- package/types.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractEngine.cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { LoadImage } from \"../../Misc/fileTools\";\r\nimport { RandomGUID } from \"../../Misc/guid\";\r\nimport type { IWebRequest } from \"../../Misc/interfaces/iWebRequest\";\r\nimport { AbstractEngine } from \"../abstractEngine\";\r\nimport { _GetCompatibleTextureLoader } from \"core/Materials/Textures/Loaders/textureLoaderManager\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /** @internal */\r\n createCubeTextureBase(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>,\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined,\r\n forcedExtension: any,\r\n createPolynomials: boolean,\r\n lodScale: number,\r\n lodOffset: number,\r\n fallback: Nullable<InternalTexture>,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void>,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n useSRGBBuffer: boolean,\r\n buffer: Nullable<ArrayBufferView>\r\n ): InternalTexture;\r\n\r\n /** @internal */\r\n _partialLoadFile(\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>\r\n ): void;\r\n\r\n /** @internal */\r\n _cascadeLoadFiles(scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @internal */\r\n _cascadeLoadImgs(\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n\r\n /** @internal */\r\n _partialLoadImg(\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype._partialLoadFile = function (\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const onload = (data: ArrayBuffer) => {\r\n loadedFiles[index] = data;\r\n (<any>loadedFiles)._internalCount++;\r\n\r\n if ((<any>loadedFiles)._internalCount === 6) {\r\n onfinish(loadedFiles);\r\n }\r\n };\r\n\r\n const onerror = (request?: IWebRequest, exception?: any) => {\r\n if (onErrorCallBack && request) {\r\n onErrorCallBack(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(url, onload as (data: string | ArrayBuffer) => void, undefined, undefined, true, onerror);\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadFiles = function (\r\n scene: Nullable<Scene>,\r\n onfinish: (images: ArrayBuffer[]) => void,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const loadedFiles: ArrayBuffer[] = [];\r\n (<any>loadedFiles)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadFile(files[index], index, loadedFiles, onfinish, onError);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadImgs = function (\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const loadedImages: HTMLImageElement[] | ImageBitmap[] = [];\r\n (<any>loadedImages)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadImg(files[index], index, loadedImages, scene, texture, onfinish, onError, mimeType);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._partialLoadImg = function (\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const tokenPendingData = RandomGUID();\r\n\r\n const onload = (img: HTMLImageElement | ImageBitmap) => {\r\n loadedImages[index] = img;\r\n (<any>loadedImages)._internalCount++;\r\n\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if ((<any>loadedImages)._internalCount === 6 && onfinish) {\r\n onfinish(texture, loadedImages);\r\n }\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if (onErrorCallBack) {\r\n onErrorCallBack(message, exception);\r\n }\r\n };\r\n\r\n LoadImage(url, onload, onerror, scene ? scene.offlineProvider : null, mimeType);\r\n if (scene) {\r\n scene.addPendingData(tokenPendingData);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype.createCubeTextureBase = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap?: boolean,\r\n onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = 0,\r\n lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void> = null,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void> = null,\r\n useSRGBBuffer = false,\r\n buffer: Nullable<ArrayBufferView> = null\r\n): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n texture._useSRGBBuffer = !!useSRGBBuffer && this._caps.supportSRGBBuffers && (this.version > 1 || this.isWebGPU || !!noMipmap);\r\n if (texture !== fallback) {\r\n texture.label = rootUrl.substring(0, 60); // default label, can be overriden by the caller\r\n }\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n texture._buffer = buffer;\r\n }\r\n\r\n const originalRootUrl = rootUrl;\r\n if (this._transformTextureUrl && !fallback) {\r\n rootUrl = this._transformTextureUrl(rootUrl);\r\n }\r\n\r\n const rootUrlWithoutUriParams = rootUrl.split(\"?\")[0];\r\n const lastDot = rootUrlWithoutUriParams.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? rootUrlWithoutUriParams.substring(lastDot).toLowerCase() : \"\";\r\n\r\n const loaderPromise = _GetCompatibleTextureLoader(extension);\r\n\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (rootUrl === originalRootUrl) {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n } else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${rootUrl}, falling back to the ${originalRootUrl}`);\r\n this.createCubeTextureBase(\r\n originalRootUrl,\r\n scene,\r\n files,\r\n !!noMipmap,\r\n onLoad,\r\n onError,\r\n format,\r\n forcedExtension,\r\n createPolynomials,\r\n lodScale,\r\n lodOffset,\r\n texture,\r\n beforeLoadCubeDataCallback,\r\n imageHandler,\r\n useSRGBBuffer,\r\n buffer\r\n );\r\n }\r\n };\r\n\r\n if (loaderPromise) {\r\n loaderPromise.then((loader) => {\r\n const onloaddata = (data: ArrayBufferView | ArrayBufferView[]) => {\r\n if (beforeLoadCubeDataCallback) {\r\n beforeLoadCubeDataCallback(texture, data);\r\n }\r\n loader.loadCubeData(data, texture, createPolynomials, onLoad, onError);\r\n };\r\n if (buffer) {\r\n onloaddata(buffer);\r\n } else if (files && files.length === 6) {\r\n if (loader.supportCascades) {\r\n this._cascadeLoadFiles(scene, (images) => onloaddata(images.map((image) => new Uint8Array(image))), files, onError);\r\n } else {\r\n if (onError) {\r\n onError(\"Textures type does not support cascades.\");\r\n } else {\r\n Logger.Warn(\"Texture loader does not support cascades.\");\r\n }\r\n }\r\n } else {\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n });\r\n } else {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"Cannot load cubemap because files were not defined, or the correct loader was not found.\");\r\n }\r\n\r\n this._cascadeLoadImgs(\r\n scene,\r\n texture,\r\n (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n if (imageHandler) {\r\n imageHandler(texture, imgs);\r\n }\r\n },\r\n files,\r\n onError\r\n );\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"abstractEngine.cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../Materials/Textures/internalTexture\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { LoadImage } from \"../../Misc/fileTools\";\r\nimport { RandomGUID } from \"../../Misc/guid\";\r\nimport type { IWebRequest } from \"../../Misc/interfaces/iWebRequest\";\r\nimport { AbstractEngine } from \"../abstractEngine\";\r\nimport { _GetCompatibleTextureLoader } from \"core/Materials/Textures/Loaders/textureLoaderManager\";\r\nimport { GetExtensionFromUrl } from \"core/Misc/urlTools\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /** @internal */\r\n createCubeTextureBase(\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap: boolean,\r\n onLoad: Nullable<(data?: any) => void>,\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n format: number | undefined,\r\n forcedExtension: any,\r\n createPolynomials: boolean,\r\n lodScale: number,\r\n lodOffset: number,\r\n fallback: Nullable<InternalTexture>,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void>,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n useSRGBBuffer: boolean,\r\n buffer: Nullable<ArrayBufferView>\r\n ): InternalTexture;\r\n\r\n /** @internal */\r\n _partialLoadFile(\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>\r\n ): void;\r\n\r\n /** @internal */\r\n _cascadeLoadFiles(scene: Nullable<Scene>, onfinish: (images: ArrayBuffer[]) => void, files: string[], onError: Nullable<(message?: string, exception?: any) => void>): void;\r\n\r\n /** @internal */\r\n _cascadeLoadImgs(\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n\r\n /** @internal */\r\n _partialLoadImg(\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void>,\r\n mimeType?: string\r\n ): void;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype._partialLoadFile = function (\r\n url: string,\r\n index: number,\r\n loadedFiles: ArrayBuffer[],\r\n onfinish: (files: ArrayBuffer[]) => void,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const onload = (data: ArrayBuffer) => {\r\n loadedFiles[index] = data;\r\n (<any>loadedFiles)._internalCount++;\r\n\r\n if ((<any>loadedFiles)._internalCount === 6) {\r\n onfinish(loadedFiles);\r\n }\r\n };\r\n\r\n const onerror = (request?: IWebRequest, exception?: any) => {\r\n if (onErrorCallBack && request) {\r\n onErrorCallBack(request.status + \" \" + request.statusText, exception);\r\n }\r\n };\r\n\r\n this._loadFile(url, onload as (data: string | ArrayBuffer) => void, undefined, undefined, true, onerror);\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadFiles = function (\r\n scene: Nullable<Scene>,\r\n onfinish: (images: ArrayBuffer[]) => void,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null\r\n): void {\r\n const loadedFiles: ArrayBuffer[] = [];\r\n (<any>loadedFiles)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadFile(files[index], index, loadedFiles, onfinish, onError);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._cascadeLoadImgs = function (\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n files: string[],\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const loadedImages: HTMLImageElement[] | ImageBitmap[] = [];\r\n (<any>loadedImages)._internalCount = 0;\r\n\r\n for (let index = 0; index < 6; index++) {\r\n this._partialLoadImg(files[index], index, loadedImages, scene, texture, onfinish, onError, mimeType);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype._partialLoadImg = function (\r\n url: string,\r\n index: number,\r\n loadedImages: HTMLImageElement[] | ImageBitmap[],\r\n scene: Nullable<Scene>,\r\n texture: InternalTexture,\r\n onfinish: Nullable<(texture: InternalTexture, images: HTMLImageElement[] | ImageBitmap[]) => void>,\r\n onErrorCallBack: Nullable<(message?: string, exception?: any) => void> = null,\r\n mimeType?: string\r\n) {\r\n const tokenPendingData = RandomGUID();\r\n\r\n const onload = (img: HTMLImageElement | ImageBitmap) => {\r\n loadedImages[index] = img;\r\n (<any>loadedImages)._internalCount++;\r\n\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if ((<any>loadedImages)._internalCount === 6 && onfinish) {\r\n onfinish(texture, loadedImages);\r\n }\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n if (scene) {\r\n scene.removePendingData(tokenPendingData);\r\n }\r\n\r\n if (onErrorCallBack) {\r\n onErrorCallBack(message, exception);\r\n }\r\n };\r\n\r\n LoadImage(url, onload, onerror, scene ? scene.offlineProvider : null, mimeType);\r\n if (scene) {\r\n scene.addPendingData(tokenPendingData);\r\n }\r\n};\r\n\r\nAbstractEngine.prototype.createCubeTextureBase = function (\r\n rootUrl: string,\r\n scene: Nullable<Scene>,\r\n files: Nullable<string[]>,\r\n noMipmap?: boolean,\r\n onLoad: Nullable<(data?: any) => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format?: number,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = 0,\r\n lodOffset: number = 0,\r\n fallback: Nullable<InternalTexture> = null,\r\n beforeLoadCubeDataCallback: Nullable<(texture: InternalTexture, data: ArrayBufferView | ArrayBufferView[]) => void> = null,\r\n imageHandler: Nullable<(texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => void> = null,\r\n useSRGBBuffer = false,\r\n buffer: Nullable<ArrayBufferView> = null\r\n): InternalTexture {\r\n const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Cube);\r\n texture.isCube = true;\r\n texture.url = rootUrl;\r\n texture.generateMipMaps = !noMipmap;\r\n texture._lodGenerationScale = lodScale;\r\n texture._lodGenerationOffset = lodOffset;\r\n texture._useSRGBBuffer = !!useSRGBBuffer && this._caps.supportSRGBBuffers && (this.version > 1 || this.isWebGPU || !!noMipmap);\r\n if (texture !== fallback) {\r\n texture.label = rootUrl.substring(0, 60); // default label, can be overriden by the caller\r\n }\r\n\r\n if (!this._doNotHandleContextLost) {\r\n texture._extension = forcedExtension;\r\n texture._files = files;\r\n texture._buffer = buffer;\r\n }\r\n\r\n const originalRootUrl = rootUrl;\r\n if (this._transformTextureUrl && !fallback) {\r\n rootUrl = this._transformTextureUrl(rootUrl);\r\n }\r\n\r\n const extension = forcedExtension ?? GetExtensionFromUrl(rootUrl);\r\n\r\n const loaderPromise = _GetCompatibleTextureLoader(extension);\r\n\r\n const onInternalError = (request?: IWebRequest, exception?: any) => {\r\n if (rootUrl === originalRootUrl) {\r\n if (onError && request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n } else {\r\n // fall back to the original url if the transformed url fails to load\r\n Logger.Warn(`Failed to load ${rootUrl}, falling back to the ${originalRootUrl}`);\r\n this.createCubeTextureBase(\r\n originalRootUrl,\r\n scene,\r\n files,\r\n !!noMipmap,\r\n onLoad,\r\n onError,\r\n format,\r\n forcedExtension,\r\n createPolynomials,\r\n lodScale,\r\n lodOffset,\r\n texture,\r\n beforeLoadCubeDataCallback,\r\n imageHandler,\r\n useSRGBBuffer,\r\n buffer\r\n );\r\n }\r\n };\r\n\r\n if (loaderPromise) {\r\n loaderPromise.then((loader) => {\r\n const onloaddata = (data: ArrayBufferView | ArrayBufferView[]) => {\r\n if (beforeLoadCubeDataCallback) {\r\n beforeLoadCubeDataCallback(texture, data);\r\n }\r\n loader.loadCubeData(data, texture, createPolynomials, onLoad, onError);\r\n };\r\n if (buffer) {\r\n onloaddata(buffer);\r\n } else if (files && files.length === 6) {\r\n if (loader.supportCascades) {\r\n this._cascadeLoadFiles(scene, (images) => onloaddata(images.map((image) => new Uint8Array(image))), files, onError);\r\n } else {\r\n if (onError) {\r\n onError(\"Textures type does not support cascades.\");\r\n } else {\r\n Logger.Warn(\"Texture loader does not support cascades.\");\r\n }\r\n }\r\n } else {\r\n this._loadFile(rootUrl, (data) => onloaddata(new Uint8Array(data as ArrayBuffer)), undefined, undefined, true, onInternalError);\r\n }\r\n });\r\n } else {\r\n if (!files || files.length === 0) {\r\n throw new Error(\"Cannot load cubemap because files were not defined, or the correct loader was not found.\");\r\n }\r\n\r\n this._cascadeLoadImgs(\r\n scene,\r\n texture,\r\n (texture: InternalTexture, imgs: HTMLImageElement[] | ImageBitmap[]) => {\r\n if (imageHandler) {\r\n imageHandler(texture, imgs);\r\n }\r\n },\r\n files,\r\n onError\r\n );\r\n }\r\n\r\n this._internalTexturesCache.push(texture);\r\n\r\n return texture;\r\n};\r\n"]}
|
|
@@ -49,35 +49,36 @@ export class WebGPUBufferManager {
|
|
|
49
49
|
}
|
|
50
50
|
return dataBuffer;
|
|
51
51
|
}
|
|
52
|
+
// This calls GPUBuffer.writeBuffer() with no alignment corrections
|
|
53
|
+
// dstByteOffset and byteLength must both be aligned to 4 bytes and bytes moved must be within src and dst arrays
|
|
52
54
|
setRawData(buffer, dstByteOffset, src, srcByteOffset, byteLength) {
|
|
55
|
+
srcByteOffset += src.byteOffset;
|
|
53
56
|
this._device.queue.writeBuffer(buffer, dstByteOffset, src.buffer, srcByteOffset, byteLength);
|
|
54
57
|
}
|
|
58
|
+
// This calls GPUBuffer.writeBuffer() with alignment corrections (dstByteOffset and byteLength will be aligned to 4 byte boundaries)
|
|
59
|
+
// If alignment is needed, src must be a full copy of dataBuffer, or at least should be large enough to cope with the additional bytes copied because of alignment!
|
|
55
60
|
setSubData(dataBuffer, dstByteOffset, src, srcByteOffset = 0, byteLength = 0) {
|
|
56
61
|
const buffer = dataBuffer.underlyingResource;
|
|
57
|
-
byteLength = byteLength || src.byteLength;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
byteLength = byteLength || src.byteLength - srcByteOffset;
|
|
63
|
+
// Make sure the dst offset is aligned to 4 bytes
|
|
64
|
+
const startPre = dstByteOffset & 3;
|
|
65
|
+
srcByteOffset -= startPre;
|
|
66
|
+
dstByteOffset -= startPre;
|
|
67
|
+
// Make sure the byte length is aligned to 4 bytes
|
|
68
|
+
const originalByteLength = byteLength;
|
|
69
|
+
byteLength = (byteLength + startPre + 3) & ~3;
|
|
70
|
+
// Check if the backing buffer of src is large enough to cope with the additional bytes copied because of alignment
|
|
71
|
+
const backingBufferSize = src.buffer.byteLength - src.byteOffset;
|
|
72
|
+
if (backingBufferSize < byteLength) {
|
|
73
|
+
// Not enough place in the backing buffer for the aligned copy.
|
|
74
|
+
// Creates a new buffer and copy the source data to it.
|
|
75
|
+
// The buffer will have byteLength - originalByteLength zeros at the end.
|
|
76
|
+
const tmpBuffer = new Uint8Array(byteLength);
|
|
77
|
+
tmpBuffer.set(new Uint8Array(src.buffer, src.byteOffset + srcByteOffset, originalByteLength));
|
|
78
|
+
src = tmpBuffer;
|
|
68
79
|
srcByteOffset = 0;
|
|
69
|
-
chunkStart = 0;
|
|
70
|
-
chunkEnd = alignedLength;
|
|
71
|
-
byteLength = alignedLength;
|
|
72
80
|
}
|
|
73
|
-
|
|
74
|
-
const maxChunk = 1024 * 1024 * 15;
|
|
75
|
-
let offset = 0;
|
|
76
|
-
while (chunkEnd - (chunkStart + offset) > maxChunk) {
|
|
77
|
-
this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, maxChunk);
|
|
78
|
-
offset += maxChunk;
|
|
79
|
-
}
|
|
80
|
-
this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, byteLength - offset);
|
|
81
|
+
this.setRawData(buffer, dstByteOffset, src, srcByteOffset, byteLength);
|
|
81
82
|
}
|
|
82
83
|
_getHalfFloatAsFloatRGBAArrayBuffer(dataLength, arrayBuffer, destArray) {
|
|
83
84
|
if (!destArray) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuBufferManager.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuBufferManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,gEAAgE;AAChE,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAErD,gBAAgB;AAChB,MAAM,OAAO,mBAAmB;IAKpB,MAAM,CAAC,YAAY,CAAC,MAA8B;QACtD,OAAQ,MAAqB,CAAC,kBAAkB,KAAK,SAAS,CAAC;IACnE,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,KAA0B,EAAE,MAAM,GAAG,EAAE;QACjE,IAAI,MAAM,GAAG,MAAM,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1B,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnB,IAAI,MAAM,EAAE,CAAC;oBACT,MAAM,IAAI,GAAG,CAAC;gBAClB,CAAC;gBACD,MAAM,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAClD,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,YAAY,MAAoB,EAAE,MAAiB;QArB3C,4BAAuB,GAAqB,EAAE,CAAC;QAsBnD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAEM,eAAe,CAAC,UAAoC,EAAE,KAA0B,EAAE,gBAAgB,GAAG,KAAK,EAAE,KAAc;QAC7H,MAAM,aAAa,GAAI,UAA8B,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAE,UAA8B,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,UAAqB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iEAAiE;QAC7O,MAAM,wBAAwB,GAAG;YAC7B,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,GAAG,OAAO,GAAG,aAAa;YACnJ,gBAAgB;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,KAAK;SACf,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAC/D,CAAC;IAEM,YAAY,CAAC,UAAoC,EAAE,KAA0B,EAAE,KAAc;QAChG,MAAM,MAAM,GAAI,UAA8B,CAAC,UAAU,KAAK,SAAS,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC5D,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChH,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;QAC1B,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAE,UAA8B,CAAC,UAAU,CAAC,CAAC,CAAE,UAAqB,CAAC;QACnG,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAE5C,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,UAA6B,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAEM,UAAU,CAAC,MAAiB,EAAE,aAAqB,EAAE,GAAoB,EAAE,aAAqB,EAAE,UAAkB;QACvH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACjG,CAAC;IAEM,UAAU,CAAC,UAA4B,EAAE,aAAqB,EAAE,GAAoB,EAAE,aAAa,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC;QAC1H,MAAM,MAAM,GAAG,UAAU,CAAC,kBAA+B,CAAC;QAE1D,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC;QAC1C,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC;QAEvE,4BAA4B;QAC5B,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC;QAChD,IAAI,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;QAEvC,gCAAgC;QAChC,MAAM,aAAa,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxE,GAAG,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;YACnC,GAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClC,aAAa,GAAG,CAAC,CAAC;YAClB,UAAU,GAAG,CAAC,CAAC;YACf,QAAQ,GAAG,aAAa,CAAC;YACzB,UAAU,GAAG,aAAa,CAAC;QAC/B,CAAC;QAED,QAAQ;QACR,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,QAAQ,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC1G,MAAM,IAAI,QAAQ,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;IACzH,CAAC;IAEO,mCAAmC,CAAC,UAAkB,EAAE,WAAwB,EAAE,SAAwB;QAC9G,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,SAAS,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;QAC7C,OAAO,UAAU,EAAE,EAAE,CAAC;YAClB,SAAS,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAEM,kBAAkB,CACrB,SAAoB,EACpB,IAAY,EACZ,KAAa,EACb,MAAc,EACd,WAAmB,EACnB,kBAA0B,EAC1B,IAAI,GAAG,SAAS,CAAC,yBAAyB,EAC1C,MAAM,GAAG,CAAC,EACV,SAAoC,IAAI,EACxC,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAG,KAAK;QAExB,MAAM,WAAW,GAAG,IAAI,KAAK,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,SAAS,CAAC,QAAQ,uCAA+B,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAC/D,GAAG,EAAE;gBACD,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/D,IAAI,IAAI,GAA0D,MAAM,CAAC;gBACzE,IAAI,gBAAgB,EAAE,CAAC;oBACnB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAChB,IAAI,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;oBACzE,CAAC;yBAAM,CAAC;wBACJ,IAAI,GAAG,0BAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;oBACrF,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAChB,QAAQ,WAAW,EAAE,CAAC;4BAClB,KAAK,CAAC,EAAE,cAAc;gCAClB,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;gCAC3B,IAAmB,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;gCAC1D,MAAM;4BACV,KAAK,CAAC,EAAE,aAAa;gCACjB,4EAA4E;gCAC5E,IAAI,GAAG,IAAI,CAAC,mCAAmC,CAAC,IAAI,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;gCAC3E,MAAM;4BACV,KAAK,CAAC,EAAE,QAAQ;gCACZ,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gCACjC,IAAqB,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;gCAC9D,MAAM;wBACd,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,QAAQ,WAAW,EAAE,CAAC;4BAClB,KAAK,CAAC,EAAE,cAAc;gCAClB,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCAClC,IAAmB,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;gCAC1D,MAAM;4BACV,KAAK,CAAC,EAAE,aAAa;gCACjB,4EAA4E;gCAC5E,IAAI,GAAG,IAAI,CAAC,mCAAmC,CAAC,IAAI,GAAG,CAAC,EAAE,eAAe,EAAE,MAAsB,CAAC,CAAC;gCACnG,MAAM;4BACV,KAAK,CAAC,EAAE,QAAQ;gCACZ,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCACpC,IAAqB,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;gCAC9D,MAAM;wBACd,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;oBACrC,oFAAoF;oBACpF,IAAI,WAAW,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACzC,gDAAgD;wBAChD,WAAW,IAAI,CAAC,CAAC;wBACjB,kBAAkB,IAAI,CAAC,CAAC;oBAC5B,CAAC;oBACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAK,CAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,MAAM,GAAG,WAAW,EACpB,OAAO,GAAG,CAAC,CAAC;oBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;wBAC9B,OAAO,GAAG,CAAC,GAAG,kBAAkB,CAAC;wBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;4BACnC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wBACvC,CAAC;oBACL,CAAC;oBACD,IAAI,WAAW,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACzC,IAAI,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;oBACzD,CAAC;yBAAM,CAAC;wBACJ,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;oBACnD,CAAC;gBACL,CAAC;gBACD,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAI,aAAa,EAAE,CAAC;oBAChB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,CAAC,IAAK,CAAC,CAAC;YACnB,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;gBACP,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAChE,kHAAkH;oBAClH,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,aAAa,CAAC,MAA8B;QAC/C,IAAI,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,UAAU,EAAE,CAAC;QAEpB,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,kBAA+B,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,sBAAsB;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5C,CAAC;CACJ","sourcesContent":["/* eslint-disable babylonjs/available */\r\nimport type { DataBuffer } from \"../../Buffers/dataBuffer\";\r\nimport { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport { FromHalfFloat } from \"../../Misc/textureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { allocateAndCopyTypedBuffer } from \"../abstractEngine.functions\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUBufferManager {\r\n private _engine: WebGPUEngine;\r\n private _device: GPUDevice;\r\n private _deferredReleaseBuffers: Array<GPUBuffer> = [];\r\n\r\n private static _IsGPUBuffer(buffer: DataBuffer | GPUBuffer): buffer is GPUBuffer {\r\n return (buffer as DataBuffer).underlyingResource === undefined;\r\n }\r\n\r\n private static _FlagsToString(flags: GPUBufferUsageFlags, suffix = \"\") {\r\n let result = suffix;\r\n\r\n for (let i = 0; i <= 9; ++i) {\r\n if (flags & (1 << i)) {\r\n if (result) {\r\n result += \"_\";\r\n }\r\n result += WebGPUConstants.BufferUsage[1 << i];\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n constructor(engine: WebGPUEngine, device: GPUDevice) {\r\n this._engine = engine;\r\n this._device = device;\r\n }\r\n\r\n public createRawBuffer(viewOrSize: ArrayBufferView | number, flags: GPUBufferUsageFlags, mappedAtCreation = false, label?: string): GPUBuffer {\r\n const alignedLength = (viewOrSize as ArrayBufferView).byteLength !== undefined ? ((viewOrSize as ArrayBufferView).byteLength + 3) & ~3 : ((viewOrSize as number) + 3) & ~3; // 4 bytes alignments (because of the upload which requires this)\r\n const verticesBufferDescriptor = {\r\n label: \"BabylonWebGPUDevice\" + this._engine.uniqueId + \"_\" + WebGPUBufferManager._FlagsToString(flags, label ?? \"Buffer\") + \"_size\" + alignedLength,\r\n mappedAtCreation,\r\n size: alignedLength,\r\n usage: flags,\r\n };\r\n\r\n return this._device.createBuffer(verticesBufferDescriptor);\r\n }\r\n\r\n public createBuffer(viewOrSize: ArrayBufferView | number, flags: GPUBufferUsageFlags, label?: string): WebGPUDataBuffer {\r\n const isView = (viewOrSize as ArrayBufferView).byteLength !== undefined;\r\n const dataBuffer = new WebGPUDataBuffer();\r\n const labelId = \"DataBufferUniqueId=\" + dataBuffer.uniqueId;\r\n dataBuffer.buffer = this.createRawBuffer(viewOrSize, flags, undefined, label ? labelId + \"-\" + label : labelId);\r\n dataBuffer.references = 1;\r\n dataBuffer.capacity = isView ? (viewOrSize as ArrayBufferView).byteLength : (viewOrSize as number);\r\n dataBuffer.engineId = this._engine.uniqueId;\r\n\r\n if (isView) {\r\n this.setSubData(dataBuffer, 0, viewOrSize as ArrayBufferView);\r\n }\r\n\r\n return dataBuffer;\r\n }\r\n\r\n public setRawData(buffer: GPUBuffer, dstByteOffset: number, src: ArrayBufferView, srcByteOffset: number, byteLength: number): void {\r\n this._device.queue.writeBuffer(buffer, dstByteOffset, src.buffer, srcByteOffset, byteLength);\r\n }\r\n\r\n public setSubData(dataBuffer: WebGPUDataBuffer, dstByteOffset: number, src: ArrayBufferView, srcByteOffset = 0, byteLength = 0): void {\r\n const buffer = dataBuffer.underlyingResource as GPUBuffer;\r\n\r\n byteLength = byteLength || src.byteLength;\r\n byteLength = Math.min(byteLength, dataBuffer.capacity - dstByteOffset);\r\n\r\n // After Migration to Canary\r\n let chunkStart = src.byteOffset + srcByteOffset;\r\n let chunkEnd = chunkStart + byteLength;\r\n\r\n // 4 bytes alignments for upload\r\n const alignedLength = (byteLength + 3) & ~3;\r\n if (alignedLength !== byteLength) {\r\n const tempView = new Uint8Array(src.buffer.slice(chunkStart, chunkEnd));\r\n src = new Uint8Array(alignedLength);\r\n (src as Uint8Array).set(tempView);\r\n srcByteOffset = 0;\r\n chunkStart = 0;\r\n chunkEnd = alignedLength;\r\n byteLength = alignedLength;\r\n }\r\n\r\n // Chunk\r\n const maxChunk = 1024 * 1024 * 15;\r\n let offset = 0;\r\n while (chunkEnd - (chunkStart + offset) > maxChunk) {\r\n this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, maxChunk);\r\n offset += maxChunk;\r\n }\r\n\r\n this._device.queue.writeBuffer(buffer, dstByteOffset + offset, src.buffer, chunkStart + offset, byteLength - offset);\r\n }\r\n\r\n private _getHalfFloatAsFloatRGBAArrayBuffer(dataLength: number, arrayBuffer: ArrayBuffer, destArray?: Float32Array): Float32Array {\r\n if (!destArray) {\r\n destArray = new Float32Array(dataLength);\r\n }\r\n const srcData = new Uint16Array(arrayBuffer);\r\n while (dataLength--) {\r\n destArray[dataLength] = FromHalfFloat(srcData[dataLength]);\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n public readDataFromBuffer(\r\n gpuBuffer: GPUBuffer,\r\n size: number,\r\n width: number,\r\n height: number,\r\n bytesPerRow: number,\r\n bytesPerRowAligned: number,\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n offset = 0,\r\n buffer: Nullable<ArrayBufferView> = null,\r\n destroyBuffer = true,\r\n noDataConversion = false\r\n ): Promise<ArrayBufferView> {\r\n const floatFormat = type === Constants.TEXTURETYPE_FLOAT ? 2 : type === Constants.TEXTURETYPE_HALF_FLOAT ? 1 : 0;\r\n const engineId = this._engine.uniqueId;\r\n return new Promise((resolve, reject) => {\r\n gpuBuffer.mapAsync(WebGPUConstants.MapMode.Read, offset, size).then(\r\n () => {\r\n const copyArrayBuffer = gpuBuffer.getMappedRange(offset, size);\r\n let data: Nullable<ArrayBufferView> | Uint8Array | Float32Array = buffer;\r\n if (noDataConversion) {\r\n if (data === null) {\r\n data = allocateAndCopyTypedBuffer(type, size, true, copyArrayBuffer);\r\n } else {\r\n data = allocateAndCopyTypedBuffer(type, data.buffer, undefined, copyArrayBuffer);\r\n }\r\n } else {\r\n if (data === null) {\r\n switch (floatFormat) {\r\n case 0: // byte format\r\n data = new Uint8Array(size);\r\n (data as Uint8Array).set(new Uint8Array(copyArrayBuffer));\r\n break;\r\n case 1: // half float\r\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\r\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer);\r\n break;\r\n case 2: // float\r\n data = new Float32Array(size / 4);\r\n (data as Float32Array).set(new Float32Array(copyArrayBuffer));\r\n break;\r\n }\r\n } else {\r\n switch (floatFormat) {\r\n case 0: // byte format\r\n data = new Uint8Array(data.buffer);\r\n (data as Uint8Array).set(new Uint8Array(copyArrayBuffer));\r\n break;\r\n case 1: // half float\r\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\r\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer, buffer as Float32Array);\r\n break;\r\n case 2: // float\r\n data = new Float32Array(data.buffer);\r\n (data as Float32Array).set(new Float32Array(copyArrayBuffer));\r\n break;\r\n }\r\n }\r\n }\r\n if (bytesPerRow !== bytesPerRowAligned) {\r\n // TODO WEBGPU use computer shaders (or render pass) to build the final buffer data?\r\n if (floatFormat === 1 && !noDataConversion) {\r\n // half float have been converted to float above\r\n bytesPerRow *= 2;\r\n bytesPerRowAligned *= 2;\r\n }\r\n const data2 = new Uint8Array(data!.buffer);\r\n let offset = bytesPerRow,\r\n offset2 = 0;\r\n for (let y = 1; y < height; ++y) {\r\n offset2 = y * bytesPerRowAligned;\r\n for (let x = 0; x < bytesPerRow; ++x) {\r\n data2[offset++] = data2[offset2++];\r\n }\r\n }\r\n if (floatFormat !== 0 && !noDataConversion) {\r\n data = new Float32Array(data2.buffer, 0, offset / 4);\r\n } else {\r\n data = new Uint8Array(data2.buffer, 0, offset);\r\n }\r\n }\r\n gpuBuffer.unmap();\r\n if (destroyBuffer) {\r\n this.releaseBuffer(gpuBuffer);\r\n }\r\n resolve(data!);\r\n },\r\n (reason) => {\r\n if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {\r\n // The engine was disposed while waiting for the promise, or a context loss/restoration has occurred: don't reject\r\n resolve(new Uint8Array());\r\n } else {\r\n reject(reason);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public releaseBuffer(buffer: DataBuffer | GPUBuffer): boolean {\r\n if (WebGPUBufferManager._IsGPUBuffer(buffer)) {\r\n this._deferredReleaseBuffers.push(buffer);\r\n return true;\r\n }\r\n\r\n buffer.references--;\r\n\r\n if (buffer.references === 0) {\r\n this._deferredReleaseBuffers.push(buffer.underlyingResource as GPUBuffer);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public destroyDeferredBuffers(): void {\r\n for (let i = 0; i < this._deferredReleaseBuffers.length; ++i) {\r\n this._deferredReleaseBuffers[i].destroy();\r\n }\r\n\r\n this._deferredReleaseBuffers.length = 0;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webgpuBufferManager.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuBufferManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable babylonjs/available */\r\nimport type { DataBuffer } from \"../../Buffers/dataBuffer\";\r\nimport { WebGPUDataBuffer } from \"../../Meshes/WebGPU/webgpuDataBuffer\";\r\nimport { FromHalfFloat } from \"../../Misc/textureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { allocateAndCopyTypedBuffer } from \"../abstractEngine.functions\";\r\nimport { Constants } from \"../constants\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUBufferManager {\r\n private _engine: WebGPUEngine;\r\n private _device: GPUDevice;\r\n private _deferredReleaseBuffers: Array<GPUBuffer> = [];\r\n\r\n private static _IsGPUBuffer(buffer: DataBuffer | GPUBuffer): buffer is GPUBuffer {\r\n return (buffer as DataBuffer).underlyingResource === undefined;\r\n }\r\n\r\n private static _FlagsToString(flags: GPUBufferUsageFlags, suffix = \"\") {\r\n let result = suffix;\r\n\r\n for (let i = 0; i <= 9; ++i) {\r\n if (flags & (1 << i)) {\r\n if (result) {\r\n result += \"_\";\r\n }\r\n result += WebGPUConstants.BufferUsage[1 << i];\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n constructor(engine: WebGPUEngine, device: GPUDevice) {\r\n this._engine = engine;\r\n this._device = device;\r\n }\r\n\r\n public createRawBuffer(viewOrSize: ArrayBufferView | number, flags: GPUBufferUsageFlags, mappedAtCreation = false, label?: string): GPUBuffer {\r\n const alignedLength = (viewOrSize as ArrayBufferView).byteLength !== undefined ? ((viewOrSize as ArrayBufferView).byteLength + 3) & ~3 : ((viewOrSize as number) + 3) & ~3; // 4 bytes alignments (because of the upload which requires this)\r\n const verticesBufferDescriptor = {\r\n label: \"BabylonWebGPUDevice\" + this._engine.uniqueId + \"_\" + WebGPUBufferManager._FlagsToString(flags, label ?? \"Buffer\") + \"_size\" + alignedLength,\r\n mappedAtCreation,\r\n size: alignedLength,\r\n usage: flags,\r\n };\r\n\r\n return this._device.createBuffer(verticesBufferDescriptor);\r\n }\r\n\r\n public createBuffer(viewOrSize: ArrayBufferView | number, flags: GPUBufferUsageFlags, label?: string): WebGPUDataBuffer {\r\n const isView = (viewOrSize as ArrayBufferView).byteLength !== undefined;\r\n const dataBuffer = new WebGPUDataBuffer();\r\n const labelId = \"DataBufferUniqueId=\" + dataBuffer.uniqueId;\r\n dataBuffer.buffer = this.createRawBuffer(viewOrSize, flags, undefined, label ? labelId + \"-\" + label : labelId);\r\n dataBuffer.references = 1;\r\n dataBuffer.capacity = isView ? (viewOrSize as ArrayBufferView).byteLength : (viewOrSize as number);\r\n dataBuffer.engineId = this._engine.uniqueId;\r\n\r\n if (isView) {\r\n this.setSubData(dataBuffer, 0, viewOrSize as ArrayBufferView);\r\n }\r\n\r\n return dataBuffer;\r\n }\r\n\r\n // This calls GPUBuffer.writeBuffer() with no alignment corrections\r\n // dstByteOffset and byteLength must both be aligned to 4 bytes and bytes moved must be within src and dst arrays\r\n public setRawData(buffer: GPUBuffer, dstByteOffset: number, src: ArrayBufferView, srcByteOffset: number, byteLength: number): void {\r\n srcByteOffset += src.byteOffset;\r\n\r\n this._device.queue.writeBuffer(buffer, dstByteOffset, src.buffer, srcByteOffset, byteLength);\r\n }\r\n\r\n // This calls GPUBuffer.writeBuffer() with alignment corrections (dstByteOffset and byteLength will be aligned to 4 byte boundaries)\r\n // If alignment is needed, src must be a full copy of dataBuffer, or at least should be large enough to cope with the additional bytes copied because of alignment!\r\n public setSubData(dataBuffer: WebGPUDataBuffer, dstByteOffset: number, src: ArrayBufferView, srcByteOffset = 0, byteLength = 0): void {\r\n const buffer = dataBuffer.underlyingResource as GPUBuffer;\r\n\r\n byteLength = byteLength || src.byteLength - srcByteOffset;\r\n\r\n // Make sure the dst offset is aligned to 4 bytes\r\n const startPre = dstByteOffset & 3;\r\n\r\n srcByteOffset -= startPre;\r\n dstByteOffset -= startPre;\r\n\r\n // Make sure the byte length is aligned to 4 bytes\r\n const originalByteLength = byteLength;\r\n\r\n byteLength = (byteLength + startPre + 3) & ~3;\r\n\r\n // Check if the backing buffer of src is large enough to cope with the additional bytes copied because of alignment\r\n const backingBufferSize = src.buffer.byteLength - src.byteOffset;\r\n\r\n if (backingBufferSize < byteLength) {\r\n // Not enough place in the backing buffer for the aligned copy.\r\n // Creates a new buffer and copy the source data to it.\r\n // The buffer will have byteLength - originalByteLength zeros at the end.\r\n const tmpBuffer = new Uint8Array(byteLength);\r\n tmpBuffer.set(new Uint8Array(src.buffer, src.byteOffset + srcByteOffset, originalByteLength));\r\n src = tmpBuffer;\r\n srcByteOffset = 0;\r\n }\r\n\r\n this.setRawData(buffer, dstByteOffset, src, srcByteOffset, byteLength);\r\n }\r\n\r\n private _getHalfFloatAsFloatRGBAArrayBuffer(dataLength: number, arrayBuffer: ArrayBuffer, destArray?: Float32Array): Float32Array {\r\n if (!destArray) {\r\n destArray = new Float32Array(dataLength);\r\n }\r\n const srcData = new Uint16Array(arrayBuffer);\r\n while (dataLength--) {\r\n destArray[dataLength] = FromHalfFloat(srcData[dataLength]);\r\n }\r\n\r\n return destArray;\r\n }\r\n\r\n public readDataFromBuffer(\r\n gpuBuffer: GPUBuffer,\r\n size: number,\r\n width: number,\r\n height: number,\r\n bytesPerRow: number,\r\n bytesPerRowAligned: number,\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n offset = 0,\r\n buffer: Nullable<ArrayBufferView> = null,\r\n destroyBuffer = true,\r\n noDataConversion = false\r\n ): Promise<ArrayBufferView> {\r\n const floatFormat = type === Constants.TEXTURETYPE_FLOAT ? 2 : type === Constants.TEXTURETYPE_HALF_FLOAT ? 1 : 0;\r\n const engineId = this._engine.uniqueId;\r\n return new Promise((resolve, reject) => {\r\n gpuBuffer.mapAsync(WebGPUConstants.MapMode.Read, offset, size).then(\r\n () => {\r\n const copyArrayBuffer = gpuBuffer.getMappedRange(offset, size);\r\n let data: Nullable<ArrayBufferView> | Uint8Array | Float32Array = buffer;\r\n if (noDataConversion) {\r\n if (data === null) {\r\n data = allocateAndCopyTypedBuffer(type, size, true, copyArrayBuffer);\r\n } else {\r\n data = allocateAndCopyTypedBuffer(type, data.buffer, undefined, copyArrayBuffer);\r\n }\r\n } else {\r\n if (data === null) {\r\n switch (floatFormat) {\r\n case 0: // byte format\r\n data = new Uint8Array(size);\r\n (data as Uint8Array).set(new Uint8Array(copyArrayBuffer));\r\n break;\r\n case 1: // half float\r\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\r\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer);\r\n break;\r\n case 2: // float\r\n data = new Float32Array(size / 4);\r\n (data as Float32Array).set(new Float32Array(copyArrayBuffer));\r\n break;\r\n }\r\n } else {\r\n switch (floatFormat) {\r\n case 0: // byte format\r\n data = new Uint8Array(data.buffer);\r\n (data as Uint8Array).set(new Uint8Array(copyArrayBuffer));\r\n break;\r\n case 1: // half float\r\n // TODO WEBGPU use computer shaders (or render pass) to make the conversion?\r\n data = this._getHalfFloatAsFloatRGBAArrayBuffer(size / 2, copyArrayBuffer, buffer as Float32Array);\r\n break;\r\n case 2: // float\r\n data = new Float32Array(data.buffer);\r\n (data as Float32Array).set(new Float32Array(copyArrayBuffer));\r\n break;\r\n }\r\n }\r\n }\r\n if (bytesPerRow !== bytesPerRowAligned) {\r\n // TODO WEBGPU use computer shaders (or render pass) to build the final buffer data?\r\n if (floatFormat === 1 && !noDataConversion) {\r\n // half float have been converted to float above\r\n bytesPerRow *= 2;\r\n bytesPerRowAligned *= 2;\r\n }\r\n const data2 = new Uint8Array(data!.buffer);\r\n let offset = bytesPerRow,\r\n offset2 = 0;\r\n for (let y = 1; y < height; ++y) {\r\n offset2 = y * bytesPerRowAligned;\r\n for (let x = 0; x < bytesPerRow; ++x) {\r\n data2[offset++] = data2[offset2++];\r\n }\r\n }\r\n if (floatFormat !== 0 && !noDataConversion) {\r\n data = new Float32Array(data2.buffer, 0, offset / 4);\r\n } else {\r\n data = new Uint8Array(data2.buffer, 0, offset);\r\n }\r\n }\r\n gpuBuffer.unmap();\r\n if (destroyBuffer) {\r\n this.releaseBuffer(gpuBuffer);\r\n }\r\n resolve(data!);\r\n },\r\n (reason) => {\r\n if (this._engine.isDisposed || this._engine.uniqueId !== engineId) {\r\n // The engine was disposed while waiting for the promise, or a context loss/restoration has occurred: don't reject\r\n resolve(new Uint8Array());\r\n } else {\r\n reject(reason);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public releaseBuffer(buffer: DataBuffer | GPUBuffer): boolean {\r\n if (WebGPUBufferManager._IsGPUBuffer(buffer)) {\r\n this._deferredReleaseBuffers.push(buffer);\r\n return true;\r\n }\r\n\r\n buffer.references--;\r\n\r\n if (buffer.references === 0) {\r\n this._deferredReleaseBuffers.push(buffer.underlyingResource as GPUBuffer);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public destroyDeferredBuffers(): void {\r\n for (let i = 0; i < this._deferredReleaseBuffers.length; ++i) {\r\n this._deferredReleaseBuffers[i].destroy();\r\n }\r\n\r\n this._deferredReleaseBuffers.length = 0;\r\n }\r\n}\r\n"]}
|
|
@@ -769,13 +769,13 @@ export class AbstractEngine {
|
|
|
769
769
|
*/
|
|
770
770
|
// Not mixed with Version for tooling purpose.
|
|
771
771
|
static get NpmPackage() {
|
|
772
|
-
return "babylonjs@7.
|
|
772
|
+
return "babylonjs@7.51.0";
|
|
773
773
|
}
|
|
774
774
|
/**
|
|
775
775
|
* Returns the current version of the framework
|
|
776
776
|
*/
|
|
777
777
|
static get Version() {
|
|
778
|
-
return "7.
|
|
778
|
+
return "7.51.0";
|
|
779
779
|
}
|
|
780
780
|
/**
|
|
781
781
|
* Gets the HTML canvas attached with the current webGL context
|