super-three 0.157.1 → 0.158.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/README.md +6 -4
- package/build/three.cjs +1013 -790
- package/build/three.js +1013 -790
- package/build/three.min.js +1 -1
- package/build/three.module.js +1008 -791
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +290 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +12 -1
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +72 -2
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/loaders/GLTFLoader.js +12 -3
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +70 -3
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +6 -6
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/MorphNode.js +5 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +7 -12
- package/examples/jsm/nodes/core/NodeBuilder.js +126 -16
- package/examples/jsm/nodes/core/NodeUtils.js +4 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +1 -1
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +4 -10
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/VarNode.js +6 -35
- package/examples/jsm/nodes/core/VaryingNode.js +2 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/ViewportNode.js +14 -4
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -6
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +62 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +70 -71
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +17 -20
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +5 -21
- package/examples/jsm/nodes/shadernode/ShaderNode.js +128 -9
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/SplitNode.js +2 -0
- package/examples/jsm/objects/BatchedMesh.js +586 -0
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Bindings.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +8 -1
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Textures.js +4 -36
- package/examples/jsm/renderers/common/nodes/Nodes.js +53 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +291 -50
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +88 -12
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +40 -5
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +2 -0
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +36 -4
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +2 -0
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +4 -5
- package/examples/jsm/shaders/SAOShader.js +5 -0
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +6 -0
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +231 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +899 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +611 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/webxr/VRButton.js +1 -1
- package/examples/jsm/webxr/XRButton.js +7 -5
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +4 -1
- package/src/constants.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/materials/Material.js +27 -13
- package/src/math/Box3.js +35 -18
- package/src/math/Vector3.js +11 -12
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGLRenderer.js +142 -25
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -2
- package/src/renderers/webgl/WebGLProgram.js +80 -50
- package/src/renderers/webgl/WebGLPrograms.js +3 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from '../../../nodes/Nodes.js';
|
|
1
|
+
import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial, FunctionNode } from '../../../nodes/Nodes.js';
|
|
2
2
|
|
|
3
|
+
import UniformBuffer from '../../common/UniformBuffer.js';
|
|
3
4
|
import UniformsGroup from '../../common/UniformsGroup.js';
|
|
4
5
|
import { NodeSampledTexture, NodeSampledCubeTexture } from '../../common/nodes/NodeSampledTexture.js';
|
|
5
6
|
|
|
@@ -14,6 +15,10 @@ const precisionLib = {
|
|
|
14
15
|
high: 'highp'
|
|
15
16
|
};
|
|
16
17
|
|
|
18
|
+
const supports = {
|
|
19
|
+
instance: true
|
|
20
|
+
};
|
|
21
|
+
|
|
17
22
|
class GLSLNodeBuilder extends NodeBuilder {
|
|
18
23
|
|
|
19
24
|
constructor( object, renderer, scene = null ) {
|
|
@@ -38,6 +43,36 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
38
43
|
|
|
39
44
|
}
|
|
40
45
|
|
|
46
|
+
buildFunctionNode( shaderNode ) {
|
|
47
|
+
|
|
48
|
+
const layout = shaderNode.layout;
|
|
49
|
+
const flowData = this.flowShaderNode( shaderNode );
|
|
50
|
+
|
|
51
|
+
const parameters = [];
|
|
52
|
+
|
|
53
|
+
for ( const input of layout.inputs ) {
|
|
54
|
+
|
|
55
|
+
parameters.push( this.getType( input.type ) + ' ' + input.name );
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//
|
|
60
|
+
|
|
61
|
+
const code = `${ this.getType( layout.type ) } ${ layout.name }( ${ parameters.join( ', ' ) } ) {
|
|
62
|
+
|
|
63
|
+
${ flowData.vars }
|
|
64
|
+
|
|
65
|
+
${ flowData.code }
|
|
66
|
+
return ${ flowData.result };
|
|
67
|
+
|
|
68
|
+
}`;
|
|
69
|
+
|
|
70
|
+
//
|
|
71
|
+
|
|
72
|
+
return new FunctionNode( code );
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
41
76
|
getTexture( texture, textureProperty, uvSnippet ) {
|
|
42
77
|
|
|
43
78
|
if ( texture.isTextureCube ) {
|
|
@@ -82,11 +117,15 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
82
117
|
|
|
83
118
|
const vars = this.vars[ shaderStage ];
|
|
84
119
|
|
|
85
|
-
|
|
120
|
+
if ( vars !== undefined ) {
|
|
121
|
+
|
|
122
|
+
for ( const variable of vars ) {
|
|
86
123
|
|
|
87
|
-
|
|
124
|
+
if ( variable.isOutputStructVar ) continue;
|
|
88
125
|
|
|
89
|
-
|
|
126
|
+
snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
|
|
127
|
+
|
|
128
|
+
}
|
|
90
129
|
|
|
91
130
|
}
|
|
92
131
|
|
|
@@ -122,6 +161,15 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
122
161
|
|
|
123
162
|
snippet = `samplerCube ${uniform.name};`;
|
|
124
163
|
|
|
164
|
+
} else if ( uniform.type === 'buffer' ) {
|
|
165
|
+
|
|
166
|
+
const bufferNode = uniform.node;
|
|
167
|
+
const bufferType = this.getType( bufferNode.bufferType );
|
|
168
|
+
const bufferCount = bufferNode.bufferCount;
|
|
169
|
+
|
|
170
|
+
const bufferCountSnippet = bufferCount > 0 ? bufferCount : '';
|
|
171
|
+
snippet = `${bufferNode.name} {\n\t${bufferType} ${uniform.name}[${bufferCountSnippet}];\n};\n`;
|
|
172
|
+
|
|
125
173
|
} else {
|
|
126
174
|
|
|
127
175
|
const vectorType = this.getVectorType( uniform.type );
|
|
@@ -176,7 +224,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
176
224
|
|
|
177
225
|
if ( shaderStage === 'vertex' ) {
|
|
178
226
|
|
|
179
|
-
const attributes = this.
|
|
227
|
+
const attributes = this.getAttributesArray();
|
|
180
228
|
|
|
181
229
|
let location = 0;
|
|
182
230
|
|
|
@@ -215,7 +263,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
215
263
|
|
|
216
264
|
if ( structs.length === 0 ) {
|
|
217
265
|
|
|
218
|
-
return
|
|
266
|
+
return 'layout( location = 0 ) out vec4 fragColor;\n';
|
|
219
267
|
|
|
220
268
|
}
|
|
221
269
|
|
|
@@ -223,7 +271,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
223
271
|
|
|
224
272
|
const struct = structs[ index ];
|
|
225
273
|
|
|
226
|
-
let snippet =
|
|
274
|
+
let snippet = '\n';
|
|
227
275
|
snippet += this.getStructMembers( struct );
|
|
228
276
|
snippet += '\n';
|
|
229
277
|
|
|
@@ -245,7 +293,10 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
245
293
|
|
|
246
294
|
for ( const varying of varyings ) {
|
|
247
295
|
|
|
248
|
-
|
|
296
|
+
const type = varying.type;
|
|
297
|
+
const flat = type === 'int' || type === 'uint' ? 'flat ' : '';
|
|
298
|
+
|
|
299
|
+
snippet += `${flat}${varying.needsInterpolation ? 'out' : '/*out*/'} ${type} ${varying.name};\n`;
|
|
249
300
|
|
|
250
301
|
}
|
|
251
302
|
|
|
@@ -255,7 +306,10 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
255
306
|
|
|
256
307
|
if ( varying.needsInterpolation ) {
|
|
257
308
|
|
|
258
|
-
|
|
309
|
+
const type = varying.type;
|
|
310
|
+
const flat = type === 'int' || type === 'uint' ? 'flat ' : '';
|
|
311
|
+
|
|
312
|
+
snippet += `${flat}in ${type} ${varying.name};\n`;
|
|
259
313
|
|
|
260
314
|
}
|
|
261
315
|
|
|
@@ -273,6 +327,12 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
273
327
|
|
|
274
328
|
}
|
|
275
329
|
|
|
330
|
+
getInstanceIndex() {
|
|
331
|
+
|
|
332
|
+
return 'uint( gl_InstanceID )';
|
|
333
|
+
|
|
334
|
+
}
|
|
335
|
+
|
|
276
336
|
getFrontFacing() {
|
|
277
337
|
|
|
278
338
|
return 'gl_FrontFacing';
|
|
@@ -285,6 +345,13 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
285
345
|
|
|
286
346
|
}
|
|
287
347
|
|
|
348
|
+
isAvailable( name ) {
|
|
349
|
+
|
|
350
|
+
return supports[ name ] === true;
|
|
351
|
+
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
|
|
288
355
|
isFlipY() {
|
|
289
356
|
|
|
290
357
|
return true;
|
|
@@ -440,9 +507,6 @@ void main() {
|
|
|
440
507
|
this.vertexShader = this._getGLSLVertexCode( shadersData.vertex );
|
|
441
508
|
this.fragmentShader = this._getGLSLFragmentCode( shadersData.fragment );
|
|
442
509
|
|
|
443
|
-
//console.log( this.vertexShader );
|
|
444
|
-
//console.log( this.fragmentShader );
|
|
445
|
-
|
|
446
510
|
} else {
|
|
447
511
|
|
|
448
512
|
console.warn( 'GLSLNodeBuilder: compute shaders are not supported.' );
|
|
@@ -473,6 +537,18 @@ void main() {
|
|
|
473
537
|
|
|
474
538
|
this.bindings[ shaderStage ].push( uniformGPU );
|
|
475
539
|
|
|
540
|
+
} else if ( type === 'buffer' ) {
|
|
541
|
+
|
|
542
|
+
node.name = `NodeBuffer_${node.id}`;
|
|
543
|
+
|
|
544
|
+
const buffer = new UniformBuffer( node.name, node.value );
|
|
545
|
+
|
|
546
|
+
uniformNode.name = `buffer${node.id}`;
|
|
547
|
+
|
|
548
|
+
this.bindings[ shaderStage ].push( buffer );
|
|
549
|
+
|
|
550
|
+
uniformGPU = buffer;
|
|
551
|
+
|
|
476
552
|
} else {
|
|
477
553
|
|
|
478
554
|
let uniformsGroup = this.uniformsGroup[ shaderStage ];
|
|
@@ -14,25 +14,41 @@ class WebGLAttributeUtils {
|
|
|
14
14
|
const array = attribute.array;
|
|
15
15
|
const usage = attribute.usage || gl.STATIC_DRAW;
|
|
16
16
|
|
|
17
|
-
const
|
|
17
|
+
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
18
|
+
const bufferData = backend.get( bufferAttribute );
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
let bufferGPU = bufferData.bufferGPU;
|
|
21
|
+
|
|
22
|
+
if ( bufferGPU === undefined ) {
|
|
23
|
+
|
|
24
|
+
bufferGPU = gl.createBuffer();
|
|
25
|
+
|
|
26
|
+
gl.bindBuffer( bufferType, bufferGPU );
|
|
27
|
+
gl.bufferData( bufferType, array, usage );
|
|
28
|
+
gl.bindBuffer( bufferType, null );
|
|
29
|
+
|
|
30
|
+
bufferData.bufferGPU = bufferGPU;
|
|
31
|
+
bufferData.bufferType = bufferType;
|
|
32
|
+
bufferData.version = bufferAttribute.version;
|
|
33
|
+
|
|
34
|
+
}
|
|
22
35
|
|
|
23
36
|
//attribute.onUploadCallback();
|
|
24
37
|
|
|
25
38
|
let type;
|
|
39
|
+
let isFloat = false;
|
|
26
40
|
|
|
27
41
|
if ( array instanceof Float32Array ) {
|
|
28
42
|
|
|
29
43
|
type = gl.FLOAT;
|
|
44
|
+
isFloat = true;
|
|
30
45
|
|
|
31
46
|
} else if ( array instanceof Uint16Array ) {
|
|
32
47
|
|
|
33
48
|
if ( attribute.isFloat16BufferAttribute ) {
|
|
34
49
|
|
|
35
50
|
type = gl.HALF_FLOAT;
|
|
51
|
+
isFloat = true;
|
|
36
52
|
|
|
37
53
|
} else {
|
|
38
54
|
|
|
@@ -74,11 +90,30 @@ class WebGLAttributeUtils {
|
|
|
74
90
|
bufferGPU,
|
|
75
91
|
type,
|
|
76
92
|
bytesPerElement: array.BYTES_PER_ELEMENT,
|
|
77
|
-
version: attribute.version
|
|
93
|
+
version: attribute.version,
|
|
94
|
+
isFloat
|
|
78
95
|
} );
|
|
79
96
|
|
|
80
97
|
}
|
|
81
98
|
|
|
99
|
+
updateAttribute( attribute ) {
|
|
100
|
+
|
|
101
|
+
const backend = this.backend;
|
|
102
|
+
const { gl } = backend;
|
|
103
|
+
|
|
104
|
+
const array = attribute.array;
|
|
105
|
+
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
106
|
+
const bufferData = backend.get( bufferAttribute );
|
|
107
|
+
const bufferType = bufferData.bufferType;
|
|
108
|
+
|
|
109
|
+
gl.bindBuffer( bufferType, bufferData.bufferGPU );
|
|
110
|
+
gl.bufferSubData( bufferType, 0, array );
|
|
111
|
+
gl.bindBuffer( bufferType, null );
|
|
112
|
+
|
|
113
|
+
bufferData.version = bufferAttribute.version;
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
82
117
|
}
|
|
83
118
|
|
|
84
119
|
export default WebGLAttributeUtils;
|
|
@@ -21,7 +21,7 @@ class WebGLState {
|
|
|
21
21
|
this.currentFlipSided = null;
|
|
22
22
|
this.currentCullFace = null;
|
|
23
23
|
this.currentProgram = null;
|
|
24
|
-
this.currentBlendingEnabled =
|
|
24
|
+
this.currentBlendingEnabled = false;
|
|
25
25
|
this.currentBlending = null;
|
|
26
26
|
this.currentBlendSrc = null;
|
|
27
27
|
this.currentBlendDst = null;
|
|
@@ -30,6 +30,7 @@ class WebGLState {
|
|
|
30
30
|
this.currentPremultipledAlpha = null;
|
|
31
31
|
this.currentPolygonOffsetFactor = null;
|
|
32
32
|
this.currentPolygonOffsetUnits = null;
|
|
33
|
+
this.currentColorMask = null;
|
|
33
34
|
this.currentDepthFunc = null;
|
|
34
35
|
this.currentDepthMask = null;
|
|
35
36
|
this.currentStencilFunc = null;
|
|
@@ -296,6 +297,17 @@ class WebGLState {
|
|
|
296
297
|
|
|
297
298
|
}
|
|
298
299
|
|
|
300
|
+
setColorMask( colorMask ) {
|
|
301
|
+
|
|
302
|
+
if ( this.currentColorMask !== colorMask ) {
|
|
303
|
+
|
|
304
|
+
this.gl.colorMask( colorMask, colorMask, colorMask, colorMask );
|
|
305
|
+
this.currentColorMask = colorMask;
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
299
311
|
setDepthTest( depthTest ) {
|
|
300
312
|
|
|
301
313
|
const { gl } = this;
|
|
@@ -462,7 +474,7 @@ class WebGLState {
|
|
|
462
474
|
this.setDepthFunc( material.depthFunc );
|
|
463
475
|
this.setDepthTest( material.depthTest );
|
|
464
476
|
this.setDepthMask( material.depthWrite );
|
|
465
|
-
this.
|
|
477
|
+
this.setColorMask( material.colorWrite );
|
|
466
478
|
|
|
467
479
|
const stencilWrite = material.stencilWrite;
|
|
468
480
|
this.setStencilTest( stencilWrite );
|
|
@@ -9,7 +9,7 @@ import UniformBuffer from '../../common/UniformBuffer.js';
|
|
|
9
9
|
import StorageBuffer from '../../common/StorageBuffer.js';
|
|
10
10
|
import { getVectorLength, getStrideLength } from '../../common/BufferUtils.js';
|
|
11
11
|
|
|
12
|
-
import { NodeBuilder, CodeNode, NodeMaterial } from '../../../nodes/Nodes.js';
|
|
12
|
+
import { NodeBuilder, CodeNode, NodeMaterial, FunctionNode } from '../../../nodes/Nodes.js';
|
|
13
13
|
|
|
14
14
|
import { getFormat } from '../utils/WebGPUTextureUtils.js';
|
|
15
15
|
|
|
@@ -436,6 +436,34 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
436
436
|
|
|
437
437
|
}
|
|
438
438
|
|
|
439
|
+
buildFunctionNode( shaderNode ) {
|
|
440
|
+
|
|
441
|
+
const layout = shaderNode.layout;
|
|
442
|
+
const flowData = this.flowShaderNode( shaderNode );
|
|
443
|
+
|
|
444
|
+
const parameters = [];
|
|
445
|
+
|
|
446
|
+
for ( const input of layout.inputs ) {
|
|
447
|
+
|
|
448
|
+
parameters.push( input.name + ' : ' + this.getType( input.type ) );
|
|
449
|
+
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
//
|
|
453
|
+
|
|
454
|
+
const code = `fn ${ layout.name }( ${ parameters.join( ', ' ) } ) -> ${ this.getType( layout.type ) } {
|
|
455
|
+
${ flowData.vars }
|
|
456
|
+
${ flowData.code }
|
|
457
|
+
return ${ flowData.result };
|
|
458
|
+
|
|
459
|
+
}`;
|
|
460
|
+
|
|
461
|
+
//
|
|
462
|
+
|
|
463
|
+
return new FunctionNode( code );
|
|
464
|
+
|
|
465
|
+
}
|
|
466
|
+
|
|
439
467
|
getInstanceIndex() {
|
|
440
468
|
|
|
441
469
|
if ( this.shaderStage === 'vertex' ) {
|
|
@@ -551,9 +579,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
551
579
|
const snippets = [];
|
|
552
580
|
const vars = this.vars[ shaderStage ];
|
|
553
581
|
|
|
554
|
-
|
|
582
|
+
if ( vars !== undefined ) {
|
|
583
|
+
|
|
584
|
+
for ( const variable of vars ) {
|
|
555
585
|
|
|
556
|
-
|
|
586
|
+
snippets.push( `\t${ this.getVar( variable.type, variable.name ) };` );
|
|
587
|
+
|
|
588
|
+
}
|
|
557
589
|
|
|
558
590
|
}
|
|
559
591
|
|
|
@@ -584,7 +616,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
584
616
|
|
|
585
617
|
let attributesSnippet = `@location( ${index} )`;
|
|
586
618
|
|
|
587
|
-
if (
|
|
619
|
+
if ( /^(int|uint|ivec|uvec)/.test( varying.type ) ) {
|
|
588
620
|
|
|
589
621
|
attributesSnippet += ' @interpolate( flat )';
|
|
590
622
|
|
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
*/
|
|
12
12
|
const BokehShader = {
|
|
13
13
|
|
|
14
|
+
name: 'BokehShader',
|
|
15
|
+
|
|
14
16
|
uniforms: {
|
|
15
17
|
|
|
16
18
|
'textureWidth': { value: 1.0 },
|
|
@@ -354,6 +356,8 @@ const BokehShader = {
|
|
|
354
356
|
|
|
355
357
|
const BokehDepthShader = {
|
|
356
358
|
|
|
359
|
+
name: 'BokehDepthShader',
|
|
360
|
+
|
|
357
361
|
uniforms: {
|
|
358
362
|
|
|
359
363
|
'mNear': { value: 1.0 },
|
|
@@ -7,11 +7,15 @@ import {
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const DepthLimitedBlurShader = {
|
|
10
|
+
|
|
11
|
+
name: 'DepthLimitedBlurShader',
|
|
12
|
+
|
|
10
13
|
defines: {
|
|
11
14
|
'KERNEL_RADIUS': 4,
|
|
12
15
|
'DEPTH_PACKING': 1,
|
|
13
16
|
'PERSPECTIVE_CAMERA': 1
|
|
14
17
|
},
|
|
18
|
+
|
|
15
19
|
uniforms: {
|
|
16
20
|
'tDiffuse': { value: null },
|
|
17
21
|
'size': { value: new Vector2( 512, 512 ) },
|
|
@@ -22,6 +26,7 @@ const DepthLimitedBlurShader = {
|
|
|
22
26
|
'cameraFar': { value: 1000 },
|
|
23
27
|
'depthCutoff': { value: 10 },
|
|
24
28
|
},
|
|
29
|
+
|
|
25
30
|
vertexShader: /* glsl */`
|
|
26
31
|
|
|
27
32
|
#include <common>
|
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
|
|
24
24
|
const GodRaysDepthMaskShader = {
|
|
25
25
|
|
|
26
|
+
name: 'GodRaysDepthMaskShader',
|
|
27
|
+
|
|
26
28
|
uniforms: {
|
|
27
29
|
|
|
28
30
|
tInput: {
|
|
@@ -74,6 +76,8 @@ const GodRaysDepthMaskShader = {
|
|
|
74
76
|
|
|
75
77
|
const GodRaysGenerateShader = {
|
|
76
78
|
|
|
79
|
+
name: 'GodRaysGenerateShader',
|
|
80
|
+
|
|
77
81
|
uniforms: {
|
|
78
82
|
|
|
79
83
|
tInput: {
|
|
@@ -194,6 +198,8 @@ const GodRaysGenerateShader = {
|
|
|
194
198
|
|
|
195
199
|
const GodRaysCombineShader = {
|
|
196
200
|
|
|
201
|
+
name: 'GodRaysCombineShader',
|
|
202
|
+
|
|
197
203
|
uniforms: {
|
|
198
204
|
|
|
199
205
|
tColors: {
|
|
@@ -251,6 +257,8 @@ const GodRaysCombineShader = {
|
|
|
251
257
|
|
|
252
258
|
const GodRaysFakeSunShader = {
|
|
253
259
|
|
|
260
|
+
name: 'GodRaysFakeSunShader',
|
|
261
|
+
|
|
254
262
|
uniforms: {
|
|
255
263
|
|
|
256
264
|
vSunPositionScreenSpace: {
|