@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
@@ -0,0 +1,147 @@
1
+ import "./abstractEngine.alpha.js";
2
+ declare module "../../Engines/abstractEngine.js" {
3
+ interface AbstractEngine {
4
+ /** @internal */
5
+ _cachedStencilBuffer: boolean;
6
+ /** @internal */
7
+ _cachedStencilFunction: number;
8
+ /** @internal */
9
+ _cachedStencilMask: number;
10
+ /** @internal */
11
+ _cachedStencilOperationPass: number;
12
+ /** @internal */
13
+ _cachedStencilOperationFail: number;
14
+ /** @internal */
15
+ _cachedStencilOperationDepthFail: number;
16
+ /** @internal */
17
+ _cachedStencilReference: number;
18
+ /**
19
+ * Gets the current stencil operation when stencil passes
20
+ * @returns a number defining stencil operation to use when stencil passes
21
+ */
22
+ getStencilOperationPass(): number;
23
+ /**
24
+ * Gets the current back stencil operation when stencil passes
25
+ * @returns a number defining back stencil operation to use when stencil passes
26
+ */
27
+ getStencilBackOperationPass(): number;
28
+ /**
29
+ * Gets a boolean indicating if stencil buffer is enabled
30
+ * @returns the current stencil buffer state
31
+ */
32
+ getStencilBuffer(): boolean;
33
+ /**
34
+ * Enable or disable the stencil buffer
35
+ * @param enable defines if the stencil buffer must be enabled or disabled
36
+ */
37
+ setStencilBuffer(enable: boolean): void;
38
+ /**
39
+ * Gets the current stencil mask
40
+ * @returns a number defining the new stencil mask to use
41
+ */
42
+ getStencilMask(): number;
43
+ /**
44
+ * Sets the current stencil mask
45
+ * @param mask defines the new stencil mask to use
46
+ */
47
+ setStencilMask(mask: number): void;
48
+ /**
49
+ * Gets the current stencil function
50
+ * @returns a number defining the stencil function to use
51
+ */
52
+ getStencilFunction(): number;
53
+ /**
54
+ * Gets the current back stencil function
55
+ * @returns a number defining the back stencil function to use
56
+ */
57
+ getStencilBackFunction(): number;
58
+ /**
59
+ * Gets the current stencil reference value
60
+ * @returns a number defining the stencil reference value to use
61
+ */
62
+ getStencilFunctionReference(): number;
63
+ /**
64
+ * Gets the current stencil mask
65
+ * @returns a number defining the stencil mask to use
66
+ */
67
+ getStencilFunctionMask(): number;
68
+ /**
69
+ * Sets the current stencil function
70
+ * @param stencilFunc defines the new stencil function to use
71
+ */
72
+ setStencilFunction(stencilFunc: number): void;
73
+ /**
74
+ * Sets the current back stencil function
75
+ * @param stencilFunc defines the new back stencil function to use
76
+ */
77
+ setStencilBackFunction(stencilFunc: number): void;
78
+ /**
79
+ * Sets the current stencil reference
80
+ * @param reference defines the new stencil reference to use
81
+ */
82
+ setStencilFunctionReference(reference: number): void;
83
+ /**
84
+ * Sets the current stencil mask
85
+ * @param mask defines the new stencil mask to use
86
+ */
87
+ setStencilFunctionMask(mask: number): void;
88
+ /**
89
+ * Gets the current stencil operation when stencil fails
90
+ * @returns a number defining stencil operation to use when stencil fails
91
+ */
92
+ getStencilOperationFail(): number;
93
+ /**
94
+ * Gets the current back stencil operation when stencil fails
95
+ * @returns a number defining back stencil operation to use when stencil fails
96
+ */
97
+ getStencilBackOperationFail(): number;
98
+ /**
99
+ * Gets the current stencil operation when depth fails
100
+ * @returns a number defining stencil operation to use when depth fails
101
+ */
102
+ getStencilOperationDepthFail(): number;
103
+ /**
104
+ * Gets the current back stencil operation when depth fails
105
+ * @returns a number defining back stencil operation to use when depth fails
106
+ */
107
+ getStencilBackOperationDepthFail(): number;
108
+ /**
109
+ * Sets the stencil operation to use when stencil fails
110
+ * @param operation defines the stencil operation to use when stencil fails
111
+ */
112
+ setStencilOperationFail(operation: number): void;
113
+ /**
114
+ * Sets the back stencil operation to use when stencil fails
115
+ * @param operation defines the back stencil operation to use when stencil fails
116
+ */
117
+ setStencilBackOperationFail(operation: number): void;
118
+ /**
119
+ * Sets the stencil operation to use when depth fails
120
+ * @param operation defines the stencil operation to use when depth fails
121
+ */
122
+ setStencilOperationDepthFail(operation: number): void;
123
+ /**
124
+ * Sets the back stencil operation to use when depth fails
125
+ * @param operation defines the back stencil operation to use when depth fails
126
+ */
127
+ setStencilBackOperationDepthFail(operation: number): void;
128
+ /**
129
+ * Sets the stencil operation to use when stencil passes
130
+ * @param operation defines the stencil operation to use when stencil passes
131
+ */
132
+ setStencilOperationPass(operation: number): void;
133
+ /**
134
+ * Sets the back stencil operation to use when stencil passes
135
+ * @param operation defines the back stencil operation to use when stencil passes
136
+ */
137
+ setStencilBackOperationPass(operation: number): void;
138
+ /**
139
+ * Caches the state of the stencil buffer
140
+ */
141
+ cacheStencilState(): void;
142
+ /**
143
+ * Restores the state of the stencil buffer
144
+ */
145
+ restoreStencilState(): void;
146
+ }
147
+ }
@@ -0,0 +1,93 @@
1
+ import { AbstractEngine } from "../abstractEngine.js";
2
+ import "./abstractEngine.alpha.js";
3
+ AbstractEngine.prototype.getStencilBuffer = function () {
4
+ return this._stencilState.stencilTest;
5
+ };
6
+ AbstractEngine.prototype.setStencilBuffer = function (enable) {
7
+ this._stencilState.stencilTest = enable;
8
+ };
9
+ AbstractEngine.prototype.getStencilMask = function () {
10
+ return this._stencilState.stencilMask;
11
+ };
12
+ AbstractEngine.prototype.setStencilMask = function (mask) {
13
+ this._stencilState.stencilMask = mask;
14
+ };
15
+ AbstractEngine.prototype.getStencilFunction = function () {
16
+ return this._stencilState.stencilFunc;
17
+ };
18
+ AbstractEngine.prototype.getStencilBackFunction = function () {
19
+ return this._stencilState.stencilBackFunc;
20
+ };
21
+ AbstractEngine.prototype.getStencilFunctionReference = function () {
22
+ return this._stencilState.stencilFuncRef;
23
+ };
24
+ AbstractEngine.prototype.getStencilFunctionMask = function () {
25
+ return this._stencilState.stencilFuncMask;
26
+ };
27
+ AbstractEngine.prototype.setStencilFunction = function (stencilFunc) {
28
+ this._stencilState.stencilFunc = stencilFunc;
29
+ };
30
+ AbstractEngine.prototype.setStencilBackFunction = function (stencilFunc) {
31
+ this._stencilState.stencilBackFunc = stencilFunc;
32
+ };
33
+ AbstractEngine.prototype.setStencilFunctionReference = function (reference) {
34
+ this._stencilState.stencilFuncRef = reference;
35
+ };
36
+ AbstractEngine.prototype.setStencilFunctionMask = function (mask) {
37
+ this._stencilState.stencilFuncMask = mask;
38
+ };
39
+ AbstractEngine.prototype.getStencilOperationFail = function () {
40
+ return this._stencilState.stencilOpStencilFail;
41
+ };
42
+ AbstractEngine.prototype.getStencilBackOperationFail = function () {
43
+ return this._stencilState.stencilBackOpStencilFail;
44
+ };
45
+ AbstractEngine.prototype.getStencilOperationDepthFail = function () {
46
+ return this._stencilState.stencilOpDepthFail;
47
+ };
48
+ AbstractEngine.prototype.getStencilBackOperationDepthFail = function () {
49
+ return this._stencilState.stencilBackOpDepthFail;
50
+ };
51
+ AbstractEngine.prototype.getStencilOperationPass = function () {
52
+ return this._stencilState.stencilOpStencilDepthPass;
53
+ };
54
+ AbstractEngine.prototype.getStencilBackOperationPass = function () {
55
+ return this._stencilState.stencilBackOpStencilDepthPass;
56
+ };
57
+ AbstractEngine.prototype.setStencilOperationFail = function (operation) {
58
+ this._stencilState.stencilOpStencilFail = operation;
59
+ };
60
+ AbstractEngine.prototype.setStencilBackOperationFail = function (operation) {
61
+ this._stencilState.stencilBackOpStencilFail = operation;
62
+ };
63
+ AbstractEngine.prototype.setStencilOperationDepthFail = function (operation) {
64
+ this._stencilState.stencilOpDepthFail = operation;
65
+ };
66
+ AbstractEngine.prototype.setStencilBackOperationDepthFail = function (operation) {
67
+ this._stencilState.stencilBackOpDepthFail = operation;
68
+ };
69
+ AbstractEngine.prototype.setStencilOperationPass = function (operation) {
70
+ this._stencilState.stencilOpStencilDepthPass = operation;
71
+ };
72
+ AbstractEngine.prototype.setStencilBackOperationPass = function (operation) {
73
+ this._stencilState.stencilBackOpStencilDepthPass = operation;
74
+ };
75
+ AbstractEngine.prototype.cacheStencilState = function () {
76
+ this._cachedStencilBuffer = this.getStencilBuffer();
77
+ this._cachedStencilFunction = this.getStencilFunction();
78
+ this._cachedStencilMask = this.getStencilMask();
79
+ this._cachedStencilOperationPass = this.getStencilOperationPass();
80
+ this._cachedStencilOperationFail = this.getStencilOperationFail();
81
+ this._cachedStencilOperationDepthFail = this.getStencilOperationDepthFail();
82
+ this._cachedStencilReference = this.getStencilFunctionReference();
83
+ };
84
+ AbstractEngine.prototype.restoreStencilState = function () {
85
+ this.setStencilFunction(this._cachedStencilFunction);
86
+ this.setStencilMask(this._cachedStencilMask);
87
+ this.setStencilBuffer(this._cachedStencilBuffer);
88
+ this.setStencilOperationPass(this._cachedStencilOperationPass);
89
+ this.setStencilOperationFail(this._cachedStencilOperationFail);
90
+ this.setStencilOperationDepthFail(this._cachedStencilOperationDepthFail);
91
+ this.setStencilFunctionReference(this._cachedStencilReference);
92
+ };
93
+ //# sourceMappingURL=abstractEngine.stencil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstractEngine.stencil.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.stencil.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractEngine } from \"../abstractEngine\";\r\n\r\nimport \"./abstractEngine.alpha\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /** @internal */\r\n _cachedStencilBuffer: boolean;\r\n /** @internal */\r\n _cachedStencilFunction: number;\r\n /** @internal */\r\n _cachedStencilMask: number;\r\n /** @internal */\r\n _cachedStencilOperationPass: number;\r\n /** @internal */\r\n _cachedStencilOperationFail: number;\r\n /** @internal */\r\n _cachedStencilOperationDepthFail: number;\r\n /** @internal */\r\n _cachedStencilReference: number;\r\n\r\n /**\r\n * Gets the current stencil operation when stencil passes\r\n * @returns a number defining stencil operation to use when stencil passes\r\n */\r\n getStencilOperationPass(): number;\r\n\r\n /**\r\n * Gets the current back stencil operation when stencil passes\r\n * @returns a number defining back stencil operation to use when stencil passes\r\n */\r\n getStencilBackOperationPass(): number;\r\n\r\n /**\r\n * Gets a boolean indicating if stencil buffer is enabled\r\n * @returns the current stencil buffer state\r\n */\r\n getStencilBuffer(): boolean;\r\n\r\n /**\r\n * Enable or disable the stencil buffer\r\n * @param enable defines if the stencil buffer must be enabled or disabled\r\n */\r\n setStencilBuffer(enable: boolean): void;\r\n\r\n /**\r\n * Gets the current stencil mask\r\n * @returns a number defining the new stencil mask to use\r\n */\r\n getStencilMask(): number;\r\n /**\r\n * Sets the current stencil mask\r\n * @param mask defines the new stencil mask to use\r\n */\r\n setStencilMask(mask: number): void;\r\n\r\n /**\r\n * Gets the current stencil function\r\n * @returns a number defining the stencil function to use\r\n */\r\n getStencilFunction(): number;\r\n\r\n /**\r\n * Gets the current back stencil function\r\n * @returns a number defining the back stencil function to use\r\n */\r\n getStencilBackFunction(): number;\r\n\r\n /**\r\n * Gets the current stencil reference value\r\n * @returns a number defining the stencil reference value to use\r\n */\r\n getStencilFunctionReference(): number;\r\n\r\n /**\r\n * Gets the current stencil mask\r\n * @returns a number defining the stencil mask to use\r\n */\r\n getStencilFunctionMask(): number;\r\n\r\n /**\r\n * Sets the current stencil function\r\n * @param stencilFunc defines the new stencil function to use\r\n */\r\n setStencilFunction(stencilFunc: number): void;\r\n\r\n /**\r\n * Sets the current back stencil function\r\n * @param stencilFunc defines the new back stencil function to use\r\n */\r\n setStencilBackFunction(stencilFunc: number): void;\r\n\r\n /**\r\n * Sets the current stencil reference\r\n * @param reference defines the new stencil reference to use\r\n */\r\n setStencilFunctionReference(reference: number): void;\r\n\r\n /**\r\n * Sets the current stencil mask\r\n * @param mask defines the new stencil mask to use\r\n */\r\n setStencilFunctionMask(mask: number): void;\r\n\r\n /**\r\n * Gets the current stencil operation when stencil fails\r\n * @returns a number defining stencil operation to use when stencil fails\r\n */\r\n getStencilOperationFail(): number;\r\n\r\n /**\r\n * Gets the current back stencil operation when stencil fails\r\n * @returns a number defining back stencil operation to use when stencil fails\r\n */\r\n getStencilBackOperationFail(): number;\r\n\r\n /**\r\n * Gets the current stencil operation when depth fails\r\n * @returns a number defining stencil operation to use when depth fails\r\n */\r\n getStencilOperationDepthFail(): number;\r\n\r\n /**\r\n * Gets the current back stencil operation when depth fails\r\n * @returns a number defining back stencil operation to use when depth fails\r\n */\r\n getStencilBackOperationDepthFail(): number;\r\n\r\n /**\r\n * Sets the stencil operation to use when stencil fails\r\n * @param operation defines the stencil operation to use when stencil fails\r\n */\r\n setStencilOperationFail(operation: number): void;\r\n\r\n /**\r\n * Sets the back stencil operation to use when stencil fails\r\n * @param operation defines the back stencil operation to use when stencil fails\r\n */\r\n setStencilBackOperationFail(operation: number): void;\r\n\r\n /**\r\n * Sets the stencil operation to use when depth fails\r\n * @param operation defines the stencil operation to use when depth fails\r\n */\r\n setStencilOperationDepthFail(operation: number): void;\r\n\r\n /**\r\n * Sets the back stencil operation to use when depth fails\r\n * @param operation defines the back stencil operation to use when depth fails\r\n */\r\n setStencilBackOperationDepthFail(operation: number): void;\r\n\r\n /**\r\n * Sets the stencil operation to use when stencil passes\r\n * @param operation defines the stencil operation to use when stencil passes\r\n */\r\n setStencilOperationPass(operation: number): void;\r\n\r\n /**\r\n * Sets the back stencil operation to use when stencil passes\r\n * @param operation defines the back stencil operation to use when stencil passes\r\n */\r\n setStencilBackOperationPass(operation: number): void;\r\n\r\n /**\r\n * Caches the state of the stencil buffer\r\n */\r\n cacheStencilState(): void;\r\n\r\n /**\r\n * Restores the state of the stencil buffer\r\n */\r\n restoreStencilState(): void;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype.getStencilBuffer = function (): boolean {\r\n return this._stencilState.stencilTest;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilBuffer = function (enable: boolean): void {\r\n this._stencilState.stencilTest = enable;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilMask = function (): number {\r\n return this._stencilState.stencilMask;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilMask = function (mask: number): void {\r\n this._stencilState.stencilMask = mask;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilFunction = function (): number {\r\n return this._stencilState.stencilFunc;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilBackFunction = function (): number {\r\n return this._stencilState.stencilBackFunc;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilFunctionReference = function (): number {\r\n return this._stencilState.stencilFuncRef;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilFunctionMask = function (): number {\r\n return this._stencilState.stencilFuncMask;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilFunction = function (stencilFunc: number) {\r\n this._stencilState.stencilFunc = stencilFunc;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilBackFunction = function (stencilFunc: number) {\r\n this._stencilState.stencilBackFunc = stencilFunc;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilFunctionReference = function (reference: number): void {\r\n this._stencilState.stencilFuncRef = reference;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilFunctionMask = function (mask: number): void {\r\n this._stencilState.stencilFuncMask = mask;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilOperationFail = function (): number {\r\n return this._stencilState.stencilOpStencilFail;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilBackOperationFail = function (): number {\r\n return this._stencilState.stencilBackOpStencilFail;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilOperationDepthFail = function (): number {\r\n return this._stencilState.stencilOpDepthFail;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilBackOperationDepthFail = function (): number {\r\n return this._stencilState.stencilBackOpDepthFail;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilOperationPass = function (): number {\r\n return this._stencilState.stencilOpStencilDepthPass;\r\n};\r\n\r\nAbstractEngine.prototype.getStencilBackOperationPass = function (): number {\r\n return this._stencilState.stencilBackOpStencilDepthPass;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilOperationFail = function (operation: number): void {\r\n this._stencilState.stencilOpStencilFail = operation;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilBackOperationFail = function (operation: number): void {\r\n this._stencilState.stencilBackOpStencilFail = operation;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilOperationDepthFail = function (operation: number): void {\r\n this._stencilState.stencilOpDepthFail = operation;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilBackOperationDepthFail = function (operation: number): void {\r\n this._stencilState.stencilBackOpDepthFail = operation;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilOperationPass = function (operation: number): void {\r\n this._stencilState.stencilOpStencilDepthPass = operation;\r\n};\r\n\r\nAbstractEngine.prototype.setStencilBackOperationPass = function (operation: number): void {\r\n this._stencilState.stencilBackOpStencilDepthPass = operation;\r\n};\r\n\r\nAbstractEngine.prototype.cacheStencilState = function (): void {\r\n this._cachedStencilBuffer = this.getStencilBuffer();\r\n this._cachedStencilFunction = this.getStencilFunction();\r\n this._cachedStencilMask = this.getStencilMask();\r\n this._cachedStencilOperationPass = this.getStencilOperationPass();\r\n this._cachedStencilOperationFail = this.getStencilOperationFail();\r\n this._cachedStencilOperationDepthFail = this.getStencilOperationDepthFail();\r\n this._cachedStencilReference = this.getStencilFunctionReference();\r\n};\r\n\r\nAbstractEngine.prototype.restoreStencilState = function (): void {\r\n this.setStencilFunction(this._cachedStencilFunction);\r\n this.setStencilMask(this._cachedStencilMask);\r\n this.setStencilBuffer(this._cachedStencilBuffer);\r\n this.setStencilOperationPass(this._cachedStencilOperationPass);\r\n this.setStencilOperationFail(this._cachedStencilOperationFail);\r\n this.setStencilOperationDepthFail(this._cachedStencilOperationDepthFail);\r\n this.setStencilFunctionReference(this._cachedStencilReference);\r\n};\r\n"]}
@@ -2,6 +2,7 @@ export * from "./abstractEngine.cubeTexture.js";
2
2
  export * from "./abstractEngine.loadingScreen.js";
