@babylonjs/core 5.3.0 → 5.5.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.
Files changed (125) hide show
  1. package/Animations/animatable.js +1 -1
  2. package/Animations/animatable.js.map +1 -1
  3. package/Behaviors/Cameras/autoRotationBehavior.d.ts +7 -0
  4. package/Behaviors/Cameras/autoRotationBehavior.js +15 -0
  5. package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
  6. package/Cameras/camera.d.ts +2 -1
  7. package/Cameras/camera.js +4 -1
  8. package/Cameras/camera.js.map +1 -1
  9. package/Engines/Extensions/engine.renderTarget.js +4 -2
  10. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  11. package/Engines/Processors/shaderProcessor.js +1 -1
  12. package/Engines/Processors/shaderProcessor.js.map +1 -1
  13. package/Engines/WebGPU/Extensions/engine.renderTarget.js +13 -9
  14. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  15. package/Engines/WebGPU/webgpuBundleList.d.ts +1 -1
  16. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  17. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +2 -2
  18. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +28 -17
  19. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  20. package/Engines/WebGPU/webgpuClearQuad.d.ts +1 -1
  21. package/Engines/WebGPU/webgpuClearQuad.js +3 -3
  22. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  23. package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +1 -1
  24. package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +1 -1
  25. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
  26. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  27. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  28. package/Engines/WebGPU/webgpuTextureHelper.js +16 -3
  29. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  30. package/Engines/constants.d.ts +4 -0
  31. package/Engines/constants.js +4 -0
  32. package/Engines/constants.js.map +1 -1
  33. package/Engines/engine.d.ts +2 -2
  34. package/Engines/thinEngine.js +2 -2
  35. package/Engines/thinEngine.js.map +1 -1
  36. package/Engines/webgpuEngine.js +48 -32
  37. package/Engines/webgpuEngine.js.map +1 -1
  38. package/Gizmos/axisDragGizmo.js +1 -0
  39. package/Gizmos/axisDragGizmo.js.map +1 -1
  40. package/Gizmos/axisScaleGizmo.js +1 -0
  41. package/Gizmos/axisScaleGizmo.js.map +1 -1
  42. package/Layers/effectLayer.js +1 -1
  43. package/Layers/effectLayer.js.map +1 -1
  44. package/Loading/Plugins/babylonFileLoader.js +1 -1
  45. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  46. package/Materials/Background/backgroundMaterial.js +1 -1
  47. package/Materials/Background/backgroundMaterial.js.map +1 -1
  48. package/Materials/Node/Blocks/Dual/TBNBlock.d.ts +47 -0
  49. package/Materials/Node/Blocks/Dual/TBNBlock.js +154 -0
  50. package/Materials/Node/Blocks/Dual/TBNBlock.js.map +1 -0
  51. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  52. package/Materials/Node/Blocks/Dual/index.js +1 -0
  53. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  54. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +5 -1
  55. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +20 -1
  56. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  57. package/Materials/Node/Blocks/Input/inputBlock.js +1 -1
  58. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  59. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +4 -0
  60. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +18 -1
  61. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  62. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +4 -0
  63. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +18 -1
  64. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  65. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +2 -1
  66. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  67. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +6 -5
  68. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  69. package/Materials/PBR/pbrMaterial.d.ts +9 -9
  70. package/Materials/PBR/pbrMaterial.js.map +1 -1
  71. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +3 -2
  72. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  73. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +3 -2
  74. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  75. package/Materials/Textures/cubeTexture.js +3 -0
  76. package/Materials/Textures/cubeTexture.js.map +1 -1
  77. package/Materials/Textures/renderTargetTexture.d.ts +2 -1
  78. package/Materials/Textures/renderTargetTexture.js +24 -20
  79. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  80. package/Materials/Textures/textureCreationOptions.d.ts +2 -0
  81. package/Materials/Textures/textureCreationOptions.js.map +1 -1
  82. package/Materials/materialHelper.js +4 -1
  83. package/Materials/materialHelper.js.map +1 -1
  84. package/Materials/shaderMaterial.js +1 -0
  85. package/Materials/shaderMaterial.js.map +1 -1
  86. package/Materials/standardMaterial.js +0 -3
  87. package/Materials/standardMaterial.js.map +1 -1
  88. package/Maths/math.vector.d.ts +4 -0
  89. package/Maths/math.vector.js +12 -0
  90. package/Maths/math.vector.js.map +1 -1
  91. package/Meshes/abstractMesh.d.ts +2 -2
  92. package/Meshes/abstractMesh.js.map +1 -1
  93. package/Meshes/instancedMesh.js +0 -1
  94. package/Meshes/instancedMesh.js.map +1 -1
  95. package/Meshes/subMesh.js +1 -1
  96. package/Meshes/subMesh.js.map +1 -1
  97. package/Meshes/thinInstanceMesh.js +34 -5
  98. package/Meshes/thinInstanceMesh.js.map +1 -1
  99. package/Meshes/transformNode.js +6 -6
  100. package/Meshes/transformNode.js.map +1 -1
  101. package/Misc/sceneOptimizer.d.ts +3 -2
  102. package/Misc/sceneOptimizer.js +4 -1
  103. package/Misc/sceneOptimizer.js.map +1 -1
  104. package/Physics/Plugins/oimoJSPlugin.js +1 -1
  105. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  106. package/Rendering/renderingGroup.js +14 -4
  107. package/Rendering/renderingGroup.js.map +1 -1
  108. package/Shaders/ShadersInclude/vertexColorMixing.d.ts +5 -0
  109. package/Shaders/ShadersInclude/vertexColorMixing.js +9 -0
  110. package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -0
  111. package/Shaders/color.vertex.d.ts +1 -0
  112. package/Shaders/color.vertex.js +2 -1
  113. package/Shaders/color.vertex.js.map +1 -1
  114. package/Shaders/default.vertex.d.ts +1 -0
  115. package/Shaders/default.vertex.js +2 -1
  116. package/Shaders/default.vertex.js.map +1 -1
  117. package/Shaders/pbr.vertex.d.ts +1 -0
  118. package/Shaders/pbr.vertex.js +2 -1
  119. package/Shaders/pbr.vertex.js.map +1 -1
  120. package/XR/features/WebXRControllerPointerSelection.js +1 -0
  121. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  122. package/package.json +1 -1
  123. package/scene.d.ts +3 -1
  124. package/scene.js +9 -5
  125. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"shaderProcessor.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Engines/Processors/shaderProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { ShaderCodeNode } from \"./shaderCodeNode\";\r\nimport { ShaderCodeCursor } from \"./shaderCodeCursor\";\r\nimport { ShaderCodeConditionNode } from \"./shaderCodeConditionNode\";\r\nimport { ShaderCodeTestNode } from \"./shaderCodeTestNode\";\r\nimport { ShaderDefineIsDefinedOperator } from \"./Expressions/Operators/shaderDefineIsDefinedOperator\";\r\nimport { ShaderDefineOrOperator } from \"./Expressions/Operators/shaderDefineOrOperator\";\r\nimport { ShaderDefineAndOperator } from \"./Expressions/Operators/shaderDefineAndOperator\";\r\nimport { ShaderDefineExpression } from \"./Expressions/shaderDefineExpression\";\r\nimport { ShaderDefineArithmeticOperator } from \"./Expressions/Operators/shaderDefineArithmeticOperator\";\r\nimport type { ProcessingOptions } from \"./shaderProcessingOptions\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\ndeclare type WebRequest = import(\"../../Misc/webRequest\").WebRequest;\r\ndeclare type LoadFileError = import(\"../../Misc/fileTools\").LoadFileError;\r\ndeclare type IOfflineProvider = import(\"../../Offline/IOfflineProvider\").IOfflineProvider;\r\ndeclare type IFileRequest = import(\"../../Misc/fileRequest\").IFileRequest;\r\ndeclare type ThinEngine = import(\"../thinEngine\").ThinEngine;\r\n\r\nconst regexSE = /defined\\s*?\\((.+?)\\)/g;\r\nconst regexSERevert = /defined\\s*?\\[(.+?)\\]/g;\r\n\r\n/** @hidden */\r\nexport class ShaderProcessor {\r\n public static Initialize(options: ProcessingOptions): void {\r\n if (options.processor && options.processor.initializeShaders) {\r\n options.processor.initializeShaders(options.processingContext);\r\n }\r\n }\r\n\r\n public static Process(sourceCode: string, options: ProcessingOptions, callback: (migratedCode: string) => void, engine: ThinEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n this._ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes);\r\n }\r\n const migratedCode = this._ProcessShaderConversion(codeWithIncludes, options, engine);\r\n callback(migratedCode);\r\n });\r\n }\r\n\r\n public static PreProcess(sourceCode: string, options: ProcessingOptions, callback: (migratedCode: string) => void, engine: ThinEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n this._ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes);\r\n }\r\n const migratedCode = this._ApplyPreProcessing(codeWithIncludes, options, engine);\r\n callback(migratedCode);\r\n });\r\n }\r\n\r\n public static Finalize(vertexCode: string, fragmentCode: string, options: ProcessingOptions): { vertexCode: string; fragmentCode: string } {\r\n if (!options.processor || !options.processor.finalizeShaders) {\r\n return { vertexCode, fragmentCode };\r\n }\r\n\r\n return options.processor.finalizeShaders(vertexCode, fragmentCode, options.processingContext);\r\n }\r\n\r\n private static _ProcessPrecision(source: string, options: ProcessingOptions): string {\r\n if (options.processor?.noPrecision) {\r\n return source;\r\n }\r\n\r\n const shouldUseHighPrecisionShader = options.shouldUseHighPrecisionShader;\r\n\r\n if (source.indexOf(\"precision highp float\") === -1) {\r\n if (!shouldUseHighPrecisionShader) {\r\n source = \"precision mediump float;\\n\" + source;\r\n } else {\r\n source = \"precision highp float;\\n\" + source;\r\n }\r\n } else {\r\n if (!shouldUseHighPrecisionShader) {\r\n // Moving highp to mediump\r\n source = source.replace(\"precision highp float\", \"precision mediump float\");\r\n }\r\n }\r\n\r\n return source;\r\n }\r\n\r\n private static _ExtractOperation(expression: string) {\r\n const regex = /defined\\((.+)\\)/;\r\n\r\n const match = regex.exec(expression);\r\n\r\n if (match && match.length) {\r\n return new ShaderDefineIsDefinedOperator(match[1].trim(), expression[0] === \"!\");\r\n }\r\n\r\n const operators = [\"==\", \">=\", \"<=\", \"<\", \">\"];\r\n let operator = \"\";\r\n let indexOperator = 0;\r\n\r\n for (operator of operators) {\r\n indexOperator = expression.indexOf(operator);\r\n\r\n if (indexOperator > -1) {\r\n break;\r\n }\r\n }\r\n\r\n if (indexOperator === -1) {\r\n return new ShaderDefineIsDefinedOperator(expression);\r\n }\r\n\r\n const define = expression.substring(0, indexOperator).trim();\r\n const value = expression.substring(indexOperator + operator.length).trim();\r\n\r\n return new ShaderDefineArithmeticOperator(define, operator, value);\r\n }\r\n\r\n private static _BuildSubExpression(expression: string): ShaderDefineExpression {\r\n expression = expression.replace(regexSE, \"defined[$1]\");\r\n\r\n const postfix = ShaderDefineExpression.infixToPostfix(expression);\r\n\r\n const stack: (string | ShaderDefineExpression)[] = [];\r\n\r\n for (const c of postfix) {\r\n if (c !== \"||\" && c !== \"&&\") {\r\n stack.push(c);\r\n } else if (stack.length >= 2) {\r\n let v1 = stack[stack.length - 1],\r\n v2 = stack[stack.length - 2];\r\n\r\n stack.length -= 2;\r\n\r\n const operator = c == \"&&\" ? new ShaderDefineAndOperator() : new ShaderDefineOrOperator();\r\n\r\n if (typeof v1 === \"string\") {\r\n v1 = v1.replace(regexSERevert, \"defined($1)\");\r\n }\r\n\r\n if (typeof v2 === \"string\") {\r\n v2 = v2.replace(regexSERevert, \"defined($1)\");\r\n }\r\n\r\n operator.leftOperand = typeof v2 === \"string\" ? this._ExtractOperation(v2) : v2;\r\n operator.rightOperand = typeof v1 === \"string\" ? this._ExtractOperation(v1) : v1;\r\n\r\n stack.push(operator);\r\n }\r\n }\r\n\r\n let result = stack[stack.length - 1];\r\n\r\n if (typeof result === \"string\") {\r\n result = result.replace(regexSERevert, \"defined($1)\");\r\n }\r\n\r\n // note: stack.length !== 1 if there was an error in the parsing\r\n\r\n return typeof result === \"string\" ? this._ExtractOperation(result) : result;\r\n }\r\n\r\n private static _BuildExpression(line: string, start: number): ShaderCodeTestNode {\r\n const node = new ShaderCodeTestNode();\r\n const command = line.substring(0, start);\r\n let expression = line.substring(start);\r\n\r\n expression = expression.substring(0, (expression.indexOf(\"//\") + 1 || expression.length + 1) - 1).trim();\r\n\r\n if (command === \"#ifdef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression);\r\n } else if (command === \"#ifndef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression, true);\r\n } else {\r\n node.testExpression = this._BuildSubExpression(expression);\r\n }\r\n\r\n return node;\r\n }\r\n\r\n private static _MoveCursorWithinIf(cursor: ShaderCodeCursor, rootNode: ShaderCodeConditionNode, ifNode: ShaderCodeNode) {\r\n let line = cursor.currentLine;\r\n while (this._MoveCursor(cursor, ifNode)) {\r\n line = cursor.currentLine;\r\n const first5 = line.substring(0, 5).toLowerCase();\r\n\r\n if (first5 === \"#else\") {\r\n const elseNode = new ShaderCodeNode();\r\n rootNode.children.push(elseNode);\r\n this._MoveCursor(cursor, elseNode);\r\n return;\r\n } else if (first5 === \"#elif\") {\r\n const elifNode = this._BuildExpression(line, 5);\r\n\r\n rootNode.children.push(elifNode);\r\n ifNode = elifNode;\r\n }\r\n }\r\n }\r\n\r\n private static _MoveCursor(cursor: ShaderCodeCursor, rootNode: ShaderCodeNode): boolean {\r\n while (cursor.canRead) {\r\n cursor.lineIndex++;\r\n const line = cursor.currentLine;\r\n const keywords = /(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;\r\n const matches = keywords.exec(line);\r\n\r\n if (matches && matches.length) {\r\n const keyword = matches[0];\r\n\r\n switch (keyword) {\r\n case \"#ifdef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = this._BuildExpression(line, 6);\r\n newRootNode.children.push(ifNode);\r\n this._MoveCursorWithinIf(cursor, newRootNode, ifNode);\r\n break;\r\n }\r\n case \"#else\":\r\n case \"#elif\":\r\n return true;\r\n case \"#endif\":\r\n return false;\r\n case \"#ifndef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = this._BuildExpression(line, 7);\r\n newRootNode.children.push(ifNode);\r\n this._MoveCursorWithinIf(cursor, newRootNode, ifNode);\r\n break;\r\n }\r\n case \"#if\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n const ifNode = this._BuildExpression(line, 3);\r\n rootNode.children.push(newRootNode);\r\n\r\n newRootNode.children.push(ifNode);\r\n this._MoveCursorWithinIf(cursor, newRootNode, ifNode);\r\n break;\r\n }\r\n }\r\n } else {\r\n const newNode = new ShaderCodeNode();\r\n newNode.line = line;\r\n rootNode.children.push(newNode);\r\n\r\n // Detect additional defines\r\n if (line[0] === \"#\" && line[1] === \"d\") {\r\n const split = line.replace(\";\", \"\").split(\" \");\r\n newNode.additionalDefineKey = split[1];\r\n\r\n if (split.length === 3) {\r\n newNode.additionalDefineValue = split[2];\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private static _EvaluatePreProcessors(sourceCode: string, preprocessors: { [key: string]: string }, options: ProcessingOptions): string {\r\n const rootNode = new ShaderCodeNode();\r\n const cursor = new ShaderCodeCursor();\r\n\r\n cursor.lineIndex = -1;\r\n cursor.lines = sourceCode.split(\"\\n\");\r\n\r\n // Decompose (We keep it in 2 steps so it is easier to maintain and perf hit is insignificant)\r\n this._MoveCursor(cursor, rootNode);\r\n\r\n // Recompose\r\n return rootNode.process(preprocessors, options);\r\n }\r\n\r\n private static _PreparePreProcessors(options: ProcessingOptions, engine: ThinEngine): { [key: string]: string } {\r\n const defines = options.defines;\r\n const preprocessors: { [key: string]: string } = {};\r\n\r\n for (const define of defines) {\r\n const keyValue = define.replace(\"#define\", \"\").replace(\";\", \"\").trim();\r\n const split = keyValue.split(\" \");\r\n preprocessors[split[0]] = split.length > 1 ? split[1] : \"\";\r\n }\r\n\r\n if (options.processor?.shaderLanguage === ShaderLanguage.GLSL) {\r\n preprocessors[\"GL_ES\"] = \"true\";\r\n }\r\n preprocessors[\"__VERSION__\"] = options.version;\r\n preprocessors[options.platformName] = \"true\";\r\n\r\n engine._getGlobalDefines(preprocessors);\r\n\r\n return preprocessors;\r\n }\r\n\r\n private static _ProcessShaderConversion(sourceCode: string, options: ProcessingOptions, engine: ThinEngine): string {\r\n let preparedSourceCode = this._ProcessPrecision(sourceCode, options);\r\n\r\n if (!options.processor) {\r\n return preparedSourceCode;\r\n }\r\n\r\n // Already converted\r\n if (options.processor.shaderLanguage === ShaderLanguage.GLSL && preparedSourceCode.indexOf(\"#version 3\") !== -1) {\r\n return preparedSourceCode.replace(\"#version 300 es\", \"\");\r\n }\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = this._PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext);\r\n }\r\n\r\n preparedSourceCode = this._EvaluatePreProcessors(preparedSourceCode, preprocessors, options);\r\n\r\n // Post processing\r\n if (options.processor.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext, engine);\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n }\r\n\r\n private static _ApplyPreProcessing(sourceCode: string, options: ProcessingOptions, engine: ThinEngine): string {\r\n let preparedSourceCode = sourceCode;\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = this._PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor?.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext);\r\n }\r\n\r\n preparedSourceCode = this._EvaluatePreProcessors(preparedSourceCode, preprocessors, options);\r\n\r\n // Post processing\r\n if (options.processor?.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext, engine);\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n }\r\n\r\n private static _ProcessIncludes(sourceCode: string, options: ProcessingOptions, callback: (data: any) => void): void {\r\n const regexShaderInclude = /#include\\s?<(.+)>(\\((.*)\\))*(\\[(.*)\\])*/g;\r\n let match = regexShaderInclude.exec(sourceCode);\r\n\r\n let returnValue = new String(sourceCode);\r\n let keepProcessing = false;\r\n\r\n while (match != null) {\r\n let includeFile = match[1];\r\n\r\n // Uniform declaration\r\n if (includeFile.indexOf(\"__decl__\") !== -1) {\r\n includeFile = includeFile.replace(/__decl__/, \"\");\r\n if (options.supportsUniformBuffers) {\r\n includeFile = includeFile.replace(/Vertex/, \"Ubo\");\r\n includeFile = includeFile.replace(/Fragment/, \"Ubo\");\r\n }\r\n includeFile = includeFile + \"Declaration\";\r\n }\r\n\r\n if (options.includesShadersStore[includeFile]) {\r\n // Substitution\r\n let includeContent = options.includesShadersStore[includeFile];\r\n if (match[2]) {\r\n const splits = match[3].split(\",\");\r\n\r\n for (let index = 0; index < splits.length; index += 2) {\r\n const source = new RegExp(splits[index], \"g\");\r\n const dest = splits[index + 1];\r\n\r\n includeContent = includeContent.replace(source, dest);\r\n }\r\n }\r\n\r\n if (match[4]) {\r\n const indexString = match[5];\r\n\r\n if (indexString.indexOf(\"..\") !== -1) {\r\n const indexSplits = indexString.split(\"..\");\r\n const minIndex = parseInt(indexSplits[0]);\r\n let maxIndex = parseInt(indexSplits[1]);\r\n let sourceIncludeContent = includeContent.slice(0);\r\n includeContent = \"\";\r\n\r\n if (isNaN(maxIndex)) {\r\n maxIndex = options.indexParameters[indexSplits[1]];\r\n }\r\n\r\n for (let i = minIndex; i < maxIndex; i++) {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n sourceIncludeContent = sourceIncludeContent.replace(/light\\{X\\}.(\\w*)/g, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent += sourceIncludeContent.replace(/\\{X\\}/g, i.toString()) + \"\\n\";\r\n }\r\n } else {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n includeContent = includeContent.replace(/light\\{X\\}.(\\w*)/g, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent = includeContent.replace(/\\{X\\}/g, indexString);\r\n }\r\n }\r\n\r\n // Replace\r\n returnValue = returnValue.replace(match[0], includeContent);\r\n\r\n keepProcessing = keepProcessing || includeContent.indexOf(\"#include<\") >= 0 || includeContent.indexOf(\"#include <\") >= 0;\r\n } else {\r\n const includeShaderUrl = options.shadersRepository + \"ShadersInclude/\" + includeFile + \".fx\";\r\n\r\n ShaderProcessor._FileToolsLoadFile(includeShaderUrl, (fileContent) => {\r\n options.includesShadersStore[includeFile] = fileContent as string;\r\n this._ProcessIncludes(<string>returnValue, options, callback);\r\n });\r\n return;\r\n }\r\n\r\n match = regexShaderInclude.exec(sourceCode);\r\n }\r\n\r\n if (keepProcessing) {\r\n this._ProcessIncludes(returnValue.toString(), options, callback);\r\n } else {\r\n callback(returnValue);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @returns a file request object\r\n * @hidden\r\n */\r\n public static _FileToolsLoadFile(\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void\r\n ): IFileRequest {\r\n throw _WarnImport(\"FileTools\");\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"shaderProcessor.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Engines/Processors/shaderProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { ShaderCodeNode } from \"./shaderCodeNode\";\r\nimport { ShaderCodeCursor } from \"./shaderCodeCursor\";\r\nimport { ShaderCodeConditionNode } from \"./shaderCodeConditionNode\";\r\nimport { ShaderCodeTestNode } from \"./shaderCodeTestNode\";\r\nimport { ShaderDefineIsDefinedOperator } from \"./Expressions/Operators/shaderDefineIsDefinedOperator\";\r\nimport { ShaderDefineOrOperator } from \"./Expressions/Operators/shaderDefineOrOperator\";\r\nimport { ShaderDefineAndOperator } from \"./Expressions/Operators/shaderDefineAndOperator\";\r\nimport { ShaderDefineExpression } from \"./Expressions/shaderDefineExpression\";\r\nimport { ShaderDefineArithmeticOperator } from \"./Expressions/Operators/shaderDefineArithmeticOperator\";\r\nimport type { ProcessingOptions } from \"./shaderProcessingOptions\";\r\nimport { _WarnImport } from \"../../Misc/devTools\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\ndeclare type WebRequest = import(\"../../Misc/webRequest\").WebRequest;\r\ndeclare type LoadFileError = import(\"../../Misc/fileTools\").LoadFileError;\r\ndeclare type IOfflineProvider = import(\"../../Offline/IOfflineProvider\").IOfflineProvider;\r\ndeclare type IFileRequest = import(\"../../Misc/fileRequest\").IFileRequest;\r\ndeclare type ThinEngine = import(\"../thinEngine\").ThinEngine;\r\n\r\nconst regexSE = /defined\\s*?\\((.+?)\\)/g;\r\nconst regexSERevert = /defined\\s*?\\[(.+?)\\]/g;\r\nconst regexShaderInclude = /#include\\s?<(.+)>(\\((.*)\\))*(\\[(.*)\\])*/g;\r\n\r\n/** @hidden */\r\nexport class ShaderProcessor {\r\n public static Initialize(options: ProcessingOptions): void {\r\n if (options.processor && options.processor.initializeShaders) {\r\n options.processor.initializeShaders(options.processingContext);\r\n }\r\n }\r\n\r\n public static Process(sourceCode: string, options: ProcessingOptions, callback: (migratedCode: string) => void, engine: ThinEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n this._ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes);\r\n }\r\n const migratedCode = this._ProcessShaderConversion(codeWithIncludes, options, engine);\r\n callback(migratedCode);\r\n });\r\n }\r\n\r\n public static PreProcess(sourceCode: string, options: ProcessingOptions, callback: (migratedCode: string) => void, engine: ThinEngine) {\r\n if (options.processor?.preProcessShaderCode) {\r\n sourceCode = options.processor.preProcessShaderCode(sourceCode, options.isFragment);\r\n }\r\n this._ProcessIncludes(sourceCode, options, (codeWithIncludes) => {\r\n if (options.processCodeAfterIncludes) {\r\n codeWithIncludes = options.processCodeAfterIncludes(options.isFragment ? \"fragment\" : \"vertex\", codeWithIncludes);\r\n }\r\n const migratedCode = this._ApplyPreProcessing(codeWithIncludes, options, engine);\r\n callback(migratedCode);\r\n });\r\n }\r\n\r\n public static Finalize(vertexCode: string, fragmentCode: string, options: ProcessingOptions): { vertexCode: string; fragmentCode: string } {\r\n if (!options.processor || !options.processor.finalizeShaders) {\r\n return { vertexCode, fragmentCode };\r\n }\r\n\r\n return options.processor.finalizeShaders(vertexCode, fragmentCode, options.processingContext);\r\n }\r\n\r\n private static _ProcessPrecision(source: string, options: ProcessingOptions): string {\r\n if (options.processor?.noPrecision) {\r\n return source;\r\n }\r\n\r\n const shouldUseHighPrecisionShader = options.shouldUseHighPrecisionShader;\r\n\r\n if (source.indexOf(\"precision highp float\") === -1) {\r\n if (!shouldUseHighPrecisionShader) {\r\n source = \"precision mediump float;\\n\" + source;\r\n } else {\r\n source = \"precision highp float;\\n\" + source;\r\n }\r\n } else {\r\n if (!shouldUseHighPrecisionShader) {\r\n // Moving highp to mediump\r\n source = source.replace(\"precision highp float\", \"precision mediump float\");\r\n }\r\n }\r\n\r\n return source;\r\n }\r\n\r\n private static _ExtractOperation(expression: string) {\r\n const regex = /defined\\((.+)\\)/;\r\n\r\n const match = regex.exec(expression);\r\n\r\n if (match && match.length) {\r\n return new ShaderDefineIsDefinedOperator(match[1].trim(), expression[0] === \"!\");\r\n }\r\n\r\n const operators = [\"==\", \">=\", \"<=\", \"<\", \">\"];\r\n let operator = \"\";\r\n let indexOperator = 0;\r\n\r\n for (operator of operators) {\r\n indexOperator = expression.indexOf(operator);\r\n\r\n if (indexOperator > -1) {\r\n break;\r\n }\r\n }\r\n\r\n if (indexOperator === -1) {\r\n return new ShaderDefineIsDefinedOperator(expression);\r\n }\r\n\r\n const define = expression.substring(0, indexOperator).trim();\r\n const value = expression.substring(indexOperator + operator.length).trim();\r\n\r\n return new ShaderDefineArithmeticOperator(define, operator, value);\r\n }\r\n\r\n private static _BuildSubExpression(expression: string): ShaderDefineExpression {\r\n expression = expression.replace(regexSE, \"defined[$1]\");\r\n\r\n const postfix = ShaderDefineExpression.infixToPostfix(expression);\r\n\r\n const stack: (string | ShaderDefineExpression)[] = [];\r\n\r\n for (const c of postfix) {\r\n if (c !== \"||\" && c !== \"&&\") {\r\n stack.push(c);\r\n } else if (stack.length >= 2) {\r\n let v1 = stack[stack.length - 1],\r\n v2 = stack[stack.length - 2];\r\n\r\n stack.length -= 2;\r\n\r\n const operator = c == \"&&\" ? new ShaderDefineAndOperator() : new ShaderDefineOrOperator();\r\n\r\n if (typeof v1 === \"string\") {\r\n v1 = v1.replace(regexSERevert, \"defined($1)\");\r\n }\r\n\r\n if (typeof v2 === \"string\") {\r\n v2 = v2.replace(regexSERevert, \"defined($1)\");\r\n }\r\n\r\n operator.leftOperand = typeof v2 === \"string\" ? this._ExtractOperation(v2) : v2;\r\n operator.rightOperand = typeof v1 === \"string\" ? this._ExtractOperation(v1) : v1;\r\n\r\n stack.push(operator);\r\n }\r\n }\r\n\r\n let result = stack[stack.length - 1];\r\n\r\n if (typeof result === \"string\") {\r\n result = result.replace(regexSERevert, \"defined($1)\");\r\n }\r\n\r\n // note: stack.length !== 1 if there was an error in the parsing\r\n\r\n return typeof result === \"string\" ? this._ExtractOperation(result) : result;\r\n }\r\n\r\n private static _BuildExpression(line: string, start: number): ShaderCodeTestNode {\r\n const node = new ShaderCodeTestNode();\r\n const command = line.substring(0, start);\r\n let expression = line.substring(start);\r\n\r\n expression = expression.substring(0, (expression.indexOf(\"//\") + 1 || expression.length + 1) - 1).trim();\r\n\r\n if (command === \"#ifdef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression);\r\n } else if (command === \"#ifndef\") {\r\n node.testExpression = new ShaderDefineIsDefinedOperator(expression, true);\r\n } else {\r\n node.testExpression = this._BuildSubExpression(expression);\r\n }\r\n\r\n return node;\r\n }\r\n\r\n private static _MoveCursorWithinIf(cursor: ShaderCodeCursor, rootNode: ShaderCodeConditionNode, ifNode: ShaderCodeNode) {\r\n let line = cursor.currentLine;\r\n while (this._MoveCursor(cursor, ifNode)) {\r\n line = cursor.currentLine;\r\n const first5 = line.substring(0, 5).toLowerCase();\r\n\r\n if (first5 === \"#else\") {\r\n const elseNode = new ShaderCodeNode();\r\n rootNode.children.push(elseNode);\r\n this._MoveCursor(cursor, elseNode);\r\n return;\r\n } else if (first5 === \"#elif\") {\r\n const elifNode = this._BuildExpression(line, 5);\r\n\r\n rootNode.children.push(elifNode);\r\n ifNode = elifNode;\r\n }\r\n }\r\n }\r\n\r\n private static _MoveCursor(cursor: ShaderCodeCursor, rootNode: ShaderCodeNode): boolean {\r\n while (cursor.canRead) {\r\n cursor.lineIndex++;\r\n const line = cursor.currentLine;\r\n const keywords = /(#ifdef)|(#else)|(#elif)|(#endif)|(#ifndef)|(#if)/;\r\n const matches = keywords.exec(line);\r\n\r\n if (matches && matches.length) {\r\n const keyword = matches[0];\r\n\r\n switch (keyword) {\r\n case \"#ifdef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = this._BuildExpression(line, 6);\r\n newRootNode.children.push(ifNode);\r\n this._MoveCursorWithinIf(cursor, newRootNode, ifNode);\r\n break;\r\n }\r\n case \"#else\":\r\n case \"#elif\":\r\n return true;\r\n case \"#endif\":\r\n return false;\r\n case \"#ifndef\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n rootNode.children.push(newRootNode);\r\n\r\n const ifNode = this._BuildExpression(line, 7);\r\n newRootNode.children.push(ifNode);\r\n this._MoveCursorWithinIf(cursor, newRootNode, ifNode);\r\n break;\r\n }\r\n case \"#if\": {\r\n const newRootNode = new ShaderCodeConditionNode();\r\n const ifNode = this._BuildExpression(line, 3);\r\n rootNode.children.push(newRootNode);\r\n\r\n newRootNode.children.push(ifNode);\r\n this._MoveCursorWithinIf(cursor, newRootNode, ifNode);\r\n break;\r\n }\r\n }\r\n } else {\r\n const newNode = new ShaderCodeNode();\r\n newNode.line = line;\r\n rootNode.children.push(newNode);\r\n\r\n // Detect additional defines\r\n if (line[0] === \"#\" && line[1] === \"d\") {\r\n const split = line.replace(\";\", \"\").split(\" \");\r\n newNode.additionalDefineKey = split[1];\r\n\r\n if (split.length === 3) {\r\n newNode.additionalDefineValue = split[2];\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private static _EvaluatePreProcessors(sourceCode: string, preprocessors: { [key: string]: string }, options: ProcessingOptions): string {\r\n const rootNode = new ShaderCodeNode();\r\n const cursor = new ShaderCodeCursor();\r\n\r\n cursor.lineIndex = -1;\r\n cursor.lines = sourceCode.split(\"\\n\");\r\n\r\n // Decompose (We keep it in 2 steps so it is easier to maintain and perf hit is insignificant)\r\n this._MoveCursor(cursor, rootNode);\r\n\r\n // Recompose\r\n return rootNode.process(preprocessors, options);\r\n }\r\n\r\n private static _PreparePreProcessors(options: ProcessingOptions, engine: ThinEngine): { [key: string]: string } {\r\n const defines = options.defines;\r\n const preprocessors: { [key: string]: string } = {};\r\n\r\n for (const define of defines) {\r\n const keyValue = define.replace(\"#define\", \"\").replace(\";\", \"\").trim();\r\n const split = keyValue.split(\" \");\r\n preprocessors[split[0]] = split.length > 1 ? split[1] : \"\";\r\n }\r\n\r\n if (options.processor?.shaderLanguage === ShaderLanguage.GLSL) {\r\n preprocessors[\"GL_ES\"] = \"true\";\r\n }\r\n preprocessors[\"__VERSION__\"] = options.version;\r\n preprocessors[options.platformName] = \"true\";\r\n\r\n engine._getGlobalDefines(preprocessors);\r\n\r\n return preprocessors;\r\n }\r\n\r\n private static _ProcessShaderConversion(sourceCode: string, options: ProcessingOptions, engine: ThinEngine): string {\r\n let preparedSourceCode = this._ProcessPrecision(sourceCode, options);\r\n\r\n if (!options.processor) {\r\n return preparedSourceCode;\r\n }\r\n\r\n // Already converted\r\n if (options.processor.shaderLanguage === ShaderLanguage.GLSL && preparedSourceCode.indexOf(\"#version 3\") !== -1) {\r\n return preparedSourceCode.replace(\"#version 300 es\", \"\");\r\n }\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = this._PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext);\r\n }\r\n\r\n preparedSourceCode = this._EvaluatePreProcessors(preparedSourceCode, preprocessors, options);\r\n\r\n // Post processing\r\n if (options.processor.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext, engine);\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n }\r\n\r\n private static _ApplyPreProcessing(sourceCode: string, options: ProcessingOptions, engine: ThinEngine): string {\r\n let preparedSourceCode = sourceCode;\r\n\r\n const defines = options.defines;\r\n\r\n const preprocessors = this._PreparePreProcessors(options, engine);\r\n\r\n // General pre processing\r\n if (options.processor?.preProcessor) {\r\n preparedSourceCode = options.processor.preProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext);\r\n }\r\n\r\n preparedSourceCode = this._EvaluatePreProcessors(preparedSourceCode, preprocessors, options);\r\n\r\n // Post processing\r\n if (options.processor?.postProcessor) {\r\n preparedSourceCode = options.processor.postProcessor(preparedSourceCode, defines, options.isFragment, options.processingContext, engine);\r\n }\r\n\r\n // Inline functions tagged with #define inline\r\n if (engine._features.needShaderCodeInlining) {\r\n preparedSourceCode = engine.inlineShaderCode(preparedSourceCode);\r\n }\r\n\r\n return preparedSourceCode;\r\n }\r\n\r\n private static _ProcessIncludes(sourceCode: string, options: ProcessingOptions, callback: (data: any) => void): void {\r\n let match = regexShaderInclude.exec(sourceCode);\r\n\r\n let returnValue = new String(sourceCode);\r\n let keepProcessing = false;\r\n\r\n while (match != null) {\r\n let includeFile = match[1];\r\n\r\n // Uniform declaration\r\n if (includeFile.indexOf(\"__decl__\") !== -1) {\r\n includeFile = includeFile.replace(/__decl__/, \"\");\r\n if (options.supportsUniformBuffers) {\r\n includeFile = includeFile.replace(/Vertex/, \"Ubo\");\r\n includeFile = includeFile.replace(/Fragment/, \"Ubo\");\r\n }\r\n includeFile = includeFile + \"Declaration\";\r\n }\r\n\r\n if (options.includesShadersStore[includeFile]) {\r\n // Substitution\r\n let includeContent = options.includesShadersStore[includeFile];\r\n if (match[2]) {\r\n const splits = match[3].split(\",\");\r\n\r\n for (let index = 0; index < splits.length; index += 2) {\r\n const source = new RegExp(splits[index], \"g\");\r\n const dest = splits[index + 1];\r\n\r\n includeContent = includeContent.replace(source, dest);\r\n }\r\n }\r\n\r\n if (match[4]) {\r\n const indexString = match[5];\r\n\r\n if (indexString.indexOf(\"..\") !== -1) {\r\n const indexSplits = indexString.split(\"..\");\r\n const minIndex = parseInt(indexSplits[0]);\r\n let maxIndex = parseInt(indexSplits[1]);\r\n let sourceIncludeContent = includeContent.slice(0);\r\n includeContent = \"\";\r\n\r\n if (isNaN(maxIndex)) {\r\n maxIndex = options.indexParameters[indexSplits[1]];\r\n }\r\n\r\n for (let i = minIndex; i < maxIndex; i++) {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n sourceIncludeContent = sourceIncludeContent.replace(/light\\{X\\}.(\\w*)/g, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent += sourceIncludeContent.replace(/\\{X\\}/g, i.toString()) + \"\\n\";\r\n }\r\n } else {\r\n if (!options.supportsUniformBuffers) {\r\n // Ubo replacement\r\n includeContent = includeContent.replace(/light\\{X\\}.(\\w*)/g, (str: string, p1: string) => {\r\n return p1 + \"{X}\";\r\n });\r\n }\r\n includeContent = includeContent.replace(/\\{X\\}/g, indexString);\r\n }\r\n }\r\n\r\n // Replace\r\n returnValue = returnValue.replace(match[0], includeContent);\r\n\r\n keepProcessing = keepProcessing || includeContent.indexOf(\"#include<\") >= 0 || includeContent.indexOf(\"#include <\") >= 0;\r\n } else {\r\n const includeShaderUrl = options.shadersRepository + \"ShadersInclude/\" + includeFile + \".fx\";\r\n\r\n ShaderProcessor._FileToolsLoadFile(includeShaderUrl, (fileContent) => {\r\n options.includesShadersStore[includeFile] = fileContent as string;\r\n this._ProcessIncludes(<string>returnValue, options, callback);\r\n });\r\n return;\r\n }\r\n\r\n match = regexShaderInclude.exec(sourceCode);\r\n }\r\n\r\n if (keepProcessing) {\r\n this._ProcessIncludes(returnValue.toString(), options, callback);\r\n } else {\r\n callback(returnValue);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @returns a file request object\r\n * @hidden\r\n */\r\n public static _FileToolsLoadFile(\r\n url: string,\r\n onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void,\r\n offlineProvider?: IOfflineProvider,\r\n useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void\r\n ): IFileRequest {\r\n throw _WarnImport(\"FileTools\");\r\n }\r\n}\r\n"]}
