@babylonjs/core 8.15.1 → 8.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/Animations/animationGroup.d.ts +3 -1
  2. package/Animations/animationGroup.js +3 -2
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +8 -0
  5. package/AudioV2/webAudio/components/webAudioParameterComponent.js +36 -3
  6. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  7. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +10 -0
  8. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
  9. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +11 -0
  10. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
  11. package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
  12. package/AudioV2/webAudio/webAudioEngine.js +45 -0
  13. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  14. package/Behaviors/Cameras/framingBehavior.js +3 -3
  15. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  16. package/Debug/directionalLightFrustumViewer.d.ts +6 -0
  17. package/Debug/directionalLightFrustumViewer.js +39 -1
  18. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  19. package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +2 -1
  20. package/Engines/AbstractEngine/abstractEngine.alpha.js +9 -9
  21. package/Engines/AbstractEngine/abstractEngine.alpha.js.map +1 -1
  22. package/Engines/AbstractEngine/abstractEngine.states.d.ts +4 -104
  23. package/Engines/AbstractEngine/abstractEngine.states.js +4 -70
  24. package/Engines/AbstractEngine/abstractEngine.states.js.map +1 -1
  25. package/Engines/AbstractEngine/abstractEngine.stencil.d.ts +147 -0
  26. package/Engines/AbstractEngine/abstractEngine.stencil.js +93 -0
  27. package/Engines/AbstractEngine/abstractEngine.stencil.js.map +1 -0
  28. package/Engines/AbstractEngine/index.d.ts +1 -0
  29. package/Engines/AbstractEngine/index.js +1 -0
  30. package/Engines/AbstractEngine/index.js.map +1 -1
  31. package/Engines/Extensions/engine.alpha.d.ts +2 -1
  32. package/Engines/Extensions/engine.alpha.js +7 -78
  33. package/Engines/Extensions/engine.alpha.js.map +1 -1
  34. package/Engines/WebGL/webGL2ShaderProcessors.js +8 -1
  35. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  36. package/Engines/WebGPU/Extensions/engine.alpha.d.ts +2 -1
  37. package/Engines/WebGPU/Extensions/engine.alpha.js +12 -82
  38. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  39. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +12 -5
  40. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +139 -72
  41. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  42. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +13 -1
  43. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  44. package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +8 -0
  45. package/Engines/WebGPU/webgpuStencilStateComposer.js +40 -0
  46. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  47. package/Engines/abstractEngine.d.ts +7 -3
  48. package/Engines/abstractEngine.js +12 -5
  49. package/Engines/abstractEngine.js.map +1 -1
  50. package/Engines/constants.d.ts +30 -28
  51. package/Engines/constants.js +30 -28
  52. package/Engines/constants.js.map +1 -1
  53. package/Engines/engine.d.ts +10 -0
  54. package/Engines/engine.js +1 -0
  55. package/Engines/engine.js.map +1 -1
  56. package/Engines/engineCapabilities.d.ts +4 -0
  57. package/Engines/engineCapabilities.js.map +1 -1
  58. package/Engines/nativeEngine.d.ts +2 -1
  59. package/Engines/nativeEngine.js +6 -3
  60. package/Engines/nativeEngine.js.map +1 -1
  61. package/Engines/nullEngine.d.ts +2 -1
  62. package/Engines/nullEngine.js +7 -4
  63. package/Engines/nullEngine.js.map +1 -1
  64. package/Engines/thinEngine.js +16 -3
  65. package/Engines/thinEngine.js.map +1 -1
  66. package/Engines/webgpuEngine.d.ts +1 -0
  67. package/Engines/webgpuEngine.js +6 -4
  68. package/Engines/webgpuEngine.js.map +1 -1
  69. package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +1 -1
  70. package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -1
  71. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -1
  72. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +14 -6
  73. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  74. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +3 -0
  75. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  76. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +6 -5
  77. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  78. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  79. package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -5
  80. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  81. package/FrameGraph/frameGraph.d.ts +6 -0
  82. package/FrameGraph/frameGraph.js +8 -0
  83. package/FrameGraph/frameGraph.js.map +1 -1
  84. package/FrameGraph/frameGraphContext.d.ts +16 -0
  85. package/FrameGraph/frameGraphContext.js +23 -0
  86. package/FrameGraph/frameGraphContext.js.map +1 -1
  87. package/FrameGraph/frameGraphRenderContext.d.ts +9 -16
  88. package/FrameGraph/frameGraphRenderContext.js +15 -23
  89. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  90. package/FrameGraph/frameGraphUtils.d.ts +52 -0
  91. package/FrameGraph/frameGraphUtils.js +99 -0
  92. package/FrameGraph/frameGraphUtils.js.map +1 -0
  93. package/FrameGraph/index.d.ts +1 -0
  94. package/FrameGraph/index.js +1 -0
  95. package/FrameGraph/index.js.map +1 -1
  96. package/Loading/Plugins/babylonFileLoader.js +35 -2
  97. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  98. package/Materials/material.d.ts +32 -12
  99. package/Materials/material.js +49 -17
  100. package/Materials/material.js.map +1 -1
  101. package/Materials/materialStencilState.d.ts +24 -0
  102. package/Materials/materialStencilState.js +53 -1
  103. package/Materials/materialStencilState.js.map +1 -1
  104. package/Meshes/geometry.js +1 -1
  105. package/Meshes/geometry.js.map +1 -1
  106. package/Meshes/instancedMesh.d.ts +5 -0
  107. package/Meshes/instancedMesh.js +3 -3
  108. package/Meshes/instancedMesh.js.map +1 -1
  109. package/Meshes/mesh.d.ts +28 -5
  110. package/Meshes/mesh.js +127 -57
  111. package/Meshes/mesh.js.map +1 -1
  112. package/Meshes/thinInstanceMesh.js +4 -0
  113. package/Meshes/thinInstanceMesh.js.map +1 -1
  114. package/Misc/snapshotRenderingHelper.js +2 -1
  115. package/Misc/snapshotRenderingHelper.js.map +1 -1
  116. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +1 -0
  117. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +32 -10
  118. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  119. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +4 -0
  120. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +5 -0
  121. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  122. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +12 -3
  123. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +22 -1
  124. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
  125. package/PostProcesses/thinPassPostProcess.js +7 -3
  126. package/PostProcesses/thinPassPostProcess.js.map +1 -1
  127. package/Rendering/edgesRenderer.js +3 -2
  128. package/Rendering/edgesRenderer.js.map +1 -1
  129. package/Rendering/geometryBufferRenderer.js +1 -1
  130. package/Rendering/geometryBufferRenderer.js.map +1 -1
  131. package/Rendering/outlineRenderer.js +1 -1
  132. package/Rendering/outlineRenderer.js.map +1 -1
  133. package/Shaders/lod.fragment.js +2 -3
  134. package/Shaders/lod.fragment.js.map +1 -1
  135. package/ShadersWGSL/lod.fragment.js +2 -2
  136. package/ShadersWGSL/lod.fragment.js.map +1 -1
  137. package/States/IStencilState.d.ts +6 -2
  138. package/States/IStencilState.js.map +1 -1
  139. package/States/alphaCullingState.d.ts +7 -5
  140. package/States/alphaCullingState.js +144 -33
  141. package/States/alphaCullingState.js.map +1 -1
  142. package/States/stencilState.d.ts +12 -0
  143. package/States/stencilState.js +29 -1
  144. package/States/stencilState.js.map +1 -1
  145. package/States/stencilStateComposer.d.ts +12 -0
  146. package/States/stencilStateComposer.js +48 -2
  147. package/States/stencilStateComposer.js.map +1 -1
  148. package/assetContainer.js +29 -8
  149. package/assetContainer.js.map +1 -1
  150. package/package.json +1 -1
  151. package/scene.d.ts +2 -1
  152. package/scene.js +1 -0
  153. package/scene.js.map +1 -1