3
3
  export * from "./abstractEngine.dom.js";
4
4
  export * from "./abstractEngine.states.js";
5
+ export * from "./abstractEngine.stencil.js";
5
6
  export * from "./abstractEngine.timeQuery.js";
6
7
  export * from "./abstractEngine.query.js";
7
8
  export * from "./abstractEngine.renderPass.js";
@@ -3,6 +3,7 @@ export * from "./abstractEngine.cubeTexture.js";
3
3
  export * from "./abstractEngine.loadingScreen.js";
4
4
  export * from "./abstractEngine.dom.js";
5
5
  export * from "./abstractEngine.states.js";
6
+ export * from "./abstractEngine.stencil.js";
6
7
  export * from "./abstractEngine.timeQuery.js";
7
8
  export * from "./abstractEngine.query.js";
8
9
  export * from "./abstractEngine.renderPass.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC","sourcesContent":["/* eslint-disable import/export */\r\nexport * from \"./abstractEngine.cubeTexture\";\r\nexport * from \"./abstractEngine.loadingScreen\";\r\nexport * from \"./abstractEngine.dom\";\r\nexport * from \"./abstractEngine.states\";\r\nexport * from \"./abstractEngine.timeQuery\";\r\nexport * from \"./abstractEngine.query\";\r\nexport * from \"./abstractEngine.renderPass\";\r\nexport * from \"./abstractEngine.texture\";\r\nexport * from \"./abstractEngine.alpha\";\r\nexport * from \"./abstractEngine.views\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC","sourcesContent":["/* eslint-disable import/export */\r\nexport * from \"./abstractEngine.cubeTexture\";\r\nexport * from \"./abstractEngine.loadingScreen\";\r\nexport * from \"./abstractEngine.dom\";\r\nexport * from \"./abstractEngine.states\";\r\nexport * from \"./abstractEngine.stencil\";\r\nexport * from \"./abstractEngine.timeQuery\";\r\nexport * from \"./abstractEngine.query\";\r\nexport * from \"./abstractEngine.renderPass\";\r\nexport * from \"./abstractEngine.texture\";\r\nexport * from \"./abstractEngine.alpha\";\r\nexport * from \"./abstractEngine.views\";\r\n"]}
