super-three 0.157.1 → 0.160.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 +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- 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/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- 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 +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- 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/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.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/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- 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 +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- 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 +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- 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 +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -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/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -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/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- 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 +135 -133
- 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/GTAOShader.js +424 -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 +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- 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 +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NoColorSpace, FloatType } from 'three';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
|
|
4
4
|
|
|
5
5
|
import NodeSampler from '../../common/nodes/NodeSampler.js';
|
|
6
6
|
import { NodeSampledTexture, NodeSampledCubeTexture } from '../../common/nodes/NodeSampledTexture.js';
|
|
@@ -25,6 +25,10 @@ const supports = {
|
|
|
25
25
|
instance: true
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
+
const wgslFnOpLib = {
|
|
29
|
+
'^^': 'threejs_xor'
|
|
30
|
+
};
|
|
31
|
+
|
|
28
32
|
const wgslTypeLib = {
|
|
29
33
|
float: 'f32',
|
|
30
34
|
int: 'i32',
|
|
@@ -63,15 +67,31 @@ const wgslMethods = {
|
|
|
63
67
|
dFdy: '- dpdy',
|
|
64
68
|
mod: 'threejs_mod',
|
|
65
69
|
lessThanEqual: 'threejs_lessThanEqual',
|
|
66
|
-
|
|
70
|
+
greaterThan: 'threejs_greaterThan',
|
|
71
|
+
inversesqrt: 'inverseSqrt',
|
|
72
|
+
bitcast: 'bitcast<f32>'
|
|
67
73
|
};
|
|
68
74
|
|
|
69
75
|
const wgslPolyfill = {
|
|
76
|
+
threejs_xor: new CodeNode( `
|
|
77
|
+
fn threejs_xor( a : bool, b : bool ) -> bool {
|
|
78
|
+
|
|
79
|
+
return ( a || b ) && !( a && b );
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
` ),
|
|
70
83
|
lessThanEqual: new CodeNode( `
|
|
71
84
|
fn threejs_lessThanEqual( a : vec3<f32>, b : vec3<f32> ) -> vec3<bool> {
|
|
72
85
|
|
|
73
86
|
return vec3<bool>( a.x <= b.x, a.y <= b.y, a.z <= b.z );
|
|
74
87
|
|
|
88
|
+
}
|
|
89
|
+
` ),
|
|
90
|
+
greaterThan: new CodeNode( `
|
|
91
|
+
fn threejs_greaterThan( a : vec3<f32>, b : vec3<f32> ) -> vec3<bool> {
|
|
92
|
+
|
|
93
|
+
return vec3<bool>( a.x > b.x, a.y > b.y, a.z > b.z );
|
|
94
|
+
|
|
75
95
|
}
|
|
76
96
|
` ),
|
|
77
97
|
mod: new CodeNode( `
|
|
@@ -98,14 +118,9 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
98
118
|
|
|
99
119
|
super( object, renderer, new WGSLNodeParser(), scene );
|
|
100
120
|
|
|
101
|
-
this.
|
|
121
|
+
this.uniformGroups = {};
|
|
102
122
|
|
|
103
|
-
this.builtins = {
|
|
104
|
-
vertex: new Map(),
|
|
105
|
-
fragment: new Map(),
|
|
106
|
-
compute: new Map(),
|
|
107
|
-
attribute: new Map()
|
|
108
|
-
};
|
|
123
|
+
this.builtins = {};
|
|
109
124
|
|
|
110
125
|
}
|
|
111
126
|
|
|
@@ -133,25 +148,33 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
133
148
|
|
|
134
149
|
}
|
|
135
150
|
|
|
136
|
-
|
|
151
|
+
_generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
137
152
|
|
|
138
153
|
if ( shaderStage === 'fragment' ) {
|
|
139
154
|
|
|
140
|
-
|
|
155
|
+
if ( depthSnippet ) {
|
|
156
|
+
|
|
157
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet } )`;
|
|
158
|
+
|
|
159
|
+
} else {
|
|
160
|
+
|
|
161
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet } )`;
|
|
162
|
+
|
|
163
|
+
}
|
|
141
164
|
|
|
142
165
|
} else {
|
|
143
166
|
|
|
144
|
-
return this.
|
|
167
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet );
|
|
145
168
|
|
|
146
169
|
}
|
|
147
170
|
|
|
148
171
|
}
|
|
149
172
|
|
|
150
|
-
|
|
173
|
+
_generateVideoSample( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
|
|
151
174
|
|
|
152
175
|
if ( shaderStage === 'fragment' ) {
|
|
153
176
|
|
|
154
|
-
return `textureSampleBaseClampToEdge( ${textureProperty}, ${textureProperty}_sampler, vec2<f32>( ${uvSnippet}.x, 1.0 - ${uvSnippet}.y ) )`;
|
|
177
|
+
return `textureSampleBaseClampToEdge( ${ textureProperty }, ${ textureProperty }_sampler, vec2<f32>( ${ uvSnippet }.x, 1.0 - ${ uvSnippet }.y ) )`;
|
|
155
178
|
|
|
156
179
|
} else {
|
|
157
180
|
|
|
@@ -161,27 +184,41 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
161
184
|
|
|
162
185
|
}
|
|
163
186
|
|
|
164
|
-
|
|
187
|
+
_generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
165
188
|
|
|
166
189
|
if ( shaderStage === 'fragment' && this.isUnfilterable( texture ) === false ) {
|
|
167
190
|
|
|
168
|
-
return `textureSampleLevel( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${
|
|
191
|
+
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
169
192
|
|
|
170
193
|
} else {
|
|
171
194
|
|
|
172
|
-
return this.
|
|
195
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet, levelSnippet );
|
|
173
196
|
|
|
174
197
|
}
|
|
175
198
|
|
|
176
199
|
}
|
|
177
200
|
|
|
178
|
-
|
|
201
|
+
generateTextureLod( texture, textureProperty, uvSnippet, levelSnippet = '0' ) {
|
|
179
202
|
|
|
180
203
|
this._include( 'repeatWrapping' );
|
|
181
204
|
|
|
182
|
-
const dimension = `textureDimensions( ${textureProperty}, 0 )`;
|
|
205
|
+
const dimension = `textureDimensions( ${ textureProperty }, 0 )`;
|
|
183
206
|
|
|
184
|
-
return `textureLoad( ${textureProperty}, threejs_repeatWrapping( ${uvSnippet}, ${dimension} ), i32( ${
|
|
207
|
+
return `textureLoad( ${ textureProperty }, threejs_repeatWrapping( ${ uvSnippet }, ${ dimension } ), i32( ${ levelSnippet } ) )`;
|
|
208
|
+
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0u' ) {
|
|
212
|
+
|
|
213
|
+
if ( depthSnippet ) {
|
|
214
|
+
|
|
215
|
+
return `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet }, ${ levelSnippet } )`;
|
|
216
|
+
|
|
217
|
+
} else {
|
|
218
|
+
|
|
219
|
+
return `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet } )`;
|
|
220
|
+
|
|
221
|
+
}
|
|
185
222
|
|
|
186
223
|
}
|
|
187
224
|
|
|
@@ -191,21 +228,21 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
191
228
|
|
|
192
229
|
}
|
|
193
230
|
|
|
194
|
-
|
|
231
|
+
generateTexture( texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
195
232
|
|
|
196
233
|
let snippet = null;
|
|
197
234
|
|
|
198
235
|
if ( texture.isVideoTexture === true ) {
|
|
199
236
|
|
|
200
|
-
snippet = this.
|
|
237
|
+
snippet = this._generateVideoSample( textureProperty, uvSnippet, shaderStage );
|
|
201
238
|
|
|
202
239
|
} else if ( this.isUnfilterable( texture ) ) {
|
|
203
240
|
|
|
204
|
-
snippet = this.
|
|
241
|
+
snippet = this.generateTextureLod( texture, textureProperty, uvSnippet, '0', depthSnippet, shaderStage );
|
|
205
242
|
|
|
206
243
|
} else {
|
|
207
244
|
|
|
208
|
-
snippet = this.
|
|
245
|
+
snippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, shaderStage );
|
|
209
246
|
|
|
210
247
|
}
|
|
211
248
|
|
|
@@ -213,11 +250,11 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
213
250
|
|
|
214
251
|
}
|
|
215
252
|
|
|
216
|
-
|
|
253
|
+
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
217
254
|
|
|
218
255
|
if ( shaderStage === 'fragment' ) {
|
|
219
256
|
|
|
220
|
-
return `textureSampleCompare( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${compareSnippet} )`;
|
|
257
|
+
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet } )`;
|
|
221
258
|
|
|
222
259
|
} else {
|
|
223
260
|
|
|
@@ -227,17 +264,17 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
227
264
|
|
|
228
265
|
}
|
|
229
266
|
|
|
230
|
-
|
|
267
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
231
268
|
|
|
232
269
|
let snippet = null;
|
|
233
270
|
|
|
234
271
|
if ( texture.isVideoTexture === true ) {
|
|
235
272
|
|
|
236
|
-
snippet = this.
|
|
273
|
+
snippet = this._generateVideoSample( textureProperty, uvSnippet, shaderStage );
|
|
237
274
|
|
|
238
275
|
} else {
|
|
239
276
|
|
|
240
|
-
snippet = this.
|
|
277
|
+
snippet = this._generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, shaderStage );
|
|
241
278
|
|
|
242
279
|
}
|
|
243
280
|
|
|
@@ -251,7 +288,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
251
288
|
|
|
252
289
|
if ( shaderStage === 'vertex' ) {
|
|
253
290
|
|
|
254
|
-
return `
|
|
291
|
+
return `varyings.${ node.name }`;
|
|
255
292
|
|
|
256
293
|
}
|
|
257
294
|
|
|
@@ -266,11 +303,11 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
266
303
|
|
|
267
304
|
} else if ( type === 'buffer' || type === 'storageBuffer' ) {
|
|
268
305
|
|
|
269
|
-
return `NodeBuffer_${node.
|
|
306
|
+
return `NodeBuffer_${ node.id }.${name}`;
|
|
270
307
|
|
|
271
308
|
} else {
|
|
272
309
|
|
|
273
|
-
return
|
|
310
|
+
return node.groupNode.name + '.' + name;
|
|
274
311
|
|
|
275
312
|
}
|
|
276
313
|
|
|
@@ -280,10 +317,32 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
280
317
|
|
|
281
318
|
}
|
|
282
319
|
|
|
320
|
+
_getUniformGroupCount( shaderStage ) {
|
|
321
|
+
|
|
322
|
+
return Object.keys( this.uniforms[ shaderStage ] ).length;
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
getFunctionOperator( op ) {
|
|
327
|
+
|
|
328
|
+
const fnOp = wgslFnOpLib[ op ];
|
|
329
|
+
|
|
330
|
+
if ( fnOp !== undefined ) {
|
|
331
|
+
|
|
332
|
+
this._include( fnOp );
|
|
333
|
+
|
|
334
|
+
return fnOp;
|
|
335
|
+
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return null;
|
|
339
|
+
|
|
340
|
+
}
|
|
341
|
+
|
|
283
342
|
getUniformFromNode( node, type, shaderStage, name = null ) {
|
|
284
343
|
|
|
285
344
|
const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
|
|
286
|
-
const nodeData = this.getDataFromNode( node, shaderStage );
|
|
345
|
+
const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
|
|
287
346
|
|
|
288
347
|
if ( nodeData.uniformGPU === undefined ) {
|
|
289
348
|
|
|
@@ -308,22 +367,18 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
308
367
|
texture.store = node.isStoreTextureNode === true;
|
|
309
368
|
texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
310
369
|
|
|
311
|
-
// add first textures in sequence and group for last
|
|
312
|
-
const lastBinding = bindings[ bindings.length - 1 ];
|
|
313
|
-
const index = lastBinding && lastBinding.isUniformsGroup ? bindings.length - 1 : bindings.length;
|
|
314
|
-
|
|
315
370
|
if ( shaderStage === 'fragment' && this.isUnfilterable( node.value ) === false && texture.store === false ) {
|
|
316
371
|
|
|
317
372
|
const sampler = new NodeSampler( `${uniformNode.name}_sampler`, uniformNode.node );
|
|
318
373
|
sampler.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
319
374
|
|
|
320
|
-
bindings.
|
|
375
|
+
bindings.push( sampler, texture );
|
|
321
376
|
|
|
322
377
|
uniformGPU = [ sampler, texture ];
|
|
323
378
|
|
|
324
379
|
} else {
|
|
325
380
|
|
|
326
|
-
bindings.
|
|
381
|
+
bindings.push( texture );
|
|
327
382
|
|
|
328
383
|
uniformGPU = [ texture ];
|
|
329
384
|
|
|
@@ -335,24 +390,25 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
335
390
|
const buffer = new bufferClass( 'NodeBuffer_' + node.id, node.value );
|
|
336
391
|
buffer.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
337
392
|
|
|
338
|
-
|
|
339
|
-
const lastBinding = bindings[ bindings.length - 1 ];
|
|
340
|
-
const index = lastBinding && lastBinding.isUniformsGroup ? bindings.length - 1 : bindings.length;
|
|
341
|
-
|
|
342
|
-
bindings.splice( index, 0, buffer );
|
|
393
|
+
bindings.push( buffer );
|
|
343
394
|
|
|
344
395
|
uniformGPU = buffer;
|
|
345
396
|
|
|
346
397
|
} else {
|
|
347
398
|
|
|
348
|
-
|
|
399
|
+
const group = node.groupNode;
|
|
400
|
+
const groupName = group.name;
|
|
401
|
+
|
|
402
|
+
const uniformsStage = this.uniformGroups[ shaderStage ] || ( this.uniformGroups[ shaderStage ] = {} );
|
|
403
|
+
|
|
404
|
+
let uniformsGroup = uniformsStage[ groupName ];
|
|
349
405
|
|
|
350
406
|
if ( uniformsGroup === undefined ) {
|
|
351
407
|
|
|
352
|
-
uniformsGroup = new
|
|
408
|
+
uniformsGroup = new NodeUniformsGroup( groupName, group );
|
|
353
409
|
uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
354
410
|
|
|
355
|
-
|
|
411
|
+
uniformsStage[ groupName ] = uniformsGroup;
|
|
356
412
|
|
|
357
413
|
bindings.push( uniformsGroup );
|
|
358
414
|
|
|
@@ -402,13 +458,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
402
458
|
|
|
403
459
|
isReference( type ) {
|
|
404
460
|
|
|
405
|
-
return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube' || type === 'texture_storage_2d';
|
|
461
|
+
return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube' || type === 'texture_depth_2d' || type === 'texture_storage_2d';
|
|
406
462
|
|
|
407
463
|
}
|
|
408
464
|
|
|
409
465
|
getBuiltin( name, property, type, shaderStage = this.shaderStage ) {
|
|
410
466
|
|
|
411
|
-
const map = this.builtins[ shaderStage ];
|
|
467
|
+
const map = this.builtins[ shaderStage ] || ( this.builtins[ shaderStage ] = new Map() );
|
|
412
468
|
|
|
413
469
|
if ( map.has( name ) === false ) {
|
|
414
470
|
|
|
@@ -436,6 +492,34 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
436
492
|
|
|
437
493
|
}
|
|
438
494
|
|
|
495
|
+
buildFunctionCode( shaderNode ) {
|
|
496
|
+
|
|
497
|
+
const layout = shaderNode.layout;
|
|
498
|
+
const flowData = this.flowShaderNode( shaderNode );
|
|
499
|
+
|
|
500
|
+
const parameters = [];
|
|
501
|
+
|
|
502
|
+
for ( const input of layout.inputs ) {
|
|
503
|
+
|
|
504
|
+
parameters.push( input.name + ' : ' + this.getType( input.type ) );
|
|
505
|
+
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
//
|
|
509
|
+
|
|
510
|
+
const code = `fn ${ layout.name }( ${ parameters.join( ', ' ) } ) -> ${ this.getType( layout.type ) } {
|
|
511
|
+
${ flowData.vars }
|
|
512
|
+
${ flowData.code }
|
|
513
|
+
return ${ flowData.result };
|
|
514
|
+
|
|
515
|
+
}`;
|
|
516
|
+
|
|
517
|
+
//
|
|
518
|
+
|
|
519
|
+
return code;
|
|
520
|
+
|
|
521
|
+
}
|
|
522
|
+
|
|
439
523
|
getInstanceIndex() {
|
|
440
524
|
|
|
441
525
|
if ( this.shaderStage === 'vertex' ) {
|
|
@@ -456,7 +540,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
456
540
|
|
|
457
541
|
getFragCoord() {
|
|
458
542
|
|
|
459
|
-
return this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>'
|
|
543
|
+
return this.getBuiltin( 'position', 'fragCoord', 'vec4<f32>' ) + '.xy';
|
|
544
|
+
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
getFragDepth() {
|
|
548
|
+
|
|
549
|
+
return 'output.' + this.getBuiltin( 'frag_depth', 'depth', 'f32', 'output' );
|
|
460
550
|
|
|
461
551
|
}
|
|
462
552
|
|
|
@@ -466,6 +556,25 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
466
556
|
|
|
467
557
|
}
|
|
468
558
|
|
|
559
|
+
getBuiltins( shaderStage ) {
|
|
560
|
+
|
|
561
|
+
const snippets = [];
|
|
562
|
+
const builtins = this.builtins[ shaderStage ];
|
|
563
|
+
|
|
564
|
+
if ( builtins !== undefined ) {
|
|
565
|
+
|
|
566
|
+
for ( const { name, property, type } of builtins.values() ) {
|
|
567
|
+
|
|
568
|
+
snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
|
|
569
|
+
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
return snippets.join( ',\n\t' );
|
|
575
|
+
|
|
576
|
+
}
|
|
577
|
+
|
|
469
578
|
getAttributes( shaderStage ) {
|
|
470
579
|
|
|
471
580
|
const snippets = [];
|
|
@@ -478,11 +587,9 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
478
587
|
|
|
479
588
|
if ( shaderStage === 'vertex' || shaderStage === 'compute' ) {
|
|
480
589
|
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
|
|
590
|
+
const builtins = this.getBuiltins( 'attribute' );
|
|
484
591
|
|
|
485
|
-
|
|
592
|
+
if ( builtins ) snippets.push( builtins );
|
|
486
593
|
|
|
487
594
|
const attributes = this.getAttributesArray();
|
|
488
595
|
|
|
@@ -551,9 +658,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
551
658
|
const snippets = [];
|
|
552
659
|
const vars = this.vars[ shaderStage ];
|
|
553
660
|
|
|
554
|
-
|
|
661
|
+
if ( vars !== undefined ) {
|
|
555
662
|
|
|
556
|
-
|
|
663
|
+
for ( const variable of vars ) {
|
|
664
|
+
|
|
665
|
+
snippets.push( `\t${ this.getVar( variable.type, variable.name ) };` );
|
|
666
|
+
|
|
667
|
+
}
|
|
557
668
|
|
|
558
669
|
}
|
|
559
670
|
|
|
@@ -584,7 +695,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
584
695
|
|
|
585
696
|
let attributesSnippet = `@location( ${index} )`;
|
|
586
697
|
|
|
587
|
-
if (
|
|
698
|
+
if ( /^(int|uint|ivec|uvec)/.test( varying.type ) ) {
|
|
588
699
|
|
|
589
700
|
attributesSnippet += ' @interpolate( flat )';
|
|
590
701
|
|
|
@@ -603,15 +714,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
603
714
|
|
|
604
715
|
}
|
|
605
716
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
snippets.push( `@builtin( ${name} ) ${property} : ${type}` );
|
|
717
|
+
const builtins = this.getBuiltins( shaderStage );
|
|
609
718
|
|
|
610
|
-
|
|
719
|
+
if ( builtins ) snippets.push( builtins );
|
|
611
720
|
|
|
612
721
|
const code = snippets.join( ',\n\t' );
|
|
613
722
|
|
|
614
|
-
return shaderStage === 'vertex' ? this._getWGSLStruct( '
|
|
723
|
+
return shaderStage === 'vertex' ? this._getWGSLStruct( 'VaryingsStruct', '\t' + code ) : code;
|
|
615
724
|
|
|
616
725
|
}
|
|
617
726
|
|
|
@@ -621,7 +730,8 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
621
730
|
|
|
622
731
|
const bindingSnippets = [];
|
|
623
732
|
const bufferSnippets = [];
|
|
624
|
-
const
|
|
733
|
+
const structSnippets = [];
|
|
734
|
+
const uniformGroups = {};
|
|
625
735
|
|
|
626
736
|
let index = this.bindingsOffset[ shaderStage ];
|
|
627
737
|
|
|
@@ -651,6 +761,10 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
651
761
|
|
|
652
762
|
textureType = 'texture_cube<f32>';
|
|
653
763
|
|
|
764
|
+
} else if ( texture.isDataArrayTexture === true ) {
|
|
765
|
+
|
|
766
|
+
textureType = 'texture_2d_array<f32>';
|
|
767
|
+
|
|
654
768
|
} else if ( texture.isDepthTexture === true ) {
|
|
655
769
|
|
|
656
770
|
textureType = 'texture_depth_2d';
|
|
@@ -688,16 +802,22 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
688
802
|
} else {
|
|
689
803
|
|
|
690
804
|
const vectorType = this.getType( this.getVectorType( uniform.type ) );
|
|
805
|
+
const groupName = uniform.groupNode.name;
|
|
806
|
+
|
|
807
|
+
const group = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = {
|
|
808
|
+
index: index ++,
|
|
809
|
+
snippets: []
|
|
810
|
+
} );
|
|
691
811
|
|
|
692
812
|
if ( Array.isArray( uniform.value ) === true ) {
|
|
693
813
|
|
|
694
814
|
const length = uniform.value.length;
|
|
695
815
|
|
|
696
|
-
|
|
816
|
+
group.snippets.push( `uniform ${vectorType}[ ${length} ] ${uniform.name}` );
|
|
697
817
|
|
|
698
818
|
} else {
|
|
699
819
|
|
|
700
|
-
|
|
820
|
+
group.snippets.push( `\t${uniform.name} : ${ vectorType}` );
|
|
701
821
|
|
|
702
822
|
}
|
|
703
823
|
|
|
@@ -705,15 +825,18 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
705
825
|
|
|
706
826
|
}
|
|
707
827
|
|
|
708
|
-
|
|
709
|
-
code += bufferSnippets.join( '\n' );
|
|
828
|
+
for ( const name in uniformGroups ) {
|
|
710
829
|
|
|
711
|
-
|
|
830
|
+
const group = uniformGroups[ name ];
|
|
712
831
|
|
|
713
|
-
|
|
832
|
+
structSnippets.push( this._getWGSLStructBinding( name, group.snippets.join( ',\n' ), 'uniform', group.index ) );
|
|
714
833
|
|
|
715
834
|
}
|
|
716
835
|
|
|
836
|
+
let code = bindingSnippets.join( '\n' );
|
|
837
|
+
code += bufferSnippets.join( '\n' );
|
|
838
|
+
code += structSnippets.join( '\n' );
|
|
839
|
+
|
|
717
840
|
return code;
|
|
718
841
|
|
|
719
842
|
}
|
|
@@ -724,12 +847,25 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
724
847
|
|
|
725
848
|
for ( const shaderStage in shadersData ) {
|
|
726
849
|
|
|
850
|
+
const stageData = shadersData[ shaderStage ];
|
|
851
|
+
stageData.uniforms = this.getUniforms( shaderStage );
|
|
852
|
+
stageData.attributes = this.getAttributes( shaderStage );
|
|
853
|
+
stageData.varyings = this.getVaryings( shaderStage );
|
|
854
|
+
stageData.structs = this.getStructs( shaderStage );
|
|
855
|
+
stageData.vars = this.getVars( shaderStage );
|
|
856
|
+
stageData.codes = this.getCodes( shaderStage );
|
|
857
|
+
|
|
858
|
+
//
|
|
859
|
+
|
|
727
860
|
let flow = '// code\n\n';
|
|
728
861
|
flow += this.flowCode[ shaderStage ];
|
|
729
862
|
|
|
730
863
|
const flowNodes = this.flowNodes[ shaderStage ];
|
|
731
864
|
const mainNode = flowNodes[ flowNodes.length - 1 ];
|
|
732
865
|
|
|
866
|
+
const outputNode = mainNode.outputNode;
|
|
867
|
+
const isOutputStruct = ( outputNode !== undefined && outputNode.isOutputStructNode === true );
|
|
868
|
+
|
|
733
869
|
for ( const node of flowNodes ) {
|
|
734
870
|
|
|
735
871
|
const flowSlotData = this.getFlowData( node/*, shaderStage*/ );
|
|
@@ -747,34 +883,42 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
747
883
|
|
|
748
884
|
if ( node === mainNode && shaderStage !== 'compute' ) {
|
|
749
885
|
|
|
750
|
-
flow += '// result\n\t';
|
|
886
|
+
flow += '// result\n\n\t';
|
|
751
887
|
|
|
752
888
|
if ( shaderStage === 'vertex' ) {
|
|
753
889
|
|
|
754
|
-
flow +=
|
|
890
|
+
flow += `varyings.Vertex = ${ flowSlotData.result };`;
|
|
755
891
|
|
|
756
892
|
} else if ( shaderStage === 'fragment' ) {
|
|
757
893
|
|
|
758
|
-
|
|
894
|
+
if ( isOutputStruct ) {
|
|
759
895
|
|
|
760
|
-
|
|
896
|
+
stageData.returnType = outputNode.nodeType;
|
|
897
|
+
|
|
898
|
+
flow += `return ${ flowSlotData.result };`;
|
|
761
899
|
|
|
762
|
-
|
|
900
|
+
} else {
|
|
901
|
+
|
|
902
|
+
let structSnippet = '\t@location(0) color: vec4<f32>';
|
|
903
|
+
|
|
904
|
+
const builtins = this.getBuiltins( 'output' );
|
|
905
|
+
|
|
906
|
+
if ( builtins ) structSnippet += ',\n\t' + builtins;
|
|
907
|
+
|
|
908
|
+
stageData.returnType = 'OutputStruct';
|
|
909
|
+
stageData.structs += this._getWGSLStruct( 'OutputStruct', structSnippet );
|
|
910
|
+
stageData.structs += '\nvar<private> output : OutputStruct;\n\n';
|
|
911
|
+
|
|
912
|
+
flow += `output.color = ${ flowSlotData.result };\n\n\treturn output;`;
|
|
913
|
+
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
}
|
|
763
917
|
|
|
764
918
|
}
|
|
765
919
|
|
|
766
920
|
}
|
|
767
921
|
|
|
768
|
-
const outputNode = mainNode.outputNode;
|
|
769
|
-
const stageData = shadersData[ shaderStage ];
|
|
770
|
-
|
|
771
|
-
stageData.uniforms = this.getUniforms( shaderStage );
|
|
772
|
-
stageData.attributes = this.getAttributes( shaderStage );
|
|
773
|
-
stageData.varyings = this.getVaryings( shaderStage );
|
|
774
|
-
stageData.structs = this.getStructs( shaderStage );
|
|
775
|
-
stageData.vars = this.getVars( shaderStage );
|
|
776
|
-
stageData.codes = this.getCodes( shaderStage );
|
|
777
|
-
stageData.returnType = ( outputNode !== undefined && outputNode.isOutputStructNode === true ) ? outputNode.nodeType : '@location( 0 ) vec4<f32>';
|
|
778
922
|
stageData.flow = flow;
|
|
779
923
|
|
|
780
924
|
}
|
|
@@ -818,7 +962,16 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
818
962
|
|
|
819
963
|
_include( name ) {
|
|
820
964
|
|
|
821
|
-
wgslPolyfill[ name ]
|
|
965
|
+
const codeNode = wgslPolyfill[ name ];
|
|
966
|
+
codeNode.build( this );
|
|
967
|
+
|
|
968
|
+
if ( this.currentFunctionNode !== null ) {
|
|
969
|
+
|
|
970
|
+
this.currentFunctionNode.includes.push( codeNode );
|
|
971
|
+
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
return codeNode;
|
|
822
975
|
|
|
823
976
|
}
|
|
824
977
|
|
|
@@ -831,15 +984,13 @@ ${shaderData.uniforms}
|
|
|
831
984
|
|
|
832
985
|
// varyings
|
|
833
986
|
${shaderData.varyings}
|
|
987
|
+
var<private> varyings : VaryingsStruct;
|
|
834
988
|
|
|
835
989
|
// codes
|
|
836
990
|
${shaderData.codes}
|
|
837
991
|
|
|
838
992
|
@vertex
|
|
839
|
-
fn main( ${shaderData.attributes} ) ->
|
|
840
|
-
|
|
841
|
-
// system
|
|
842
|
-
var NodeVaryings: NodeVaryingsStruct;
|
|
993
|
+
fn main( ${shaderData.attributes} ) -> VaryingsStruct {
|
|
843
994
|
|
|
844
995
|
// vars
|
|
845
996
|
${shaderData.vars}
|
|
@@ -847,7 +998,7 @@ fn main( ${shaderData.attributes} ) -> NodeVaryingsStruct {
|
|
|
847
998
|
// flow
|
|
848
999
|
${shaderData.flow}
|
|
849
1000
|
|
|
850
|
-
return
|
|
1001
|
+
return varyings;
|
|
851
1002
|
|
|
852
1003
|
}
|
|
853
1004
|
`;
|