super-three 0.177.0 → 0.181.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 +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -16,7 +16,8 @@ import { NodeAccess } from '../../../nodes/core/constants.js';
|
|
|
16
16
|
import VarNode from '../../../nodes/core/VarNode.js';
|
|
17
17
|
import ExpressionNode from '../../../nodes/code/ExpressionNode.js';
|
|
18
18
|
|
|
19
|
-
import {
|
|
19
|
+
import { FloatType, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter } from '../../../constants.js';
|
|
20
|
+
import { warn, error } from '../../../utils.js';
|
|
20
21
|
|
|
21
22
|
// GPUShaderStage is not defined in browsers not supporting WebGPU
|
|
22
23
|
const GPUShaderStage = ( typeof self !== 'undefined' ) ? self.GPUShaderStage : { VERTEX: 1, FRAGMENT: 2, COMPUTE: 4 };
|
|
@@ -131,22 +132,6 @@ const wgslMethods = {
|
|
|
131
132
|
bitcast: 'bitcast<f32>'
|
|
132
133
|
};
|
|
133
134
|
|
|
134
|
-
// WebGPU issue: does not support pow() with negative base on Windows
|
|
135
|
-
|
|
136
|
-
if ( typeof navigator !== 'undefined' && /Windows/g.test( navigator.userAgent ) ) {
|
|
137
|
-
|
|
138
|
-
wgslPolyfill.pow_float = new CodeNode( 'fn tsl_pow_float( a : f32, b : f32 ) -> f32 { return select( -pow( -a, b ), pow( a, b ), a > 0.0 ); }' );
|
|
139
|
-
wgslPolyfill.pow_vec2 = new CodeNode( 'fn tsl_pow_vec2( a : vec2f, b : vec2f ) -> vec2f { return vec2f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ) ); }', [ wgslPolyfill.pow_float ] );
|
|
140
|
-
wgslPolyfill.pow_vec3 = new CodeNode( 'fn tsl_pow_vec3( a : vec3f, b : vec3f ) -> vec3f { return vec3f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ), tsl_pow_float( a.z, b.z ) ); }', [ wgslPolyfill.pow_float ] );
|
|
141
|
-
wgslPolyfill.pow_vec4 = new CodeNode( 'fn tsl_pow_vec4( a : vec4f, b : vec4f ) -> vec4f { return vec4f( tsl_pow_float( a.x, b.x ), tsl_pow_float( a.y, b.y ), tsl_pow_float( a.z, b.z ), tsl_pow_float( a.w, b.w ) ); }', [ wgslPolyfill.pow_float ] );
|
|
142
|
-
|
|
143
|
-
wgslMethods.pow_float = 'tsl_pow_float';
|
|
144
|
-
wgslMethods.pow_vec2 = 'tsl_pow_vec2';
|
|
145
|
-
wgslMethods.pow_vec3 = 'tsl_pow_vec3';
|
|
146
|
-
wgslMethods.pow_vec4 = 'tsl_pow_vec4';
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
135
|
//
|
|
151
136
|
|
|
152
137
|
let diagnostics = '';
|
|
@@ -211,18 +196,6 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
211
196
|
|
|
212
197
|
}
|
|
213
198
|
|
|
214
|
-
/**
|
|
215
|
-
* Checks if the given texture requires a manual conversion to the working color space.
|
|
216
|
-
*
|
|
217
|
-
* @param {Texture} texture - The texture to check.
|
|
218
|
-
* @return {boolean} Whether the given texture requires a conversion to working color space or not.
|
|
219
|
-
*/
|
|
220
|
-
needsToWorkingColorSpace( texture ) {
|
|
221
|
-
|
|
222
|
-
return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
199
|
/**
|
|
227
200
|
* Generates the WGSL snippet for sampled textures.
|
|
228
201
|
*
|
|
@@ -231,49 +204,39 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
231
204
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
232
205
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
233
206
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
207
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
234
208
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
235
209
|
* @return {string} The WGSL snippet.
|
|
236
210
|
*/
|
|
237
|
-
_generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
211
|
+
_generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
238
212
|
|
|
239
213
|
if ( shaderStage === 'fragment' ) {
|
|
240
214
|
|
|
241
215
|
if ( depthSnippet ) {
|
|
242
216
|
|
|
243
|
-
|
|
217
|
+
if ( offsetSnippet ) {
|
|
244
218
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet } )`;
|
|
219
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ offsetSnippet } )`;
|
|
248
220
|
|
|
249
|
-
|
|
221
|
+
}
|
|
250
222
|
|
|
251
|
-
|
|
223
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet } )`;
|
|
252
224
|
|
|
253
|
-
|
|
225
|
+
} else {
|
|
254
226
|
|
|
255
|
-
|
|
227
|
+
if ( offsetSnippet ) {
|
|
256
228
|
|
|
257
|
-
|
|
229
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ offsetSnippet } )`;
|
|
258
230
|
|
|
259
|
-
|
|
260
|
-
* Generates the WGSL snippet when sampling video textures.
|
|
261
|
-
*
|
|
262
|
-
* @private
|
|
263
|
-
* @param {string} textureProperty - The name of the video texture uniform in the shader.
|
|
264
|
-
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
265
|
-
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
266
|
-
* @return {string} The WGSL snippet.
|
|
267
|
-
*/
|
|
268
|
-
_generateVideoSample( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
|
|
231
|
+
}
|
|
269
232
|
|
|
270
|
-
|
|
233
|
+
return `textureSample( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet } )`;
|
|
271
234
|
|
|
272
|
-
|
|
235
|
+
}
|
|
273
236
|
|
|
274
237
|
} else {
|
|
275
238
|
|
|
276
|
-
|
|
239
|
+
return this.generateTextureSampleLevel( texture, textureProperty, uvSnippet, '0', depthSnippet );
|
|
277
240
|
|
|
278
241
|
}
|
|
279
242
|
|
|
@@ -288,21 +251,28 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
288
251
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
289
252
|
* @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
290
253
|
* @param {string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
254
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
291
255
|
* @return {string} The WGSL snippet.
|
|
292
256
|
*/
|
|
293
|
-
|
|
257
|
+
generateTextureSampleLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
294
258
|
|
|
295
259
|
if ( this.isUnfilterable( texture ) === false ) {
|
|
296
260
|
|
|
261
|
+
if ( offsetSnippet ) {
|
|
262
|
+
|
|
263
|
+
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
297
267
|
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
298
268
|
|
|
299
269
|
} else if ( this.isFilteredTexture( texture ) ) {
|
|
300
270
|
|
|
301
|
-
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet );
|
|
271
|
+
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet );
|
|
302
272
|
|
|
303
273
|
} else {
|
|
304
274
|
|
|
305
|
-
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, levelSnippet );
|
|
275
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );
|
|
306
276
|
|
|
307
277
|
}
|
|
308
278
|
|
|
@@ -352,7 +322,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
352
322
|
|
|
353
323
|
code += `\t\tcoord.${ axis }`;
|
|
354
324
|
|
|
355
|
-
|
|
325
|
+
warn( `WebGPURenderer: Unsupported texture wrap type "${ wrap }" for vertex shader.` );
|
|
356
326
|
|
|
357
327
|
}
|
|
358
328
|
|
|
@@ -434,7 +404,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
434
404
|
}
|
|
435
405
|
|
|
436
406
|
// Build parameters string based on texture type and multisampling
|
|
437
|
-
if ( isMultisampled || texture.
|
|
407
|
+
if ( isMultisampled || texture.isStorageTexture ) {
|
|
438
408
|
|
|
439
409
|
textureDimensionsParams = textureProperty;
|
|
440
410
|
|
|
@@ -480,16 +450,23 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
480
450
|
* @param {Texture} texture - The texture.
|
|
481
451
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
482
452
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
483
|
-
* @param {string}
|
|
453
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
454
|
+
* @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
484
455
|
* @return {string} The WGSL snippet.
|
|
485
456
|
*/
|
|
486
|
-
generateFilteredTexture( texture, textureProperty, uvSnippet, levelSnippet = '0u' ) {
|
|
457
|
+
generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet = '0u' ) {
|
|
487
458
|
|
|
488
459
|
this._include( 'biquadraticTexture' );
|
|
489
460
|
|
|
490
461
|
const wrapFunction = this.generateWrapFunction( texture );
|
|
491
462
|
const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
|
|
492
463
|
|
|
464
|
+
if ( offsetSnippet ) {
|
|
465
|
+
|
|
466
|
+
uvSnippet = `${ uvSnippet } + vec2<f32>(${ offsetSnippet }) / ${ textureDimension }`;
|
|
467
|
+
|
|
468
|
+
}
|
|
469
|
+
|
|
493
470
|
return `tsl_biquadraticTexture( ${ textureProperty }, ${ wrapFunction }( ${ uvSnippet } ), ${ textureDimension }, u32( ${ levelSnippet } ) )`;
|
|
494
471
|
|
|
495
472
|
}
|
|
@@ -502,18 +479,26 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
502
479
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
503
480
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
504
481
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
482
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
505
483
|
* @param {string} [levelSnippet='0u'] - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
506
484
|
* @return {string} The WGSL snippet.
|
|
507
485
|
*/
|
|
508
|
-
generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, levelSnippet = '0u' ) {
|
|
486
|
+
generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet = '0u' ) {
|
|
509
487
|
|
|
510
488
|
const wrapFunction = this.generateWrapFunction( texture );
|
|
511
489
|
const textureDimension = this.generateTextureDimension( texture, textureProperty, levelSnippet );
|
|
512
490
|
|
|
513
491
|
const vecType = texture.isData3DTexture ? 'vec3' : 'vec2';
|
|
492
|
+
|
|
493
|
+
if ( offsetSnippet ) {
|
|
494
|
+
|
|
495
|
+
uvSnippet = `${ uvSnippet } + ${ vecType }<f32>(${ offsetSnippet }) / ${ vecType }<f32>( ${ textureDimension } )`;
|
|
496
|
+
|
|
497
|
+
}
|
|
498
|
+
|
|
514
499
|
const coordSnippet = `${ vecType }<u32>( ${ wrapFunction }( ${ uvSnippet } ) * ${ vecType }<f32>( ${ textureDimension } ) )`;
|
|
515
500
|
|
|
516
|
-
return this.generateTextureLoad( texture, textureProperty, coordSnippet, depthSnippet,
|
|
501
|
+
return this.generateTextureLoad( texture, textureProperty, coordSnippet, levelSnippet, depthSnippet, null );
|
|
517
502
|
|
|
518
503
|
}
|
|
519
504
|
|
|
@@ -523,19 +508,24 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
523
508
|
* @param {Texture} texture - The texture.
|
|
524
509
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
525
510
|
* @param {string} uvIndexSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
511
|
+
* @param {?string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
526
512
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
527
|
-
* @param {string}
|
|
513
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
528
514
|
* @return {string} The WGSL snippet.
|
|
529
515
|
*/
|
|
530
|
-
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet,
|
|
516
|
+
generateTextureLoad( texture, textureProperty, uvIndexSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
531
517
|
|
|
532
|
-
|
|
518
|
+
if ( levelSnippet === null ) levelSnippet = '0u';
|
|
519
|
+
|
|
520
|
+
if ( offsetSnippet ) {
|
|
533
521
|
|
|
534
|
-
|
|
522
|
+
uvIndexSnippet = `${ uvIndexSnippet } + ${ offsetSnippet }`;
|
|
535
523
|
|
|
536
|
-
|
|
524
|
+
}
|
|
537
525
|
|
|
538
|
-
|
|
526
|
+
let snippet;
|
|
527
|
+
|
|
528
|
+
if ( depthSnippet ) {
|
|
539
529
|
|
|
540
530
|
snippet = `textureLoad( ${ textureProperty }, ${ uvIndexSnippet }, ${ depthSnippet }, u32( ${ levelSnippet } ) )`;
|
|
541
531
|
|
|
@@ -617,24 +607,21 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
617
607
|
* @param {string} textureProperty - The name of the texture uniform in the shader.
|
|
618
608
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
619
609
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
610
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
620
611
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
621
612
|
* @return {string} The WGSL snippet.
|
|
622
613
|
*/
|
|
623
|
-
generateTexture( texture, textureProperty, uvSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
614
|
+
generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
624
615
|
|
|
625
616
|
let snippet = null;
|
|
626
617
|
|
|
627
|
-
if (
|
|
628
|
-
|
|
629
|
-
snippet = this._generateVideoSample( textureProperty, uvSnippet, shaderStage );
|
|
618
|
+
if ( this.isUnfilterable( texture ) ) {
|
|
630
619
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
snippet = this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, '0', shaderStage );
|
|
620
|
+
snippet = this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, '0', shaderStage );
|
|
634
621
|
|
|
635
622
|
} else {
|
|
636
623
|
|
|
637
|
-
snippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, shaderStage );
|
|
624
|
+
snippet = this._generateTextureSample( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, shaderStage );
|
|
638
625
|
|
|
639
626
|
}
|
|
640
627
|
|
|
@@ -650,19 +637,26 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
650
637
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
651
638
|
* @param {Array<string>} gradSnippet - An array holding both gradient WGSL snippets.
|
|
652
639
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
640
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
653
641
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
654
642
|
* @return {string} The WGSL snippet.
|
|
655
643
|
*/
|
|
656
|
-
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
644
|
+
generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
657
645
|
|
|
658
646
|
if ( shaderStage === 'fragment' ) {
|
|
659
647
|
|
|
660
648
|
// TODO handle i32 or u32 --> uvSnippet, array_index: A, ddx, ddy
|
|
649
|
+
if ( offsetSnippet ) {
|
|
650
|
+
|
|
651
|
+
return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] }, ${ offsetSnippet } )`;
|
|
652
|
+
|
|
653
|
+
}
|
|
654
|
+
|
|
661
655
|
return `textureSampleGrad( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
|
|
662
656
|
|
|
663
657
|
} else {
|
|
664
658
|
|
|
665
|
-
|
|
659
|
+
error( `WebGPURenderer: THREE.TextureNode.gradient() does not support ${ shaderStage } shader.` );
|
|
666
660
|
|
|
667
661
|
}
|
|
668
662
|
|
|
@@ -677,24 +671,37 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
677
671
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
678
672
|
* @param {string} compareSnippet - A WGSL snippet that represents the reference value.
|
|
679
673
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
674
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
680
675
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
681
676
|
* @return {string} The WGSL snippet.
|
|
682
677
|
*/
|
|
683
|
-
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
678
|
+
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
684
679
|
|
|
685
680
|
if ( shaderStage === 'fragment' ) {
|
|
686
681
|
|
|
687
682
|
if ( texture.isDepthTexture === true && texture.isArrayTexture === true ) {
|
|
688
683
|
|
|
684
|
+
if ( offsetSnippet ) {
|
|
685
|
+
|
|
686
|
+
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;
|
|
687
|
+
|
|
688
|
+
}
|
|
689
|
+
|
|
689
690
|
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ depthSnippet }, ${ compareSnippet } )`;
|
|
690
691
|
|
|
691
692
|
}
|
|
692
693
|
|
|
694
|
+
if ( offsetSnippet ) {
|
|
695
|
+
|
|
696
|
+
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet }, ${ offsetSnippet } )`;
|
|
697
|
+
|
|
698
|
+
}
|
|
699
|
+
|
|
693
700
|
return `textureSampleCompare( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ compareSnippet } )`;
|
|
694
701
|
|
|
695
702
|
} else {
|
|
696
703
|
|
|
697
|
-
|
|
704
|
+
error( `WebGPURenderer: THREE.DepthTexture.compareFunction() does not support ${ shaderStage } shader.` );
|
|
698
705
|
|
|
699
706
|
}
|
|
700
707
|
|
|
@@ -708,25 +715,32 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
708
715
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
709
716
|
* @param {string} levelSnippet - A WGSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
|
|
710
717
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
718
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
711
719
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
712
720
|
* @return {string} The WGSL snippet.
|
|
713
721
|
*/
|
|
714
|
-
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet,
|
|
722
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet ) {
|
|
715
723
|
|
|
716
|
-
|
|
724
|
+
if ( this.isUnfilterable( texture ) === false ) {
|
|
725
|
+
|
|
726
|
+
if ( offsetSnippet ) {
|
|
717
727
|
|
|
718
|
-
|
|
728
|
+
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet }, ${ offsetSnippet } )`;
|
|
729
|
+
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
return `textureSampleLevel( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
733
|
+
|
|
734
|
+
} else if ( this.isFilteredTexture( texture ) ) {
|
|
719
735
|
|
|
720
|
-
|
|
736
|
+
return this.generateFilteredTexture( texture, textureProperty, uvSnippet, offsetSnippet, levelSnippet );
|
|
721
737
|
|
|
722
738
|
} else {
|
|
723
739
|
|
|
724
|
-
|
|
740
|
+
return this.generateTextureLod( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet, levelSnippet );
|
|
725
741
|
|
|
726
742
|
}
|
|
727
743
|
|
|
728
|
-
return snippet;
|
|
729
|
-
|
|
730
744
|
}
|
|
731
745
|
|
|
732
746
|
/**
|
|
@@ -737,18 +751,25 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
737
751
|
* @param {string} uvSnippet - A WGSL snippet that represents texture coordinates used for sampling.
|
|
738
752
|
* @param {string} biasSnippet - A WGSL snippet that represents the bias to apply to the mip level before sampling.
|
|
739
753
|
* @param {?string} depthSnippet - A WGSL snippet that represents 0-based texture array index to sample.
|
|
754
|
+
* @param {?string} offsetSnippet - A WGSL snippet that represents the offset that will be applied to the unnormalized texture coordinate before sampling the texture.
|
|
740
755
|
* @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
|
|
741
756
|
* @return {string} The WGSL snippet.
|
|
742
757
|
*/
|
|
743
|
-
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
758
|
+
generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet, shaderStage = this.shaderStage ) {
|
|
744
759
|
|
|
745
760
|
if ( shaderStage === 'fragment' ) {
|
|
746
761
|
|
|
762
|
+
if ( offsetSnippet ) {
|
|
763
|
+
|
|
764
|
+
return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet }, ${ offsetSnippet } )`;
|
|
765
|
+
|
|
766
|
+
}
|
|
767
|
+
|
|
747
768
|
return `textureSampleBias( ${ textureProperty }, ${ textureProperty }_sampler, ${ uvSnippet }, ${ biasSnippet } )`;
|
|
748
769
|
|
|
749
770
|
} else {
|
|
750
771
|
|
|
751
|
-
|
|
772
|
+
error( `WebGPURenderer: THREE.TextureNode.biasNode does not support ${ shaderStage } shader.` );
|
|
752
773
|
|
|
753
774
|
}
|
|
754
775
|
|
|
@@ -844,9 +865,20 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
844
865
|
*/
|
|
845
866
|
getNodeAccess( node, shaderStage ) {
|
|
846
867
|
|
|
847
|
-
if ( shaderStage !== 'compute' )
|
|
868
|
+
if ( shaderStage !== 'compute' ) {
|
|
869
|
+
|
|
870
|
+
if ( node.isAtomic === true ) {
|
|
871
|
+
|
|
872
|
+
warn( 'WebGPURenderer: Atomic operations are only supported in compute shaders.' );
|
|
873
|
+
|
|
874
|
+
return NodeAccess.READ_WRITE;
|
|
875
|
+
|
|
876
|
+
}
|
|
877
|
+
|
|
848
878
|
return NodeAccess.READ_ONLY;
|
|
849
879
|
|
|
880
|
+
}
|
|
881
|
+
|
|
850
882
|
return node.access;
|
|
851
883
|
|
|
852
884
|
}
|
|
@@ -899,7 +931,15 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
899
931
|
|
|
900
932
|
if ( type === 'texture' || type === 'storageTexture' ) {
|
|
901
933
|
|
|
902
|
-
|
|
934
|
+
if ( node.value.is3DTexture === true ) {
|
|
935
|
+
|
|
936
|
+
texture = new NodeSampledTexture3D( uniformNode.name, uniformNode.node, group, access );
|
|
937
|
+
|
|
938
|
+
} else {
|
|
939
|
+
|
|
940
|
+
texture = new NodeSampledTexture( uniformNode.name, uniformNode.node, group, access );
|
|
941
|
+
|
|
942
|
+
}
|
|
903
943
|
|
|
904
944
|
} else if ( type === 'cubeTexture' ) {
|
|
905
945
|
|
|
@@ -912,6 +952,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
912
952
|
}
|
|
913
953
|
|
|
914
954
|
texture.store = node.isStorageTextureNode === true;
|
|
955
|
+
texture.mipLevel = texture.store ? node.mipLevel : 0;
|
|
915
956
|
texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
916
957
|
|
|
917
958
|
if ( this.isUnfilterable( node.value ) === false && texture.store === false ) {
|
|
@@ -1075,7 +1116,8 @@ ${ flowData.code }
|
|
|
1075
1116
|
}
|
|
1076
1117
|
|
|
1077
1118
|
/**
|
|
1078
|
-
*
|
|
1119
|
+
* Contextually returns either the vertex stage instance index builtin
|
|
1120
|
+
* or the linearized index of an compute invocation within a grid of workgroups.
|
|
1079
1121
|
*
|
|
1080
1122
|
* @return {string} The instance index.
|
|
1081
1123
|
*/
|
|
@@ -1091,8 +1133,9 @@ ${ flowData.code }
|
|
|
1091
1133
|
|
|
1092
1134
|
}
|
|
1093
1135
|
|
|
1136
|
+
|
|
1094
1137
|
/**
|
|
1095
|
-
* Returns the invocation
|
|
1138
|
+
* Returns a builtin representing the index of a compute invocation within the scope of a workgroup load.
|
|
1096
1139
|
*
|
|
1097
1140
|
* @return {string} The invocation local index.
|
|
1098
1141
|
*/
|
|
@@ -1103,7 +1146,7 @@ ${ flowData.code }
|
|
|
1103
1146
|
}
|
|
1104
1147
|
|
|
1105
1148
|
/**
|
|
1106
|
-
* Returns the subgroup
|
|
1149
|
+
* Returns a builtin representing the size of a subgroup within the current shader.
|
|
1107
1150
|
*
|
|
1108
1151
|
* @return {string} The subgroup size.
|
|
1109
1152
|
*/
|
|
@@ -1116,7 +1159,7 @@ ${ flowData.code }
|
|
|
1116
1159
|
}
|
|
1117
1160
|
|
|
1118
1161
|
/**
|
|
1119
|
-
* Returns the invocation
|
|
1162
|
+
* Returns a builtin representing the index of a compute invocation within the scope of a subgroup.
|
|
1120
1163
|
*
|
|
1121
1164
|
* @return {string} The invocation subgroup index.
|
|
1122
1165
|
*/
|
|
@@ -1129,7 +1172,7 @@ ${ flowData.code }
|
|
|
1129
1172
|
}
|
|
1130
1173
|
|
|
1131
1174
|
/**
|
|
1132
|
-
* Returns the subgroup
|
|
1175
|
+
* Returns a builtin representing the index of a compute invocation's subgroup within its workgroup.
|
|
1133
1176
|
*
|
|
1134
1177
|
* @return {string} The subgroup index.
|
|
1135
1178
|
*/
|
|
@@ -1701,24 +1744,25 @@ ${ flowData.code }
|
|
|
1701
1744
|
|
|
1702
1745
|
}
|
|
1703
1746
|
|
|
1704
|
-
} else if (
|
|
1747
|
+
} else if ( uniform.node.isStorageTextureNode === true ) {
|
|
1705
1748
|
|
|
1706
|
-
|
|
1749
|
+
const format = getFormat( texture );
|
|
1750
|
+
const access = this.getStorageAccess( uniform.node, shaderStage );
|
|
1707
1751
|
|
|
1708
|
-
|
|
1752
|
+
const is3D = uniform.node.value.is3DTexture;
|
|
1753
|
+
const isArrayTexture = uniform.node.value.isArrayTexture;
|
|
1709
1754
|
|
|
1710
|
-
|
|
1755
|
+
const dimension = is3D ? '3d' : `2d${ isArrayTexture ? '_array' : '' }`;
|
|
1711
1756
|
|
|
1712
|
-
|
|
1757
|
+
textureType = `texture_storage_${ dimension }<${ format }, ${ access }>`;
|
|
1713
1758
|
|
|
1714
|
-
|
|
1759
|
+
} else if ( texture.isArrayTexture === true || texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {
|
|
1715
1760
|
|
|
1716
|
-
|
|
1761
|
+
textureType = 'texture_2d_array<f32>';
|
|
1717
1762
|
|
|
1718
|
-
|
|
1719
|
-
const access = this.getStorageAccess( uniform.node, shaderStage );
|
|
1763
|
+
} else if ( texture.is3DTexture === true || texture.isData3DTexture === true ) {
|
|
1720
1764
|
|
|
1721
|
-
textureType =
|
|
1765
|
+
textureType = 'texture_3d<f32>';
|
|
1722
1766
|
|
|
1723
1767
|
} else {
|
|
1724
1768
|
|
|
@@ -1885,7 +1929,11 @@ ${ flowData.code }
|
|
|
1885
1929
|
|
|
1886
1930
|
} else {
|
|
1887
1931
|
|
|
1888
|
-
|
|
1932
|
+
// Early strictly validated in computeNode
|
|
1933
|
+
|
|
1934
|
+
const workgroupSize = this.object.workgroupSize;
|
|
1935
|
+
|
|
1936
|
+
this.computeShader = this._getWGSLComputeCode( shadersData.compute, workgroupSize );
|
|
1889
1937
|
|
|
1890
1938
|
}
|
|
1891
1939
|
|
|
@@ -1918,6 +1966,35 @@ ${ flowData.code }
|
|
|
1918
1966
|
|
|
1919
1967
|
}
|
|
1920
1968
|
|
|
1969
|
+
/**
|
|
1970
|
+
* Returns the bitcast method name for a given input and outputType.
|
|
1971
|
+
*
|
|
1972
|
+
* @param {string} type - The output type to bitcast to.
|
|
1973
|
+
* @return {string} The resolved WGSL bitcast invocation.
|
|
1974
|
+
*/
|
|
1975
|
+
getBitcastMethod( type ) {
|
|
1976
|
+
|
|
1977
|
+
const dataType = this.getType( type );
|
|
1978
|
+
|
|
1979
|
+
return `bitcast<${ dataType }>`;
|
|
1980
|
+
|
|
1981
|
+
}
|
|
1982
|
+
|
|
1983
|
+
/**
|
|
1984
|
+
* Returns the native snippet for a ternary operation.
|
|
1985
|
+
*
|
|
1986
|
+
* @param {string} condSnippet - The condition determining which expression gets resolved.
|
|
1987
|
+
* @param {string} ifSnippet - The expression to resolve to if the condition is true.
|
|
1988
|
+
* @param {string} elseSnippet - The expression to resolve to if the condition is false.
|
|
1989
|
+
* @return {string} The resolved method name.
|
|
1990
|
+
*/
|
|
1991
|
+
getTernary( condSnippet, ifSnippet, elseSnippet ) {
|
|
1992
|
+
|
|
1993
|
+
return `select( ${elseSnippet}, ${ifSnippet}, ${condSnippet} )`;
|
|
1994
|
+
|
|
1995
|
+
}
|
|
1996
|
+
|
|
1997
|
+
|
|
1921
1998
|
/**
|
|
1922
1999
|
* Returns the WGSL type of the given node data type.
|
|
1923
2000
|
*
|
|
@@ -1992,11 +2069,7 @@ ${ flowData.code }
|
|
|
1992
2069
|
const codeNode = wgslPolyfill[ name ];
|
|
1993
2070
|
codeNode.build( this );
|
|
1994
2071
|
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
this.currentFunctionNode.includes.push( codeNode );
|
|
1998
|
-
|
|
1999
|
-
}
|
|
2072
|
+
this.addInclude( codeNode );
|
|
2000
2073
|
|
|
2001
2074
|
return codeNode;
|
|
2002
2075
|
|
|
@@ -2090,36 +2163,40 @@ fn main( ${shaderData.varyings} ) -> ${shaderData.returnType} {
|
|
|
2090
2163
|
*/
|
|
2091
2164
|
_getWGSLComputeCode( shaderData, workgroupSize ) {
|
|
2092
2165
|
|
|
2166
|
+
const [ workgroupSizeX, workgroupSizeY, workgroupSizeZ ] = workgroupSize;
|
|
2167
|
+
|
|
2093
2168
|
return `${ this.getSignature() }
|
|
2094
2169
|
// directives
|
|
2095
|
-
${shaderData.directives}
|
|
2170
|
+
${ shaderData.directives }
|
|
2096
2171
|
|
|
2097
2172
|
// system
|
|
2098
2173
|
var<private> instanceIndex : u32;
|
|
2099
2174
|
|
|
2100
2175
|
// locals
|
|
2101
|
-
${shaderData.scopedArrays}
|
|
2176
|
+
${ shaderData.scopedArrays }
|
|
2102
2177
|
|
|
2103
2178
|
// structs
|
|
2104
|
-
${shaderData.structs}
|
|
2179
|
+
${ shaderData.structs }
|
|
2105
2180
|
|
|
2106
2181
|
// uniforms
|
|
2107
|
-
${shaderData.uniforms}
|
|
2182
|
+
${ shaderData.uniforms }
|
|
2108
2183
|
|
|
2109
2184
|
// codes
|
|
2110
|
-
${shaderData.codes}
|
|
2185
|
+
${ shaderData.codes }
|
|
2111
2186
|
|
|
2112
|
-
@compute @workgroup_size( ${
|
|
2113
|
-
fn main( ${shaderData.attributes} ) {
|
|
2187
|
+
@compute @workgroup_size( ${ workgroupSizeX }, ${ workgroupSizeY }, ${ workgroupSizeZ } )
|
|
2188
|
+
fn main( ${ shaderData.attributes } ) {
|
|
2114
2189
|
|
|
2115
2190
|
// system
|
|
2116
|
-
instanceIndex = globalId.x
|
|
2191
|
+
instanceIndex = globalId.x
|
|
2192
|
+
+ globalId.y * ( ${ workgroupSizeX } * numWorkgroups.x )
|
|
2193
|
+
+ globalId.z * ( ${ workgroupSizeX } * numWorkgroups.x ) * ( ${ workgroupSizeY } * numWorkgroups.y );
|
|
2117
2194
|
|
|
2118
2195
|
// vars
|
|
2119
|
-
${shaderData.vars}
|
|
2196
|
+
${ shaderData.vars }
|
|
2120
2197
|
|
|
2121
2198
|
// flow
|
|
2122
|
-
${shaderData.flow}
|
|
2199
|
+
${ shaderData.flow }
|
|
2123
2200
|
|
|
2124
2201
|
}
|
|
2125
2202
|
`;
|