@@ -4,9 +4,10 @@ declare module "../abstractEngine.js" {
4
4
  * Sets the current alpha mode
5
5
  * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)
6
6
  * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)
7
+ * @param targetIndex defines the index of the target to set the alpha mode for (default is 0)
7
8
  * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering
8
9
  */
9
- setAlphaMode(mode: number, noDepthWriteChange?: boolean): void;
10
+ setAlphaMode(mode: number, noDepthWriteChange?: boolean, targetIndex?: number): void;
10
11
  }
11
12
  }
12
13
  export {};
@@ -1,7 +1,7 @@
1
1
  import { ThinEngine } from "../../Engines/thinEngine.js";
2
2
 
3
- ThinEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = false) {
4
- if (this._alphaMode === mode) {
3
+ ThinEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = false, targetIndex = 0) {
4
+ if (this._alphaMode[targetIndex] === mode) {
5
5
  if (!noDepthWriteChange) {
6
6
  // Make sure we still have the correct depth mask according to the alpha mode (a transparent material could have forced writting to the depth buffer, for instance)
7
7
  const depthMask = mode === 0;
@@ -11,83 +11,12 @@ ThinEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = false)
11
11
  }
12
12
  return;
13
13
  }
14
- switch (mode) {
15
- case 0:
16
- this._alphaState.alphaBlend = false;
17
- break;
18
- case 7:
19
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);
20
- this._alphaState.alphaBlend = true;
21
- break;
22
- case 8:
23
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
24
- this._alphaState.alphaBlend = true;
25
- break;
26
- case 2:
27
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);
28
- this._alphaState.alphaBlend = true;
29
- break;
30
- case 6:
31
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ZERO, this._gl.ONE);
32
- this._alphaState.alphaBlend = true;
33
- break;
34
- case 1:
35
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ONE);
36
- this._alphaState.alphaBlend = true;
37
- break;
38
- case 3:
39
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ZERO, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);
40
- this._alphaState.alphaBlend = true;
41
- break;
42
- case 4:
43
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_COLOR, this._gl.ZERO, this._gl.ONE, this._gl.ONE);
44
- this._alphaState.alphaBlend = true;
45
- break;
46
- case 5:
47
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);
48
- this._alphaState.alphaBlend = true;
49
- break;
50
- case 9:
51
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.CONSTANT_COLOR, this._gl.ONE_MINUS_CONSTANT_COLOR, this._gl.CONSTANT_ALPHA, this._gl.ONE_MINUS_CONSTANT_ALPHA);
52
- this._alphaState.alphaBlend = true;
53
- break;
54
- case 10:
55
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
56
- this._alphaState.alphaBlend = true;
57
- break;
58
- case 11:
59
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ONE);
60
- this._alphaState.alphaBlend = true;
61
- break;
62
- case 12:
63
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ZERO);
64
- this._alphaState.alphaBlend = true;
65
- break;
66
- case 13:
67
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE_MINUS_DST_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA);
68
- this._alphaState.alphaBlend = true;
69
- break;
70
- case 14:
71
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
72
- this._alphaState.alphaBlend = true;
73
- break;
74
- case 15:
75
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ZERO);
76
- this._alphaState.alphaBlend = true;
77
- break;
78
- case 16:
79
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ZERO, this._gl.ONE);
80
- this._alphaState.alphaBlend = true;
81
- break;
82
- case 17:
83
- // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency
84
- this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);
85
- this._alphaState.alphaBlend = true;
86
- break;
87
- }
14
+ const alphaBlendDisabled = mode === 0;
15
+ this._alphaState.setAlphaBlend(!alphaBlendDisabled, targetIndex);
16
+ this._alphaState.setAlphaMode(mode, targetIndex);
88
17
  if (!noDepthWriteChange) {
89
- this.depthCullingState.depthMask = mode === 0;
18
+ this.depthCullingState.depthMask = alphaBlendDisabled;
90
19
  }
