@babylonjs/core 7.26.0 → 7.26.2

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 (70) hide show
  1. package/Engines/Extensions/engine.readTexture.d.ts +2 -9
  2. package/Engines/Extensions/engine.readTexture.js +3 -76
  3. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  4. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  5. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  6. package/Engines/abstractEngine.functions.d.ts +9 -0
  7. package/Engines/abstractEngine.functions.js +76 -0
  8. package/Engines/abstractEngine.functions.js.map +1 -1
  9. package/Engines/abstractEngine.js +2 -2
  10. package/Engines/abstractEngine.js.map +1 -1
  11. package/Engines/engine.d.ts +2 -0
  12. package/Engines/engine.js +2 -0
  13. package/Engines/engine.js.map +1 -1
  14. package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +4 -0
  15. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +17 -0
  16. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  17. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -0
  18. package/Materials/Node/Blocks/Dual/textureBlock.js +29 -22
  19. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  20. package/Materials/Node/Blocks/index.d.ts +3 -0
  21. package/Materials/Node/Blocks/index.js +3 -0
  22. package/Materials/Node/Blocks/index.js.map +1 -1
  23. package/Materials/Node/Blocks/loopBlock.d.ts +49 -0
  24. package/Materials/Node/Blocks/loopBlock.js +110 -0
  25. package/Materials/Node/Blocks/loopBlock.js.map +1 -0
  26. package/Materials/Node/Blocks/storageReadBlock.d.ts +27 -0
  27. package/Materials/Node/Blocks/storageReadBlock.js +52 -0
  28. package/Materials/Node/Blocks/storageReadBlock.js.map +1 -0
  29. package/Materials/Node/Blocks/storageWriteBlock.d.ts +31 -0
  30. package/Materials/Node/Blocks/storageWriteBlock.js +62 -0
  31. package/Materials/Node/Blocks/storageWriteBlock.js.map +1 -0
  32. package/Materials/Node/nodeMaterial.d.ts +1 -0
  33. package/Materials/Node/nodeMaterial.js +44 -12
  34. package/Materials/Node/nodeMaterial.js.map +1 -1
  35. package/Materials/Node/nodeMaterialBlock.d.ts +6 -0
  36. package/Materials/Node/nodeMaterialBlock.js +46 -3
  37. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  38. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +6 -0
  39. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +9 -0
  40. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  41. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -0
  42. package/Materials/Node/nodeMaterialBuildState.js +2 -0
  43. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  44. package/Materials/Textures/cubeTexture.d.ts +0 -1
  45. package/Materials/Textures/cubeTexture.js +0 -1
  46. package/Materials/Textures/cubeTexture.js.map +1 -1
  47. package/Materials/Textures/renderTargetTexture.d.ts +2 -0
  48. package/Materials/Textures/renderTargetTexture.js +13 -2
  49. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  50. package/Materials/effectRenderer.d.ts +0 -1
  51. package/Materials/effectRenderer.js +0 -2
  52. package/Materials/effectRenderer.js.map +1 -1
  53. package/Materials/uniformBuffer.d.ts +0 -1
  54. package/Materials/uniformBuffer.js +0 -1
  55. package/Materials/uniformBuffer.js.map +1 -1
  56. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +3 -1
  57. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +19 -8
  58. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  59. package/Misc/dumpTools.js +103 -82
  60. package/Misc/dumpTools.js.map +1 -1
  61. package/Misc/index.d.ts +2 -0
  62. package/Misc/index.js +3 -0
  63. package/Misc/index.js.map +1 -1
  64. package/Misc/textureTools.d.ts +0 -2
  65. package/Misc/textureTools.js +11 -2
  66. package/Misc/textureTools.js.map +1 -1
  67. package/PostProcesses/postProcess.d.ts +0 -1
  68. package/PostProcesses/postProcess.js +0 -1
  69. package/PostProcesses/postProcess.js.map +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,62 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
