super-three 0.157.1 → 0.160.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -72,9 +72,9 @@ class WebGPUAttributeUtils {
|
|
|
72
72
|
const buffer = backend.get( bufferAttribute ).buffer;
|
|
73
73
|
|
|
74
74
|
const array = bufferAttribute.array;
|
|
75
|
-
const
|
|
75
|
+
const updateRanges = bufferAttribute.updateRanges;
|
|
76
76
|
|
|
77
|
-
if (
|
|
77
|
+
if ( updateRanges.length === 0 ) {
|
|
78
78
|
|
|
79
79
|
// Not using update ranges
|
|
80
80
|
|
|
@@ -87,15 +87,20 @@ class WebGPUAttributeUtils {
|
|
|
87
87
|
|
|
88
88
|
} else {
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
91
|
+
|
|
92
|
+
const range = updateRanges[ i ];
|
|
93
|
+
device.queue.writeBuffer(
|
|
94
|
+
buffer,
|
|
95
|
+
0,
|
|
96
|
+
array,
|
|
97
|
+
range.start * array.BYTES_PER_ELEMENT,
|
|
98
|
+
range.count * array.BYTES_PER_ELEMENT
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
}
|
|
97
102
|
|
|
98
|
-
|
|
103
|
+
bufferAttribute.clearUpdateRanges();
|
|
99
104
|
|
|
100
105
|
}
|
|
101
106
|
|
|
@@ -85,13 +85,17 @@ class WebGPUBindingUtils {
|
|
|
85
85
|
|
|
86
86
|
texture.viewDimension = GPUTextureViewDimension.Cube;
|
|
87
87
|
|
|
88
|
+
} else if ( binding.texture.isDataArrayTexture ) {
|
|
89
|
+
|
|
90
|
+
texture.viewDimension = GPUTextureViewDimension.TwoDArray;
|
|
91
|
+
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
bindingGPU.texture = texture;
|
|
91
95
|
|
|
92
96
|
} else {
|
|
93
97
|
|
|
94
|
-
console.error(
|
|
98
|
+
console.error( `WebGPUBindingUtils: Unsupported binding "${ binding }".` );
|
|
95
99
|
|
|
96
100
|
}
|
|
97
101
|
|
|
@@ -152,7 +156,7 @@ class WebGPUBindingUtils {
|
|
|
152
156
|
const usage = GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST;
|
|
153
157
|
|
|
154
158
|
const bufferGPU = device.createBuffer( {
|
|
155
|
-
label: '
|
|
159
|
+
label: 'bindingBuffer_' + binding.name,
|
|
156
160
|
size: byteLength,
|
|
157
161
|
usage: usage
|
|
158
162
|
} );
|
|
@@ -196,6 +200,10 @@ class WebGPUBindingUtils {
|
|
|
196
200
|
|
|
197
201
|
dimensionViewGPU = GPUTextureViewDimension.Cube;
|
|
198
202
|
|
|
203
|
+
} else if ( binding.texture.isDataArrayTexture ) {
|
|
204
|
+
|
|
205
|
+
dimensionViewGPU = GPUTextureViewDimension.TwoDArray;
|
|
206
|
+
|
|
199
207
|
} else {
|
|
200
208
|
|
|
201
209
|
dimensionViewGPU = GPUTextureViewDimension.TwoD;
|
|
@@ -212,7 +220,7 @@ class WebGPUBindingUtils {
|
|
|
212
220
|
|
|
213
221
|
const aspectGPU = GPUTextureAspect.All;
|
|
214
222
|
|
|
215
|
-
resourceGPU = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU } );
|
|
223
|
+
resourceGPU = textureData.texture.createView( { aspect: aspectGPU, dimension: dimensionViewGPU, mipLevelCount: binding.store ? 1 : textureData.mipLevelCount } );
|
|
216
224
|
|
|
217
225
|
}
|
|
218
226
|
|
|
@@ -456,10 +456,9 @@ class WebGPUPipelineUtils {
|
|
|
456
456
|
|
|
457
457
|
descriptor.topology = utils.getPrimitiveTopology( object, material );
|
|
458
458
|
|
|
459
|
-
if ( object.isLine === true && object.isLineSegments !== true ) {
|
|
459
|
+
if ( geometry.index !== null && object.isLine === true && object.isLineSegments !== true ) {
|
|
460
460
|
|
|
461
|
-
|
|
462
|
-
descriptor.stripIndexFormat = ( count > 65535 ) ? GPUIndexFormat.Uint32 : GPUIndexFormat.Uint16; // define data type for primitive restart value
|
|
461
|
+
descriptor.stripIndexFormat = ( geometry.index.array instanceof Uint16Array ) ? GPUIndexFormat.Uint16 : GPUIndexFormat.Uint32;
|
|
463
462
|
|
|
464
463
|
}
|
|
465
464
|
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare
|
|
14
14
|
} from 'three';
|
|
15
15
|
|
|
16
|
-
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from 'three';
|
|
16
|
+
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, DepthTexture } from 'three';
|
|
17
17
|
|
|
18
18
|
import WebGPUTexturePassUtils from './WebGPUTexturePassUtils.js';
|
|
19
19
|
|
|
@@ -41,6 +41,11 @@ class WebGPUTextureUtils {
|
|
|
41
41
|
this.defaultTexture = null;
|
|
42
42
|
this.defaultCubeTexture = null;
|
|
43
43
|
|
|
44
|
+
this.colorBuffer = null;
|
|
45
|
+
|
|
46
|
+
this.depthTexture = new DepthTexture();
|
|
47
|
+
this.depthTexture.name = 'depthBuffer';
|
|
48
|
+
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
createSampler( texture ) {
|
|
@@ -106,7 +111,7 @@ class WebGPUTextureUtils {
|
|
|
106
111
|
const { width, height, depth, levels } = options;
|
|
107
112
|
|
|
108
113
|
const dimension = this._getDimension( texture );
|
|
109
|
-
const format = texture.internalFormat || getFormat( texture,
|
|
114
|
+
const format = texture.internalFormat || getFormat( texture, backend.device );
|
|
110
115
|
|
|
111
116
|
const sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1;
|
|
112
117
|
const primarySampleCount = texture.isRenderTargetTexture ? 1 : sampleCount;
|
|
@@ -226,6 +231,75 @@ class WebGPUTextureUtils {
|
|
|
226
231
|
|
|
227
232
|
}
|
|
228
233
|
|
|
234
|
+
getColorBuffer() {
|
|
235
|
+
|
|
236
|
+
if ( this.colorBuffer ) this.colorBuffer.destroy();
|
|
237
|
+
|
|
238
|
+
const backend = this.backend;
|
|
239
|
+
const { width, height } = backend.getDrawingBufferSize();
|
|
240
|
+
|
|
241
|
+
this.colorBuffer = backend.device.createTexture( {
|
|
242
|
+
label: 'colorBuffer',
|
|
243
|
+
size: {
|
|
244
|
+
width: width,
|
|
245
|
+
height: height,
|
|
246
|
+
depthOrArrayLayers: 1
|
|
247
|
+
},
|
|
248
|
+
sampleCount: backend.parameters.sampleCount,
|
|
249
|
+
format: GPUTextureFormat.BGRA8Unorm,
|
|
250
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
|
|
251
|
+
} );
|
|
252
|
+
|
|
253
|
+
return this.colorBuffer;
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
getDepthBuffer( depth = true, stencil = true ) {
|
|
258
|
+
|
|
259
|
+
const backend = this.backend;
|
|
260
|
+
const { width, height } = backend.getDrawingBufferSize();
|
|
261
|
+
|
|
262
|
+
const depthTexture = this.depthTexture;
|
|
263
|
+
const depthTextureGPU = backend.get( depthTexture ).texture;
|
|
264
|
+
|
|
265
|
+
let format, type;
|
|
266
|
+
|
|
267
|
+
if ( stencil ) {
|
|
268
|
+
|
|
269
|
+
format = DepthStencilFormat;
|
|
270
|
+
type = UnsignedInt248Type;
|
|
271
|
+
|
|
272
|
+
} else if ( depth ) {
|
|
273
|
+
|
|
274
|
+
format = DepthFormat;
|
|
275
|
+
type = UnsignedIntType;
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if ( depthTextureGPU !== undefined ) {
|
|
280
|
+
|
|
281
|
+
if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type ) {
|
|
282
|
+
|
|
283
|
+
return depthTextureGPU;
|
|
284
|
+
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
this.destroyTexture( depthTexture );
|
|
288
|
+
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
depthTexture.name = 'depthBuffer';
|
|
292
|
+
depthTexture.format = format;
|
|
293
|
+
depthTexture.type = type;
|
|
294
|
+
depthTexture.image.width = width;
|
|
295
|
+
depthTexture.image.height = height;
|
|
296
|
+
|
|
297
|
+
this.createTexture( depthTexture, { sampleCount: backend.parameters.sampleCount, width, height } );
|
|
298
|
+
|
|
299
|
+
return backend.get( depthTexture ).texture;
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
229
303
|
updateTexture( texture, options ) {
|
|
230
304
|
|
|
231
305
|
const textureData = this.backend.get( texture );
|
|
@@ -237,10 +311,18 @@ class WebGPUTextureUtils {
|
|
|
237
311
|
|
|
238
312
|
// transfer texture data
|
|
239
313
|
|
|
240
|
-
if ( texture.isDataTexture || texture.
|
|
314
|
+
if ( texture.isDataTexture || texture.isData3DTexture ) {
|
|
241
315
|
|
|
242
316
|
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, false );
|
|
243
317
|
|
|
318
|
+
} else if ( texture.isDataArrayTexture ) {
|
|
319
|
+
|
|
320
|
+
for ( let i = 0; i < options.image.depth; i ++ ) {
|
|
321
|
+
|
|
322
|
+
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, false, i );
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
244
326
|
} else if ( texture.isCompressedTexture ) {
|
|
245
327
|
|
|
246
328
|
this._copyCompressedBufferToTexture( texture.mipmaps, textureData.texture, textureDescriptorGPU );
|
|
@@ -437,7 +519,7 @@ class WebGPUTextureUtils {
|
|
|
437
519
|
|
|
438
520
|
}
|
|
439
521
|
|
|
440
|
-
_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
|
|
522
|
+
_copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
|
|
441
523
|
|
|
442
524
|
// @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
|
|
443
525
|
// @TODO: Consider to support valid buffer layouts with other formats like RGB
|
|
@@ -457,13 +539,13 @@ class WebGPUTextureUtils {
|
|
|
457
539
|
},
|
|
458
540
|
data,
|
|
459
541
|
{
|
|
460
|
-
offset:
|
|
542
|
+
offset: image.width * image.height * bytesPerTexel * depth,
|
|
461
543
|
bytesPerRow
|
|
462
544
|
},
|
|
463
545
|
{
|
|
464
546
|
width: image.width,
|
|
465
547
|
height: image.height,
|
|
466
|
-
depthOrArrayLayers:
|
|
548
|
+
depthOrArrayLayers: 1
|
|
467
549
|
} );
|
|
468
550
|
|
|
469
551
|
if ( flipY === true ) {
|
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
*/
|
|
12
12
|
const BokehShader = {
|
|
13
13
|
|
|
14
|
+
name: 'BokehShader',
|
|
15
|
+
|
|
14
16
|
uniforms: {
|
|
15
17
|
|
|
16
18
|
'textureWidth': { value: 1.0 },
|
|
@@ -354,6 +356,8 @@ const BokehShader = {
|
|
|
354
356
|
|
|
355
357
|
const BokehDepthShader = {
|
|
356
358
|
|
|
359
|
+
name: 'BokehDepthShader',
|
|
360
|
+
|
|
357
361
|
uniforms: {
|
|
358
362
|
|
|
359
363
|
'mNear': { value: 1.0 },
|
|
@@ -7,11 +7,15 @@ import {
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
const DepthLimitedBlurShader = {
|
|
10
|
+
|
|
11
|
+
name: 'DepthLimitedBlurShader',
|
|
12
|
+
|
|
10
13
|
defines: {
|
|
11
14
|
'KERNEL_RADIUS': 4,
|
|
12
15
|
'DEPTH_PACKING': 1,
|
|
13
16
|
'PERSPECTIVE_CAMERA': 1
|
|
14
17
|
},
|
|
18
|
+
|
|
15
19
|
uniforms: {
|
|
16
20
|
'tDiffuse': { value: null },
|
|
17
21
|
'size': { value: new Vector2( 512, 512 ) },
|
|
@@ -22,6 +26,7 @@ const DepthLimitedBlurShader = {
|
|
|
22
26
|
'cameraFar': { value: 1000 },
|
|
23
27
|
'depthCutoff': { value: 10 },
|
|
24
28
|
},
|
|
29
|
+
|
|
25
30
|
vertexShader: /* glsl */`
|
|
26
31
|
|
|
27
32
|
#include <common>
|