91
- this._alphaMode = mode;
20
+ this._alphaMode[targetIndex] = mode;
92
21
  };
93
22
  //# sourceMappingURL=engine.alpha.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.alpha.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.alpha.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { Constants } from \"../constants\";\r\n\r\ndeclare module \"../abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /**\r\n * Sets the current alpha mode\r\n * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)\r\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering\r\n */\r\n setAlphaMode(mode: number, noDepthWriteChange?: boolean): void;\r\n }\r\n}\r\n\r\nThinEngine.prototype.setAlphaMode = function (mode: number, noDepthWriteChange: boolean = false): void {\r\n if (this._alphaMode === mode) {\r\n if (!noDepthWriteChange) {\r\n // Make sure we still have the correct depth mask according to the alpha mode (a transparent material could have forced writting to the depth buffer, for instance)\r\n const depthMask = mode === Constants.ALPHA_DISABLE;\r\n if (this.depthCullingState.depthMask !== depthMask) {\r\n this.depthCullingState.depthMask = depthMask;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n switch (mode) {\r\n case Constants.ALPHA_DISABLE:\r\n this._alphaState.alphaBlend = false;\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_COMBINE:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ONEONE:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ADD:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_SUBTRACT:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ZERO, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_MULTIPLY:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_COLOR, this._gl.ZERO, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_MAXIMIZED:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_INTERPOLATE:\r\n this._alphaState.setAlphaBlendFunctionParameters(\r\n this._gl.CONSTANT_COLOR,\r\n this._gl.ONE_MINUS_CONSTANT_COLOR,\r\n this._gl.CONSTANT_ALPHA,\r\n this._gl.ONE_MINUS_CONSTANT_ALPHA\r\n );\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_SCREENMODE:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEONE:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ALPHATOCOLOR:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ZERO);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_REVERSEONEMINUS:\r\n this._alphaState.setAlphaBlendFunctionParameters(\r\n this._gl.ONE_MINUS_DST_COLOR,\r\n this._gl.ONE_MINUS_SRC_COLOR,\r\n this._gl.ONE_MINUS_DST_ALPHA,\r\n this._gl.ONE_MINUS_SRC_ALPHA\r\n );\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_SRC_DSTONEMINUSSRCALPHA:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEZERO:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ZERO);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_EXCLUSION:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_LAYER_ACCUMULATE:\r\n // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n }\r\n if (!noDepthWriteChange) {\r\n this.depthCullingState.depthMask = mode === Constants.ALPHA_DISABLE;\r\n }\r\n this._alphaMode = mode;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.alpha.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.alpha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAgBzC,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,IAAY,EAAE,qBAA8B,KAAK,EAAE,cAAsB,CAAC;IACpH,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACtB,mKAAmK;YACnK,MAAM,SAAS,GAAG,IAAI,KAAK,SAAS,CAAC,aAAa,CAAC;YACnD,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACjD,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,SAAS,CAAC;YACjD,CAAC;QACL,CAAC;QACD,OAAO;IACX,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,KAAK,SAAS,CAAC,aAAa,CAAC;IAE5D,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IACjE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,kBAAkB,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;AACxC,CAAC,CAAC","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { Constants } from \"../constants\";\r\n\r\ndeclare module \"../abstractEngine\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface AbstractEngine {\r\n /**\r\n * Sets the current alpha mode\r\n * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)\r\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\r\n * @param targetIndex defines the index of the target to set the alpha mode for (default is 0)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering\r\n */\r\n setAlphaMode(mode: number, noDepthWriteChange?: boolean, targetIndex?: number): void;\r\n }\r\n}\r\n\r\nThinEngine.prototype.setAlphaMode = function (mode: number, noDepthWriteChange: boolean = false, targetIndex: number = 0): void {\r\n if (this._alphaMode[targetIndex] === mode) {\r\n if (!noDepthWriteChange) {\r\n // Make sure we still have the correct depth mask according to the alpha mode (a transparent material could have forced writting to the depth buffer, for instance)\r\n const depthMask = mode === Constants.ALPHA_DISABLE;\r\n if (this.depthCullingState.depthMask !== depthMask) {\r\n this.depthCullingState.depthMask = depthMask;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const alphaBlendDisabled = mode === Constants.ALPHA_DISABLE;\r\n\r\n this._alphaState.setAlphaBlend(!alphaBlendDisabled, targetIndex);\r\n this._alphaState.setAlphaMode(mode, targetIndex);\r\n\r\n if (!noDepthWriteChange) {\r\n this.depthCullingState.depthMask = alphaBlendDisabled;\r\n }\r\n this._alphaMode[targetIndex] = mode;\r\n};\r\n"]}