@@ -18,6 +18,7 @@ WebGPUEngine.prototype.createRenderTargetTexture = function (size, options) {
18
18
  fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;
19
19
  fullOptions.samplingMode = options.samplingMode === undefined ? 3 : options.samplingMode;
20
20
  fullOptions.creationFlags = (_a = options.creationFlags) !== null && _a !== void 0 ? _a : 0;
21
+ fullOptions.noColorTarget = !!options.noColorTarget;
21
22
  }
22
23
  else {
23
24
  fullOptions.generateMipMaps = options;
@@ -25,8 +26,9 @@ WebGPUEngine.prototype.createRenderTargetTexture = function (size, options) {
25
26
  fullOptions.generateStencilBuffer = false;
26
27
  fullOptions.samplingMode = 3;
27
28
  fullOptions.creationFlags = 0;
29
+ fullOptions.noColorTarget = false;
28
30
  }
29
- var texture = this._createInternalTexture(size, options, true, InternalTextureSource.RenderTarget);
31
+ var texture = fullOptions.noColorTarget ? null : this._createInternalTexture(size, options, true, InternalTextureSource.RenderTarget);
30
32
  rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;
31
33
  rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;
32
34
  rtWrapper.setTextures(texture);
@@ -41,19 +43,21 @@ WebGPUEngine.prototype.createRenderTargetTexture = function (size, options) {
41
43
  fullOptions.samplingMode === 7 ||
42
44
  fullOptions.samplingMode === 11, rtWrapper._generateStencilBuffer, rtWrapper.samples);
43
45
  }
