super-three 0.158.0 → 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/build/three.cjs +1719 -379
- package/build/three.js +1719 -379
- package/build/three.min.js +1 -1
- package/build/three.module.js +1718 -380
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +2 -1
- package/examples/jsm/controls/OrbitControls.js +50 -40
- package/examples/jsm/csm/CSMShader.js +52 -47
- package/examples/jsm/exporters/GLTFExporter.js +79 -1
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- 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 +71 -3
- 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/math/Octree.js +15 -4
- 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/nodes/Nodes.js +11 -7
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- 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/Node.js +6 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
- 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 +3 -7
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
- package/examples/jsm/nodes/core/PropertyNode.js +17 -2
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- 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 +2 -0
- package/examples/jsm/nodes/core/VaryingNode.js +1 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- 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 +5 -8
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
- package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
- 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 +19 -6
- package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +8 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- 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 +30 -21
- 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 +13 -1
- package/examples/jsm/renderers/common/RenderObjects.js +4 -2
- 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 +4 -1
- 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 +74 -7
- package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -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/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 +186 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -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/FXAAShader.js +133 -133
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +2 -3
- package/examples/jsm/shaders/SSAOShader.js +2 -3
- package/examples/jsm/transpiler/AST.js +40 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
- package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
- package/examples/jsm/transpiler/TSLEncoder.js +124 -20
- 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 +23 -8
- package/examples/jsm/webxr/XRButton.js +25 -11
- package/package.json +5 -6
- package/src/Three.js +1 -0
- package/src/constants.js +2 -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/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/ObjectLoader.js +49 -0
- package/src/materials/ShaderMaterial.js +2 -1
- 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/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +23 -18
- 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/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_physical_fragment.glsl.js +9 -4
- 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 +2 -0
- 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 +20 -1
- package/src/renderers/webgl/WebGLPrograms.js +5 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- 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/objects/BatchedMesh.js +0 -586
|
@@ -7,7 +7,7 @@ import { GPUFeatureName, GPUTextureFormat, GPULoadOp, GPUStoreOp, GPUIndexFormat
|
|
|
7
7
|
import WGSLNodeBuilder from './nodes/WGSLNodeBuilder.js';
|
|
8
8
|
import Backend from '../common/Backend.js';
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { DepthFormat, WebGPUCoordinateSystem } from 'three';
|
|
11
11
|
|
|
12
12
|
import WebGPUUtils from './utils/WebGPUUtils.js';
|
|
13
13
|
import WebGPUAttributeUtils from './utils/WebGPUAttributeUtils.js';
|
|
@@ -56,9 +56,6 @@ class WebGPUBackend extends Backend {
|
|
|
56
56
|
this.context = null;
|
|
57
57
|
this.colorBuffer = null;
|
|
58
58
|
|
|
59
|
-
this.defaultDepthTexture = new DepthTexture();
|
|
60
|
-
this.defaultDepthTexture.name = 'depthBuffer';
|
|
61
|
-
|
|
62
59
|
this.utils = new WebGPUUtils( this );
|
|
63
60
|
this.attributeUtils = new WebGPUAttributeUtils( this );
|
|
64
61
|
this.bindingUtils = new WebGPUBindingUtils( this );
|
|
@@ -117,6 +114,13 @@ class WebGPUBackend extends Backend {
|
|
|
117
114
|
this.device = device;
|
|
118
115
|
this.context = context;
|
|
119
116
|
|
|
117
|
+
this.context.configure( {
|
|
118
|
+
device: this.device,
|
|
119
|
+
format: GPUTextureFormat.BGRA8Unorm,
|
|
120
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
121
|
+
alphaMode: 'premultiplied'
|
|
122
|
+
} );
|
|
123
|
+
|
|
120
124
|
this.updateSize();
|
|
121
125
|
|
|
122
126
|
}
|
|
@@ -218,7 +222,6 @@ class WebGPUBackend extends Backend {
|
|
|
218
222
|
resolveTarget,
|
|
219
223
|
loadOp: GPULoadOp.Load,
|
|
220
224
|
storeOp: GPUStoreOp.Store
|
|
221
|
-
|
|
222
225
|
} );
|
|
223
226
|
|
|
224
227
|
}
|
|
@@ -247,7 +250,7 @@ class WebGPUBackend extends Backend {
|
|
|
247
250
|
|
|
248
251
|
}
|
|
249
252
|
|
|
250
|
-
depthStencilAttachment.view = this.
|
|
253
|
+
depthStencilAttachment.view = this.textureUtils.getDepthBuffer( renderContext.depth, renderContext.stencil ).createView();
|
|
251
254
|
|
|
252
255
|
}
|
|
253
256
|
|
|
@@ -492,75 +495,166 @@ class WebGPUBackend extends Backend {
|
|
|
492
495
|
|
|
493
496
|
}
|
|
494
497
|
|
|
495
|
-
clear(
|
|
498
|
+
clear( color, depth, stencil, renderTargetData = null ) {
|
|
496
499
|
|
|
497
500
|
const device = this.device;
|
|
498
|
-
const
|
|
501
|
+
const renderer = this.renderer;
|
|
499
502
|
|
|
500
|
-
const
|
|
503
|
+
const colorAttachments = [];
|
|
501
504
|
|
|
502
|
-
|
|
503
|
-
|
|
505
|
+
let depthStencilAttachment;
|
|
506
|
+
let clearValue;
|
|
504
507
|
|
|
505
|
-
|
|
506
|
-
|
|
508
|
+
let supportsDepth;
|
|
509
|
+
let supportsStencil;
|
|
507
510
|
|
|
508
|
-
|
|
511
|
+
if ( color ) {
|
|
509
512
|
|
|
510
|
-
|
|
511
|
-
if ( antialias === true ) {
|
|
513
|
+
const clearColor = this.getClearColor();
|
|
512
514
|
|
|
513
|
-
|
|
514
|
-
colorAttachment.resolveTarget = this.context.getCurrentTexture().createView();
|
|
515
|
+
clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a };
|
|
515
516
|
|
|
516
|
-
}
|
|
517
|
+
}
|
|
517
518
|
|
|
518
|
-
|
|
519
|
-
colorAttachment.resolveTarget = undefined;
|
|
519
|
+
if ( renderTargetData === null ) {
|
|
520
520
|
|
|
521
|
-
|
|
521
|
+
supportsDepth = renderer.depth;
|
|
522
|
+
supportsStencil = renderer.stencil;
|
|
522
523
|
|
|
523
|
-
|
|
524
|
+
depth = depth && supportsDepth;
|
|
525
|
+
stencil = stencil && supportsStencil;
|
|
524
526
|
|
|
525
|
-
|
|
527
|
+
if ( color ) {
|
|
526
528
|
|
|
527
|
-
|
|
528
|
-
colorAttachment.clearValue = renderContext.clearColorValue;
|
|
529
|
+
const antialias = this.parameters.antialias;
|
|
529
530
|
|
|
530
|
-
|
|
531
|
+
const colorAttachment = {};
|
|
531
532
|
|
|
532
|
-
|
|
533
|
+
if ( antialias === true ) {
|
|
533
534
|
|
|
534
|
-
|
|
535
|
+
colorAttachment.view = this.colorBuffer.createView();
|
|
536
|
+
colorAttachment.resolveTarget = this.context.getCurrentTexture().createView();
|
|
537
|
+
|
|
538
|
+
} else {
|
|
539
|
+
|
|
540
|
+
colorAttachment.view = this.context.getCurrentTexture().createView();
|
|
541
|
+
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
colorAttachment.clearValue = clearValue;
|
|
545
|
+
colorAttachment.loadOp = GPULoadOp.Clear;
|
|
546
|
+
colorAttachment.storeOp = GPUStoreOp.Store;
|
|
535
547
|
|
|
536
|
-
|
|
548
|
+
colorAttachments.push( colorAttachment );
|
|
537
549
|
|
|
538
|
-
|
|
539
|
-
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
if ( depth || stencil ) {
|
|
553
|
+
|
|
554
|
+
depthStencilAttachment = {
|
|
555
|
+
view: this.textureUtils.getDepthBuffer( renderer.depth, renderer.stencil ).createView()
|
|
556
|
+
};
|
|
557
|
+
|
|
558
|
+
}
|
|
540
559
|
|
|
541
560
|
} else {
|
|
542
561
|
|
|
543
|
-
|
|
562
|
+
supportsDepth = renderTargetData.depth;
|
|
563
|
+
supportsStencil = renderTargetData.stencil;
|
|
564
|
+
|
|
565
|
+
depth = depth && supportsDepth;
|
|
566
|
+
stencil = stencil && supportsStencil;
|
|
567
|
+
|
|
568
|
+
if ( color ) {
|
|
569
|
+
|
|
570
|
+
for ( const texture of renderTargetData.textures ) {
|
|
571
|
+
|
|
572
|
+
const textureData = this.get( texture );
|
|
573
|
+
const textureView = textureData.texture.createView();
|
|
574
|
+
|
|
575
|
+
let view, resolveTarget;
|
|
576
|
+
|
|
577
|
+
if ( textureData.msaaTexture !== undefined ) {
|
|
578
|
+
|
|
579
|
+
view = textureData.msaaTexture.createView();
|
|
580
|
+
resolveTarget = textureView;
|
|
581
|
+
|
|
582
|
+
} else {
|
|
583
|
+
|
|
584
|
+
view = textureView;
|
|
585
|
+
resolveTarget = undefined;
|
|
586
|
+
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
colorAttachments.push( {
|
|
590
|
+
view,
|
|
591
|
+
resolveTarget,
|
|
592
|
+
clearValue,
|
|
593
|
+
loadOp: GPULoadOp.Clear,
|
|
594
|
+
storeOp: GPUStoreOp.Store
|
|
595
|
+
} );
|
|
596
|
+
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
if ( depth || stencil ) {
|
|
602
|
+
|
|
603
|
+
const depthTextureData = this.get( renderTargetData.depthTexture );
|
|
604
|
+
|
|
605
|
+
depthStencilAttachment = {
|
|
606
|
+
view: depthTextureData.texture.createView()
|
|
607
|
+
};
|
|
608
|
+
|
|
609
|
+
}
|
|
544
610
|
|
|
545
611
|
}
|
|
546
612
|
|
|
547
|
-
|
|
613
|
+
//
|
|
548
614
|
|
|
549
|
-
|
|
550
|
-
depthStencilAttachment.stencilClearValue = renderContext.clearStencilValue;
|
|
615
|
+
if ( depthStencilAttachment !== undefined ) {
|
|
551
616
|
|
|
552
|
-
|
|
617
|
+
if ( depth ) {
|
|
618
|
+
|
|
619
|
+
depthStencilAttachment.depthLoadOp = GPULoadOp.Clear;
|
|
620
|
+
depthStencilAttachment.depthClearValue = renderer.getClearDepth();
|
|
621
|
+
depthStencilAttachment.depthStoreOp = GPUStoreOp.Store;
|
|
622
|
+
|
|
623
|
+
} else {
|
|
624
|
+
|
|
625
|
+
depthStencilAttachment.depthLoadOp = GPULoadOp.Load;
|
|
626
|
+
depthStencilAttachment.depthStoreOp = GPUStoreOp.Store;
|
|
627
|
+
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
//
|
|
553
631
|
|
|
554
|
-
|
|
632
|
+
if ( stencil ) {
|
|
633
|
+
|
|
634
|
+
depthStencilAttachment.stencilLoadOp = GPULoadOp.Clear;
|
|
635
|
+
depthStencilAttachment.stencilClearValue = renderer.getClearStencil();
|
|
636
|
+
depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store;
|
|
637
|
+
|
|
638
|
+
} else {
|
|
639
|
+
|
|
640
|
+
depthStencilAttachment.stencilLoadOp = GPULoadOp.Load;
|
|
641
|
+
depthStencilAttachment.stencilStoreOp = GPUStoreOp.Store;
|
|
642
|
+
|
|
643
|
+
}
|
|
555
644
|
|
|
556
645
|
}
|
|
557
646
|
|
|
558
|
-
|
|
559
|
-
renderContextData.currentPass = renderContextData.encoder.beginRenderPass( descriptor );
|
|
647
|
+
//
|
|
560
648
|
|
|
561
|
-
|
|
649
|
+
const encoder = device.createCommandEncoder( {} );
|
|
650
|
+
const currentPass = encoder.beginRenderPass( {
|
|
651
|
+
colorAttachments,
|
|
652
|
+
depthStencilAttachment
|
|
653
|
+
} );
|
|
654
|
+
|
|
655
|
+
currentPass.end();
|
|
562
656
|
|
|
563
|
-
device.queue.submit( [
|
|
657
|
+
device.queue.submit( [ encoder.finish() ] );
|
|
564
658
|
|
|
565
659
|
}
|
|
566
660
|
|
|
@@ -731,9 +825,9 @@ class WebGPUBackend extends Backend {
|
|
|
731
825
|
|
|
732
826
|
// cache key
|
|
733
827
|
|
|
734
|
-
|
|
828
|
+
needsRenderUpdate( renderObject ) {
|
|
735
829
|
|
|
736
|
-
const
|
|
830
|
+
const data = this.get( renderObject );
|
|
737
831
|
|
|
738
832
|
const { object, material } = renderObject;
|
|
739
833
|
|
|
@@ -747,15 +841,35 @@ class WebGPUBackend extends Backend {
|
|
|
747
841
|
|
|
748
842
|
let needsUpdate = false;
|
|
749
843
|
|
|
750
|
-
if (
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
844
|
+
if ( data.material !== material || data.materialVersion !== material.version ||
|
|
845
|
+
data.transparent !== material.transparent || data.blending !== material.blending || data.premultipliedAlpha !== material.premultipliedAlpha ||
|
|
846
|
+
data.blendSrc !== material.blendSrc || data.blendDst !== material.blendDst || data.blendEquation !== material.blendEquation ||
|
|
847
|
+
data.blendSrcAlpha !== material.blendSrcAlpha || data.blendDstAlpha !== material.blendDstAlpha || data.blendEquationAlpha !== material.blendEquationAlpha ||
|
|
848
|
+
data.colorWrite !== material.colorWrite || data.depthWrite !== material.depthWrite || data.depthTest !== material.depthTest || data.depthFunc !== material.depthFunc ||
|
|
849
|
+
data.stencilWrite !== material.stencilWrite || data.stencilFunc !== material.stencilFunc ||
|
|
850
|
+
data.stencilFail !== material.stencilFail || data.stencilZFail !== material.stencilZFail || data.stencilZPass !== material.stencilZPass ||
|
|
851
|
+
data.stencilFuncMask !== material.stencilFuncMask || data.stencilWriteMask !== material.stencilWriteMask ||
|
|
852
|
+
data.side !== material.side || data.alphaToCoverage !== material.alphaToCoverage ||
|
|
853
|
+
data.sampleCount !== sampleCount || data.colorSpace !== colorSpace ||
|
|
854
|
+
data.colorFormat !== colorFormat || data.depthStencilFormat !== depthStencilFormat ||
|
|
855
|
+
data.primitiveTopology !== primitiveTopology
|
|
856
|
+
) {
|
|
857
|
+
|
|
858
|
+
data.material = material; data.materialVersion = material.version;
|
|
859
|
+
data.transparent = material.transparent; data.blending = material.blending; data.premultipliedAlpha = material.premultipliedAlpha;
|
|
860
|
+
data.blendSrc = material.blendSrc; data.blendDst = material.blendDst; data.blendEquation = material.blendEquation;
|
|
861
|
+
data.blendSrcAlpha = material.blendSrcAlpha; data.blendDstAlpha = material.blendDstAlpha; data.blendEquationAlpha = material.blendEquationAlpha;
|
|
862
|
+
data.colorWrite = material.colorWrite;
|
|
863
|
+
data.depthWrite = material.depthWrite; data.depthTest = material.depthTest; data.depthFunc = material.depthFunc;
|
|
864
|
+
data.stencilWrite = material.stencilWrite; data.stencilFunc = material.stencilFunc;
|
|
865
|
+
data.stencilFail = material.stencilFail; data.stencilZFail = material.stencilZFail; data.stencilZPass = material.stencilZPass;
|
|
866
|
+
data.stencilFuncMask = material.stencilFuncMask; data.stencilWriteMask = material.stencilWriteMask;
|
|
867
|
+
data.side = material.side; data.alphaToCoverage = material.alphaToCoverage;
|
|
868
|
+
data.sampleCount = sampleCount;
|
|
869
|
+
data.colorSpace = colorSpace;
|
|
870
|
+
data.colorFormat = colorFormat;
|
|
871
|
+
data.depthStencilFormat = depthStencilFormat;
|
|
872
|
+
data.primitiveTopology = primitiveTopology;
|
|
759
873
|
|
|
760
874
|
needsUpdate = true;
|
|
761
875
|
|
|
@@ -765,7 +879,7 @@ class WebGPUBackend extends Backend {
|
|
|
765
879
|
|
|
766
880
|
}
|
|
767
881
|
|
|
768
|
-
|
|
882
|
+
getRenderCacheKey( renderObject ) {
|
|
769
883
|
|
|
770
884
|
const { object, material } = renderObject;
|
|
771
885
|
|
|
@@ -773,6 +887,15 @@ class WebGPUBackend extends Backend {
|
|
|
773
887
|
const renderContext = renderObject.context;
|
|
774
888
|
|
|
775
889
|
return [
|
|
890
|
+
material.transparent, material.blending, material.premultipliedAlpha,
|
|
891
|
+
material.blendSrc, material.blendDst, material.blendEquation,
|
|
892
|
+
material.blendSrcAlpha, material.blendDstAlpha, material.blendEquationAlpha,
|
|
893
|
+
material.colorWrite,
|
|
894
|
+
material.depthWrite, material.depthTest, material.depthFunc,
|
|
895
|
+
material.stencilWrite, material.stencilFunc,
|
|
896
|
+
material.stencilFail, material.stencilZFail, material.stencilZPass,
|
|
897
|
+
material.stencilFuncMask, material.stencilWriteMask,
|
|
898
|
+
material.side,
|
|
776
899
|
utils.getSampleCount( renderContext ),
|
|
777
900
|
utils.getCurrentColorSpace( renderContext ), utils.getCurrentColorFormat( renderContext ), utils.getCurrentDepthStencilFormat( renderContext ),
|
|
778
901
|
utils.getPrimitiveTopology( object, material )
|
|
@@ -927,13 +1050,18 @@ class WebGPUBackend extends Backend {
|
|
|
927
1050
|
|
|
928
1051
|
updateSize() {
|
|
929
1052
|
|
|
930
|
-
this.
|
|
931
|
-
|
|
932
|
-
|
|
1053
|
+
this.colorBuffer = this.textureUtils.getColorBuffer();
|
|
1054
|
+
|
|
933
1055
|
}
|
|
934
1056
|
|
|
935
1057
|
// utils public
|
|
936
1058
|
|
|
1059
|
+
getMaxAnisotropy() {
|
|
1060
|
+
|
|
1061
|
+
return 16;
|
|
1062
|
+
|
|
1063
|
+
}
|
|
1064
|
+
|
|
937
1065
|
hasFeature( name ) {
|
|
938
1066
|
|
|
939
1067
|
const adapter = this.adapter || _staticAdapter;
|
|
@@ -968,7 +1096,7 @@ class WebGPUBackend extends Backend {
|
|
|
968
1096
|
|
|
969
1097
|
} else if ( texture.isDepthTexture ) {
|
|
970
1098
|
|
|
971
|
-
sourceGPU = this.
|
|
1099
|
+
sourceGPU = this.textureUtils.getDepthBuffer( renderContext.depth, renderContext.stencil );
|
|
972
1100
|
|
|
973
1101
|
}
|
|
974
1102
|
|
|
@@ -1001,85 +1129,6 @@ class WebGPUBackend extends Backend {
|
|
|
1001
1129
|
|
|
1002
1130
|
}
|
|
1003
1131
|
|
|
1004
|
-
// utils
|
|
1005
|
-
|
|
1006
|
-
_getDepthBufferGPU( renderContext ) {
|
|
1007
|
-
|
|
1008
|
-
const { width, height } = this.getDrawingBufferSize();
|
|
1009
|
-
|
|
1010
|
-
const depthTexture = this.defaultDepthTexture;
|
|
1011
|
-
const depthTextureGPU = this.get( depthTexture ).texture;
|
|
1012
|
-
|
|
1013
|
-
let format, type;
|
|
1014
|
-
|
|
1015
|
-
if ( renderContext.stencil ) {
|
|
1016
|
-
|
|
1017
|
-
format = DepthStencilFormat;
|
|
1018
|
-
type = UnsignedInt248Type;
|
|
1019
|
-
|
|
1020
|
-
} else if ( renderContext.depth ) {
|
|
1021
|
-
|
|
1022
|
-
format = DepthFormat;
|
|
1023
|
-
type = UnsignedIntType;
|
|
1024
|
-
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
|
-
if ( depthTextureGPU !== undefined ) {
|
|
1028
|
-
|
|
1029
|
-
if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type ) {
|
|
1030
|
-
|
|
1031
|
-
return depthTextureGPU;
|
|
1032
|
-
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
this.textureUtils.destroyTexture( depthTexture );
|
|
1036
|
-
|
|
1037
|
-
}
|
|
1038
|
-
|
|
1039
|
-
depthTexture.name = 'depthBuffer';
|
|
1040
|
-
depthTexture.format = format;
|
|
1041
|
-
depthTexture.type = type;
|
|
1042
|
-
depthTexture.image.width = width;
|
|
1043
|
-
depthTexture.image.height = height;
|
|
1044
|
-
|
|
1045
|
-
this.textureUtils.createTexture( depthTexture, { sampleCount: this.parameters.sampleCount, width, height } );
|
|
1046
|
-
|
|
1047
|
-
return this.get( depthTexture ).texture;
|
|
1048
|
-
|
|
1049
|
-
}
|
|
1050
|
-
|
|
1051
|
-
_configureContext() {
|
|
1052
|
-
|
|
1053
|
-
this.context.configure( {
|
|
1054
|
-
device: this.device,
|
|
1055
|
-
format: GPUTextureFormat.BGRA8Unorm,
|
|
1056
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
1057
|
-
alphaMode: 'premultiplied'
|
|
1058
|
-
} );
|
|
1059
|
-
|
|
1060
|
-
}
|
|
1061
|
-
|
|
1062
|
-
_setupColorBuffer() {
|
|
1063
|
-
|
|
1064
|
-
if ( this.colorBuffer ) this.colorBuffer.destroy();
|
|
1065
|
-
|
|
1066
|
-
const { width, height } = this.getDrawingBufferSize();
|
|
1067
|
-
//const format = navigator.gpu.getPreferredCanvasFormat(); // @TODO: Move to WebGPUUtils
|
|
1068
|
-
|
|
1069
|
-
this.colorBuffer = this.device.createTexture( {
|
|
1070
|
-
label: 'colorBuffer',
|
|
1071
|
-
size: {
|
|
1072
|
-
width: width,
|
|
1073
|
-
height: height,
|
|
1074
|
-
depthOrArrayLayers: 1
|
|
1075
|
-
},
|
|
1076
|
-
sampleCount: this.parameters.sampleCount,
|
|
1077
|
-
format: GPUTextureFormat.BGRA8Unorm,
|
|
1078
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
|
|
1079
|
-
} );
|
|
1080
|
-
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
1132
|
}
|
|
1084
1133
|
|
|
1085
1134
|
export default WebGPUBackend;
|