@@ -22,13 +22,20 @@ export class WebGL2ShaderProcessor {
22
22
  code = code.replace(/texture2D\s*\(/g, "texture(");
23
23
  if (isFragment) {
24
24
  const hasOutput = code.search(/layout *\(location *= *0\) *out/g) !== -1;
25
+ const hasDualSourceBlending = defines.indexOf("#define DUAL_SOURCE_BLENDING") !== -1;
26
+ const outputDeclaration = hasDualSourceBlending
27
+ ? "layout(location = 0, index = 0) out vec4 glFragColor;\nlayout(location = 0, index = 1) out vec4 glFragColor2;\n"
28
+ : "layout(location = 0) out vec4 glFragColor;\n";
29
+ if (hasDualSourceBlending) {
30
+ code = "#extension GL_EXT_blend_func_extended : require\n" + code;
31
+ }
25
32
  code = code.replace(/texture2DLodEXT\s*\(/g, "textureLod(");
26
33
  code = code.replace(/textureCubeLodEXT\s*\(/g, "textureLod(");
27
34
  code = code.replace(/textureCube\s*\(/g, "texture(");
28
35
  code = code.replace(/gl_FragDepthEXT/g, "gl_FragDepth");
29
36
  code = code.replace(/gl_FragColor/g, "glFragColor");
30
37
  code = code.replace(/gl_FragData/g, "glFragData");
31
- code = code.replace(/void\s+?main\s*\(/g, (hasDrawBuffersExtension || hasOutput ? "" : "layout(location = 0) out vec4 glFragColor;\n") + "void main(");
38
+ code = code.replace(/void\s+?main\s*\(/g, (hasDrawBuffersExtension || hasOutput ? "" : outputDeclaration) + "void main(");
32
39
  }
33
40
  else {
34
41
  const hasMultiviewExtension = defines.indexOf("#define MULTIVIEW") !== -1;
@@ -1 +1 @@
1
- {"version":3,"file":"webGL2ShaderProcessors.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGL/webGL2ShaderProcessors.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEhD,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;IAAlC;QACW,mBAAc,+BAAuB;IA0ChD,CAAC;IAxCU,kBAAkB,CAAC,SAAiB;QACvC,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEM,YAAY,CAAC,OAAe,EAAE,WAAoB;QACrD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,OAAe,EAAE,UAAmB;QACxD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAEM,aAAa,CAAC,IAAY,EAAE,OAAiB,EAAE,UAAmB;QACrE,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,0CAA0C,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/F,oBAAoB;QACpB,MAAM,KAAK,GAAG,gJAAgJ,CAAC;QAC/J,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE/B,uBAAuB;QACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC,CAAC;YAEzE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;YAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;YAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAClD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,uBAAuB,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8CAA8C,CAAC,GAAG,YAAY,CAAC,CAAC;QAC3J,CAAC;aAAM,CAAC;YACJ,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,qBAAqB,EAAE,CAAC;gBACxB,OAAO,sEAAsE,GAAG,IAAI,CAAC;YACzF,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\nimport type { IShaderProcessor } from \"../Processors/iShaderProcessor\";\r\n\r\nconst VaryingRegex = /(flat\\s)?\\s*varying\\s*.*/;\r\n\r\n/** @internal */\r\nexport class WebGL2ShaderProcessor implements IShaderProcessor {\r\n public shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n public attributeProcessor(attribute: string) {\r\n return attribute.replace(\"attribute\", \"in\");\r\n }\r\n\r\n public varyingCheck(varying: string, _isFragment: boolean) {\r\n return VaryingRegex.test(varying);\r\n }\r\n\r\n public varyingProcessor(varying: string, isFragment: boolean) {\r\n return varying.replace(\"varying\", isFragment ? \"in\" : \"out\");\r\n }\r\n\r\n public postProcessor(code: string, defines: string[], isFragment: boolean) {\r\n const hasDrawBuffersExtension = code.search(/#extension.+GL_EXT_draw_buffers.+require/) !== -1;\r\n\r\n // Remove extensions\r\n const regex = /#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g;\r\n code = code.replace(regex, \"\");\r\n\r\n // Replace instructions\r\n code = code.replace(/texture2D\\s*\\(/g, \"texture(\");\r\n if (isFragment) {\r\n const hasOutput = code.search(/layout *\\(location *= *0\\) *out/g) !== -1;\r\n\r\n code = code.replace(/texture2DLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCubeLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCube\\s*\\(/g, \"texture(\");\r\n code = code.replace(/gl_FragDepthEXT/g, \"gl_FragDepth\");\r\n code = code.replace(/gl_FragColor/g, \"glFragColor\");\r\n code = code.replace(/gl_FragData/g, \"glFragData\");\r\n code = code.replace(/void\\s+?main\\s*\\(/g, (hasDrawBuffersExtension || hasOutput ? \"\" : \"layout(location = 0) out vec4 glFragColor;\\n\") + \"void main(\");\r\n } else {\r\n const hasMultiviewExtension = defines.indexOf(\"#define MULTIVIEW\") !== -1;\r\n if (hasMultiviewExtension) {\r\n return \"#extension GL_OVR_multiview2 : require\\nlayout (num_views = 2) in;\\n\" + code;\r\n }\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webGL2ShaderProcessors.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGL/webGL2ShaderProcessors.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEhD,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;IAAlC;QACW,mBAAc,+BAAuB;IAiDhD,CAAC;IA/CU,kBAAkB,CAAC,SAAiB;QACvC,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEM,YAAY,CAAC,OAAe,EAAE,WAAoB;QACrD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,OAAe,EAAE,UAAmB;QACxD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAEM,aAAa,CAAC,IAAY,EAAE,OAAiB,EAAE,UAAmB;QACrE,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,0CAA0C,CAAC,KAAK,CAAC,CAAC,CAAC;QAE/F,oBAAoB;QACpB,MAAM,KAAK,GAAG,gJAAgJ,CAAC;QAC/J,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE/B,uBAAuB;QACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC,CAAC;YACzE,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;YACrF,MAAM,iBAAiB,GAAG,qBAAqB;gBAC3C,CAAC,CAAC,iHAAiH;gBACnH,CAAC,CAAC,8CAA8C,CAAC;YAErD,IAAI,qBAAqB,EAAE,CAAC;gBACxB,IAAI,GAAG,mDAAmD,GAAG,IAAI,CAAC;YACtE,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;YAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;YAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAClD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,uBAAuB,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,YAAY,CAAC,CAAC;QAC9H,CAAC;aAAM,CAAC;YACJ,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,IAAI,qBAAqB,EAAE,CAAC;gBACxB,OAAO,sEAAsE,GAAG,IAAI,CAAC;YACzF,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\nimport type { IShaderProcessor } from \"../Processors/iShaderProcessor\";\r\n\r\nconst VaryingRegex = /(flat\\s)?\\s*varying\\s*.*/;\r\n\r\n/** @internal */\r\nexport class WebGL2ShaderProcessor implements IShaderProcessor {\r\n public shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n public attributeProcessor(attribute: string) {\r\n return attribute.replace(\"attribute\", \"in\");\r\n }\r\n\r\n public varyingCheck(varying: string, _isFragment: boolean) {\r\n return VaryingRegex.test(varying);\r\n }\r\n\r\n public varyingProcessor(varying: string, isFragment: boolean) {\r\n return varying.replace(\"varying\", isFragment ? \"in\" : \"out\");\r\n }\r\n\r\n public postProcessor(code: string, defines: string[], isFragment: boolean) {\r\n const hasDrawBuffersExtension = code.search(/#extension.+GL_EXT_draw_buffers.+require/) !== -1;\r\n\r\n // Remove extensions\r\n const regex = /#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g;\r\n code = code.replace(regex, \"\");\r\n\r\n // Replace instructions\r\n code = code.replace(/texture2D\\s*\\(/g, \"texture(\");\r\n if (isFragment) {\r\n const hasOutput = code.search(/layout *\\(location *= *0\\) *out/g) !== -1;\r\n const hasDualSourceBlending = defines.indexOf(\"#define DUAL_SOURCE_BLENDING\") !== -1;\r\n const outputDeclaration = hasDualSourceBlending\r\n ? \"layout(location = 0, index = 0) out vec4 glFragColor;\\nlayout(location = 0, index = 1) out vec4 glFragColor2;\\n\"\r\n : \"layout(location = 0) out vec4 glFragColor;\\n\";\r\n\r\n if (hasDualSourceBlending) {\r\n code = \"#extension GL_EXT_blend_func_extended : require\\n\" + code;\r\n }\r\n code = code.replace(/texture2DLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCubeLodEXT\\s*\\(/g, \"textureLod(\");\r\n code = code.replace(/textureCube\\s*\\(/g, \"texture(\");\r\n code = code.replace(/gl_FragDepthEXT/g, \"gl_FragDepth\");\r\n code = code.replace(/gl_FragColor/g, \"glFragColor\");\r\n code = code.replace(/gl_FragData/g, \"glFragData\");\r\n code = code.replace(/void\\s+?main\\s*\\(/g, (hasDrawBuffersExtension || hasOutput ? \"\" : outputDeclaration) + \"void main(\");\r\n } else {\r\n const hasMultiviewExtension = defines.indexOf(\"#define MULTIVIEW\") !== -1;\r\n if (hasMultiviewExtension) {\r\n return \"#extension GL_OVR_multiview2 : require\\nlayout (num_views = 2) in;\\n\" + code;\r\n }\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
@@ -5,8 +5,9 @@ declare module "../../abstractEngine.js" {
5
5
  * Sets the current alpha mode
6
6
  * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)
7
7
  * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)
8
+ * @param targetIndex defines the index of the target to set the alpha mode for (default is 0)
8
9
  * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering
9
10
  */
10
- setAlphaMode(mode: number, noDepthWriteChange?: boolean): void;
11
+ setAlphaMode(mode: number, noDepthWriteChange?: boolean, targetIndex?: number): void;
11
12
  }
12
13
  }
@@ -2,8 +2,9 @@ import { AbstractEngine } from "../../abstractEngine.js";
2
2
 
3
3
  import "../../AbstractEngine/abstractEngine.alpha.js";
4
4
  import { ThinWebGPUEngine } from "../../thinWebGPUEngine.js";
5
- ThinWebGPUEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = false) {
6
- if (this._alphaMode === mode && ((mode === 0 && !this._alphaState.alphaBlend) || (mode !== 0 && this._alphaState.alphaBlend))) {
5
+ ThinWebGPUEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = false, targetIndex = 0) {
6
+ const alphaBlend = this._alphaState._alphaBlend[targetIndex];
7
+ if (this._alphaMode[targetIndex] === mode && ((mode === 0 && !alphaBlend) || (mode !== 0 && alphaBlend))) {
7
8
  if (!noDepthWriteChange) {
8
9
  // Make sure we still have the correct depth mask according to the alpha mode (a transparent material could have forced writting to the depth buffer, for instance)
9
10
  const depthMask = mode === 0;
@@ -14,90 +15,19 @@ ThinWebGPUEngine.prototype.setAlphaMode = function (mode, noDepthWriteChange = f
14
15
  }
15
16
  return;
16
17
  }
17
- switch (mode) {
18
- case 0:
19
- this._alphaState.alphaBlend = false;
20
- break;
21
- case 7:
22
- this._alphaState.setAlphaBlendFunctionParameters(1, 771, 1, 1);
23
- this._alphaState.alphaBlend = true;
24
- break;
25
- case 8:
26
- this._alphaState.setAlphaBlendFunctionParameters(1, 771, 1, 771);
27
- this._alphaState.alphaBlend = true;
28
- break;
29
- case 2:
30
- this._alphaState.setAlphaBlendFunctionParameters(770, 771, 1, 1);
31
- this._alphaState.alphaBlend = true;
32
- break;
33
- case 6:
34
- this._alphaState.setAlphaBlendFunctionParameters(1, 1, 0, 1);
35
- this._alphaState.alphaBlend = true;
36
- break;
37
- case 1:
38
- this._alphaState.setAlphaBlendFunctionParameters(770, 1, 0, 1);
39
- this._alphaState.alphaBlend = true;
40
- break;
41
- case 3:
42
- this._alphaState.setAlphaBlendFunctionParameters(0, 769, 1, 1);
43
- this._alphaState.alphaBlend = true;
44
- break;
45
- case 4:
46
- this._alphaState.setAlphaBlendFunctionParameters(774, 0, 1, 1);
47
- this._alphaState.alphaBlend = true;
48
- break;
49
- case 5:
50
- this._alphaState.setAlphaBlendFunctionParameters(770, 769, 1, 1);
51
- this._alphaState.alphaBlend = true;
52
- break;
53
- case 9:
54
- this._alphaState.setAlphaBlendFunctionParameters(32769, 32770, 32771, 32772);
55
- this._alphaState.alphaBlend = true;
56
- break;
57
- case 10:
58
- this._alphaState.setAlphaBlendFunctionParameters(1, 769, 1, 771);
59
- this._alphaState.alphaBlend = true;
60
- break;
61
- case 11:
62
- this._alphaState.setAlphaBlendFunctionParameters(1, 1, 1, 1);
63
- this._alphaState.alphaBlend = true;
64
- break;
65
- case 12:
66
- this._alphaState.setAlphaBlendFunctionParameters(772, 1, 0, 0);
67
- this._alphaState.alphaBlend = true;
68
- break;
69
- case 13:
70
- this._alphaState.setAlphaBlendFunctionParameters(775, 769, 773, 771);
71
- this._alphaState.alphaBlend = true;
72
- break;
73
- case 14:
74
- this._alphaState.setAlphaBlendFunctionParameters(1, 771, 1, 771);
75
- this._alphaState.alphaBlend = true;
76
- break;
77
- case 15:
78
- this._alphaState.setAlphaBlendFunctionParameters(1, 1, 1, 0);
79
- this._alphaState.alphaBlend = true;
80
- break;
81
- case 16:
82
- this._alphaState.setAlphaBlendFunctionParameters(775, 769, 0, 1);
83
- this._alphaState.alphaBlend = true;
84
- break;
85
- case 17:
86
- // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency
87
- this._alphaState.setAlphaBlendFunctionParameters(770, 771, 1, 771);
88
- this._alphaState.alphaBlend = true;
89
- break;
90
- }
18
+ const alphaBlendDisabled = mode === 0;
19
+ this._alphaState.setAlphaBlend(!alphaBlendDisabled, targetIndex);
20
+ this._alphaState.setAlphaMode(mode, targetIndex);
91
21
  if (!noDepthWriteChange) {
92
- this.setDepthWrite(mode === 0);
93
- this._cacheRenderPipeline.setDepthWriteEnabled(mode === 0);
22
+ this.setDepthWrite(alphaBlendDisabled);
23
+ this._cacheRenderPipeline.setDepthWriteEnabled(alphaBlendDisabled);
94
24
  }
95
- this._alphaMode = mode;
96
- this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState.alphaBlend);
25
+ this._alphaMode[targetIndex] = mode;
26
+ this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState._alphaBlend, this._alphaState._numTargetEnabled);
97
27
  this._cacheRenderPipeline.setAlphaBlendFactors(this._alphaState._blendFunctionParameters, this._alphaState._blendEquationParameters);
98
28
  };
99
- ThinWebGPUEngine.prototype.setAlphaEquation = function (equation) {
100
- AbstractEngine.prototype.setAlphaEquation.call(this, equation);
29
+ ThinWebGPUEngine.prototype.setAlphaEquation = function (equation, targetIndex = 0) {
30
+ AbstractEngine.prototype.setAlphaEquation.call(this, equation, targetIndex);
101
31
  this._cacheRenderPipeline.setAlphaBlendFactors(this._alphaState._blendFunctionParameters, this._alphaState._blendEquationParameters);
102
32
  };
103
33
  //# sourceMappingURL=engine.alpha.js.map