44
- if (options !== undefined && typeof options === "object" && options.createMipMaps && !fullOptions.generateMipMaps) {
45
- texture.generateMipMaps = true;
46
- }
47
- this._textureHelper.createGPUTextureForInternalTexture(texture, undefined, undefined, undefined, fullOptions.creationFlags);
48
- if (options !== undefined && typeof options === "object" && options.createMipMaps && !fullOptions.generateMipMaps) {
49
- texture.generateMipMaps = false;
46
+ if (texture) {
47
+ if (options !== undefined && typeof options === "object" && options.createMipMaps && !fullOptions.generateMipMaps) {
48
+ texture.generateMipMaps = true;
49
+ }
50
+ this._textureHelper.createGPUTextureForInternalTexture(texture, undefined, undefined, undefined, fullOptions.creationFlags);
51
+ if (options !== undefined && typeof options === "object" && options.createMipMaps && !fullOptions.generateMipMaps) {
52
+ texture.generateMipMaps = false;
53
+ }
50
54
  }
51
55
  return rtWrapper;
52
56
  };
53
57
  WebGPUEngine.prototype._createDepthStencilTexture = function (size, options) {
54
58
  var internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);
55
- var internalOptions = __assign({ bilinearFiltering: false, comparisonFunction: 0, generateStencil: false, samples: 1, depthTextureFormat: 14 }, options);
56
- internalTexture.format = internalOptions.generateStencil ? 13 : internalOptions.depthTextureFormat;
59
+ var internalOptions = __assign({ bilinearFiltering: false, comparisonFunction: 0, generateStencil: false, samples: 1, depthTextureFormat: options.generateStencil ? 13 : 14 }, options);
60
+ internalTexture.format = internalOptions.depthTextureFormat;
57
61
  this._setupDepthStencilTexture(internalTexture, size, internalOptions.generateStencil, internalOptions.bilinearFiltering, internalOptions.comparisonFunction, internalOptions.samples);
