@babylonjs/core 8.15.1 → 8.16.1
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/animationGroup.d.ts +13 -1
- package/Animations/animationGroup.js +16 -3
- 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/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 +10 -0
- package/FrameGraph/frameGraph.js +15 -5
- 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/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/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/Particles/IParticleSystem.d.ts +4 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +32 -10
- 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/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/ShadersWGSL/lod.fragment.js +2 -2
- package/ShadersWGSL/lod.fragment.js.map +1 -1
- package/Sprites/spriteManager.d.ts +1 -1
- package/Sprites/spriteManager.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 +37 -1
- package/scene.js +56 -0
- package/scene.js.map +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
/**
|
|
2
3
|
* @internal
|
|
3
4
|
**/
|
|
@@ -6,11 +7,12 @@ export class AlphaState {
|
|
|
6
7
|
* Initializes the state.
|
|
7
8
|
*/
|
|
8
9
|
constructor() {
|
|
9
|
-
this._blendFunctionParameters = new Array(4);
|
|
10
|
-
this._blendEquationParameters = new Array(2);
|
|
10
|
+
this._blendFunctionParameters = new Array(4 * 8);
|
|
11
|
+
this._blendEquationParameters = new Array(2 * 8);
|
|
11
12
|
this._blendConstants = new Array(4);
|
|
12
13
|
this._isBlendConstantsDirty = false;
|
|
13
|
-
this._alphaBlend = false;
|
|
14
|
+
this._alphaBlend = Array(8).fill(false);
|
|
15
|
+
this._numTargetEnabled = 0;
|
|
14
16
|
this._isAlphaBlendDirty = false;
|
|
15
17
|
this._isBlendFunctionParametersDirty = false;
|
|
16
18
|
this._isBlendEquationParametersDirty = false;
|
|
@@ -20,13 +22,19 @@ export class AlphaState {
|
|
|
20
22
|
return this._isAlphaBlendDirty || this._isBlendFunctionParametersDirty || this._isBlendEquationParametersDirty;
|
|
21
23
|
}
|
|
22
24
|
get alphaBlend() {
|
|
23
|
-
return this.
|
|
25
|
+
return this._numTargetEnabled > 0;
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
if (this._alphaBlend === value) {
|
|
27
|
+
setAlphaBlend(value, targetIndex = 0) {
|
|
28
|
+
if (this._alphaBlend[targetIndex] === value) {
|
|
27
29
|
return;
|
|
28
30
|
}
|
|
29
|
-
|
|
31
|
+
if (value) {
|
|
32
|
+
this._numTargetEnabled++;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this._numTargetEnabled--;
|
|
36
|
+
}
|
|
37
|
+
this._alphaBlend[targetIndex] = value;
|
|
30
38
|
this._isAlphaBlendDirty = true;
|
|
31
39
|
}
|
|
32
40
|
setAlphaBlendConstants(r, g, b, a) {
|
|
@@ -39,35 +47,34 @@ export class AlphaState {
|
|
|
39
47
|
this._blendConstants[3] = a;
|
|
40
48
|
this._isBlendConstantsDirty = true;
|
|
41
49
|
}
|
|
42
|
-
setAlphaBlendFunctionParameters(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this._blendFunctionParameters[
|
|
46
|
-
this._blendFunctionParameters[
|
|
50
|
+
setAlphaBlendFunctionParameters(srcRGBFactor, dstRGBFactor, srcAlphaFactor, dstAlphaFactor, targetIndex = 0) {
|
|
51
|
+
const offset = targetIndex * 4;
|
|
52
|
+
if (this._blendFunctionParameters[offset + 0] === srcRGBFactor &&
|
|
53
|
+
this._blendFunctionParameters[offset + 1] === dstRGBFactor &&
|
|
54
|
+
this._blendFunctionParameters[offset + 2] === srcAlphaFactor &&
|
|
55
|
+
this._blendFunctionParameters[offset + 3] === dstAlphaFactor) {
|
|
47
56
|
return;
|
|
48
57
|
}
|
|
49
|
-
this._blendFunctionParameters[0] =
|
|
50
|
-
this._blendFunctionParameters[1] =
|
|
51
|
-
this._blendFunctionParameters[2] =
|
|
52
|
-
this._blendFunctionParameters[3] =
|
|
58
|
+
this._blendFunctionParameters[offset + 0] = srcRGBFactor;
|
|
59
|
+
this._blendFunctionParameters[offset + 1] = dstRGBFactor;
|
|
60
|
+
this._blendFunctionParameters[offset + 2] = srcAlphaFactor;
|
|
61
|
+
this._blendFunctionParameters[offset + 3] = dstAlphaFactor;
|
|
53
62
|
this._isBlendFunctionParametersDirty = true;
|
|
54
63
|
}
|
|
55
|
-
setAlphaEquationParameters(
|
|
56
|
-
|
|
64
|
+
setAlphaEquationParameters(rgbEquation, alphaEquation, targetIndex = 0) {
|
|
65
|
+
const offset = targetIndex * 2;
|
|
66
|
+
if (this._blendEquationParameters[offset + 0] === rgbEquation && this._blendEquationParameters[offset + 1] === alphaEquation) {
|
|
57
67
|
return;
|
|
58
68
|
}
|
|
59
|
-
this._blendEquationParameters[0] =
|
|
60
|
-
this._blendEquationParameters[1] =
|
|
69
|
+
this._blendEquationParameters[offset + 0] = rgbEquation;
|
|
70
|
+
this._blendEquationParameters[offset + 1] = alphaEquation;
|
|
61
71
|
this._isBlendEquationParametersDirty = true;
|
|
62
72
|
}
|
|
63
73
|
reset() {
|
|
64
|
-
this._alphaBlend
|
|
65
|
-
this.
|
|
66
|
-
this._blendFunctionParameters
|
|
67
|
-
this.
|
|
68
|
-
this._blendFunctionParameters[3] = null;
|
|
69
|
-
this._blendEquationParameters[0] = null;
|
|
70
|
-
this._blendEquationParameters[1] = null;
|
|
74
|
+
this._alphaBlend.fill(false);
|
|
75
|
+
this._numTargetEnabled = 0;
|
|
76
|
+
this._blendFunctionParameters.fill(null);
|
|
77
|
+
this._blendEquationParameters.fill(null);
|
|
71
78
|
this._blendConstants[0] = null;
|
|
72
79
|
this._blendConstants[1] = null;
|
|
73
80
|
this._blendConstants[2] = null;
|
|
@@ -77,28 +84,60 @@ export class AlphaState {
|
|
|
77
84
|
this._isBlendEquationParametersDirty = false;
|
|
78
85
|
this._isBlendConstantsDirty = false;
|
|
79
86
|
}
|
|
80
|
-
apply(gl) {
|
|
87
|
+
apply(gl, numTargets = 1) {
|
|
81
88
|
if (!this.isDirty) {
|
|
82
89
|
return;
|
|
83
90
|
}
|
|
84
91
|
// Alpha blend
|
|
85
92
|
if (this._isAlphaBlendDirty) {
|
|
86
|
-
if (
|
|
87
|
-
|
|
93
|
+
if (numTargets === 1) {
|
|
94
|
+
if (this._alphaBlend[0]) {
|
|
95
|
+
gl.enable(gl.BLEND);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
gl.disable(gl.BLEND);
|
|
99
|
+
}
|
|
88
100
|
}
|
|
89
101
|
else {
|
|
90
|
-
gl
|
|
102
|
+
const gl2 = gl;
|
|
103
|
+
for (let i = 0; i < numTargets; i++) {
|
|
104
|
+
const index = i < this._numTargetEnabled ? i : 0;
|
|
105
|
+
if (this._alphaBlend[index]) {
|
|
106
|
+
gl2.enableIndexed(gl.BLEND, i);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
gl2.disableIndexed(gl.BLEND, i);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
91
112
|
}
|
|
92
113
|
this._isAlphaBlendDirty = false;
|
|
93
114
|
}
|
|
94
115
|
// Alpha function
|
|
95
116
|
if (this._isBlendFunctionParametersDirty) {
|
|
96
|
-
|
|
117
|
+
if (numTargets === 1) {
|
|
118
|
+
gl.blendFuncSeparate(this._blendFunctionParameters[0], this._blendFunctionParameters[1], this._blendFunctionParameters[2], this._blendFunctionParameters[3]);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const gl2 = gl;
|
|
122
|
+
for (let i = 0; i < numTargets; i++) {
|
|
123
|
+
const offset = i < this._numTargetEnabled ? i * 4 : 0;
|
|
124
|
+
gl2.blendFuncSeparateIndexed(i, this._blendFunctionParameters[offset + 0], this._blendFunctionParameters[offset + 1], this._blendFunctionParameters[offset + 2], this._blendFunctionParameters[offset + 3]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
97
127
|
this._isBlendFunctionParametersDirty = false;
|
|
98
128
|
}
|
|
99
129
|
// Alpha equation
|
|
100
130
|
if (this._isBlendEquationParametersDirty) {
|
|
101
|
-
|
|
131
|
+
if (numTargets === 1) {
|
|
132
|
+
gl.blendEquationSeparate(this._blendEquationParameters[0], this._blendEquationParameters[1]);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const gl2 = gl;
|
|
136
|
+
for (let i = 0; i < numTargets; i++) {
|
|
137
|
+
const offset = i < this._numTargetEnabled ? i * 2 : 0;
|
|
138
|
+
gl2.blendEquationSeparateIndexed(i, this._blendEquationParameters[offset + 0], this._blendEquationParameters[offset + 1]);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
102
141
|
this._isBlendEquationParametersDirty = false;
|
|
103
142
|
}
|
|
104
143
|
// Constants
|
|
@@ -107,5 +146,77 @@ export class AlphaState {
|
|
|
107
146
|
this._isBlendConstantsDirty = false;
|
|
108
147
|
}
|
|
109
148
|
}
|
|
149
|
+
setAlphaMode(mode, targetIndex) {
|
|
150
|
+
let equation = 32774;
|
|
151
|
+
switch (mode) {
|
|
152
|
+
case 0:
|
|
153
|
+
break;
|
|
154
|
+
case 7:
|
|
155
|
+
this.setAlphaBlendFunctionParameters(1, 771, 1, 1, targetIndex);
|
|
156
|
+
break;
|
|
157
|
+
case 8:
|
|
158
|
+
this.setAlphaBlendFunctionParameters(1, 771, 1, 771, targetIndex);
|
|
159
|
+
break;
|
|
160
|
+
case 2:
|
|
161
|
+
this.setAlphaBlendFunctionParameters(770, 771, 1, 1, targetIndex);
|
|
162
|
+
break;
|
|
163
|
+
case 6:
|
|
164
|
+
this.setAlphaBlendFunctionParameters(1, 1, 0, 1, targetIndex);
|
|
165
|
+
break;
|
|
166
|
+
case 1:
|
|
167
|
+
this.setAlphaBlendFunctionParameters(770, 1, 0, 1, targetIndex);
|
|
168
|
+
break;
|
|
169
|
+
case 3:
|
|
170
|
+
this.setAlphaBlendFunctionParameters(0, 769, 1, 1, targetIndex);
|
|
171
|
+
equation = 32778;
|
|
172
|
+
break;
|
|
173
|
+
case 4:
|
|
174
|
+
this.setAlphaBlendFunctionParameters(774, 0, 1, 1, targetIndex);
|
|
175
|
+
break;
|
|
176
|
+
case 5:
|
|
177
|
+
this.setAlphaBlendFunctionParameters(770, 769, 1, 1, targetIndex);
|
|
178
|
+
break;
|
|
179
|
+
case 9:
|
|
180
|
+
this.setAlphaBlendFunctionParameters(32769, 32770, 32771, 32772, targetIndex);
|
|
181
|
+
break;
|
|
182
|
+
case 10:
|
|
183
|
+
this.setAlphaBlendFunctionParameters(1, 769, 1, 771, targetIndex);
|
|
184
|
+
break;
|
|
185
|
+
case 11:
|
|
186
|
+
this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);
|
|
187
|
+
break;
|
|
188
|
+
case 12:
|
|
189
|
+
this.setAlphaBlendFunctionParameters(772, 1, 0, 0, targetIndex);
|
|
190
|
+
break;
|
|
191
|
+
case 13:
|
|
192
|
+
this.setAlphaBlendFunctionParameters(775, 769, 773, 771, targetIndex);
|
|
193
|
+
break;
|
|
194
|
+
case 14:
|
|
195
|
+
this.setAlphaBlendFunctionParameters(1, 771, 1, 771, targetIndex);
|
|
196
|
+
break;
|
|
197
|
+
case 15:
|
|
198
|
+
this.setAlphaBlendFunctionParameters(1, 1, 1, 0, targetIndex);
|
|
199
|
+
break;
|
|
200
|
+
case 16:
|
|
201
|
+
this.setAlphaBlendFunctionParameters(775, 769, 0, 1, targetIndex);
|
|
202
|
+
break;
|
|
203
|
+
case 17:
|
|
204
|
+
// Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency
|
|
205
|
+
this.setAlphaBlendFunctionParameters(770, 771, 1, 771, targetIndex);
|
|
206
|
+
break;
|
|
207
|
+
case 18:
|
|
208
|
+
this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);
|
|
209
|
+
equation = 32775;
|
|
210
|
+
break;
|
|
211
|
+
case 19:
|
|
212
|
+
this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);
|
|
213
|
+
equation = 32776;
|
|
214
|
+
break;
|
|
215
|
+
case 20:
|
|
216
|
+
this.setAlphaBlendFunctionParameters(1, 35065, 0, 1, targetIndex);
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
this.setAlphaEquationParameters(equation, equation, targetIndex);
|
|
220
|
+
}
|
|
110
221
|
}
|
|
111
222
|
//# sourceMappingURL=alphaCullingState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alphaCullingState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/alphaCullingState.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class AlphaState {\r\n public _blendFunctionParameters = new Array<Nullable<number>>(4);\r\n public _blendEquationParameters = new Array<Nullable<number>>(2);\r\n public _blendConstants = new Array<Nullable<number>>(4);\r\n public _isBlendConstantsDirty = false;\r\n\r\n private _alphaBlend = false;\r\n private _isAlphaBlendDirty = false;\r\n private _isBlendFunctionParametersDirty = false;\r\n private _isBlendEquationParametersDirty = false;\r\n\r\n /**\r\n * Initializes the state.\r\n */\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n public get isDirty(): boolean {\r\n return this._isAlphaBlendDirty || this._isBlendFunctionParametersDirty || this._isBlendEquationParametersDirty;\r\n }\r\n\r\n public get alphaBlend(): boolean {\r\n return this._alphaBlend;\r\n }\r\n\r\n public set alphaBlend(value: boolean) {\r\n if (this._alphaBlend === value) {\r\n return;\r\n }\r\n\r\n this._alphaBlend = value;\r\n this._isAlphaBlendDirty = true;\r\n }\r\n\r\n public setAlphaBlendConstants(r: number, g: number, b: number, a: number): void {\r\n if (this._blendConstants[0] === r && this._blendConstants[1] === g && this._blendConstants[2] === b && this._blendConstants[3] === a) {\r\n return;\r\n }\r\n\r\n this._blendConstants[0] = r;\r\n this._blendConstants[1] = g;\r\n this._blendConstants[2] = b;\r\n this._blendConstants[3] = a;\r\n\r\n this._isBlendConstantsDirty = true;\r\n }\r\n\r\n public setAlphaBlendFunctionParameters(value0: number, value1: number, value2: number, value3: number): void {\r\n if (\r\n this._blendFunctionParameters[0] === value0 &&\r\n this._blendFunctionParameters[1] === value1 &&\r\n this._blendFunctionParameters[2] === value2 &&\r\n this._blendFunctionParameters[3] === value3\r\n ) {\r\n return;\r\n }\r\n\r\n this._blendFunctionParameters[0] = value0;\r\n this._blendFunctionParameters[1] = value1;\r\n this._blendFunctionParameters[2] = value2;\r\n this._blendFunctionParameters[3] = value3;\r\n\r\n this._isBlendFunctionParametersDirty = true;\r\n }\r\n\r\n public setAlphaEquationParameters(rgb: number, alpha: number): void {\r\n if (this._blendEquationParameters[0] === rgb && this._blendEquationParameters[1] === alpha) {\r\n return;\r\n }\r\n\r\n this._blendEquationParameters[0] = rgb;\r\n this._blendEquationParameters[1] = alpha;\r\n\r\n this._isBlendEquationParametersDirty = true;\r\n }\r\n\r\n public reset() {\r\n this._alphaBlend = false;\r\n this._blendFunctionParameters[0] = null;\r\n this._blendFunctionParameters[1] = null;\r\n this._blendFunctionParameters[2] = null;\r\n this._blendFunctionParameters[3] = null;\r\n\r\n this._blendEquationParameters[0] = null;\r\n this._blendEquationParameters[1] = null;\r\n\r\n this._blendConstants[0] = null;\r\n this._blendConstants[1] = null;\r\n this._blendConstants[2] = null;\r\n this._blendConstants[3] = null;\r\n\r\n this._isAlphaBlendDirty = true;\r\n this._isBlendFunctionParametersDirty = false;\r\n this._isBlendEquationParametersDirty = false;\r\n this._isBlendConstantsDirty = false;\r\n }\r\n\r\n public apply(gl: WebGLRenderingContext) {\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Alpha blend\r\n if (this._isAlphaBlendDirty) {\r\n if (this._alphaBlend) {\r\n gl.enable(gl.BLEND);\r\n } else {\r\n gl.disable(gl.BLEND);\r\n }\r\n\r\n this._isAlphaBlendDirty = false;\r\n }\r\n\r\n // Alpha function\r\n if (this._isBlendFunctionParametersDirty) {\r\n gl.blendFuncSeparate(\r\n <number>this._blendFunctionParameters[0],\r\n <number>this._blendFunctionParameters[1],\r\n <number>this._blendFunctionParameters[2],\r\n <number>this._blendFunctionParameters[3]\r\n );\r\n this._isBlendFunctionParametersDirty = false;\r\n }\r\n\r\n // Alpha equation\r\n if (this._isBlendEquationParametersDirty) {\r\n gl.blendEquationSeparate(this._blendEquationParameters[0]!, this._blendEquationParameters[1]!);\r\n this._isBlendEquationParametersDirty = false;\r\n }\r\n\r\n // Constants\r\n if (this._isBlendConstantsDirty) {\r\n gl.blendColor(<number>this._blendConstants[0], <number>this._blendConstants[1], <number>this._blendConstants[2], <number>this._blendConstants[3]);\r\n this._isBlendConstantsDirty = false;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"alphaCullingState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/alphaCullingState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"core/Engines/constants\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class AlphaState {\r\n public _blendFunctionParameters = new Array<Nullable<number>>(4 * 8);\r\n public _blendEquationParameters = new Array<Nullable<number>>(2 * 8);\r\n public _blendConstants = new Array<Nullable<number>>(4);\r\n public _isBlendConstantsDirty = false;\r\n\r\n public _alphaBlend = Array(8).fill(false);\r\n public _numTargetEnabled = 0;\r\n\r\n private _isAlphaBlendDirty = false;\r\n private _isBlendFunctionParametersDirty = false;\r\n private _isBlendEquationParametersDirty = false;\r\n\r\n /**\r\n * Initializes the state.\r\n */\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n public get isDirty(): boolean {\r\n return this._isAlphaBlendDirty || this._isBlendFunctionParametersDirty || this._isBlendEquationParametersDirty;\r\n }\r\n\r\n public get alphaBlend(): boolean {\r\n return this._numTargetEnabled > 0;\r\n }\r\n\r\n public setAlphaBlend(value: boolean, targetIndex: number = 0): void {\r\n if (this._alphaBlend[targetIndex] === value) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this._numTargetEnabled++;\r\n } else {\r\n this._numTargetEnabled--;\r\n }\r\n\r\n this._alphaBlend[targetIndex] = value;\r\n this._isAlphaBlendDirty = true;\r\n }\r\n\r\n public setAlphaBlendConstants(r: number, g: number, b: number, a: number): void {\r\n if (this._blendConstants[0] === r && this._blendConstants[1] === g && this._blendConstants[2] === b && this._blendConstants[3] === a) {\r\n return;\r\n }\r\n\r\n this._blendConstants[0] = r;\r\n this._blendConstants[1] = g;\r\n this._blendConstants[2] = b;\r\n this._blendConstants[3] = a;\r\n\r\n this._isBlendConstantsDirty = true;\r\n }\r\n\r\n public setAlphaBlendFunctionParameters(srcRGBFactor: number, dstRGBFactor: number, srcAlphaFactor: number, dstAlphaFactor: number, targetIndex: number = 0): void {\r\n const offset = targetIndex * 4;\r\n\r\n if (\r\n this._blendFunctionParameters[offset + 0] === srcRGBFactor &&\r\n this._blendFunctionParameters[offset + 1] === dstRGBFactor &&\r\n this._blendFunctionParameters[offset + 2] === srcAlphaFactor &&\r\n this._blendFunctionParameters[offset + 3] === dstAlphaFactor\r\n ) {\r\n return;\r\n }\r\n\r\n this._blendFunctionParameters[offset + 0] = srcRGBFactor;\r\n this._blendFunctionParameters[offset + 1] = dstRGBFactor;\r\n this._blendFunctionParameters[offset + 2] = srcAlphaFactor;\r\n this._blendFunctionParameters[offset + 3] = dstAlphaFactor;\r\n\r\n this._isBlendFunctionParametersDirty = true;\r\n }\r\n\r\n public setAlphaEquationParameters(rgbEquation: number, alphaEquation: number, targetIndex: number = 0): void {\r\n const offset = targetIndex * 2;\r\n\r\n if (this._blendEquationParameters[offset + 0] === rgbEquation && this._blendEquationParameters[offset + 1] === alphaEquation) {\r\n return;\r\n }\r\n\r\n this._blendEquationParameters[offset + 0] = rgbEquation;\r\n this._blendEquationParameters[offset + 1] = alphaEquation;\r\n\r\n this._isBlendEquationParametersDirty = true;\r\n }\r\n\r\n public reset() {\r\n this._alphaBlend.fill(false);\r\n this._numTargetEnabled = 0;\r\n this._blendFunctionParameters.fill(null);\r\n this._blendEquationParameters.fill(null);\r\n\r\n this._blendConstants[0] = null;\r\n this._blendConstants[1] = null;\r\n this._blendConstants[2] = null;\r\n this._blendConstants[3] = null;\r\n\r\n this._isAlphaBlendDirty = true;\r\n this._isBlendFunctionParametersDirty = false;\r\n this._isBlendEquationParametersDirty = false;\r\n this._isBlendConstantsDirty = false;\r\n }\r\n\r\n public apply(gl: WebGLRenderingContext, numTargets: number = 1): void {\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Alpha blend\r\n if (this._isAlphaBlendDirty) {\r\n if (numTargets === 1) {\r\n if (this._alphaBlend[0]) {\r\n gl.enable(gl.BLEND);\r\n } else {\r\n gl.disable(gl.BLEND);\r\n }\r\n } else {\r\n const gl2 = gl as WebGL2RenderingContext;\r\n for (let i = 0; i < numTargets; i++) {\r\n const index = i < this._numTargetEnabled ? i : 0;\r\n if (this._alphaBlend[index]) {\r\n gl2.enableIndexed(gl.BLEND, i);\r\n } else {\r\n gl2.disableIndexed(gl.BLEND, i);\r\n }\r\n }\r\n }\r\n\r\n this._isAlphaBlendDirty = false;\r\n }\r\n\r\n // Alpha function\r\n if (this._isBlendFunctionParametersDirty) {\r\n if (numTargets === 1) {\r\n gl.blendFuncSeparate(\r\n <number>this._blendFunctionParameters[0],\r\n <number>this._blendFunctionParameters[1],\r\n <number>this._blendFunctionParameters[2],\r\n <number>this._blendFunctionParameters[3]\r\n );\r\n } else {\r\n const gl2 = gl as WebGL2RenderingContext;\r\n for (let i = 0; i < numTargets; i++) {\r\n const offset = i < this._numTargetEnabled ? i * 4 : 0;\r\n gl2.blendFuncSeparateIndexed(\r\n i,\r\n <number>this._blendFunctionParameters[offset + 0],\r\n <number>this._blendFunctionParameters[offset + 1],\r\n <number>this._blendFunctionParameters[offset + 2],\r\n <number>this._blendFunctionParameters[offset + 3]\r\n );\r\n }\r\n }\r\n this._isBlendFunctionParametersDirty = false;\r\n }\r\n\r\n // Alpha equation\r\n if (this._isBlendEquationParametersDirty) {\r\n if (numTargets === 1) {\r\n gl.blendEquationSeparate(<number>this._blendEquationParameters[0], <number>this._blendEquationParameters[1]);\r\n } else {\r\n const gl2 = gl as WebGL2RenderingContext;\r\n for (let i = 0; i < numTargets; i++) {\r\n const offset = i < this._numTargetEnabled ? i * 2 : 0;\r\n gl2.blendEquationSeparateIndexed(i, <number>this._blendEquationParameters[offset + 0], <number>this._blendEquationParameters[offset + 1]);\r\n }\r\n }\r\n this._isBlendEquationParametersDirty = false;\r\n }\r\n\r\n // Constants\r\n if (this._isBlendConstantsDirty) {\r\n gl.blendColor(<number>this._blendConstants[0], <number>this._blendConstants[1], <number>this._blendConstants[2], <number>this._blendConstants[3]);\r\n this._isBlendConstantsDirty = false;\r\n }\r\n }\r\n\r\n public setAlphaMode(mode: number, targetIndex: number) {\r\n let equation = Constants.GL_ALPHA_EQUATION_ADD;\r\n\r\n switch (mode) {\r\n case Constants.ALPHA_DISABLE:\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_PREMULTIPLIED_PORTERDUFF:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_COMBINE:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE:\r\n this.setAlphaBlendFunctionParameters(1, 1, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ADD:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, 1, 0, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_SUBTRACT:\r\n this.setAlphaBlendFunctionParameters(0, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_SUBTRACT;\r\n break;\r\n case Constants.ALPHA_MULTIPLY:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_COLOR, 0, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_MAXIMIZED:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_SRC_ALPHA, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_INTERPOLATE:\r\n this.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 targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_SCREENMODE:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEONE:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n break;\r\n case Constants.ALPHA_ALPHATOCOLOR:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_DST_ALPHA, 1, 0, 0, targetIndex);\r\n break;\r\n case Constants.ALPHA_REVERSEONEMINUS:\r\n this.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 targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_SRC_DSTONEMINUSSRCALPHA:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, 1, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_ALPHA, targetIndex);\r\n break;\r\n case Constants.ALPHA_ONEONE_ONEZERO:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 0, targetIndex);\r\n break;\r\n case Constants.ALPHA_EXCLUSION:\r\n this.setAlphaBlendFunctionParameters(Constants.GL_ALPHA_FUNCTION_ONE_MINUS_DST_COLOR, Constants.GL_ALPHA_FUNCTION_ONE_MINUS_SRC_COLOR, 0, 1, targetIndex);\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.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 targetIndex\r\n );\r\n break;\r\n case Constants.ALPHA_MIN:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_MIN;\r\n break;\r\n case Constants.ALPHA_MAX:\r\n this.setAlphaBlendFunctionParameters(1, 1, 1, 1, targetIndex);\r\n equation = Constants.GL_ALPHA_EQUATION_MAX;\r\n break;\r\n case Constants.ALPHA_DUAL_SRC0_ADD_SRC1xDST:\r\n this.setAlphaBlendFunctionParameters(1, Constants.GL_ALPHA_FUNCTION_SRC1_COLOR, 0, 1, targetIndex);\r\n break;\r\n }\r\n\r\n this.setAlphaEquationParameters(equation, equation, targetIndex);\r\n }\r\n}\r\n"]}
|
package/States/stencilState.d.ts
CHANGED
|
@@ -14,6 +14,9 @@ export declare class StencilState implements IStencilState {
|
|
|
14
14
|
func: number;
|
|
15
15
|
get stencilFunc(): number;
|
|
16
16
|
set stencilFunc(value: number);
|
|
17
|
+
backFunc: number;
|
|
18
|
+
get stencilBackFunc(): number;
|
|
19
|
+
set stencilBackFunc(value: number);
|
|
17
20
|
funcRef: number;
|
|
18
21
|
get stencilFuncRef(): number;
|
|
19
22
|
set stencilFuncRef(value: number);
|
|
@@ -29,6 +32,15 @@ export declare class StencilState implements IStencilState {
|
|
|
29
32
|
opStencilDepthPass: number;
|
|
30
33
|
get stencilOpStencilDepthPass(): number;
|
|
31
34
|
set stencilOpStencilDepthPass(value: number);
|
|
35
|
+
backOpStencilFail: number;
|
|
36
|
+
get stencilBackOpStencilFail(): number;
|
|
37
|
+
set stencilBackOpStencilFail(value: number);
|
|
38
|
+
backOpDepthFail: number;
|
|
39
|
+
get stencilBackOpDepthFail(): number;
|
|
40
|
+
set stencilBackOpDepthFail(value: number);
|
|
41
|
+
backOpStencilDepthPass: number;
|
|
42
|
+
get stencilBackOpStencilDepthPass(): number;
|
|
43
|
+
set stencilBackOpStencilDepthPass(value: number);
|
|
32
44
|
mask: number;
|
|
33
45
|
get stencilMask(): number;
|
|
34
46
|
set stencilMask(value: number);
|
package/States/stencilState.js
CHANGED
|
@@ -9,12 +9,16 @@ export class StencilState {
|
|
|
9
9
|
reset() {
|
|
10
10
|
this.enabled = false;
|
|
11
11
|
this.mask = 0xff;
|
|
12
|
-
this.func = StencilState.ALWAYS;
|
|
13
12
|
this.funcRef = 1;
|
|
14
13
|
this.funcMask = 0xff;
|
|
14
|
+
this.func = StencilState.ALWAYS;
|
|
15
15
|
this.opStencilFail = StencilState.KEEP;
|
|
16
16
|
this.opDepthFail = StencilState.KEEP;
|
|
17
17
|
this.opStencilDepthPass = StencilState.REPLACE;
|
|
18
|
+
this.backFunc = StencilState.ALWAYS;
|
|
19
|
+
this.backOpStencilFail = StencilState.KEEP;
|
|
20
|
+
this.backOpDepthFail = StencilState.KEEP;
|
|
21
|
+
this.backOpStencilDepthPass = StencilState.REPLACE;
|
|
18
22
|
}
|
|
19
23
|
get stencilFunc() {
|
|
20
24
|
return this.func;
|
|
@@ -22,6 +26,12 @@ export class StencilState {
|
|
|
22
26
|
set stencilFunc(value) {
|
|
23
27
|
this.func = value;
|
|
24
28
|
}
|
|
29
|
+
get stencilBackFunc() {
|
|
30
|
+
return this.backFunc;
|
|
31
|
+
}
|
|
32
|
+
set stencilBackFunc(value) {
|
|
33
|
+
this.backFunc = value;
|
|
34
|
+
}
|
|
25
35
|
get stencilFuncRef() {
|
|
26
36
|
return this.funcRef;
|
|
27
37
|
}
|
|
@@ -52,6 +62,24 @@ export class StencilState {
|
|
|
52
62
|
set stencilOpStencilDepthPass(value) {
|
|
53
63
|
this.opStencilDepthPass = value;
|
|
54
64
|
}
|
|
65
|
+
get stencilBackOpStencilFail() {
|
|
66
|
+
return this.backOpStencilFail;
|
|
67
|
+
}
|
|
68
|
+
set stencilBackOpStencilFail(value) {
|
|
69
|
+
this.backOpStencilFail = value;
|
|
70
|
+
}
|
|
71
|
+
get stencilBackOpDepthFail() {
|
|
72
|
+
return this.backOpDepthFail;
|
|
73
|
+
}
|
|
74
|
+
set stencilBackOpDepthFail(value) {
|
|
75
|
+
this.backOpDepthFail = value;
|
|
76
|
+
}
|
|
77
|
+
get stencilBackOpStencilDepthPass() {
|
|
78
|
+
return this.backOpStencilDepthPass;
|
|
79
|
+
}
|
|
80
|
+
set stencilBackOpStencilDepthPass(value) {
|
|
81
|
+
this.backOpStencilDepthPass = value;
|
|
82
|
+
}
|
|
55
83
|
get stencilMask() {
|
|
56
84
|
return this.mask;
|
|
57
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stencilState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD;;IAEI;AACJ,MAAM,OAAO,YAAY;IAQrB;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"stencilState.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilState.ts"],"names":[],"mappings":"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","sourcesContent":["import { Constants } from \"../Engines/constants\";\r\nimport type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilState implements IStencilState {\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n\r\n public constructor() {\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.enabled = false;\r\n this.mask = 0xff;\r\n\r\n this.funcRef = 1;\r\n this.funcMask = 0xff;\r\n\r\n this.func = StencilState.ALWAYS;\r\n this.opStencilFail = StencilState.KEEP;\r\n this.opDepthFail = StencilState.KEEP;\r\n this.opStencilDepthPass = StencilState.REPLACE;\r\n\r\n this.backFunc = StencilState.ALWAYS;\r\n this.backOpStencilFail = StencilState.KEEP;\r\n this.backOpDepthFail = StencilState.KEEP;\r\n this.backOpStencilDepthPass = StencilState.REPLACE;\r\n }\r\n\r\n public func: number;\r\n public get stencilFunc(): number {\r\n return this.func;\r\n }\r\n\r\n public set stencilFunc(value: number) {\r\n this.func = value;\r\n }\r\n\r\n public backFunc: number;\r\n public get stencilBackFunc(): number {\r\n return this.backFunc;\r\n }\r\n\r\n public set stencilBackFunc(value: number) {\r\n this.backFunc = value;\r\n }\r\n\r\n public funcRef: number;\r\n public get stencilFuncRef(): number {\r\n return this.funcRef;\r\n }\r\n\r\n public set stencilFuncRef(value: number) {\r\n this.funcRef = value;\r\n }\r\n\r\n public funcMask: number;\r\n public get stencilFuncMask(): number {\r\n return this.funcMask;\r\n }\r\n\r\n public set stencilFuncMask(value: number) {\r\n this.funcMask = value;\r\n }\r\n\r\n public opStencilFail: number;\r\n public get stencilOpStencilFail(): number {\r\n return this.opStencilFail;\r\n }\r\n\r\n public set stencilOpStencilFail(value: number) {\r\n this.opStencilFail = value;\r\n }\r\n\r\n public opDepthFail: number;\r\n public get stencilOpDepthFail(): number {\r\n return this.opDepthFail;\r\n }\r\n\r\n public set stencilOpDepthFail(value: number) {\r\n this.opDepthFail = value;\r\n }\r\n\r\n public opStencilDepthPass: number;\r\n public get stencilOpStencilDepthPass(): number {\r\n return this.opStencilDepthPass;\r\n }\r\n\r\n public set stencilOpStencilDepthPass(value: number) {\r\n this.opStencilDepthPass = value;\r\n }\r\n\r\n public backOpStencilFail: number;\r\n public get stencilBackOpStencilFail(): number {\r\n return this.backOpStencilFail;\r\n }\r\n\r\n public set stencilBackOpStencilFail(value: number) {\r\n this.backOpStencilFail = value;\r\n }\r\n\r\n public backOpDepthFail: number;\r\n public get stencilBackOpDepthFail(): number {\r\n return this.backOpDepthFail;\r\n }\r\n\r\n public set stencilBackOpDepthFail(value: number) {\r\n this.backOpDepthFail = value;\r\n }\r\n\r\n public backOpStencilDepthPass: number;\r\n public get stencilBackOpStencilDepthPass(): number {\r\n return this.backOpStencilDepthPass;\r\n }\r\n\r\n public set stencilBackOpStencilDepthPass(value: number) {\r\n this.backOpStencilDepthPass = value;\r\n }\r\n\r\n public mask: number;\r\n public get stencilMask(): number {\r\n return this.mask;\r\n }\r\n\r\n public set stencilMask(value: number) {\r\n this.mask = value;\r\n }\r\n\r\n public enabled: boolean;\r\n public get stencilTest(): boolean {\r\n return this.enabled;\r\n }\r\n\r\n public set stencilTest(value: boolean) {\r\n this.enabled = value;\r\n }\r\n}\r\n"]}
|
|
@@ -15,12 +15,18 @@ export declare class StencilStateComposer {
|
|
|
15
15
|
protected _opStencilFail: number;
|
|
16
16
|
protected _opDepthFail: number;
|
|
17
17
|
protected _opStencilDepthPass: number;
|
|
18
|
+
protected _backFunc: number;
|
|
19
|
+
protected _backOpStencilFail: number;
|
|
20
|
+
protected _backOpDepthFail: number;
|
|
21
|
+
protected _backOpStencilDepthPass: number;
|
|
18
22
|
stencilGlobal: IStencilState;
|
|
19
23
|
stencilMaterial: IStencilState | undefined;
|
|
20
24
|
useStencilGlobalOnly: boolean;
|
|
21
25
|
get isDirty(): boolean;
|
|
22
26
|
get func(): number;
|
|
23
27
|
set func(value: number);
|
|
28
|
+
get backFunc(): number;
|
|
29
|
+
set backFunc(value: number);
|
|
24
30
|
get funcRef(): number;
|
|
25
31
|
set funcRef(value: number);
|
|
26
32
|
get funcMask(): number;
|
|
@@ -31,6 +37,12 @@ export declare class StencilStateComposer {
|
|
|
31
37
|
set opDepthFail(value: number);
|
|
32
38
|
get opStencilDepthPass(): number;
|
|
33
39
|
set opStencilDepthPass(value: number);
|
|
40
|
+
get backOpStencilFail(): number;
|
|
41
|
+
set backOpStencilFail(value: number);
|
|
42
|
+
get backOpDepthFail(): number;
|
|
43
|
+
set backOpDepthFail(value: number);
|
|
44
|
+
get backOpStencilDepthPass(): number;
|
|
45
|
+
set backOpStencilDepthPass(value: number);
|
|
34
46
|
get mask(): number;
|
|
35
47
|
set mask(value: number);
|
|
36
48
|
get enabled(): boolean;
|
|
@@ -15,6 +15,16 @@ export class StencilStateComposer {
|
|
|
15
15
|
this._func = value;
|
|
16
16
|
this._isStencilFuncDirty = true;
|
|
17
17
|
}
|
|
18
|
+
get backFunc() {
|
|
19
|
+
return this._func;
|
|
20
|
+
}
|
|
21
|
+
set backFunc(value) {
|
|
22
|
+
if (this._backFunc === value) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this._backFunc = value;
|
|
26
|
+
this._isStencilFuncDirty = true;
|
|
27
|
+
}
|
|
18
28
|
get funcRef() {
|
|
19
29
|
return this._funcRef;
|
|
20
30
|
}
|
|
@@ -65,6 +75,36 @@ export class StencilStateComposer {
|
|
|
65
75
|
this._opStencilDepthPass = value;
|
|
66
76
|
this._isStencilOpDirty = true;
|
|
67
77
|
}
|
|
78
|
+
get backOpStencilFail() {
|
|
79
|
+
return this._backOpStencilFail;
|
|
80
|
+
}
|
|
81
|
+
set backOpStencilFail(value) {
|
|
82
|
+
if (this._backOpStencilFail === value) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this._backOpStencilFail = value;
|
|
86
|
+
this._isStencilOpDirty = true;
|
|
87
|
+
}
|
|
88
|
+
get backOpDepthFail() {
|
|
89
|
+
return this._backOpDepthFail;
|
|
90
|
+
}
|
|
91
|
+
set backOpDepthFail(value) {
|
|
92
|
+
if (this._backOpDepthFail === value) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this._backOpDepthFail = value;
|
|
96
|
+
this._isStencilOpDirty = true;
|
|
97
|
+
}
|
|
98
|
+
get backOpStencilDepthPass() {
|
|
99
|
+
return this._backOpStencilDepthPass;
|
|
100
|
+
}
|
|
101
|
+
set backOpStencilDepthPass(value) {
|
|
102
|
+
if (this._backOpStencilDepthPass === value) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this._backOpStencilDepthPass = value;
|
|
106
|
+
this._isStencilOpDirty = true;
|
|
107
|
+
}
|
|
68
108
|
get mask() {
|
|
69
109
|
return this._mask;
|
|
70
110
|
}
|
|
@@ -110,11 +150,15 @@ export class StencilStateComposer {
|
|
|
110
150
|
const stencilMaterialEnabled = !this.useStencilGlobalOnly && !!this.stencilMaterial?.enabled;
|
|
111
151
|
this.enabled = stencilMaterialEnabled ? this.stencilMaterial.enabled : this.stencilGlobal.enabled;
|
|
112
152
|
this.func = stencilMaterialEnabled ? this.stencilMaterial.func : this.stencilGlobal.func;
|
|
153
|
+
this.backFunc = stencilMaterialEnabled ? this.stencilMaterial.backFunc : this.stencilGlobal.backFunc;
|
|
113
154
|
this.funcRef = stencilMaterialEnabled ? this.stencilMaterial.funcRef : this.stencilGlobal.funcRef;
|
|
114
155
|
this.funcMask = stencilMaterialEnabled ? this.stencilMaterial.funcMask : this.stencilGlobal.funcMask;
|
|
115
156
|
this.opStencilFail = stencilMaterialEnabled ? this.stencilMaterial.opStencilFail : this.stencilGlobal.opStencilFail;
|
|
116
157
|
this.opDepthFail = stencilMaterialEnabled ? this.stencilMaterial.opDepthFail : this.stencilGlobal.opDepthFail;
|
|
117
158
|
this.opStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial.opStencilDepthPass : this.stencilGlobal.opStencilDepthPass;
|
|
159
|
+
this.backOpStencilFail = stencilMaterialEnabled ? this.stencilMaterial.backOpStencilFail : this.stencilGlobal.backOpStencilFail;
|
|
160
|
+
this.backOpDepthFail = stencilMaterialEnabled ? this.stencilMaterial.backOpDepthFail : this.stencilGlobal.backOpDepthFail;
|
|
161
|
+
this.backOpStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial.backOpStencilDepthPass : this.stencilGlobal.backOpStencilDepthPass;
|
|
118
162
|
this.mask = stencilMaterialEnabled ? this.stencilMaterial.mask : this.stencilGlobal.mask;
|
|
119
163
|
if (!this.isDirty) {
|
|
120
164
|
return;
|
|
@@ -136,12 +180,14 @@ export class StencilStateComposer {
|
|
|
136
180
|
}
|
|
137
181
|
// Stencil func
|
|
138
182
|
if (this._isStencilFuncDirty) {
|
|
139
|
-
gl.
|
|
183
|
+
gl.stencilFuncSeparate(gl.FRONT, this.func, this.funcRef, this.funcMask);
|
|
184
|
+
gl.stencilFuncSeparate(gl.BACK, this.backFunc, this.funcRef, this.funcMask);
|
|
140
185
|
this._isStencilFuncDirty = false;
|
|
141
186
|
}
|
|
142
187
|
// Stencil op
|
|
143
188
|
if (this._isStencilOpDirty) {
|
|
144
|
-
gl.
|
|
189
|
+
gl.stencilOpSeparate(gl.FRONT, this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);
|
|
190
|
+
gl.stencilOpSeparate(gl.BACK, this.backOpStencilFail, this.backOpDepthFail, this.backOpStencilDepthPass);
|
|
145
191
|
this._isStencilOpDirty = false;
|
|
146
192
|
}
|
|
147
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stencilStateComposer.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilStateComposer.ts"],"names":[],"mappings":"AAEA;;IAEI;AACJ,MAAM,OAAO,oBAAoB;IAuB7B,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,iBAAiB,CAAC;IACtH,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,aAAa,CAAC,KAAa;QAClC,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YAChC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,KAAc;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,YAAmB,KAAK,GAAG,IAAI;QAlIrB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,sBAAiB,GAAG,KAAK,CAAC;QAiB7B,yBAAoB,GAAG,KAAK,CAAC;QA+GhC,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;QAE5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,EAA0B;QACnC,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO;QACX,CAAC;QAED,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QAE7F,IAAI,CAAC,OAAO,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QACnG,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1F,IAAI,CAAC,OAAO,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QACnG,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QACtG,IAAI,CAAC,aAAa,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QACrH,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/G,IAAI,CAAC,kBAAkB,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;QACpI,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAE1F,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;QAED,aAAa;QACb,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5E,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACnC,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilStateComposer {\r\n protected _isStencilTestDirty = false;\r\n protected _isStencilMaskDirty = false;\r\n protected _isStencilFuncDirty = false;\r\n protected _isStencilOpDirty = false;\r\n\r\n protected _enabled: boolean;\r\n\r\n protected _mask: number;\r\n\r\n protected _func: number;\r\n protected _funcRef: number;\r\n protected _funcMask: number;\r\n\r\n protected _opStencilFail: number;\r\n protected _opDepthFail: number;\r\n protected _opStencilDepthPass: number;\r\n\r\n public stencilGlobal: IStencilState;\r\n public stencilMaterial: IStencilState | undefined;\r\n\r\n public useStencilGlobalOnly = false;\r\n\r\n public get isDirty(): boolean {\r\n return this._isStencilTestDirty || this._isStencilMaskDirty || this._isStencilFuncDirty || this._isStencilOpDirty;\r\n }\r\n\r\n public get func(): number {\r\n return this._func;\r\n }\r\n\r\n public set func(value: number) {\r\n if (this._func === value) {\r\n return;\r\n }\r\n\r\n this._func = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcRef(): number {\r\n return this._funcRef;\r\n }\r\n\r\n public set funcRef(value: number) {\r\n if (this._funcRef === value) {\r\n return;\r\n }\r\n\r\n this._funcRef = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcMask(): number {\r\n return this._funcMask;\r\n }\r\n\r\n public set funcMask(value: number) {\r\n if (this._funcMask === value) {\r\n return;\r\n }\r\n\r\n this._funcMask = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get opStencilFail(): number {\r\n return this._opStencilFail;\r\n }\r\n\r\n public set opStencilFail(value: number) {\r\n if (this._opStencilFail === value) {\r\n return;\r\n }\r\n\r\n this._opStencilFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opDepthFail(): number {\r\n return this._opDepthFail;\r\n }\r\n\r\n public set opDepthFail(value: number) {\r\n if (this._opDepthFail === value) {\r\n return;\r\n }\r\n\r\n this._opDepthFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opStencilDepthPass(): number {\r\n return this._opStencilDepthPass;\r\n }\r\n\r\n public set opStencilDepthPass(value: number) {\r\n if (this._opStencilDepthPass === value) {\r\n return;\r\n }\r\n\r\n this._opStencilDepthPass = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get mask(): number {\r\n return this._mask;\r\n }\r\n\r\n public set mask(value: number) {\r\n if (this._mask === value) {\r\n return;\r\n }\r\n\r\n this._mask = value;\r\n this._isStencilMaskDirty = true;\r\n }\r\n\r\n public get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n if (this._enabled === value) {\r\n return;\r\n }\r\n\r\n this._enabled = value;\r\n this._isStencilTestDirty = true;\r\n }\r\n\r\n public constructor(reset = true) {\r\n if (reset) {\r\n this.reset();\r\n }\r\n }\r\n\r\n public reset() {\r\n this.stencilMaterial = undefined;\r\n\r\n this.stencilGlobal?.reset();\r\n\r\n this._isStencilTestDirty = true;\r\n this._isStencilMaskDirty = true;\r\n this._isStencilFuncDirty = true;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public apply(gl?: WebGLRenderingContext) {\r\n if (!gl) {\r\n return;\r\n }\r\n\r\n const stencilMaterialEnabled = !this.useStencilGlobalOnly && !!this.stencilMaterial?.enabled;\r\n\r\n this.enabled = stencilMaterialEnabled ? this.stencilMaterial!.enabled : this.stencilGlobal.enabled;\r\n this.func = stencilMaterialEnabled ? this.stencilMaterial!.func : this.stencilGlobal.func;\r\n this.funcRef = stencilMaterialEnabled ? this.stencilMaterial!.funcRef : this.stencilGlobal.funcRef;\r\n this.funcMask = stencilMaterialEnabled ? this.stencilMaterial!.funcMask : this.stencilGlobal.funcMask;\r\n this.opStencilFail = stencilMaterialEnabled ? this.stencilMaterial!.opStencilFail : this.stencilGlobal.opStencilFail;\r\n this.opDepthFail = stencilMaterialEnabled ? this.stencilMaterial!.opDepthFail : this.stencilGlobal.opDepthFail;\r\n this.opStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial!.opStencilDepthPass : this.stencilGlobal.opStencilDepthPass;\r\n this.mask = stencilMaterialEnabled ? this.stencilMaterial!.mask : this.stencilGlobal.mask;\r\n\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Stencil test\r\n if (this._isStencilTestDirty) {\r\n if (this.enabled) {\r\n gl.enable(gl.STENCIL_TEST);\r\n } else {\r\n gl.disable(gl.STENCIL_TEST);\r\n }\r\n this._isStencilTestDirty = false;\r\n }\r\n\r\n // Stencil mask\r\n if (this._isStencilMaskDirty) {\r\n gl.stencilMask(this.mask);\r\n this._isStencilMaskDirty = false;\r\n }\r\n\r\n // Stencil func\r\n if (this._isStencilFuncDirty) {\r\n gl.stencilFunc(this.func, this.funcRef, this.funcMask);\r\n this._isStencilFuncDirty = false;\r\n }\r\n\r\n // Stencil op\r\n if (this._isStencilOpDirty) {\r\n gl.stencilOp(this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);\r\n this._isStencilOpDirty = false;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"stencilStateComposer.js","sourceRoot":"","sources":["../../../../dev/core/src/States/stencilStateComposer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IStencilState } from \"./IStencilState\";\r\n\r\n/**\r\n * @internal\r\n **/\r\nexport class StencilStateComposer {\r\n protected _isStencilTestDirty = false;\r\n protected _isStencilMaskDirty = false;\r\n protected _isStencilFuncDirty = false;\r\n protected _isStencilOpDirty = false;\r\n\r\n protected _enabled: boolean;\r\n\r\n protected _mask: number;\r\n\r\n protected _func: number;\r\n protected _funcRef: number;\r\n protected _funcMask: number;\r\n\r\n protected _opStencilFail: number;\r\n protected _opDepthFail: number;\r\n protected _opStencilDepthPass: number;\r\n\r\n protected _backFunc: number;\r\n protected _backOpStencilFail: number;\r\n protected _backOpDepthFail: number;\r\n protected _backOpStencilDepthPass: number;\r\n\r\n public stencilGlobal: IStencilState;\r\n public stencilMaterial: IStencilState | undefined;\r\n\r\n public useStencilGlobalOnly = false;\r\n\r\n public get isDirty(): boolean {\r\n return this._isStencilTestDirty || this._isStencilMaskDirty || this._isStencilFuncDirty || this._isStencilOpDirty;\r\n }\r\n\r\n public get func(): number {\r\n return this._func;\r\n }\r\n\r\n public set func(value: number) {\r\n if (this._func === value) {\r\n return;\r\n }\r\n\r\n this._func = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get backFunc(): number {\r\n return this._func;\r\n }\r\n\r\n public set backFunc(value: number) {\r\n if (this._backFunc === value) {\r\n return;\r\n }\r\n\r\n this._backFunc = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcRef(): number {\r\n return this._funcRef;\r\n }\r\n\r\n public set funcRef(value: number) {\r\n if (this._funcRef === value) {\r\n return;\r\n }\r\n\r\n this._funcRef = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get funcMask(): number {\r\n return this._funcMask;\r\n }\r\n\r\n public set funcMask(value: number) {\r\n if (this._funcMask === value) {\r\n return;\r\n }\r\n\r\n this._funcMask = value;\r\n this._isStencilFuncDirty = true;\r\n }\r\n\r\n public get opStencilFail(): number {\r\n return this._opStencilFail;\r\n }\r\n\r\n public set opStencilFail(value: number) {\r\n if (this._opStencilFail === value) {\r\n return;\r\n }\r\n\r\n this._opStencilFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opDepthFail(): number {\r\n return this._opDepthFail;\r\n }\r\n\r\n public set opDepthFail(value: number) {\r\n if (this._opDepthFail === value) {\r\n return;\r\n }\r\n\r\n this._opDepthFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get opStencilDepthPass(): number {\r\n return this._opStencilDepthPass;\r\n }\r\n\r\n public set opStencilDepthPass(value: number) {\r\n if (this._opStencilDepthPass === value) {\r\n return;\r\n }\r\n\r\n this._opStencilDepthPass = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get backOpStencilFail(): number {\r\n return this._backOpStencilFail;\r\n }\r\n\r\n public set backOpStencilFail(value: number) {\r\n if (this._backOpStencilFail === value) {\r\n return;\r\n }\r\n\r\n this._backOpStencilFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get backOpDepthFail(): number {\r\n return this._backOpDepthFail;\r\n }\r\n\r\n public set backOpDepthFail(value: number) {\r\n if (this._backOpDepthFail === value) {\r\n return;\r\n }\r\n\r\n this._backOpDepthFail = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get backOpStencilDepthPass(): number {\r\n return this._backOpStencilDepthPass;\r\n }\r\n\r\n public set backOpStencilDepthPass(value: number) {\r\n if (this._backOpStencilDepthPass === value) {\r\n return;\r\n }\r\n\r\n this._backOpStencilDepthPass = value;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public get mask(): number {\r\n return this._mask;\r\n }\r\n\r\n public set mask(value: number) {\r\n if (this._mask === value) {\r\n return;\r\n }\r\n\r\n this._mask = value;\r\n this._isStencilMaskDirty = true;\r\n }\r\n\r\n public get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n if (this._enabled === value) {\r\n return;\r\n }\r\n\r\n this._enabled = value;\r\n this._isStencilTestDirty = true;\r\n }\r\n\r\n public constructor(reset = true) {\r\n if (reset) {\r\n this.reset();\r\n }\r\n }\r\n\r\n public reset() {\r\n this.stencilMaterial = undefined;\r\n\r\n this.stencilGlobal?.reset();\r\n\r\n this._isStencilTestDirty = true;\r\n this._isStencilMaskDirty = true;\r\n this._isStencilFuncDirty = true;\r\n this._isStencilOpDirty = true;\r\n }\r\n\r\n public apply(gl?: WebGLRenderingContext) {\r\n if (!gl) {\r\n return;\r\n }\r\n\r\n const stencilMaterialEnabled = !this.useStencilGlobalOnly && !!this.stencilMaterial?.enabled;\r\n\r\n this.enabled = stencilMaterialEnabled ? this.stencilMaterial!.enabled : this.stencilGlobal.enabled;\r\n this.func = stencilMaterialEnabled ? this.stencilMaterial!.func : this.stencilGlobal.func;\r\n this.backFunc = stencilMaterialEnabled ? this.stencilMaterial!.backFunc : this.stencilGlobal.backFunc;\r\n this.funcRef = stencilMaterialEnabled ? this.stencilMaterial!.funcRef : this.stencilGlobal.funcRef;\r\n this.funcMask = stencilMaterialEnabled ? this.stencilMaterial!.funcMask : this.stencilGlobal.funcMask;\r\n this.opStencilFail = stencilMaterialEnabled ? this.stencilMaterial!.opStencilFail : this.stencilGlobal.opStencilFail;\r\n this.opDepthFail = stencilMaterialEnabled ? this.stencilMaterial!.opDepthFail : this.stencilGlobal.opDepthFail;\r\n this.opStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial!.opStencilDepthPass : this.stencilGlobal.opStencilDepthPass;\r\n this.backOpStencilFail = stencilMaterialEnabled ? this.stencilMaterial!.backOpStencilFail : this.stencilGlobal.backOpStencilFail;\r\n this.backOpDepthFail = stencilMaterialEnabled ? this.stencilMaterial!.backOpDepthFail : this.stencilGlobal.backOpDepthFail;\r\n this.backOpStencilDepthPass = stencilMaterialEnabled ? this.stencilMaterial!.backOpStencilDepthPass : this.stencilGlobal.backOpStencilDepthPass;\r\n this.mask = stencilMaterialEnabled ? this.stencilMaterial!.mask : this.stencilGlobal.mask;\r\n\r\n if (!this.isDirty) {\r\n return;\r\n }\r\n\r\n // Stencil test\r\n if (this._isStencilTestDirty) {\r\n if (this.enabled) {\r\n gl.enable(gl.STENCIL_TEST);\r\n } else {\r\n gl.disable(gl.STENCIL_TEST);\r\n }\r\n this._isStencilTestDirty = false;\r\n }\r\n\r\n // Stencil mask\r\n if (this._isStencilMaskDirty) {\r\n gl.stencilMask(this.mask);\r\n this._isStencilMaskDirty = false;\r\n }\r\n\r\n // Stencil func\r\n if (this._isStencilFuncDirty) {\r\n gl.stencilFuncSeparate(gl.FRONT, this.func, this.funcRef, this.funcMask);\r\n gl.stencilFuncSeparate(gl.BACK, this.backFunc, this.funcRef, this.funcMask);\r\n this._isStencilFuncDirty = false;\r\n }\r\n\r\n // Stencil op\r\n if (this._isStencilOpDirty) {\r\n gl.stencilOpSeparate(gl.FRONT, this.opStencilFail, this.opDepthFail, this.opStencilDepthPass);\r\n gl.stencilOpSeparate(gl.BACK, this.backOpStencilFail, this.backOpDepthFail, this.backOpStencilDepthPass);\r\n this._isStencilOpDirty = false;\r\n }\r\n }\r\n}\r\n"]}
|