@@ -9,12 +9,16 @@ export class StencilState {
9
9
  reset() {
10
10
  this.enabled = false;
11
11
  this.mask = 0xff;
12
- this.func = StencilState.ALWAYS;
13
12
  this.funcRef = 1;
14
13
  this.funcMask = 0xff;
14
+ this.func = StencilState.ALWAYS;
15
15
  this.opStencilFail = StencilState.KEEP;
16
16
  this.opDepthFail = StencilState.KEEP;
17
17
  this.opStencilDepthPass = StencilState.REPLACE;
18
+ this.backFunc = StencilState.ALWAYS;
19
+ this.backOpStencilFail = StencilState.KEEP;
20
+ this.backOpDepthFail = StencilState.KEEP;
21
+ this.backOpStencilDepthPass = StencilState.REPLACE;
18
22
  }
19
23
  get stencilFunc() {
20
24
  return this.func;
@@ -22,6 +26,12 @@ export class StencilState {
22
26
  set stencilFunc(value) {
23
27
  this.func = value;
24
28
  }
29
+ get stencilBackFunc() {
30
+ return this.backFunc;
31
+ }
32
+ set stencilBackFunc(value) {
33
+ this.backFunc = value;
34
+ }
25
35
  get stencilFuncRef() {
26
36
  return this.funcRef;
27
37
  }
@@ -52,6 +62,24 @@ export class StencilState {
52
62
  set stencilOpStencilDepthPass(value) {
53
63
  this.opStencilDepthPass = value;
54
64
  }
65
+ get stencilBackOpStencilFail() {
66
+ return this.backOpStencilFail;
67
+ }
68
+ set stencilBackOpStencilFail(value) {
69
+ this.backOpStencilFail = value;
70
+ }
71
+ get stencilBackOpDepthFail() {
72
+ return this.backOpDepthFail;
73
+ }
74
+ set stencilBackOpDepthFail(value) {
75
+ this.backOpDepthFail = value;
76
+ }
77
+ get stencilBackOpStencilDepthPass() {
78
+ return this.backOpStencilDepthPass;
79
+ }
80
+ set stencilBackOpStencilDepthPass(value) {
81
+ this.backOpStencilDepthPass = value;
82
+ }
55
83
  get stencilMask() {
56
84
  return this.mask;
57
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stencilState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD;;IAEI;AACJ,MAAM,OAAO,YAAY;IAQrB;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC;IACnD,CAAC;IAGD,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACtB,CAAC;IAGD,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,cAAc,CAAC,KAAa;QACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IAGD,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,eAAe,CAAC,KAAa;QACpC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAGD,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,oBAAoB,CAAC,KAAa;QACzC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IAGD,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAGD,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAW,yBAAyB,CAAC,KAAa;QAC9C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAGD,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACtB,CAAC;IAGD,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,WAAW,CAAC,KAAc;QACjC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;;AA9FD,2JAA2J;AACpI,mBAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AACjD,4EAA4E;AACrD,iBAAI,GAAG,SAAS,CAAC,IAAI,CAAC;AAC7C,gFAAgF;AACzD,oBAAO,GAAG,SAAS,CAAC,OAAO,CAAC","sourcesContent":["import { Constants } from \"../Engines/constants\";\r\nimport type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilState implements IStencilState {\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.enabled = false;\r\n this.mask = 0xff;\r\n\r\n this.func = StencilState.ALWAYS;\r\n this.funcRef = 1;\r\n this.funcMask = 0xff;\r\n\r\n this.opStencilFail = StencilState.KEEP;\r\n this.opDepthFail = StencilState.KEEP;\r\n this.opStencilDepthPass = StencilState.REPLACE;\r\n }\r\n\r\n public func: number;\r\n public get stencilFunc(): number {\r\n return this.func;\r\n }\r\n\r\n public set stencilFunc(value: number) {\r\n this.func = value;\r\n }\r\n\r\n public funcRef: number;\r\n public get stencilFuncRef(): number {\r\n return this.funcRef;\r\n }\r\n\r\n public set stencilFuncRef(value: number) {\r\n this.funcRef = value;\r\n }\r\n\r\n public funcMask: number;\r\n public get stencilFuncMask(): number {\r\n return this.funcMask;\r\n }\r\n\r\n public set stencilFuncMask(value: number) {\r\n this.funcMask = value;\r\n }\r\n\r\n public opStencilFail: number;\r\n public get stencilOpStencilFail(): number {\r\n return this.opStencilFail;\r\n }\r\n\r\n public set stencilOpStencilFail(value: number) {\r\n this.opStencilFail = value;\r\n }\r\n\r\n public opDepthFail: number;\r\n public get stencilOpDepthFail(): number {\r\n return this.opDepthFail;\r\n }\r\n\r\n public set stencilOpDepthFail(value: number) {\r\n this.opDepthFail = value;\r\n }\r\n\r\n public opStencilDepthPass: number;\r\n public get stencilOpStencilDepthPass(): number {\r\n return this.opStencilDepthPass;\r\n }\r\n\r\n public set stencilOpStencilDepthPass(value: number) {\r\n this.opStencilDepthPass = value;\r\n }\r\n\r\n public mask: number;\r\n public get stencilMask(): number {\r\n return this.mask;\r\n }\r\n\r\n public set stencilMask(value: number) {\r\n this.mask = value;\r\n }\r\n\r\n public enabled: boolean;\r\n public get stencilTest(): boolean {\r\n return this.enabled;\r\n }\r\n\r\n public set stencilTest(value: boolean) {\r\n this.enabled = value;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"stencilState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../Engines/constants\";\r\nimport type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilState implements IStencilState {\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.enabled = false;\r\n this.mask = 0xff;\r\n\r\n this.funcRef = 1;\r\n this.funcMask = 0xff;\r\n\r\n this.func = StencilState.ALWAYS;\r\n this.opStencilFail = StencilState.KEEP;\r\n this.opDepthFail = StencilState.KEEP;\r\n this.opStencilDepthPass = StencilState.REPLACE;\r\n\r\n this.backFunc = StencilState.ALWAYS;\r\n this.backOpStencilFail = StencilState.KEEP;\r\n this.backOpDepthFail = StencilState.KEEP;\r\n this.backOpStencilDepthPass = StencilState.REPLACE;\r\n }\r\n\r\n public func: number;\r\n public get stencilFunc(): number {\r\n return this.func;\r\n }\r\n\r\n public set stencilFunc(value: number) {\r\n this.func = value;\r\n }\r\n\r\n public backFunc: number;\r\n public get stencilBackFunc(): number {\r\n return this.backFunc;\r\n }\r\n\r\n public set stencilBackFunc(value: number) {\r\n this.backFunc = value;\r\n }\r\n\r\n public funcRef: number;\r\n public get stencilFuncRef(): number {\r\n return this.funcRef;\r\n }\r\n\r\n public set stencilFuncRef(value: number) {\r\n this.funcRef = value;\r\n }\r\n\r\n public funcMask: number;\r\n public get stencilFuncMask(): number {\r\n return this.funcMask;\r\n }\r\n\r\n public set stencilFuncMask(value: number) {\r\n this.funcMask = value;\r\n }\r\n\r\n public opStencilFail: number;\r\n public get stencilOpStencilFail(): number {\r\n return this.opStencilFail;\r\n }\r\n\r\n public set stencilOpStencilFail(value: number) {\r\n this.opStencilFail = value;\r\n }\r\n\r\n public opDepthFail: number;\r\n public get stencilOpDepthFail(): number {\r\n return this.opDepthFail;\r\n }\r\n\r\n public set stencilOpDepthFail(value: number) {\r\n this.opDepthFail = value;\r\n }\r\n\r\n public opStencilDepthPass: number;\r\n public get stencilOpStencilDepthPass(): number {\r\n return this.opStencilDepthPass;\r\n }\r\n\r\n public set stencilOpStencilDepthPass(value: number) {\r\n this.opStencilDepthPass = value;\r\n }\r\n\r\n public backOpStencilFail: number;\r\n public get stencilBackOpStencilFail(): number {\r\n return this.backOpStencilFail;\r\n }\r\n\r\n public set stencilBackOpStencilFail(value: number) {\r\n this.backOpStencilFail = value;\r\n }\r\n\r\n public backOpDepthFail: number;\r\n public get stencilBackOpDepthFail(): number {\r\n return this.backOpDepthFail;\r\n }\r\n\r\n public set stencilBackOpDepthFail(value: number) {\r\n this.backOpDepthFail = value;\r\n }\r\n\r\n public backOpStencilDepthPass: number;\r\n public get stencilBackOpStencilDepthPass(): number {\r\n return this.backOpStencilDepthPass;\r\n }\r\n\r\n public set stencilBackOpStencilDepthPass(value: number) {\r\n this.backOpStencilDepthPass = value;\r\n }\r\n\r\n public mask: number;\r\n public get stencilMask(): number {\r\n return this.mask;\r\n }\r\n\r\n public set stencilMask(value: number) {\r\n this.mask = value;\r\n }\r\n\r\n public enabled: boolean;\r\n public get stencilTest(): boolean {\r\n return this.enabled;\r\n }\r\n\r\n public set stencilTest(value: boolean) {\r\n this.enabled = value;\r\n }\r\n}\r\n"]}
@@ -15,12 +15,18 @@ export declare class StencilStateComposer {
15
15
  protected _opStencilFail: number;
16
16
  protected _opDepthFail: number;
17
17
  protected _opStencilDepthPass: number;
18
+ protected _backFunc: number;
19
+ protected _backOpStencilFail: number;
20
+ protected _backOpDepthFail: number;
21
+ protected _backOpStencilDepthPass: number;
18
22
  stencilGlobal: IStencilState;
19
23
  stencilMaterial: IStencilState | undefined;
20
24
  useStencilGlobalOnly: boolean;
21
25
  get isDirty(): boolean;
22
26
  get func(): number;
23
27
  set func(value: number);
28
+ get backFunc(): number;
29
+ set backFunc(value: number);
24
30
  get funcRef(): number;
25
31
  set funcRef(value: number);
26
32
  get funcMask(): number;
@@ -31,6 +37,12 @@ export declare class StencilStateComposer {
31
37
  set opDepthFail(value: number);
32
38
  get opStencilDepthPass(): number;
33
39
  set opStencilDepthPass(value: number);
40
+ get backOpStencilFail(): number;
41
+ set backOpStencilFail(value: number);
42
+ get backOpDepthFail(): number;
43
+ set backOpDepthFail(value: number);
44
+ get backOpStencilDepthPass(): number;
45
+ set backOpStencilDepthPass(value: number);
34
46
  get mask(): number;
35
47
  set mask(value: number);
36
48
  get enabled(): boolean;
@@ -15,6 +15,16 @@ export class StencilStateComposer {
15
15
  this._func = value;
16
16
  this._isStencilFuncDirty = true;
17
17
  }
18
+ get backFunc() {
19
+ return this._func;
20
+ }
21
+ set backFunc(value) {
22
+ if (this._backFunc === value) {
23
+ return;
24
+ }
25
+ this._backFunc = value;
26
+ this._isStencilFuncDirty = true;
27
+ }
18
28
  get funcRef() {
19
29
  return this._funcRef;
20
30
  }
@@ -65,6 +75,36 @@ export class StencilStateComposer {
65
75
  this._opStencilDepthPass = value;
66
76
  this._isStencilOpDirty = true;
67
77
  }
78
+ get backOpStencilFail() {
79
+ return this._backOpStencilFail;
80
+ }
81
+ set backOpStencilFail(value) {
82
+ if (this._backOpStencilFail === value) {
83
+ return;
84
+ }
85
+ this._backOpStencilFail = value;
86
+ this._isStencilOpDirty = true;
87
+ }
88
+ get backOpDepthFail() {
89
+ return this._backOpDepthFail;
90
+ }
91
+ set backOpDepthFail(value) {
92
+ if (this._backOpDepthFail === value) {
93
+ return;
94
+ }
95
+ this._backOpDepthFail = value;
96
+ this._isStencilOpDirty = true;
97
+ }
98
+ get backOpStencilDepthPass() {
99
+ return this._backOpStencilDepthPass;
100
+ }
101
+ set backOpStencilDepthPass(value) {
102
+ if (this._backOpStencilDepthPass === value) {
103
+ return;
104
+ }
105
+ this._backOpStencilDepthPass = value;
106
+ this._isStencilOpDirty = true;
107
+ }
68
108
  get mask() {
69
109
  return this._mask;
70
110
  }
@@ -110,11 +150,15 @@ export class StencilStateComposer {
110
150
  const stencilMaterialEnabled = !this.useStencilGlobalOnly && !!this.stencilMaterial?.enabled;
111
151
  this.enabled = stencilMaterialEnabled ? this.stencilMaterial.enabled : this.stencilGlobal.enabled;
112
152
  this.func = stencilMaterialEnabled ? this.stencilMaterial.func : this.stencilGlobal.func;
153
+ this.backFunc = stencilMaterialEnabled ? this.stencilMaterial.backFunc : this.stencilGlobal.backFunc;
113
154
  this.funcRef = stencilMaterialEnabled ? this.stencilMaterial.funcRef : this.stencilGlobal.funcRef;
114
155
  this.funcMask = stencilMaterialEnabled ? this.stencilMaterial.funcMask : this.stencilGlobal.funcMask;
115
156
  this.opStencilFail = stencilMaterialEnabled ? this.stencilMaterial.opStencilFail : this.stencilGlobal.opStencilFail;
116
157
  this.opDepthFail = stencilMaterialEnabled ? this.stencilMaterial.opDepthFail : this.stencilGlobal.opDepthFail;
117
158
  this.opStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial.opStencilDepthPass : this.stencilGlobal.opStencilDepthPass;
159
+ this.backOpStencilFail = stencilMaterialEnabled ? this.stencilMaterial.backOpStencilFail : this.stencilGlobal.backOpStencilFail;
160
+ this.backOpDepthFail = stencilMaterialEnabled ? this.stencilMaterial.backOpDepthFail : this.stencilGlobal.backOpDepthFail;
161
+ this.backOpStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial.backOpStencilDepthPass : this.stencilGlobal.backOpStencilDepthPass;
118
162
  this.mask = stencilMaterialEnabled ? this.stencilMaterial.mask : this.stencilGlobal.mask;
119
163
  if (!this.isDirty) {
120
164
  return;
@@ -136,12 +180,14 @@ export class StencilStateComposer {
136
180
  }
137
181
  // Stencil func
138
182
  if (this._isStencilFuncDirty) {
139
- gl.stencilFunc(this.func, this.funcRef, this.funcMask);
183
+ gl.stencilFuncSeparate(gl.FRONT, this.func, this.funcRef, this.funcMask);
184
+ gl.stencilFuncSeparate(gl.BACK, this.backFunc, this.funcRef, this.funcMask);
140
185
  this._isStencilFuncDirty = false;
141
186
  }
142
187
  // Stencil op
143
188
  if (this._isStencilOpDirty) {
144
- gl.stencilOp(this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);
189
+ gl.stencilOpSeparate(gl.FRONT, this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);
190
+ gl.stencilOpSeparate(gl.BACK, this.backOpStencilFail, this.backOpDepthFail, this.backOpStencilDepthPass);
145
191
  this._isStencilOpDirty = false;
146
192
  }
147
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stencilStateComposer.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilStateComposer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilStateComposer {\r\n protected _isStencilTestDirty = false;\r\n protected _isStencilMaskDirty = false;\r\n protected _isStencilFuncDirty = false;\r\n protected _isStencilOpDirty = false;\r\n\r\n protected _enabled: boolean;\r\n\r\n protected _mask: number;\r\n\r\n protected _func: number;\r\n protected _funcRef: number;\r\n protected _funcMask: number;\r\n\r\n protected _opStencilFail: number;\r\n protected _opDepthFail: number;\r\n protected _opStencilDepthPass: number;\r\n\r\n public stencilGlobal: IStencilState;\r\n public stencilMaterial: IStencilState | undefined;\r\n\r\n public useStencilGlobalOnly = false;\r\n\r\n public get isDirty(): boolean {\r\n return this._isStencilTestDirty || this._isStencilMaskDirty || this._isStencilFuncDirty || this._isStencilOpDirty;\r\n }\r\n\r\n public get func(): number {\r\n return this._func;\r\n }\r\n\r\n public set func(value: number) {\r\n if (this._func === value) {\r\n return;\r\n }\r\n\r\n this._func = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcRef(): number {\r\n return this._funcRef;\r\n }\r\n\r\n public set funcRef(value: number) {\r\n if (this._funcRef === value) {\r\n return;\r\n }\r\n\r\n this._funcRef = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcMask(): number {\r\n return this._funcMask;\r\n }\r\n\r\n public set funcMask(value: number) {\r\n if (this._funcMask === value) {\r\n return;\r\n }\r\n\r\n this._funcMask = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get opStencilFail(): number {\r\n return this._opStencilFail;\r\n }\r\n\r\n public set opStencilFail(value: number) {\r\n if (this._opStencilFail === value) {\r\n return;\r\n }\r\n\r\n this._opStencilFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opDepthFail(): number {\r\n return this._opDepthFail;\r\n }\r\n\r\n public set opDepthFail(value: number) {\r\n if (this._opDepthFail === value) {\r\n return;\r\n }\r\n\r\n this._opDepthFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opStencilDepthPass(): number {\r\n return this._opStencilDepthPass;\r\n }\r\n\r\n public set opStencilDepthPass(value: number) {\r\n if (this._opStencilDepthPass === value) {\r\n return;\r\n }\r\n\r\n this._opStencilDepthPass = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get mask(): number {\r\n return this._mask;\r\n }\r\n\r\n public set mask(value: number) {\r\n if (this._mask === value) {\r\n return;\r\n }\r\n\r\n this._mask = value;\r\n this._isStencilMaskDirty = true;\r\n }\r\n\r\n public get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n if (this._enabled === value) {\r\n return;\r\n }\r\n\r\n this._enabled = value;\r\n this._isStencilTestDirty = true;\r\n }\r\n\r\n public constructor(reset = true) {\r\n if (reset) {\r\n this.reset();\r\n }\r\n }\r\n\r\n public reset() {\r\n this.stencilMaterial = undefined;\r\n\r\n this.stencilGlobal?.reset();\r\n\r\n this._isStencilTestDirty = true;\r\n this._isStencilMaskDirty = true;\r\n this._isStencilFuncDirty = true;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public apply(gl?: WebGLRenderingContext) {\r\n if (!gl) {\r\n return;\r\n }\r\n\r\n const stencilMaterialEnabled = !this.useStencilGlobalOnly && !!this.stencilMaterial?.enabled;\r\n\r\n this.enabled = stencilMaterialEnabled ? this.stencilMaterial!.enabled : this.stencilGlobal.enabled;\r\n this.func = stencilMaterialEnabled ? this.stencilMaterial!.func : this.stencilGlobal.func;\r\n this.funcRef = stencilMaterialEnabled ? this.stencilMaterial!.funcRef : this.stencilGlobal.funcRef;\r\n this.funcMask = stencilMaterialEnabled ? this.stencilMaterial!.funcMask : this.stencilGlobal.funcMask;\r\n this.opStencilFail = stencilMaterialEnabled ? this.stencilMaterial!.opStencilFail : this.stencilGlobal.opStencilFail;\r\n this.opDepthFail = stencilMaterialEnabled ? this.stencilMaterial!.opDepthFail : this.stencilGlobal.opDepthFail;\r\n this.opStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial!.opStencilDepthPass : this.stencilGlobal.opStencilDepthPass;\r\n this.mask = stencilMaterialEnabled ? this.stencilMaterial!.mask : this.stencilGlobal.mask;\r\n\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Stencil test\r\n if (this._isStencilTestDirty) {\r\n if (this.enabled) {\r\n gl.enable(gl.STENCIL_TEST);\r\n } else {\r\n gl.disable(gl.STENCIL_TEST);\r\n }\r\n this._isStencilTestDirty = false;\r\n }\r\n\r\n // Stencil mask\r\n if (this._isStencilMaskDirty) {\r\n gl.stencilMask(this.mask);\r\n this._isStencilMaskDirty = false;\r\n }\r\n\r\n // Stencil func\r\n if (this._isStencilFuncDirty) {\r\n gl.stencilFunc(this.func, this.funcRef, this.funcMask);\r\n this._isStencilFuncDirty = false;\r\n }\r\n\r\n // Stencil op\r\n if (this._isStencilOpDirty) {\r\n gl.stencilOp(this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);\r\n this._isStencilOpDirty = false;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"stencilStateComposer.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilStateComposer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilStateComposer {\r\n protected _isStencilTestDirty = false;\r\n protected _isStencilMaskDirty = false;\r\n protected _isStencilFuncDirty = false;\r\n protected _isStencilOpDirty = false;\r\n\r\n protected _enabled: boolean;\r\n\r\n protected _mask: number;\r\n\r\n protected _func: number;\r\n protected _funcRef: number;\r\n protected _funcMask: number;\r\n\r\n protected _opStencilFail: number;\r\n protected _opDepthFail: number;\r\n protected _opStencilDepthPass: number;\r\n\r\n protected _backFunc: number;\r\n protected _backOpStencilFail: number;\r\n protected _backOpDepthFail: number;\r\n protected _backOpStencilDepthPass: number;\r\n\r\n public stencilGlobal: IStencilState;\r\n public stencilMaterial: IStencilState | undefined;\r\n\r\n public useStencilGlobalOnly = false;\r\n\r\n public get isDirty(): boolean {\r\n return this._isStencilTestDirty || this._isStencilMaskDirty || this._isStencilFuncDirty || this._isStencilOpDirty;\r\n }\r\n\r\n public get func(): number {\r\n return this._func;\r\n }\r\n\r\n public set func(value: number) {\r\n if (this._func === value) {\r\n return;\r\n }\r\n\r\n this._func = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get backFunc(): number {\r\n return this._func;\r\n }\r\n\r\n public set backFunc(value: number) {\r\n if (this._backFunc === value) {\r\n return;\r\n }\r\n\r\n this._backFunc = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcRef(): number {\r\n return this._funcRef;\r\n }\r\n\r\n public set funcRef(value: number) {\r\n if (this._funcRef === value) {\r\n return;\r\n }\r\n\r\n this._funcRef = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcMask(): number {\r\n return this._funcMask;\r\n }\r\n\r\n public set funcMask(value: number) {\r\n if (this._funcMask === value) {\r\n return;\r\n }\r\n\r\n this._funcMask = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get opStencilFail(): number {\r\n return this._opStencilFail;\r\n }\r\n\r\n public set opStencilFail(value: number) {\r\n if (this._opStencilFail === value) {\r\n return;\r\n }\r\n\r\n this._opStencilFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opDepthFail(): number {\r\n return this._opDepthFail;\r\n }\r\n\r\n public set opDepthFail(value: number) {\r\n if (this._opDepthFail === value) {\r\n return;\r\n }\r\n\r\n this._opDepthFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opStencilDepthPass(): number {\r\n return this._opStencilDepthPass;\r\n }\r\n\r\n public set opStencilDepthPass(value: number) {\r\n if (this._opStencilDepthPass === value) {\r\n return;\r\n }\r\n\r\n this._opStencilDepthPass = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get backOpStencilFail(): number {\r\n return this._backOpStencilFail;\r\n }\r\n\r\n public set backOpStencilFail(value: number) {\r\n if (this._backOpStencilFail === value) {\r\n return;\r\n }\r\n\r\n this._backOpStencilFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get backOpDepthFail(): number {\r\n return this._backOpDepthFail;\r\n }\r\n\r\n public set backOpDepthFail(value: number) {\r\n if (this._backOpDepthFail === value) {\r\n return;\r\n }\r\n\r\n this._backOpDepthFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get backOpStencilDepthPass(): number {\r\n return this._backOpStencilDepthPass;\r\n }\r\n\r\n public set backOpStencilDepthPass(value: number) {\r\n if (this._backOpStencilDepthPass === value) {\r\n return;\r\n }\r\n\r\n this._backOpStencilDepthPass = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get mask(): number {\r\n return this._mask;\r\n }\r\n\r\n public set mask(value: number) {\r\n if (this._mask === value) {\r\n return;\r\n }\r\n\r\n this._mask = value;\r\n this._isStencilMaskDirty = true;\r\n }\r\n\r\n public get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n if (this._enabled === value) {\r\n return;\r\n }\r\n\r\n this._enabled = value;\r\n this._isStencilTestDirty = true;\r\n }\r\n\r\n public constructor(reset = true) {\r\n if (reset) {\r\n this.reset();\r\n }\r\n }\r\n\r\n public reset() {\r\n this.stencilMaterial = undefined;\r\n\r\n this.stencilGlobal?.reset();\r\n\r\n this._isStencilTestDirty = true;\r\n this._isStencilMaskDirty = true;\r\n this._isStencilFuncDirty = true;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public apply(gl?: WebGLRenderingContext) {\r\n if (!gl) {\r\n return;\r\n }\r\n\r\n const stencilMaterialEnabled = !this.useStencilGlobalOnly && !!this.stencilMaterial?.enabled;\r\n\r\n this.enabled = stencilMaterialEnabled ? this.stencilMaterial!.enabled : this.stencilGlobal.enabled;\r\n this.func = stencilMaterialEnabled ? this.stencilMaterial!.func : this.stencilGlobal.func;\r\n this.backFunc = stencilMaterialEnabled ? this.stencilMaterial!.backFunc : this.stencilGlobal.backFunc;\r\n this.funcRef = stencilMaterialEnabled ? this.stencilMaterial!.funcRef : this.stencilGlobal.funcRef;\r\n this.funcMask = stencilMaterialEnabled ? this.stencilMaterial!.funcMask : this.stencilGlobal.funcMask;\r\n this.opStencilFail = stencilMaterialEnabled ? this.stencilMaterial!.opStencilFail : this.stencilGlobal.opStencilFail;\r\n this.opDepthFail = stencilMaterialEnabled ? this.stencilMaterial!.opDepthFail : this.stencilGlobal.opDepthFail;\r\n this.opStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial!.opStencilDepthPass : this.stencilGlobal.opStencilDepthPass;\r\n this.backOpStencilFail = stencilMaterialEnabled ? this.stencilMaterial!.backOpStencilFail : this.stencilGlobal.backOpStencilFail;\r\n this.backOpDepthFail = stencilMaterialEnabled ? this.stencilMaterial!.backOpDepthFail : this.stencilGlobal.backOpDepthFail;\r\n this.backOpStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial!.backOpStencilDepthPass : this.stencilGlobal.backOpStencilDepthPass;\r\n this.mask = stencilMaterialEnabled ? this.stencilMaterial!.mask : this.stencilGlobal.mask;\r\n\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Stencil test\r\n if (this._isStencilTestDirty) {\r\n if (this.enabled) {\r\n gl.enable(gl.STENCIL_TEST);\r\n } else {\r\n gl.disable(gl.STENCIL_TEST);\r\n }\r\n this._isStencilTestDirty = false;\r\n }\r\n\r\n // Stencil mask\r\n if (this._isStencilMaskDirty) {\r\n gl.stencilMask(this.mask);\r\n this._isStencilMaskDirty = false;\r\n }\r\n\r\n // Stencil func\r\n if (this._isStencilFuncDirty) {\r\n gl.stencilFuncSeparate(gl.FRONT, this.func, this.funcRef, this.funcMask);\r\n gl.stencilFuncSeparate(gl.BACK, this.backFunc, this.funcRef, this.funcMask);\r\n this._isStencilFuncDirty = false;\r\n }\r\n\r\n // Stencil op\r\n if (this._isStencilOpDirty) {\r\n gl.stencilOpSeparate(gl.FRONT, this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);\r\n gl.stencilOpSeparate(gl.BACK, this.backOpStencilFail, this.backOpDepthFail, this.backOpStencilDepthPass);\r\n this._isStencilOpDirty = false;\r\n }\r\n }\r\n}\r\n"]}
package/assetContainer.js CHANGED
@@ -678,15 +678,36 @@ export class AssetContainer extends AbstractAssetContainer {
678
678
  }
679
679
  this.scene.addReflectionProbe(o);
680
680
  }
681
- for (const addedNode of addedNodes) {
682
- // If node was added to the scene, but parent is not in the scene, break the relationship
683
- if (addedNode.parent && this.scene.getNodes().indexOf(addedNode.parent) === -1) {
684
- // Use setParent to keep transform if possible
685
- if (addedNode.setParent) {
686
- addedNode.setParent(null);
681
+ // No more nodes added to scene after this line, so it's safe to make a "snapshot" of nodes
682
+ if (addedNodes.length) {
683
+ // build the nodeSet only if needed
684
+ const nodeSet = new Set(this.scene.meshes);
685
+ // benchmark shows Set constructor and Set.add have similar performance,
686
+ // but using Set.add here avoids another allocate in scene.getNodes().
687
+ for (const light of this.scene.lights) {
688
+ nodeSet.add(light);
689
+ }
690
+ for (const camera of this.scene.cameras) {
691
+ nodeSet.add(camera);
692
+ }
693
+ for (const transformNode of this.scene.transformNodes) {
694
+ nodeSet.add(transformNode);
695
+ }
696
+ for (const skeleton of this.skeletons) {
697
+ for (const bone of skeleton.bones) {
698
+ nodeSet.add(bone);
687
699
  }
688
- else {
689
- addedNode.parent = null;
700
+ }
701
+ for (const addedNode of addedNodes) {
702
+ // If node was added to the scene, but parent is not in the scene, break the relationship
703
+ if (addedNode.parent && !nodeSet.has(addedNode.parent)) {
704
+ // Use setParent to keep transform if possible
705
+ if (addedNode.setParent) {
706
+ addedNode.setParent(null);
707
+ }
708
+ else {
709
+ addedNode.parent = null;
710
+ }
690
711
  }
691
712
  }
692
713
  }