58
62
  this._textureHelper.createGPUTextureForInternalTexture(internalTexture);
59
63
  this._internalTexturesCache.push(internalTexture);
@@ -1 +1 @@
1
- {"version":3,"file":"engine.renderTarget.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Engines/WebGPU/Extensions/engine.renderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, DepthTextureCreationOptions, TextureSize } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Constants } from \"../../constants\";\r\nimport type { RenderTargetWrapper } from \"../../renderTargetWrapper\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine\";\r\nimport { WebGPURenderTargetWrapper } from \"../webgpuRenderTargetWrapper\";\r\n\r\nWebGPUEngine.prototype._createHardwareRenderTargetWrapper = function (isMulti: boolean, isCube: boolean, size: TextureSize): WebGPURenderTargetWrapper {\r\n const rtWrapper = new WebGPURenderTargetWrapper(isMulti, isCube, size, this);\r\n this._renderTargetWrapperCache.push(rtWrapper);\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype.createRenderTargetTexture = function (size: TextureSize, options: boolean | RenderTargetCreationOptions): WebGPURenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size) as WebGPURenderTargetWrapper;\r\n\r\n const fullOptions: RenderTargetCreationOptions = {};\r\n\r\n if (options !== undefined && typeof options === \"object\") {\r\n fullOptions.generateMipMaps = options.generateMipMaps;\r\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\r\n fullOptions.samplingMode = options.samplingMode === undefined ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : options.samplingMode;\r\n fullOptions.creationFlags = options.creationFlags ?? 0;\r\n } else {\r\n fullOptions.generateMipMaps = <boolean>options;\r\n fullOptions.generateDepthBuffer = true;\r\n fullOptions.generateStencilBuffer = false;\r\n fullOptions.samplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n fullOptions.creationFlags = 0;\r\n }\r\n\r\n const texture = this._createInternalTexture(size, options, true, InternalTextureSource.RenderTarget);\r\n\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\r\n\r\n rtWrapper.setTextures(texture);\r\n\r\n if (rtWrapper._generateDepthBuffer || rtWrapper._generateStencilBuffer) {\r\n rtWrapper.createDepthStencilTexture(\r\n 0,\r\n fullOptions.samplingMode === undefined ||\r\n fullOptions.samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST,\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper.samples\r\n );\r\n }\r\n\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = true;\r\n }\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(texture, undefined, undefined, undefined, fullOptions.creationFlags);\r\n\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = false;\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype._createDepthStencilTexture = function (size: TextureSize, options: DepthTextureCreationOptions): InternalTexture {\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n\r\n const internalOptions = {\r\n bilinearFiltering: false,\r\n comparisonFunction: 0,\r\n generateStencil: false,\r\n samples: 1,\r\n depthTextureFormat: Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n ...options,\r\n };\r\n\r\n internalTexture.format = internalOptions.generateStencil ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : internalOptions.depthTextureFormat;\r\n\r\n this._setupDepthStencilTexture(\r\n internalTexture,\r\n size,\r\n internalOptions.generateStencil,\r\n internalOptions.bilinearFiltering,\r\n internalOptions.comparisonFunction,\r\n internalOptions.samples\r\n );\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(internalTexture);\r\n\r\n this._internalTexturesCache.push(internalTexture);\r\n\r\n return internalTexture;\r\n};\r\n\r\nWebGPUEngine.prototype._setupDepthStencilTexture = function (\r\n internalTexture: InternalTexture,\r\n size: TextureSize,\r\n generateStencil: boolean,\r\n bilinearFiltering: boolean,\r\n comparisonFunction: number,\r\n samples = 1\r\n): void {\r\n const width = (<{ width: number; height: number; layers?: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number; layers?: number }>size).height || <number>size;\r\n const layers = (<{ width: number; height: number; layers?: number }>size).layers || 0;\r\n\r\n internalTexture.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.is2DArray = layers > 0;\r\n internalTexture.depth = layers;\r\n internalTexture.isReady = true;\r\n internalTexture.samples = samples;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.samplingMode = bilinearFiltering ? Constants.TEXTURE_BILINEAR_SAMPLINGMODE : Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n internalTexture.type = Constants.TEXTURETYPE_FLOAT;\r\n internalTexture._comparisonFunction = comparisonFunction;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n};\r\n\r\nWebGPUEngine.prototype.updateRenderTargetTextureSampleCount = function (rtWrapper: Nullable<RenderTargetWrapper>, samples: number): number {\r\n if (!rtWrapper || !rtWrapper.texture || rtWrapper.samples === samples) {\r\n return samples;\r\n }\r\n\r\n samples = Math.min(samples, this.getCaps().maxMSAASamples);\r\n\r\n this._textureHelper.createMSAATexture(rtWrapper.texture, samples);\r\n\r\n if (rtWrapper._depthStencilTexture) {\r\n this._textureHelper.createMSAATexture(rtWrapper._depthStencilTexture, samples);\r\n rtWrapper._depthStencilTexture.samples = samples;\r\n }\r\n\r\n rtWrapper.texture.samples = samples;\r\n\r\n return samples;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.renderTarget.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Engines/WebGPU/Extensions/engine.renderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, DepthTextureCreationOptions, TextureSize } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Constants } from \"../../constants\";\r\nimport type { RenderTargetWrapper } from \"../../renderTargetWrapper\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine\";\r\nimport { WebGPURenderTargetWrapper } from \"../webgpuRenderTargetWrapper\";\r\n\r\nWebGPUEngine.prototype._createHardwareRenderTargetWrapper = function (isMulti: boolean, isCube: boolean, size: TextureSize): WebGPURenderTargetWrapper {\r\n const rtWrapper = new WebGPURenderTargetWrapper(isMulti, isCube, size, this);\r\n this._renderTargetWrapperCache.push(rtWrapper);\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype.createRenderTargetTexture = function (size: TextureSize, options: boolean | RenderTargetCreationOptions): WebGPURenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size) as WebGPURenderTargetWrapper;\r\n\r\n const fullOptions: RenderTargetCreationOptions = {};\r\n\r\n if (options !== undefined && typeof options === \"object\") {\r\n fullOptions.generateMipMaps = options.generateMipMaps;\r\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\r\n fullOptions.samplingMode = options.samplingMode === undefined ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : options.samplingMode;\r\n fullOptions.creationFlags = options.creationFlags ?? 0;\r\n fullOptions.noColorTarget = !!options.noColorTarget;\r\n } else {\r\n fullOptions.generateMipMaps = <boolean>options;\r\n fullOptions.generateDepthBuffer = true;\r\n fullOptions.generateStencilBuffer = false;\r\n fullOptions.samplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n fullOptions.creationFlags = 0;\r\n fullOptions.noColorTarget = false;\r\n }\r\n\r\n const texture = fullOptions.noColorTarget ? null : this._createInternalTexture(size, options, true, InternalTextureSource.RenderTarget);\r\n\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\r\n\r\n rtWrapper.setTextures(texture);\r\n\r\n if (rtWrapper._generateDepthBuffer || rtWrapper._generateStencilBuffer) {\r\n rtWrapper.createDepthStencilTexture(\r\n 0,\r\n fullOptions.samplingMode === undefined ||\r\n fullOptions.samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST,\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper.samples\r\n );\r\n }\r\n\r\n if (texture) {\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = true;\r\n }\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(texture, undefined, undefined, undefined, fullOptions.creationFlags);\r\n\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = false;\r\n }\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype._createDepthStencilTexture = function (size: TextureSize, options: DepthTextureCreationOptions): InternalTexture {\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n\r\n const internalOptions = {\r\n bilinearFiltering: false,\r\n comparisonFunction: 0,\r\n generateStencil: false,\r\n samples: 1,\r\n depthTextureFormat: options.generateStencil ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n ...options,\r\n };\r\n\r\n internalTexture.format = internalOptions.depthTextureFormat;\r\n\r\n this._setupDepthStencilTexture(\r\n internalTexture,\r\n size,\r\n internalOptions.generateStencil,\r\n internalOptions.bilinearFiltering,\r\n internalOptions.comparisonFunction,\r\n internalOptions.samples\r\n );\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(internalTexture);\r\n\r\n this._internalTexturesCache.push(internalTexture);\r\n\r\n return internalTexture;\r\n};\r\n\r\nWebGPUEngine.prototype._setupDepthStencilTexture = function (\r\n internalTexture: InternalTexture,\r\n size: TextureSize,\r\n generateStencil: boolean,\r\n bilinearFiltering: boolean,\r\n comparisonFunction: number,\r\n samples = 1\r\n): void {\r\n const width = (<{ width: number; height: number; layers?: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number; layers?: number }>size).height || <number>size;\r\n const layers = (<{ width: number; height: number; layers?: number }>size).layers || 0;\r\n\r\n internalTexture.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.is2DArray = layers > 0;\r\n internalTexture.depth = layers;\r\n internalTexture.isReady = true;\r\n internalTexture.samples = samples;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.samplingMode = bilinearFiltering ? Constants.TEXTURE_BILINEAR_SAMPLINGMODE : Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n internalTexture.type = Constants.TEXTURETYPE_FLOAT;\r\n internalTexture._comparisonFunction = comparisonFunction;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n};\r\n\r\nWebGPUEngine.prototype.updateRenderTargetTextureSampleCount = function (rtWrapper: Nullable<RenderTargetWrapper>, samples: number): number {\r\n if (!rtWrapper || !rtWrapper.texture || rtWrapper.samples === samples) {\r\n return samples;\r\n }\r\n\r\n samples = Math.min(samples, this.getCaps().maxMSAASamples);\r\n\r\n this._textureHelper.createMSAATexture(rtWrapper.texture, samples);\r\n\r\n if (rtWrapper._depthStencilTexture) {\r\n this._textureHelper.createMSAATexture(rtWrapper._depthStencilTexture, samples);\r\n rtWrapper._depthStencilTexture.samples = samples;\r\n }\r\n\r\n rtWrapper.texture.samples = samples;\r\n\r\n return samples;\r\n};\r\n"]}
@@ -64,7 +64,7 @@ export declare class WebGPUBundleList {
64
64
  addBundle(bundle?: GPURenderBundle): void;
65
65
  private _finishBundle;
66
66
  addItem(item: IWebGPURenderItem): void;
67
- getBundleEncoder(colorFormats: GPUTextureFormat[], depthStencilFormat: GPUTextureFormat | undefined, sampleCount: number): GPURenderBundleEncoder;
67
+ getBundleEncoder(colorFormats: (GPUTextureFormat | null)[], depthStencilFormat: GPUTextureFormat | undefined, sampleCount: number): GPURenderBundleEncoder;
68
68
  close(): void;
69
69
  run(renderPass: GPURenderPassEncoder): void;
70
70
  reset(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuBundleList.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Engines/WebGPU/webgpuBundleList.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\n\r\n/** @hidden */\r\ninterface IWebGPURenderItem {\r\n run(renderPass: GPURenderPassEncoder): void;\r\n clone(): IWebGPURenderItem;\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemViewport implements IWebGPURenderItem {\r\n public x: number;\r\n public y: number;\r\n public w: number;\r\n public h: number;\r\n\r\n public constructor(x: number, y: number, w: number, h: number) {\r\n this.x = Math.floor(x);\r\n this.y = Math.floor(y);\r\n this.w = Math.floor(w);\r\n this.h = Math.floor(h);\r\n }\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setViewport(this.x, this.y, this.w, this.h, 0, 1);\r\n }\r\n\r\n public clone(): WebGPURenderItemViewport {\r\n return new WebGPURenderItemViewport(this.x, this.y, this.w, this.h);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemScissor implements IWebGPURenderItem {\r\n public constructor(public x: number, public y: number, public w: number, public h: number) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setScissorRect(this.x, this.y, this.w, this.h);\r\n }\r\n\r\n public clone(): WebGPURenderItemScissor {\r\n return new WebGPURenderItemScissor(this.x, this.y, this.w, this.h);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemStencilRef implements IWebGPURenderItem {\r\n public constructor(public ref: number) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setStencilReference(this.ref);\r\n }\r\n\r\n public clone(): WebGPURenderItemStencilRef {\r\n return new WebGPURenderItemStencilRef(this.ref);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemBlendColor implements IWebGPURenderItem {\r\n public constructor(public color: Nullable<number>[]) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setBlendConstant(this.color as GPUColor);\r\n }\r\n\r\n public clone(): WebGPURenderItemBlendColor {\r\n return new WebGPURenderItemBlendColor(this.color);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemBeginOcclusionQuery implements IWebGPURenderItem {\r\n public constructor(public query: number) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.beginOcclusionQuery(this.query);\r\n }\r\n\r\n public clone(): WebGPURenderItemBeginOcclusionQuery {\r\n return new WebGPURenderItemBeginOcclusionQuery(this.query);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemEndOcclusionQuery implements IWebGPURenderItem {\r\n public constructor() {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.endOcclusionQuery();\r\n }\r\n\r\n public clone(): WebGPURenderItemEndOcclusionQuery {\r\n return new WebGPURenderItemEndOcclusionQuery();\r\n }\r\n}\r\n\r\nclass WebGPURenderItemBundles implements IWebGPURenderItem {\r\n public bundles: GPURenderBundle[];\r\n\r\n public constructor() {\r\n this.bundles = [];\r\n }\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.executeBundles(this.bundles);\r\n }\r\n\r\n public clone(): WebGPURenderItemBundles {\r\n const cloned = new WebGPURenderItemBundles();\r\n cloned.bundles = this.bundles;\r\n return cloned;\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPUBundleList {\r\n private _device: GPUDevice;\r\n private _bundleEncoder: GPURenderBundleEncoder | undefined;\r\n\r\n private _list: IWebGPURenderItem[];\r\n private _listLength: number;\r\n\r\n private _currentItemIsBundle: boolean;\r\n private _currentBundleList: GPURenderBundle[];\r\n\r\n public numDrawCalls = 0;\r\n\r\n public constructor(device: GPUDevice) {\r\n this._device = device;\r\n this._list = new Array(10);\r\n this._listLength = 0;\r\n }\r\n\r\n public addBundle(bundle?: GPURenderBundle): void {\r\n if (!this._currentItemIsBundle) {\r\n const item = new WebGPURenderItemBundles();\r\n\r\n this._list[this._listLength++] = item;\r\n this._currentBundleList = item.bundles;\r\n this._currentItemIsBundle = true;\r\n }\r\n if (bundle) {\r\n this._currentBundleList.push(bundle);\r\n }\r\n }\r\n\r\n private _finishBundle(): void {\r\n if (this._currentItemIsBundle && this._bundleEncoder) {\r\n this._currentBundleList.push(this._bundleEncoder.finish());\r\n this._bundleEncoder = undefined;\r\n this._currentItemIsBundle = false;\r\n }\r\n }\r\n\r\n public addItem(item: IWebGPURenderItem) {\r\n this._finishBundle();\r\n this._list[this._listLength++] = item;\r\n this._currentItemIsBundle = false;\r\n }\r\n\r\n public getBundleEncoder(colorFormats: GPUTextureFormat[], depthStencilFormat: GPUTextureFormat | undefined, sampleCount: number): GPURenderBundleEncoder {\r\n if (!this._currentItemIsBundle) {\r\n this.addBundle();\r\n this._bundleEncoder = this._device.createRenderBundleEncoder({\r\n colorFormats,\r\n depthStencilFormat,\r\n sampleCount,\r\n });\r\n }\r\n return this._bundleEncoder!;\r\n }\r\n\r\n public close(): void {\r\n this._finishBundle();\r\n }\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n this.close();\r\n for (let i = 0; i < this._listLength; ++i) {\r\n this._list[i].run(renderPass);\r\n }\r\n }\r\n\r\n public reset() {\r\n this._listLength = 0;\r\n this._currentItemIsBundle = false;\r\n this.numDrawCalls = 0;\r\n }\r\n\r\n public clone(): WebGPUBundleList {\r\n this.close();\r\n\r\n const cloned = new WebGPUBundleList(this._device);\r\n\r\n cloned._list = new Array(this._listLength);\r\n cloned._listLength = this._listLength;\r\n cloned.numDrawCalls = this.numDrawCalls;\r\n\r\n for (let i = 0; i < this._listLength; ++i) {\r\n cloned._list[i] = this._list[i].clone();\r\n }\r\n\r\n return cloned;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuBundleList.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Engines/WebGPU/webgpuBundleList.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\n\r\n/** @hidden */\r\ninterface IWebGPURenderItem {\r\n run(renderPass: GPURenderPassEncoder): void;\r\n clone(): IWebGPURenderItem;\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemViewport implements IWebGPURenderItem {\r\n public x: number;\r\n public y: number;\r\n public w: number;\r\n public h: number;\r\n\r\n public constructor(x: number, y: number, w: number, h: number) {\r\n this.x = Math.floor(x);\r\n this.y = Math.floor(y);\r\n this.w = Math.floor(w);\r\n this.h = Math.floor(h);\r\n }\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setViewport(this.x, this.y, this.w, this.h, 0, 1);\r\n }\r\n\r\n public clone(): WebGPURenderItemViewport {\r\n return new WebGPURenderItemViewport(this.x, this.y, this.w, this.h);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemScissor implements IWebGPURenderItem {\r\n public constructor(public x: number, public y: number, public w: number, public h: number) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setScissorRect(this.x, this.y, this.w, this.h);\r\n }\r\n\r\n public clone(): WebGPURenderItemScissor {\r\n return new WebGPURenderItemScissor(this.x, this.y, this.w, this.h);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemStencilRef implements IWebGPURenderItem {\r\n public constructor(public ref: number) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setStencilReference(this.ref);\r\n }\r\n\r\n public clone(): WebGPURenderItemStencilRef {\r\n return new WebGPURenderItemStencilRef(this.ref);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemBlendColor implements IWebGPURenderItem {\r\n public constructor(public color: Nullable<number>[]) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.setBlendConstant(this.color as GPUColor);\r\n }\r\n\r\n public clone(): WebGPURenderItemBlendColor {\r\n return new WebGPURenderItemBlendColor(this.color);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemBeginOcclusionQuery implements IWebGPURenderItem {\r\n public constructor(public query: number) {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.beginOcclusionQuery(this.query);\r\n }\r\n\r\n public clone(): WebGPURenderItemBeginOcclusionQuery {\r\n return new WebGPURenderItemBeginOcclusionQuery(this.query);\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPURenderItemEndOcclusionQuery implements IWebGPURenderItem {\r\n public constructor() {}\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.endOcclusionQuery();\r\n }\r\n\r\n public clone(): WebGPURenderItemEndOcclusionQuery {\r\n return new WebGPURenderItemEndOcclusionQuery();\r\n }\r\n}\r\n\r\nclass WebGPURenderItemBundles implements IWebGPURenderItem {\r\n public bundles: GPURenderBundle[];\r\n\r\n public constructor() {\r\n this.bundles = [];\r\n }\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n renderPass.executeBundles(this.bundles);\r\n }\r\n\r\n public clone(): WebGPURenderItemBundles {\r\n const cloned = new WebGPURenderItemBundles();\r\n cloned.bundles = this.bundles;\r\n return cloned;\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPUBundleList {\r\n private _device: GPUDevice;\r\n private _bundleEncoder: GPURenderBundleEncoder | undefined;\r\n\r\n private _list: IWebGPURenderItem[];\r\n private _listLength: number;\r\n\r\n private _currentItemIsBundle: boolean;\r\n private _currentBundleList: GPURenderBundle[];\r\n\r\n public numDrawCalls = 0;\r\n\r\n public constructor(device: GPUDevice) {\r\n this._device = device;\r\n this._list = new Array(10);\r\n this._listLength = 0;\r\n }\r\n\r\n public addBundle(bundle?: GPURenderBundle): void {\r\n if (!this._currentItemIsBundle) {\r\n const item = new WebGPURenderItemBundles();\r\n\r\n this._list[this._listLength++] = item;\r\n this._currentBundleList = item.bundles;\r\n this._currentItemIsBundle = true;\r\n }\r\n if (bundle) {\r\n this._currentBundleList.push(bundle);\r\n }\r\n }\r\n\r\n private _finishBundle(): void {\r\n if (this._currentItemIsBundle && this._bundleEncoder) {\r\n this._currentBundleList.push(this._bundleEncoder.finish());\r\n this._bundleEncoder = undefined;\r\n this._currentItemIsBundle = false;\r\n }\r\n }\r\n\r\n public addItem(item: IWebGPURenderItem) {\r\n this._finishBundle();\r\n this._list[this._listLength++] = item;\r\n this._currentItemIsBundle = false;\r\n }\r\n\r\n public getBundleEncoder(colorFormats: (GPUTextureFormat | null)[], depthStencilFormat: GPUTextureFormat | undefined, sampleCount: number): GPURenderBundleEncoder {\r\n if (!this._currentItemIsBundle) {\r\n this.addBundle();\r\n this._bundleEncoder = this._device.createRenderBundleEncoder({\r\n colorFormats,\r\n depthStencilFormat,\r\n sampleCount,\r\n });\r\n }\r\n return this._bundleEncoder!;\r\n }\r\n\r\n public close(): void {\r\n this._finishBundle();\r\n }\r\n\r\n public run(renderPass: GPURenderPassEncoder) {\r\n this.close();\r\n for (let i = 0; i < this._listLength; ++i) {\r\n this._list[i].run(renderPass);\r\n }\r\n }\r\n\r\n public reset() {\r\n this._listLength = 0;\r\n this._currentItemIsBundle = false;\r\n this.numDrawCalls = 0;\r\n }\r\n\r\n public clone(): WebGPUBundleList {\r\n this.close();\r\n\r\n const cloned = new WebGPUBundleList(this._device);\r\n\r\n cloned._list = new Array(this._listLength);\r\n cloned._listLength = this._listLength;\r\n cloned.numDrawCalls = this.numDrawCalls;\r\n\r\n for (let i = 0; i < this._listLength; ++i) {\r\n cloned._list[i] = this._list[i].clone();\r\n }\r\n\r\n return cloned;\r\n }\r\n}\r\n"]}
@@ -70,7 +70,7 @@ export declare abstract class WebGPUCacheRenderPipeline {
70
70
  pipeline: Nullable<GPURenderPipeline>;
71
71
  }): void;
72
72
  readonly vertexBuffers: VertexBuffer[];
73
- get colorFormats(): GPUTextureFormat[];
73
+ get colorFormats(): (GPUTextureFormat | null)[];
74
74
  readonly mrtAttachments: number[];
75
75
  readonly mrtTextureArray: InternalTexture[];
76
76
  readonly mrtTextureCount: number;
@@ -85,7 +85,7 @@ export declare abstract class WebGPUCacheRenderPipeline {
85
85
  setDepthCullingState(cullEnabled: boolean, frontFace: number, cullFace: number, zOffset: number, zOffsetUnits: number, depthTestEnabled: boolean, depthWriteEnabled: boolean, depthCompare: Nullable<number>): void;
86
86
  setDepthBias(depthBias: number): void;
87
87
  setDepthBiasSlopeScale(depthBiasSlopeScale: number): void;
88
- setColorFormat(format: GPUTextureFormat): void;
88
+ setColorFormat(format: GPUTextureFormat | null): void;
89
89
  setMRTAttachments(attachments: number[]): void;
90
90
  setMRT(textureArray: InternalTexture[], textureCount?: number): void;
91
91
  setAlphaBlendEnabled(enabled: boolean): void;
@@ -189,7 +189,7 @@ var WebGPUCacheRenderPipeline = /** @class */ (function () {
189
189
  };
190
190
  WebGPUCacheRenderPipeline.prototype.setColorFormat = function (format) {
191
191
  this._webgpuColorFormat[0] = format;
192
- this._colorFormat = renderableTextureFormatToIndex[format];
192
+ this._colorFormat = renderableTextureFormatToIndex[format !== null && format !== void 0 ? format : ""];
193
193
  };
194
194
  WebGPUCacheRenderPipeline.prototype.setMRTAttachments = function (attachments) {
195
195
  this.mrtAttachments = attachments;
@@ -206,7 +206,7 @@ var WebGPUCacheRenderPipeline = /** @class */ (function () {
206
206
  }
207
207
  };
208
208
  WebGPUCacheRenderPipeline.prototype.setMRT = function (textureArray, textureCount) {
209
- var _a;
209
+ var _a, _b;
210
210
  textureCount = textureCount !== null && textureCount !== void 0 ? textureCount : textureArray.length;
211
211
  if (textureCount > 10) {
212
212
  // If we want more than 10 attachments we need to change this method (and the StatePosition enum) but 10 seems plenty: note that WebGPU only supports 8 at the time (2021/12/13)!
@@ -223,7 +223,7 @@ var WebGPUCacheRenderPipeline = /** @class */ (function () {
223
223
  var texture = textureArray[i];
224
224
  var gpuWrapper = texture === null || texture === void 0 ? void 0 : texture._hardwareTexture;
225
225
  this._mrtFormats[numRT] = (_a = gpuWrapper === null || gpuWrapper === void 0 ? void 0 : gpuWrapper.format) !== null && _a !== void 0 ? _a : this._webgpuColorFormat[0];
226
- bits[indexBits] += renderableTextureFormatToIndex[this._mrtFormats[numRT]] << mask;
226
+ bits[indexBits] += renderableTextureFormatToIndex[(_b = this._mrtFormats[numRT]) !== null && _b !== void 0 ? _b : ""] << mask;
227
227
  mask += 6;
228
228
  numRT++;
229
229
  if (mask >= 32) {
@@ -749,9 +749,30 @@ var WebGPUCacheRenderPipeline = /** @class */ (function () {
749
749
  var colorBlend = this._getColorBlendState();
750
750
  if (this._mrtAttachments1 > 0) {
751
751
  for (var i = 0; i < this._mrtFormats.length; ++i) {
752
+ var format = this._mrtFormats[i];
753
+ if (format) {
754
+ var descr = {
755
+ format: format,
756
+ writeMask: (this._mrtEnabledMask & (1 << i)) !== 0 ? this._writeMask : 0,
757
+ };
758
+ if (alphaBlend && colorBlend) {
759
+ descr.blend = {
760
+ alpha: alphaBlend,
761
+ color: colorBlend,
762
+ };
763
+ }
764
+ colorStates.push(descr);
765
+ }
766
+ else {
767
+ colorStates.push(null);
768
+ }
769
+ }
770
+ }
771
+ else {
772
+ if (this._webgpuColorFormat[0]) {
752
773
  var descr = {
753
- format: this._mrtFormats[i],
754
- writeMask: (this._mrtEnabledMask & (1 << i)) !== 0 ? this._writeMask : 0,
774
+ format: this._webgpuColorFormat[0],
775
+ writeMask: this._writeMask,
755
776
  };
756
777
  if (alphaBlend && colorBlend) {
757
778
  descr.blend = {
@@ -761,19 +782,9 @@ var WebGPUCacheRenderPipeline = /** @class */ (function () {
761
782
  }
762
783
  colorStates.push(descr);
763
784
  }
764
- }
765
- else {
766
- var descr = {
767
- format: this._webgpuColorFormat[0],
768
- writeMask: this._writeMask,
769
- };
770
- if (alphaBlend && colorBlend) {
771
- descr.blend = {
772
- alpha: alphaBlend,
773
- color: colorBlend,
774
- };
785
+ else {
786
+ colorStates.push(null);
775
787
  }
776
- colorStates.push(descr);
777
788
  }
778
789
  var stencilFrontBack = {
779
790
  compare: WebGPUCacheRenderPipeline._GetCompareFunction(this._stencilEnabled ? this._stencilFrontCompare : 7 /* ALWAYS */),