@babylonjs/core 8.15.0 → 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.
- package/Animations/animatable.core.d.ts +6 -0
- package/Animations/animatable.core.js +7 -1
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.d.ts +3 -1
- package/Animations/animationGroup.js +3 -2
- package/Animations/animationGroup.js.map +1 -1
- package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +8 -0
- package/AudioV2/webAudio/components/webAudioParameterComponent.js +36 -3
- package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +10 -0
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +11 -0
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
- package/AudioV2/webAudio/webAudioEngine.js +45 -0
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/AudioV2/webAudio/webAudioStaticSound.d.ts +1 -0
- package/AudioV2/webAudio/webAudioStaticSound.js +4 -1
- package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.js +3 -3
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.d.ts +6 -0
- package/Debug/directionalLightFrustumViewer.js +39 -1
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +2 -1
- package/Engines/AbstractEngine/abstractEngine.alpha.js +9 -9
- package/Engines/AbstractEngine/abstractEngine.alpha.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.states.d.ts +4 -104
- package/Engines/AbstractEngine/abstractEngine.states.js +4 -70
- package/Engines/AbstractEngine/abstractEngine.states.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.stencil.d.ts +147 -0
- package/Engines/AbstractEngine/abstractEngine.stencil.js +93 -0
- package/Engines/AbstractEngine/abstractEngine.stencil.js.map +1 -0
- package/Engines/AbstractEngine/index.d.ts +1 -0
- package/Engines/AbstractEngine/index.js +1 -0
- package/Engines/AbstractEngine/index.js.map +1 -1
- package/Engines/Extensions/engine.alpha.d.ts +2 -1
- package/Engines/Extensions/engine.alpha.js +7 -78
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +8 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.alpha.d.ts +2 -1
- package/Engines/WebGPU/Extensions/engine.alpha.js +12 -82
- package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +12 -5
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +139 -72
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +13 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +8 -0
- package/Engines/WebGPU/webgpuStencilStateComposer.js +40 -0
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/abstractEngine.d.ts +7 -3
- package/Engines/abstractEngine.js +12 -5
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/constants.d.ts +30 -28
- package/Engines/constants.js +30 -28
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +10 -0
- package/Engines/engine.js +1 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineCapabilities.d.ts +4 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.d.ts +2 -1
- package/Engines/nativeEngine.js +6 -3
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +2 -1
- package/Engines/nullEngine.js +7 -4
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js +16 -3
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +1 -0
- package/Engines/webgpuEngine.js +6 -4
- package/Engines/webgpuEngine.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +14 -6
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +3 -0
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +6 -5
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -5
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +6 -0
- package/FrameGraph/frameGraph.js +8 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphContext.d.ts +16 -0
- package/FrameGraph/frameGraphContext.js +23 -0
- package/FrameGraph/frameGraphContext.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +9 -16
- package/FrameGraph/frameGraphRenderContext.js +15 -23
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphUtils.d.ts +52 -0
- package/FrameGraph/frameGraphUtils.js +99 -0
- package/FrameGraph/frameGraphUtils.js.map +1 -0
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +2 -0
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +35 -2
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/material.d.ts +32 -12
- package/Materials/material.js +49 -17
- package/Materials/material.js.map +1 -1
- package/Materials/materialStencilState.d.ts +24 -0
- package/Materials/materialStencilState.js +53 -1
- package/Materials/materialStencilState.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +4 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/geometry.js +1 -1
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +5 -0
- package/Meshes/instancedMesh.js +3 -3
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +28 -5
- package/Meshes/mesh.js +127 -57
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +4 -0
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.d.ts +71 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +156 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +13 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +79 -3
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +4 -0
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +5 -0
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +12 -3
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +22 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
- package/PostProcesses/thinPassPostProcess.js +7 -3
- package/PostProcesses/thinPassPostProcess.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +17 -0
- package/PostProcesses/thinTAAPostProcess.js +51 -0
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/Rendering/edgesRenderer.js +3 -2
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +1 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +1 -1
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Shaders/lod.fragment.js +2 -3
- package/Shaders/lod.fragment.js.map +1 -1
- package/Shaders/taa.fragment.js +15 -1
- package/Shaders/taa.fragment.js.map +1 -1
- package/ShadersWGSL/lod.fragment.js +2 -2
- package/ShadersWGSL/lod.fragment.js.map +1 -1
- package/ShadersWGSL/taa.fragment.js +16 -2
- package/ShadersWGSL/taa.fragment.js.map +1 -1
- package/States/IStencilState.d.ts +6 -2
- package/States/IStencilState.js.map +1 -1
- package/States/alphaCullingState.d.ts +7 -5
- package/States/alphaCullingState.js +144 -33
- package/States/alphaCullingState.js.map +1 -1
- package/States/stencilState.d.ts +12 -0
- package/States/stencilState.js +29 -1
- package/States/stencilState.js.map +1 -1
- package/States/stencilStateComposer.d.ts +12 -0
- package/States/stencilStateComposer.js +48 -2
- package/States/stencilStateComposer.js.map +1 -1
- package/assetContainer.js +29 -8
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +2 -1
- package/scene.js +1 -0
- package/scene.js.map +1 -1
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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 =
|
|
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 ? "" :
|
|
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;
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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(
|
|
93
|
-
this._cacheRenderPipeline.setDepthWriteEnabled(
|
|
22
|
+
this.setDepthWrite(alphaBlendDisabled);
|
|
23
|
+
this._cacheRenderPipeline.setDepthWriteEnabled(alphaBlendDisabled);
|
|
94
24
|
}
|
|
95
|
-
this._alphaMode = mode;
|
|
96
|
-
this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState.
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.alpha.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.alpha.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { Constants } from \"../../constants\";\r\n\r\nimport \"../../AbstractEngine/abstractEngine.alpha\";\r\nimport { ThinWebGPUEngine } from \"core/Engines/thinWebGPUEngine\";\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\nThinWebGPUEngine.prototype.setAlphaMode = function (mode: number, noDepthWriteChange: boolean = false): void {\r\n if (this._alphaMode === mode && ((mode === Constants.ALPHA_DISABLE && !this._alphaState.alphaBlend) || (mode !== Constants.ALPHA_DISABLE && this._alphaState.alphaBlend))) {\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.setDepthWrite(depthMask);\r\n this._cacheRenderPipeline.setDepthWriteEnabled(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(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n this._alphaState.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_COMBINE:\r\n this._alphaState.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ONEONE:\r\n this._alphaState.setAlphaBlendFunctionParameters(1, 1, 0, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ADD:\r\n this._alphaState.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, 1, 0, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_SUBTRACT:\r\n this._alphaState.setAlphaBlendFunctionParameters(0, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_MULTIPLY:\r\n this._alphaState.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_COLOR, 0, 1, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_MAXIMIZED:\r\n this._alphaState.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_INTERPOLATE:\r\n this._alphaState.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_CONSTANT_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_CONSTANT_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_CONSTANT_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_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(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, Constants.GL_ALPHA_FUNCTION_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(1, 1, 1, 1);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_ALPHATOCOLOR:\r\n this._alphaState.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_ALPHA, 1, 0, 0);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_REVERSEONEMINUS:\r\n this._alphaState.setAlphaBlendFunctionParameters(\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_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(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_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(1, 1, 1, 0);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case Constants.ALPHA_EXCLUSION:\r\n this._alphaState.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 0, 1);\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(\r\n Constants.GL_ALPHA_FUNCTION_SRC_ALPHA,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA,\r\n 1,\r\n Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA\r\n );\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n }\r\n if (!noDepthWriteChange) {\r\n this.setDepthWrite(mode === Constants.ALPHA_DISABLE);\r\n this._cacheRenderPipeline.setDepthWriteEnabled(mode === Constants.ALPHA_DISABLE);\r\n }\r\n this._alphaMode = mode;\r\n this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState.alphaBlend);\r\n this._cacheRenderPipeline.setAlphaBlendFactors(this._alphaState._blendFunctionParameters, this._alphaState._blendEquationParameters);\r\n};\r\n\r\nThinWebGPUEngine.prototype.setAlphaEquation = function (equation: number): void {\r\n AbstractEngine.prototype.setAlphaEquation.call(this, equation);\r\n\r\n this._cacheRenderPipeline.setAlphaBlendFactors(this._alphaState._blendFunctionParameters, this._alphaState._blendEquationParameters);\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"engine.alpha.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.alpha.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gCAAoC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,2CAA2C,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,kCAAsC;AAgBjE,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,IAAY,EAAE,qBAA8B,KAAK,EAAE,cAAsB,CAAC;IAC1H,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAE7D,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC;QACnJ,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,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC9D,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,aAAa,CAAC,kBAAkB,CAAC,CAAC;QACvC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACjH,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;AACzI,CAAC,CAAC;AAEF,gBAAgB,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,QAAgB,EAAE,cAAsB,CAAC;IAC7F,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE5E,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;AACzI,CAAC,CAAC","sourcesContent":["import { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { Constants } from \"../../constants\";\r\n\r\nimport \"../../AbstractEngine/abstractEngine.alpha\";\r\nimport { ThinWebGPUEngine } from \"core/Engines/thinWebGPUEngine\";\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\nThinWebGPUEngine.prototype.setAlphaMode = function (mode: number, noDepthWriteChange: boolean = false, targetIndex: number = 0): void {\r\n const alphaBlend = this._alphaState._alphaBlend[targetIndex];\r\n\r\n if (this._alphaMode[targetIndex] === mode && ((mode === Constants.ALPHA_DISABLE && !alphaBlend) || (mode !== Constants.ALPHA_DISABLE && alphaBlend))) {\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.setDepthWrite(depthMask);\r\n this._cacheRenderPipeline.setDepthWriteEnabled(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.setDepthWrite(alphaBlendDisabled);\r\n this._cacheRenderPipeline.setDepthWriteEnabled(alphaBlendDisabled);\r\n }\r\n this._alphaMode[targetIndex] = mode;\r\n this._cacheRenderPipeline.setAlphaBlendEnabled(this._alphaState._alphaBlend, this._alphaState._numTargetEnabled);\r\n this._cacheRenderPipeline.setAlphaBlendFactors(this._alphaState._blendFunctionParameters, this._alphaState._blendEquationParameters);\r\n};\r\n\r\nThinWebGPUEngine.prototype.setAlphaEquation = function (equation: number, targetIndex: number = 0): void {\r\n AbstractEngine.prototype.setAlphaEquation.call(this, equation, targetIndex);\r\n\r\n this._cacheRenderPipeline.setAlphaBlendFactors(this._alphaState._blendFunctionParameters, this._alphaState._blendEquationParameters);\r\n};\r\n"]}
|
|
@@ -33,15 +33,14 @@ export declare abstract class WebGPUCacheRenderPipeline {
|
|
|
33
33
|
private _depthBiasSlopeScale;
|
|
34
34
|
private _colorFormat;
|
|
35
35
|
private _webgpuColorFormat;
|
|
36
|
-
private
|
|
37
|
-
private _mrtAttachments2;
|
|
36
|
+
private _mrtAttachments;
|
|
38
37
|
private _mrtFormats;
|
|
39
38
|
private _mrtEnabledMask;
|
|
40
39
|
private _alphaBlendEnabled;
|
|
40
|
+
private _numAlphaBlendTargetsEnabled;
|
|
41
41
|
private _alphaBlendFuncParams;
|
|
42
42
|
private _alphaBlendEqParams;
|
|
43
43
|
private _writeMask;
|
|
44
|
-
private _colorStates;
|
|
45
44
|
private _depthStencilFormat;
|
|
46
45
|
private _webgpuDepthStencilFormat;
|
|
47
46
|
private _depthTestEnabled;
|
|
@@ -52,6 +51,10 @@ export declare abstract class WebGPUCacheRenderPipeline {
|
|
|
52
51
|
private _stencilFrontDepthFailOp;
|
|
53
52
|
private _stencilFrontPassOp;
|
|
54
53
|
private _stencilFrontFailOp;
|
|
54
|
+
private _stencilBackCompare;
|
|
55
|
+
private _stencilBackDepthFailOp;
|
|
56
|
+
private _stencilBackPassOp;
|
|
57
|
+
private _stencilBackFailOp;
|
|
55
58
|
private _stencilReadMask;
|
|
56
59
|
private _stencilWriteMask;
|
|
57
60
|
private _depthStencilState;
|
|
@@ -89,7 +92,7 @@ export declare abstract class WebGPUCacheRenderPipeline {
|
|
|
89
92
|
setColorFormat(format: GPUTextureFormat | null): void;
|
|
90
93
|
setMRTAttachments(attachments: number[]): void;
|
|
91
94
|
setMRT(textureArray: InternalTexture[], textureCount?: number): void;
|
|
92
|
-
setAlphaBlendEnabled(enabled: boolean): void;
|
|
95
|
+
setAlphaBlendEnabled(enabled: boolean[], numAlphaBlendTargetsEnabled: number): void;
|
|
93
96
|
setAlphaBlendFactors(factors: Array<Nullable<number>>, operations: Array<Nullable<number>>): void;
|
|
94
97
|
setWriteMask(mask: number): void;
|
|
95
98
|
setDepthStencilFormat(format: GPUTextureFormat | undefined): void;
|
|
@@ -101,10 +104,14 @@ export declare abstract class WebGPUCacheRenderPipeline {
|
|
|
101
104
|
setStencilDepthFailOp(op: Nullable<number>): void;
|
|
102
105
|
setStencilPassOp(op: Nullable<number>): void;
|
|
103
106
|
setStencilFailOp(op: Nullable<number>): void;
|
|
107
|
+
setStencilBackCompare(func: Nullable<number>): void;
|
|
108
|
+
setStencilBackDepthFailOp(op: Nullable<number>): void;
|
|
109
|
+
setStencilBackPassOp(op: Nullable<number>): void;
|
|
110
|
+
setStencilBackFailOp(op: Nullable<number>): void;
|
|
104
111
|
setStencilReadMask(mask: number): void;
|
|
105
112
|
setStencilWriteMask(mask: number): void;
|
|
106
113
|
resetStencilState(): void;
|
|
107
|
-
setStencilState(stencilEnabled: boolean, compare: Nullable<number>, depthFailOp: Nullable<number>, passOp: Nullable<number>, failOp: Nullable<number>, readMask: number, writeMask: number): void;
|
|
114
|
+
setStencilState(stencilEnabled: boolean, compare: Nullable<number>, depthFailOp: Nullable<number>, passOp: Nullable<number>, failOp: Nullable<number>, readMask: number, writeMask: number, backCompare?: Nullable<number>, backDepthFailOp?: Nullable<number>, backPassOp?: Nullable<number>, backFailOp?: Nullable<number>): void;
|
|
108
115
|
setBuffers(vertexBuffers: Nullable<{
|
|
109
116
|
[key: string]: Nullable<VertexBuffer>;
|
|
110
117
|
}>, indexBuffer: Nullable<DataBuffer>, overrideVertexBuffers: Nullable<{
|