super-three 0.133.3 → 0.136.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/build/three.js +1059 -783
- package/build/three.min.js +1 -1
- package/build/three.module.js +1424 -895
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +9 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +1 -3
- package/examples/js/controls/ArcballControls.js +99 -72
- package/examples/js/controls/DragControls.js +7 -0
- package/examples/js/controls/OrbitControls.js +5 -36
- package/examples/js/controls/TrackballControls.js +3 -2
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +148 -64
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/lines/LineMaterial.js +58 -20
- package/examples/js/lines/LineSegments2.js +29 -24
- package/examples/js/loaders/3DMLoader.js +24 -11
- package/examples/js/loaders/3MFLoader.js +2 -2
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +96 -33
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +33 -8
- package/examples/js/loaders/RGBELoader.js +2 -16
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +9 -5
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/js/utils/RoughnessMipmapper.js +18 -28
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- package/examples/jsm/controls/ArcballControls.js +80 -77
- package/examples/jsm/controls/DragControls.js +7 -0
- package/examples/jsm/controls/OrbitControls.js +9 -51
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +161 -75
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +3338 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/lines/LineMaterial.js +59 -23
- package/examples/jsm/lines/LineSegments2.js +22 -18
- package/examples/jsm/loaders/3DMLoader.js +18 -12
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +101 -37
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +34 -8
- package/examples/jsm/loaders/RGBELoader.js +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +9 -6
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +456 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
- package/examples/jsm/node-editor/math/DotEditor.js +36 -0
- package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
- package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
- package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
- package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
- package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
- package/examples/jsm/postprocessing/BloomPass.js +1 -1
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -1
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +3 -3
- package/examples/jsm/postprocessing/FilmPass.js +1 -1
- package/examples/jsm/postprocessing/GlitchPass.js +4 -2
- package/examples/jsm/postprocessing/HalftonePass.js +1 -1
- package/examples/jsm/postprocessing/MaskPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/SAOPass.js +2 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/TexturePass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
- package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
- package/examples/jsm/renderers/nodes/Nodes.js +15 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
- package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
- package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
- package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
- package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
- package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
- package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
- package/examples/jsm/renderers/nodes/core/Node.js +32 -10
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
- package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
- package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
- package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
- package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
- package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
- package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
- package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
- package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
- package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
- package/examples/jsm/renderers/nodes/core/constants.js +2 -0
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
- package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
- package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
- package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
- package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
- package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +24 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -8
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/PMREMGenerator.js +23 -109
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +98 -144
- package/src/loaders/ImageLoader.js +9 -4
- package/src/loaders/LoaderUtils.js +26 -0
- package/src/loaders/MaterialLoader.js +7 -4
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +4 -4
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +0 -38
- package/src/math/MathUtils.js +5 -16
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +105 -132
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib.js +6 -4
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +11 -24
- package/src/renderers/webgl/WebGLPrograms.js +194 -33
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +76 -17
- package/src/renderers/webgl/WebGLTextures.js +367 -61
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webxr/WebXRManager.js +77 -109
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/textures/Texture.js +6 -0
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
- package/examples/jsm/libs/dat.gui.module.js +0 -3575
- package/examples/jsm/libs/glslang.js +0 -78
- package/examples/jsm/libs/glslang.wasm +0 -0
- package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
- package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
- package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
- package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
- package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
- package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
- package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import NodeBuilder from '../../nodes/core/NodeBuilder.js';
|
|
2
|
-
import
|
|
2
|
+
import SlotNode from './SlotNode.js';
|
|
3
|
+
import GLSLNodeParser from '../../nodes/parsers/GLSLNodeParser.js';
|
|
3
4
|
import WebGLPhysicalContextNode from './WebGLPhysicalContextNode.js';
|
|
4
5
|
|
|
5
6
|
import { ShaderChunk, LinearEncoding, RGBAFormat, UnsignedByteType, sRGBEncoding } from 'three';
|
|
@@ -20,17 +21,38 @@ function getShaderStageProperty( shaderStage ) {
|
|
|
20
21
|
|
|
21
22
|
class WebGLNodeBuilder extends NodeBuilder {
|
|
22
23
|
|
|
23
|
-
constructor(
|
|
24
|
+
constructor( object, renderer, shader ) {
|
|
24
25
|
|
|
25
|
-
super(
|
|
26
|
+
super( object, renderer, new GLSLNodeParser() );
|
|
26
27
|
|
|
27
28
|
this.shader = shader;
|
|
29
|
+
this.slots = { vertex: [], fragment: [] };
|
|
28
30
|
|
|
29
|
-
this.
|
|
31
|
+
this._parseObject();
|
|
30
32
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
addSlot( shaderStage, slotNode ) {
|
|
36
|
+
|
|
37
|
+
this.slots[ shaderStage ].push( slotNode );
|
|
38
|
+
|
|
39
|
+
return this.addFlow( shaderStage, slotNode );
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
addFlowCode( code ) {
|
|
44
|
+
|
|
45
|
+
if ( ! /;\s*$/.test( code ) ) {
|
|
46
|
+
|
|
47
|
+
code += ';';
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
super.addFlowCode( code + '\n\t' );
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
_parseObject() {
|
|
34
56
|
|
|
35
57
|
const material = this.material;
|
|
36
58
|
|
|
@@ -38,49 +60,49 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
38
60
|
|
|
39
61
|
if ( material.colorNode && material.colorNode.isNode ) {
|
|
40
62
|
|
|
41
|
-
this.addSlot( 'fragment', new
|
|
63
|
+
this.addSlot( 'fragment', new SlotNode( material.colorNode, 'COLOR', 'vec4' ) );
|
|
42
64
|
|
|
43
65
|
}
|
|
44
66
|
|
|
45
67
|
if ( material.opacityNode && material.opacityNode.isNode ) {
|
|
46
68
|
|
|
47
|
-
this.addSlot( 'fragment', new
|
|
69
|
+
this.addSlot( 'fragment', new SlotNode( material.opacityNode, 'OPACITY', 'float' ) );
|
|
48
70
|
|
|
49
71
|
}
|
|
50
72
|
|
|
51
73
|
if ( material.normalNode && material.normalNode.isNode ) {
|
|
52
74
|
|
|
53
|
-
this.addSlot( 'fragment', new
|
|
75
|
+
this.addSlot( 'fragment', new SlotNode( material.normalNode, 'NORMAL', 'vec3' ) );
|
|
54
76
|
|
|
55
77
|
}
|
|
56
78
|
|
|
57
79
|
if ( material.emissiveNode && material.emissiveNode.isNode ) {
|
|
58
80
|
|
|
59
|
-
this.addSlot( 'fragment', new
|
|
81
|
+
this.addSlot( 'fragment', new SlotNode( material.emissiveNode, 'EMISSIVE', 'vec3' ) );
|
|
60
82
|
|
|
61
83
|
}
|
|
62
84
|
|
|
63
85
|
if ( material.metalnessNode && material.metalnessNode.isNode ) {
|
|
64
86
|
|
|
65
|
-
this.addSlot( 'fragment', new
|
|
87
|
+
this.addSlot( 'fragment', new SlotNode( material.metalnessNode, 'METALNESS', 'float' ) );
|
|
66
88
|
|
|
67
89
|
}
|
|
68
90
|
|
|
69
91
|
if ( material.roughnessNode && material.roughnessNode.isNode ) {
|
|
70
92
|
|
|
71
|
-
this.addSlot( 'fragment', new
|
|
93
|
+
this.addSlot( 'fragment', new SlotNode( material.roughnessNode, 'ROUGHNESS', 'float' ) );
|
|
72
94
|
|
|
73
95
|
}
|
|
74
96
|
|
|
75
97
|
if ( material.clearcoatNode && material.clearcoatNode.isNode ) {
|
|
76
98
|
|
|
77
|
-
this.addSlot( 'fragment', new
|
|
99
|
+
this.addSlot( 'fragment', new SlotNode( material.clearcoatNode, 'CLEARCOAT', 'float' ) );
|
|
78
100
|
|
|
79
101
|
}
|
|
80
102
|
|
|
81
103
|
if ( material.clearcoatRoughnessNode && material.clearcoatRoughnessNode.isNode ) {
|
|
82
104
|
|
|
83
|
-
this.addSlot( 'fragment', new
|
|
105
|
+
this.addSlot( 'fragment', new SlotNode( material.clearcoatRoughnessNode, 'CLEARCOAT_ROUGHNESS', 'float' ) );
|
|
84
106
|
|
|
85
107
|
}
|
|
86
108
|
|
|
@@ -89,20 +111,20 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
89
111
|
const envRadianceNode = new WebGLPhysicalContextNode( WebGLPhysicalContextNode.RADIANCE, material.envNode );
|
|
90
112
|
const envIrradianceNode = new WebGLPhysicalContextNode( WebGLPhysicalContextNode.IRRADIANCE, material.envNode );
|
|
91
113
|
|
|
92
|
-
this.addSlot( 'fragment', new
|
|
93
|
-
this.addSlot( 'fragment', new
|
|
114
|
+
this.addSlot( 'fragment', new SlotNode( envRadianceNode, 'RADIANCE', 'vec3' ) );
|
|
115
|
+
this.addSlot( 'fragment', new SlotNode( envIrradianceNode, 'IRRADIANCE', 'vec3' ) );
|
|
94
116
|
|
|
95
117
|
}
|
|
96
118
|
|
|
97
|
-
if ( material.
|
|
119
|
+
if ( material.positionNode && material.positionNode.isNode ) {
|
|
98
120
|
|
|
99
|
-
this.addSlot( 'vertex', new
|
|
121
|
+
this.addSlot( 'vertex', new SlotNode( material.positionNode, 'POSITION', 'vec3' ) );
|
|
100
122
|
|
|
101
123
|
}
|
|
102
124
|
|
|
103
|
-
if ( material.
|
|
125
|
+
if ( material.sizeNode && material.sizeNode.isNode ) {
|
|
104
126
|
|
|
105
|
-
this.addSlot( 'vertex', new
|
|
127
|
+
this.addSlot( 'vertex', new SlotNode( material.sizeNode, 'SIZE', 'float' ) );
|
|
106
128
|
|
|
107
129
|
}
|
|
108
130
|
|
|
@@ -194,7 +216,7 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
194
216
|
|
|
195
217
|
}
|
|
196
218
|
|
|
197
|
-
getVarys( shaderStage ) {
|
|
219
|
+
getVarys( /* shaderStage */ ) {
|
|
198
220
|
|
|
199
221
|
let snippet = '';
|
|
200
222
|
|
|
@@ -216,7 +238,7 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
216
238
|
|
|
217
239
|
const shaderProperty = getShaderStageProperty( shaderStage );
|
|
218
240
|
|
|
219
|
-
let source = this
|
|
241
|
+
let source = this[ shaderProperty ];
|
|
220
242
|
|
|
221
243
|
const index = source.indexOf( snippet );
|
|
222
244
|
|
|
@@ -229,7 +251,7 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
229
251
|
|
|
230
252
|
}
|
|
231
253
|
|
|
232
|
-
this
|
|
254
|
+
this[ shaderProperty ] = source;
|
|
233
255
|
|
|
234
256
|
}
|
|
235
257
|
|
|
@@ -276,125 +298,208 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
276
298
|
|
|
277
299
|
}
|
|
278
300
|
|
|
301
|
+
buildCode() {
|
|
302
|
+
|
|
303
|
+
const shaderData = {};
|
|
304
|
+
|
|
305
|
+
for ( const shaderStage of shaderStages ) {
|
|
306
|
+
|
|
307
|
+
const uniforms = this.getUniforms( shaderStage );
|
|
308
|
+
const attributes = this.getAttributes( shaderStage );
|
|
309
|
+
const varys = this.getVarys( shaderStage );
|
|
310
|
+
const vars = this.getVars( shaderStage );
|
|
311
|
+
const codes = this.getCodes( shaderStage );
|
|
312
|
+
|
|
313
|
+
shaderData[ shaderStage ] = `${this.getSignature()}
|
|
314
|
+
// <node_builder>
|
|
315
|
+
|
|
316
|
+
// uniforms
|
|
317
|
+
${uniforms}
|
|
318
|
+
|
|
319
|
+
// attributes
|
|
320
|
+
${attributes}
|
|
321
|
+
|
|
322
|
+
// varys
|
|
323
|
+
${varys}
|
|
324
|
+
|
|
325
|
+
// vars
|
|
326
|
+
${vars}
|
|
327
|
+
|
|
328
|
+
// codes
|
|
329
|
+
${codes}
|
|
330
|
+
|
|
331
|
+
// </node_builder>
|
|
332
|
+
|
|
333
|
+
${this.shader[ getShaderStageProperty( shaderStage ) ]}
|
|
334
|
+
`;
|
|
335
|
+
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
this.vertexShader = shaderData.vertex;
|
|
339
|
+
this.fragmentShader = shaderData.fragment;
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
}
|
|
343
|
+
|
|
279
344
|
build() {
|
|
280
345
|
|
|
281
346
|
super.build();
|
|
282
347
|
|
|
283
348
|
this._addSnippets();
|
|
284
|
-
this.
|
|
349
|
+
this._addUniforms();
|
|
350
|
+
|
|
351
|
+
this.shader.vertexShader = this.vertexShader;
|
|
352
|
+
this.shader.fragmentShader = this.fragmentShader;
|
|
285
353
|
|
|
286
354
|
return this;
|
|
287
355
|
|
|
288
356
|
}
|
|
289
357
|
|
|
290
|
-
|
|
358
|
+
getSlot( shaderStage, name ) {
|
|
291
359
|
|
|
292
|
-
this.
|
|
360
|
+
const slots = this.slots[ shaderStage ];
|
|
361
|
+
|
|
362
|
+
for ( const node of slots ) {
|
|
293
363
|
|
|
294
|
-
|
|
295
|
-
`#ifdef NODE_NORMAL
|
|
364
|
+
if ( node.name === name ) {
|
|
296
365
|
|
|
297
|
-
|
|
298
|
-
normal = NODE_NORMAL;
|
|
366
|
+
return this.getFlowData( shaderStage, node );
|
|
299
367
|
|
|
300
|
-
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
_addSnippets() {
|
|
301
375
|
|
|
302
|
-
this.
|
|
303
|
-
`#ifdef NODE_COLOR
|
|
376
|
+
this.parseInclude( 'fragment', 'lights_physical_fragment' );
|
|
304
377
|
|
|
305
|
-
|
|
306
|
-
|
|
378
|
+
const colorSlot = this.getSlot( 'fragment', 'COLOR' );
|
|
379
|
+
const opacityNode = this.getSlot( 'fragment', 'OPACITY' );
|
|
380
|
+
const normalSlot = this.getSlot( 'fragment', 'NORMAL' );
|
|
381
|
+
const emissiveNode = this.getSlot( 'fragment', 'EMISSIVE' );
|
|
382
|
+
const roughnessNode = this.getSlot( 'fragment', 'ROUGHNESS' );
|
|
383
|
+
const metalnessNode = this.getSlot( 'fragment', 'METALNESS' );
|
|
384
|
+
const clearcoatNode = this.getSlot( 'fragment', 'CLEARCOAT' );
|
|
385
|
+
const clearcoatRoughnessNode = this.getSlot( 'fragment', 'CLEARCOAT_ROUGHNESS' );
|
|
307
386
|
|
|
308
|
-
|
|
387
|
+
const positionNode = this.getSlot( 'vertex', 'POSITION' );
|
|
388
|
+
const sizeNode = this.getSlot( 'vertex', 'SIZE' );
|
|
309
389
|
|
|
310
|
-
|
|
311
|
-
`#ifdef NODE_OPACITY
|
|
390
|
+
if ( colorSlot !== undefined ) {
|
|
312
391
|
|
|
313
|
-
|
|
314
|
-
|
|
392
|
+
this.addCodeAfterInclude(
|
|
393
|
+
'fragment',
|
|
394
|
+
'color_fragment',
|
|
395
|
+
`${colorSlot.code}\n\tdiffuseColor = ${colorSlot.result};`
|
|
396
|
+
);
|
|
315
397
|
|
|
316
|
-
|
|
398
|
+
}
|
|
317
399
|
|
|
318
|
-
|
|
319
|
-
`#ifdef NODE_EMISSIVE
|
|
400
|
+
if ( opacityNode !== undefined ) {
|
|
320
401
|
|
|
321
|
-
|
|
322
|
-
|
|
402
|
+
this.addCodeAfterInclude(
|
|
403
|
+
'fragment',
|
|
404
|
+
'alphatest_fragment',
|
|
405
|
+
`${opacityNode.code}\n\tdiffuseColor.a = ${opacityNode.result};`
|
|
406
|
+
);
|
|
323
407
|
|
|
324
|
-
|
|
408
|
+
}
|
|
325
409
|
|
|
326
|
-
|
|
327
|
-
`#ifdef NODE_ROUGHNESS
|
|
410
|
+
if ( normalSlot !== undefined ) {
|
|
328
411
|
|
|
329
|
-
|
|
330
|
-
|
|
412
|
+
this.addCodeAfterInclude(
|
|
413
|
+
'fragment',
|
|
414
|
+
'normal_fragment_begin',
|
|
415
|
+
`${normalSlot.code}\n\tnormal = ${normalSlot.result};`
|
|
416
|
+
);
|
|
331
417
|
|
|
332
|
-
|
|
418
|
+
}
|
|
333
419
|
|
|
334
|
-
|
|
335
|
-
`#ifdef NODE_METALNESS
|
|
420
|
+
if ( emissiveNode !== undefined ) {
|
|
336
421
|
|
|
337
|
-
|
|
338
|
-
|
|
422
|
+
this.addCodeAfterInclude(
|
|
423
|
+
'fragment',
|
|
424
|
+
'emissivemap_fragment',
|
|
425
|
+
`${emissiveNode.code}\n\ttotalEmissiveRadiance = ${emissiveNode.result};`
|
|
426
|
+
);
|
|
339
427
|
|
|
340
|
-
|
|
428
|
+
}
|
|
341
429
|
|
|
342
|
-
|
|
343
|
-
`#ifdef NODE_CLEARCOAT
|
|
430
|
+
if ( roughnessNode !== undefined ) {
|
|
344
431
|
|
|
345
|
-
|
|
346
|
-
|
|
432
|
+
this.addCodeAfterInclude(
|
|
433
|
+
'fragment',
|
|
434
|
+
'roughnessmap_fragment',
|
|
435
|
+
`${roughnessNode.code}\n\troughnessFactor = ${roughnessNode.result};`
|
|
436
|
+
);
|
|
347
437
|
|
|
348
|
-
|
|
438
|
+
}
|
|
349
439
|
|
|
350
|
-
|
|
440
|
+
if ( metalnessNode !== undefined ) {
|
|
351
441
|
|
|
352
|
-
|
|
353
|
-
|
|
442
|
+
this.addCodeAfterInclude(
|
|
443
|
+
'fragment',
|
|
444
|
+
'metalnessmap_fragment',
|
|
445
|
+
`${metalnessNode.code}\n\tmetalnessFactor = ${metalnessNode.result};`
|
|
446
|
+
);
|
|
354
447
|
|
|
355
|
-
|
|
448
|
+
}
|
|
356
449
|
|
|
357
|
-
|
|
358
|
-
`#ifdef NODE_RADIANCE
|
|
450
|
+
if ( clearcoatNode !== undefined ) {
|
|
359
451
|
|
|
360
|
-
|
|
361
|
-
|
|
452
|
+
this.addCodeAfterSnippet(
|
|
453
|
+
'fragment',
|
|
454
|
+
'material.clearcoatRoughness = clearcoatRoughness;',
|
|
455
|
+
`${clearcoatNode.code}\n\tmaterial.clearcoat = ${clearcoatNode.result};`
|
|
456
|
+
);
|
|
362
457
|
|
|
363
|
-
|
|
364
|
-
iblIrradiance += PI * NODE_IRRADIANCE;
|
|
458
|
+
}
|
|
365
459
|
|
|
366
|
-
|
|
460
|
+
if ( clearcoatRoughnessNode !== undefined ) {
|
|
367
461
|
|
|
368
|
-
|
|
369
|
-
|
|
462
|
+
this.addCodeAfterSnippet(
|
|
463
|
+
'fragment',
|
|
464
|
+
'material.clearcoatRoughness = clearcoatRoughness;',
|
|
465
|
+
`${clearcoatRoughnessNode.code}\n\tmaterial.clearcoatRoughness = ${clearcoatRoughnessNode.result};`
|
|
466
|
+
);
|
|
370
467
|
|
|
371
|
-
|
|
372
|
-
transformed = NODE_POSITION;
|
|
468
|
+
}
|
|
373
469
|
|
|
374
|
-
|
|
470
|
+
if ( positionNode !== undefined ) {
|
|
375
471
|
|
|
376
|
-
|
|
377
|
-
|
|
472
|
+
this.addCodeAfterInclude(
|
|
473
|
+
'vertex',
|
|
474
|
+
'begin_vertex',
|
|
475
|
+
`${positionNode.code}\n\ttransformed = ${positionNode.result};`
|
|
476
|
+
);
|
|
378
477
|
|
|
379
|
-
|
|
380
|
-
gl_PointSize = NODE_SIZE;
|
|
478
|
+
}
|
|
381
479
|
|
|
382
|
-
|
|
480
|
+
if ( sizeNode !== undefined ) {
|
|
383
481
|
|
|
384
|
-
|
|
482
|
+
this.addCodeAfterSnippet(
|
|
483
|
+
'vertex',
|
|
484
|
+
'gl_PointSize = size;',
|
|
485
|
+
`${sizeNode.code}\n\tgl_PointSize = ${sizeNode.result};`
|
|
486
|
+
);
|
|
385
487
|
|
|
386
|
-
|
|
387
|
-
`#ifdef NODE_CODE
|
|
488
|
+
}
|
|
388
489
|
|
|
389
|
-
|
|
490
|
+
for ( const shaderStage of shaderStages ) {
|
|
390
491
|
|
|
391
|
-
|
|
492
|
+
this.addCodeAfterSnippet(
|
|
493
|
+
shaderStage,
|
|
494
|
+
'main() {',
|
|
495
|
+
this.flowCode[ shaderStage ]
|
|
496
|
+
);
|
|
392
497
|
|
|
393
498
|
}
|
|
394
499
|
|
|
395
500
|
}
|
|
396
501
|
|
|
397
|
-
|
|
502
|
+
_addUniforms() {
|
|
398
503
|
|
|
399
504
|
for ( const shaderStage of shaderStages ) {
|
|
400
505
|
|
|
@@ -406,14 +511,6 @@ class WebGLNodeBuilder extends NodeBuilder {
|
|
|
406
511
|
|
|
407
512
|
}
|
|
408
513
|
|
|
409
|
-
// code
|
|
410
|
-
|
|
411
|
-
const shaderProperty = getShaderStageProperty( shaderStage );
|
|
412
|
-
|
|
413
|
-
const nodeCode = this[ shaderProperty ];
|
|
414
|
-
|
|
415
|
-
this.shader[ shaderProperty ] = nodeCode + this.shader[ shaderProperty ];
|
|
416
|
-
|
|
417
514
|
}
|
|
418
515
|
|
|
419
516
|
}
|
|
@@ -6,9 +6,9 @@ import { Material } from 'three';
|
|
|
6
6
|
const builders = new WeakMap();
|
|
7
7
|
export const nodeFrame = new NodeFrame();
|
|
8
8
|
|
|
9
|
-
Material.prototype.onBuild = function ( parameters, renderer ) {
|
|
9
|
+
Material.prototype.onBuild = function ( object, parameters, renderer ) {
|
|
10
10
|
|
|
11
|
-
builders.set( this, new WebGLNodeBuilder(
|
|
11
|
+
builders.set( this, new WebGLNodeBuilder( object, renderer, parameters ).build() );
|
|
12
12
|
|
|
13
13
|
};
|
|
14
14
|
|
|
@@ -30,11 +30,11 @@ class WebGLPhysicalContextNode extends ContextNode {
|
|
|
30
30
|
|
|
31
31
|
roughness = new FloatNode( 1.0 ).setConst( true );
|
|
32
32
|
|
|
33
|
-
this.
|
|
33
|
+
this.context.uv = new NormalNode( NormalNode.WORLD );
|
|
34
34
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
this.
|
|
37
|
+
this.context.roughness = roughness;
|
|
38
38
|
|
|
39
39
|
return super.generate( builder, output );
|
|
40
40
|
|
|
@@ -49,6 +49,12 @@ class WebGPUBindings {
|
|
|
49
49
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
remove( object ) {
|
|
53
|
+
|
|
54
|
+
this.uniformsData.delete( object );
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
52
58
|
getForCompute( param ) {
|
|
53
59
|
|
|
54
60
|
let data = this.uniformsData.get( param );
|
|
@@ -78,7 +84,7 @@ class WebGPUBindings {
|
|
|
78
84
|
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
update( object
|
|
87
|
+
update( object ) {
|
|
82
88
|
|
|
83
89
|
const textures = this.textures;
|
|
84
90
|
|
|
@@ -108,12 +114,7 @@ class WebGPUBindings {
|
|
|
108
114
|
|
|
109
115
|
if ( needsBufferWrite === true ) {
|
|
110
116
|
|
|
111
|
-
this.device.queue.writeBuffer(
|
|
112
|
-
bufferGPU,
|
|
113
|
-
0,
|
|
114
|
-
buffer,
|
|
115
|
-
0
|
|
116
|
-
);
|
|
117
|
+
this.device.queue.writeBuffer( bufferGPU, 0, buffer, 0 );
|
|
117
118
|
|
|
118
119
|
}
|
|
119
120
|
|
|
@@ -141,10 +142,10 @@ class WebGPUBindings {
|
|
|
141
142
|
|
|
142
143
|
const texture = binding.getTexture();
|
|
143
144
|
|
|
144
|
-
const
|
|
145
|
+
const needsTextureRefresh = textures.updateTexture( texture );
|
|
145
146
|
const textureGPU = textures.getTextureGPU( texture );
|
|
146
147
|
|
|
147
|
-
if ( binding.textureGPU !== textureGPU ||
|
|
148
|
+
if ( textureGPU !== undefined && binding.textureGPU !== textureGPU || needsTextureRefresh === true ) {
|
|
148
149
|
|
|
149
150
|
binding.textureGPU = textureGPU;
|
|
150
151
|
needsBindGroupRefresh = true;
|
|
@@ -2,10 +2,9 @@ import WebGPUProgrammableStage from './WebGPUProgrammableStage.js';
|
|
|
2
2
|
|
|
3
3
|
class WebGPUComputePipelines {
|
|
4
4
|
|
|
5
|
-
constructor( device
|
|
5
|
+
constructor( device ) {
|
|
6
6
|
|
|
7
7
|
this.device = device;
|
|
8
|
-
this.glslang = glslang;
|
|
9
8
|
|
|
10
9
|
this.pipelines = new WeakMap();
|
|
11
10
|
this.stages = {
|
|
@@ -23,7 +22,6 @@ class WebGPUComputePipelines {
|
|
|
23
22
|
if ( pipeline === undefined ) {
|
|
24
23
|
|
|
25
24
|
const device = this.device;
|
|
26
|
-
const glslang = this.glslang;
|
|
27
25
|
|
|
28
26
|
const shader = {
|
|
29
27
|
computeShader: param.shader
|
|
@@ -35,7 +33,7 @@ class WebGPUComputePipelines {
|
|
|
35
33
|
|
|
36
34
|
if ( stageCompute === undefined ) {
|
|
37
35
|
|
|
38
|
-
stageCompute = new WebGPUProgrammableStage( device,
|
|
36
|
+
stageCompute = new WebGPUProgrammableStage( device, shader.computeShader, 'compute' );
|
|
39
37
|
|
|
40
38
|
this.stages.compute.set( shader, stageCompute );
|
|
41
39
|
|
|
@@ -2,7 +2,7 @@ let _id = 0;
|
|
|
2
2
|
|
|
3
3
|
class WebGPUProgrammableStage {
|
|
4
4
|
|
|
5
|
-
constructor( device,
|
|
5
|
+
constructor( device, code, type ) {
|
|
6
6
|
|
|
7
7
|
this.id = _id ++;
|
|
8
8
|
|
|
@@ -10,10 +10,8 @@ class WebGPUProgrammableStage {
|
|
|
10
10
|
this.type = type;
|
|
11
11
|
this.usedTimes = 0;
|
|
12
12
|
|
|
13
|
-
const byteCode = glslang.compileGLSL( code, type );
|
|
14
|
-
|
|
15
13
|
this.stage = {
|
|
16
|
-
module: device.createShaderModule( { code
|
|
14
|
+
module: device.createShaderModule( { code } ),
|
|
17
15
|
entryPoint: 'main'
|
|
18
16
|
};
|
|
19
17
|
|
|
@@ -32,7 +32,7 @@ class WebGPURenderPipeline {
|
|
|
32
32
|
|
|
33
33
|
// determine shader attributes
|
|
34
34
|
|
|
35
|
-
const shaderAttributes = this.
|
|
35
|
+
const shaderAttributes = this._getShaderAttributes( nodeBuilder, geometry );
|
|
36
36
|
|
|
37
37
|
// vertex buffers
|
|
38
38
|
|
|
@@ -701,42 +701,34 @@ class WebGPURenderPipeline {
|
|
|
701
701
|
|
|
702
702
|
}
|
|
703
703
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
// find "layout (location = num) in type name" in vertex shader
|
|
707
|
-
|
|
708
|
-
const regex = /\s*layout\s*\(\s*location\s*=\s*(?<location>[0-9]+)\s*\)\s*in\s+(?<type>\w+)\s+(?<name>\w+)\s*;/gmi;
|
|
709
|
-
let shaderAttribute = null;
|
|
704
|
+
_getShaderAttributes( nodeBuilder, geometry ) {
|
|
710
705
|
|
|
706
|
+
const nodeAttributes = nodeBuilder.attributes;
|
|
711
707
|
const attributes = [];
|
|
712
708
|
|
|
713
|
-
|
|
709
|
+
for ( let slot = 0; slot < nodeAttributes.length; slot ++ ) {
|
|
714
710
|
|
|
715
|
-
const
|
|
711
|
+
const nodeAttribute = nodeAttributes[ slot ];
|
|
712
|
+
|
|
713
|
+
const name = nodeAttribute.name;
|
|
714
|
+
const type = nodeAttribute.type;
|
|
716
715
|
|
|
717
716
|
const geometryAttribute = geometry.getAttribute( name );
|
|
718
717
|
const bytesPerElement = ( geometryAttribute !== undefined ) ? geometryAttribute.array.BYTES_PER_ELEMENT : 4;
|
|
719
718
|
|
|
720
|
-
const
|
|
721
|
-
const
|
|
722
|
-
const vertexFormat = this._getVertexFormat( shaderAttribute.groups.type, bytesPerElement );
|
|
719
|
+
const arrayStride = this._getArrayStride( type, bytesPerElement );
|
|
720
|
+
const format = this._getVertexFormat( type, bytesPerElement );
|
|
723
721
|
|
|
724
722
|
attributes.push( {
|
|
725
|
-
name
|
|
726
|
-
arrayStride
|
|
727
|
-
|
|
728
|
-
|
|
723
|
+
name,
|
|
724
|
+
arrayStride,
|
|
725
|
+
format,
|
|
726
|
+
slot
|
|
729
727
|
} );
|
|
730
728
|
|
|
731
729
|
}
|
|
732
730
|
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
return attributes.sort( function ( a, b ) {
|
|
736
|
-
|
|
737
|
-
return a.slot - b.slot;
|
|
738
|
-
|
|
739
|
-
} );
|
|
731
|
+
return attributes;
|
|
740
732
|
|
|
741
733
|
}
|
|
742
734
|
|