+ import { RegisterClass } from "../../../Misc/typeStore.js";
5
+ import { LoopBlock } from "./loopBlock.js";
6
+ import { NodeMaterialConnectionPointCustomObject } from "../nodeMaterialConnectionPointCustomObject.js";
7
+ /**
8
+ * Block used to write to a variable within a loop
9
+ */
10
+ export class StorageWriteBlock extends NodeMaterialBlock {
11
+ /**
12
+ * Creates a new StorageWriteBlock
13
+ * @param name defines the block name
14
+ */
15
+ constructor(name) {
16
+ super(name, NodeMaterialBlockTargets.Neutral);
17
+ this.registerInput("loopID", NodeMaterialBlockConnectionPointTypes.Object, false, undefined, new NodeMaterialConnectionPointCustomObject("loopID", this, 0 /* NodeMaterialConnectionPointDirection.Input */, LoopBlock, "LoopBlock"));
18
+ this.registerInput("value", NodeMaterialBlockConnectionPointTypes.AutoDetect);
19
+ this._linkConnectionTypes(0, 1);
20
+ }
21
+ /**
22
+ * Gets the current class name
23
+ * @returns the class name
24
+ */
25
+ getClassName() {
26
+ return "StorageWriteBlock";
27
+ }
28
+ /**
29
+ * Gets the loop link component
30
+ */
31
+ get loopID() {
32
+ return this._inputs[0];
33
+ }
34
+ /**
35
+ * Gets the value component
36
+ */
37
+ get value() {
38
+ return this._inputs[1];
39
+ }
40
+ /** Gets a boolean indicating that this connection will be used in the fragment shader
41
+ * @returns true if connected in fragment shader
42
+ */
43
+ isConnectedInFragmentShader() {
44
+ if (!this.loopID.isConnected) {
45
+ return false;
46
+ }
47
+ const loopBlock = this.loopID.connectedPoint.ownerBlock;
48
+ return loopBlock.output.isConnectedInFragmentShader;
49
+ }
50
+ _buildBlock(state) {
51
+ super._buildBlock(state);
52
+ const value = this.value;
53
+ if (!this.loopID.isConnected) {
54
+ return this;
55
+ }
56
+ const loopBlock = this.loopID.connectedPoint.ownerBlock;
57
+ state.compilationString += `${loopBlock.output.associatedVariableName} = ${value.associatedVariableName};\n`;
58
+ return this;
59
+ }
60
+ }
61
+ RegisterClass("BABYLON.StorageWriteBlock", StorageWriteBlock);
62
+ //# sourceMappingURL=storageWriteBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageWriteBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/storageWriteBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uCAAuC,EAAE,MAAM,4CAA4C,CAAC;AACrG;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,iBAAiB;IACpD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,CACd,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,KAAK,EACL,SAAS,EACT,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,sDAA8C,SAAS,EAAE,WAAW,CAAC,CAClI,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAE9E,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACa,2BAA2B;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC1B,OAAO,KAAK,CAAC;SAChB;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,UAAuB,CAAC;QAEtE,OAAO,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC;IACxD,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,UAAuB,CAAC;QAEtE,KAAK,CAAC,iBAAiB,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,sBAAsB,MAAM,KAAK,CAAC,sBAAsB,KAAK,CAAC;QAE7G,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,2BAA2B,EAAE,iBAAiB,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialConnectionPointDirection, type NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { LoopBlock } from \"./loopBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\n/**\r\n * Block used to write to a variable within a loop\r\n */\r\nexport class StorageWriteBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new StorageWriteBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\r\n \"loopID\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n false,\r\n undefined,\r\n new NodeMaterialConnectionPointCustomObject(\"loopID\", this, NodeMaterialConnectionPointDirection.Input, LoopBlock, \"LoopBlock\")\r\n );\r\n this.registerInput(\"value\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n\r\n this._linkConnectionTypes(0, 1);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"StorageWriteBlock\";\r\n }\r\n\r\n /**\r\n * Gets the loop link component\r\n */\r\n public get loopID(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the value component\r\n */\r\n public get value(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /** Gets a boolean indicating that this connection will be used in the fragment shader\r\n * @returns true if connected in fragment shader\r\n */\r\n public override isConnectedInFragmentShader() {\r\n if (!this.loopID.isConnected) {\r\n return false;\r\n }\r\n const loopBlock = this.loopID.connectedPoint!.ownerBlock as LoopBlock;\r\n\r\n return loopBlock.output.isConnectedInFragmentShader;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const value = this.value;\r\n\r\n if (!this.loopID.isConnected) {\r\n return this;\r\n }\r\n\r\n const loopBlock = this.loopID.connectedPoint!.ownerBlock as LoopBlock;\r\n\r\n state.compilationString += `${loopBlock.output.associatedVariableName} = ${value.associatedVariableName};\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.StorageWriteBlock\", StorageWriteBlock);\r\n"]}
@@ -370,6 +370,7 @@ export declare class NodeMaterial extends PushMaterial {
370
370
  */
371
371
  needAlphaTesting(): boolean;
372
372
  private _processInitializeOnLink;
373
+ private _attachBlock;
373
374
  private _initializeBlock;
374
375
  private _resetDualBlocks;
375
376
  /**
@@ -530,12 +530,7 @@ export class NodeMaterial extends PushMaterial {
530
530
  }
531
531
  this._initializeBlock(block, state, nodesToProcessForOtherBuildState, autoConfigure);
532
532
  }
533
- _initializeBlock(node, state, nodesToProcessForOtherBuildState, autoConfigure = true) {
534
- node.initialize(state);
535
- if (autoConfigure) {
536
- node.autoConfigure(this);
537
- }
538
- node._preparationId = this._buildId;
533
+ _attachBlock(node) {
539
534
  if (this.attachedBlocks.indexOf(node) === -1) {
540
535
  if (node.isUnique) {
541
536
  const className = node.getClassName();
@@ -548,18 +543,41 @@ export class NodeMaterial extends PushMaterial {
548
543
  }
549
544
  this.attachedBlocks.push(node);
550
545
  }
546
+ }
547
+ _initializeBlock(node, state, nodesToProcessForOtherBuildState, autoConfigure = true) {
548
+ node.initialize(state);
549
+ if (autoConfigure) {
550
+ node.autoConfigure(this);
551
+ }
552
+ node._preparationId = this._buildId;
553
+ this._attachBlock(node);
551
554
  for (const input of node.inputs) {
552
555
  input.associatedVariableName = "";
553
556
  const connectedPoint = input.connectedPoint;
554
- if (connectedPoint) {
557
+ if (connectedPoint && !connectedPoint._preventBubbleUp) {
555
558
  const block = connectedPoint.ownerBlock;
556
559
  if (block !== node) {
557
560
  this._processInitializeOnLink(block, state, nodesToProcessForOtherBuildState, autoConfigure);
558
561
  }
559
562
  }
560
563
  }
561
- // Teleportation
562
- if (node.isTeleportOut) {
564
+ // Loop
565
+ if (node.isLoop) {
566
+ // We need to keep the storage write block in the active blocks
567
+ const loopBlock = node;
568
+ if (loopBlock.loopID.hasEndpoints) {
569
+ for (const endpoint of loopBlock.loopID.endpoints) {
570
+ const block = endpoint.ownerBlock;
571
+ if (block.outputs.length !== 0) {
572
+ continue;
573
+ }
574
+ state._terminalBlocks.add(block); // Attach the storage write only
575
+ this._processInitializeOnLink(block, state, nodesToProcessForOtherBuildState, autoConfigure);
576
+ }
577
+ }
578
+ }
579
+ else if (node.isTeleportOut) {
580
+ // Teleportation
563
581
  const teleport = node;
564
582
  if (teleport.entryPoint) {
565
583
  this._processInitializeOnLink(teleport.entryPoint, state, nodesToProcessForOtherBuildState, autoConfigure);
@@ -573,9 +591,9 @@ export class NodeMaterial extends PushMaterial {
573
591
  if (node.target === NodeMaterialBlockTargets.VertexAndFragment) {
574
592
  node.buildId = id;
575
593
  }
576
- for (const inputs of node.inputs) {
577
- const connectedPoint = inputs.connectedPoint;
578
- if (connectedPoint) {
594
+ for (const input of node.inputs) {
595
+ const connectedPoint = input.connectedPoint;
596
+ if (connectedPoint && !connectedPoint._preventBubbleUp) {
579
597
  const block = connectedPoint.ownerBlock;
580
598
  if (block !== node) {
581
599
  this._resetDualBlocks(block, id);
@@ -589,6 +607,19 @@ export class NodeMaterial extends PushMaterial {
589
607
  this._resetDualBlocks(teleportOut.entryPoint, id);
590
608
  }
591
609
  }
610
+ else if (node.isLoop) {
611
+ // Loop
612
+ const loopBlock = node;
613
+ if (loopBlock.loopID.hasEndpoints) {
614
+ for (const endpoint of loopBlock.loopID.endpoints) {
615
+ const block = endpoint.ownerBlock;
616
+ if (block.outputs.length !== 0) {
617
+ continue;
618
+ }
619
+ this._resetDualBlocks(block, id);
620
+ }
621
+ }
622
+ }
592
623
  }
593
624
  /**
594
625
  * Remove a block from the current node material
@@ -1416,6 +1447,7 @@ export class NodeMaterial extends PushMaterial {
1416
1447
  this._vertexOutputNodes.length = 0;
1417
1448
  this._fragmentOutputNodes.length = 0;
1418
1449
  this.attachedBlocks.length = 0;
1450
+ this._buildIsInProgress = false;
1419
1451
  }
1420
1452
  /**
1421
1453
  * Clear the current material and set it to a default state