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.
Files changed (191) hide show
  1. package/build/three.cjs +1719 -379
  2. package/build/three.js +1719 -379
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +1718 -380
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/controls/OrbitControls.js +50 -40
  8. package/examples/jsm/csm/CSMShader.js +52 -47
  9. package/examples/jsm/exporters/GLTFExporter.js +79 -1
  10. package/examples/jsm/exporters/USDZExporter.js +27 -19
  11. package/examples/jsm/helpers/TextureHelper.js +237 -0
  12. package/examples/jsm/interactive/HTMLMesh.js +9 -2
  13. package/examples/jsm/lines/LineMaterial.js +16 -33
  14. package/examples/jsm/loaders/ColladaLoader.js +0 -6
  15. package/examples/jsm/loaders/DRACOLoader.js +4 -3
  16. package/examples/jsm/loaders/FBXLoader.js +294 -124
  17. package/examples/jsm/loaders/GLTFLoader.js +71 -3
  18. package/examples/jsm/loaders/MaterialXLoader.js +73 -54
  19. package/examples/jsm/loaders/NRRDLoader.js +0 -13
  20. package/examples/jsm/loaders/SVGLoader.js +4 -4
  21. package/examples/jsm/loaders/USDZLoader.js +3 -17
  22. package/examples/jsm/math/Octree.js +15 -4
  23. package/examples/jsm/misc/Timer.js +119 -0
  24. package/examples/jsm/misc/TubePainter.js +3 -6
  25. package/examples/jsm/modifiers/CurveModifier.js +20 -2
  26. package/examples/jsm/nodes/Nodes.js +11 -7
  27. package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
  28. package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
  29. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
  30. package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
  31. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
  32. package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
  33. package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
  34. package/examples/jsm/nodes/accessors/TextureNode.js +122 -36
  35. package/examples/jsm/nodes/code/CodeNode.js +3 -3
  36. package/examples/jsm/nodes/core/AttributeNode.js +7 -1
  37. package/examples/jsm/nodes/core/CacheNode.js +4 -1
  38. package/examples/jsm/nodes/core/ConstNode.js +1 -1
  39. package/examples/jsm/nodes/core/Node.js +6 -3
  40. package/examples/jsm/nodes/core/NodeBuilder.js +84 -27
  41. package/examples/jsm/nodes/core/NodeFrame.js +10 -8
  42. package/examples/jsm/nodes/core/NodeUniform.js +12 -0
  43. package/examples/jsm/nodes/core/NodeUtils.js +3 -7
  44. package/examples/jsm/nodes/core/OutputStructNode.js +3 -3
  45. package/examples/jsm/nodes/core/PropertyNode.js +17 -2
  46. package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
  47. package/examples/jsm/nodes/core/UniformGroup.js +13 -0
  48. package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
  49. package/examples/jsm/nodes/core/UniformNode.js +17 -0
  50. package/examples/jsm/nodes/core/VarNode.js +2 -0
  51. package/examples/jsm/nodes/core/VaryingNode.js +1 -7
  52. package/examples/jsm/nodes/display/BumpMapNode.js +1 -1
  53. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
  54. package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
  55. package/examples/jsm/nodes/display/PassNode.js +182 -0
  56. package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
  57. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
  58. package/examples/jsm/nodes/display/ViewportNode.js +5 -8
  59. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +1 -1
  60. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +52 -17
  61. package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -12
  62. package/examples/jsm/nodes/lighting/LightsNode.js +34 -32
  63. package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +1 -1
  64. package/examples/jsm/nodes/materials/Line2NodeMaterial.js +12 -12
  65. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
  66. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +1 -1
  67. package/examples/jsm/nodes/materials/NodeMaterial.js +66 -41
  68. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
  69. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  70. package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
  71. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
  72. package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
  73. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
  74. package/examples/jsm/nodes/math/MathNode.js +2 -0
  75. package/examples/jsm/nodes/math/OperatorNode.js +19 -6
  76. package/examples/jsm/nodes/shadernode/ShaderNode.js +32 -3
  77. package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
  78. package/examples/jsm/nodes/utils/RemapNode.js +2 -2
  79. package/examples/jsm/nodes/utils/SplitNode.js +8 -2
  80. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
  81. package/examples/jsm/objects/QuadMesh.js +60 -0
  82. package/examples/jsm/postprocessing/GTAOPass.js +572 -0
  83. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  84. package/examples/jsm/renderers/common/Animation.js +10 -21
  85. package/examples/jsm/renderers/common/Backend.js +19 -3
  86. package/examples/jsm/renderers/common/Background.js +20 -22
  87. package/examples/jsm/renderers/common/Bindings.js +30 -21
  88. package/examples/jsm/renderers/common/ChainMap.js +3 -3
  89. package/examples/jsm/renderers/common/Color4.js +37 -0
  90. package/examples/jsm/renderers/common/Geometries.js +4 -4
  91. package/examples/jsm/renderers/common/Info.js +12 -2
  92. package/examples/jsm/renderers/common/Pipelines.js +3 -51
  93. package/examples/jsm/renderers/common/PostProcessing.js +25 -0
  94. package/examples/jsm/renderers/common/RenderContext.js +1 -1
  95. package/examples/jsm/renderers/common/RenderContexts.js +1 -1
  96. package/examples/jsm/renderers/common/RenderObject.js +13 -1
  97. package/examples/jsm/renderers/common/RenderObjects.js +4 -2
  98. package/examples/jsm/renderers/common/Renderer.js +137 -37
  99. package/examples/jsm/renderers/common/StorageTexture.js +1 -0
  100. package/examples/jsm/renderers/common/Textures.js +4 -1
  101. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
  102. package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
  103. package/examples/jsm/renderers/common/nodes/Nodes.js +74 -7
  104. package/examples/jsm/renderers/webgl/WebGLBackend.js +91 -33
  105. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +100 -31
  106. package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +57 -5
  107. package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
  108. package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
  109. package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
  110. package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
  111. package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
  112. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
  113. package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
  114. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +186 -137
  115. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
  116. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +209 -90
  117. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
  118. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
  119. package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
  120. package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
  121. package/examples/jsm/shaders/FXAAShader.js +133 -133
  122. package/examples/jsm/shaders/GTAOShader.js +424 -0
  123. package/examples/jsm/shaders/OutputShader.js +4 -0
  124. package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
  125. package/examples/jsm/shaders/SAOShader.js +2 -3
  126. package/examples/jsm/shaders/SSAOShader.js +2 -3
  127. package/examples/jsm/transpiler/AST.js +40 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +50 -8
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +4 -4
  130. package/examples/jsm/transpiler/TSLEncoder.js +124 -20
  131. package/examples/jsm/utils/SortUtils.js +158 -0
  132. package/examples/jsm/utils/TextureUtils.js +33 -21
  133. package/examples/jsm/webxr/ARButton.js +14 -0
  134. package/examples/jsm/webxr/VRButton.js +23 -8
  135. package/examples/jsm/webxr/XRButton.js +25 -11
  136. package/package.json +5 -6
  137. package/src/Three.js +1 -0
  138. package/src/constants.js +2 -1
  139. package/src/core/BufferAttribute.js +21 -2
  140. package/src/core/InterleavedBuffer.js +21 -1
  141. package/src/core/Object3D.js +60 -12
  142. package/src/core/UniformsGroup.js +7 -1
  143. package/src/extras/curves/LineCurve3.js +4 -0
  144. package/src/loaders/AudioLoader.js +1 -1
  145. package/src/loaders/BufferGeometryLoader.js +0 -7
  146. package/src/loaders/ImageBitmapLoader.js +25 -1
  147. package/src/loaders/ObjectLoader.js +49 -0
  148. package/src/materials/ShaderMaterial.js +2 -1
  149. package/src/math/ColorManagement.js +0 -16
  150. package/src/math/Quaternion.js +5 -4
  151. package/src/math/Sphere.js +2 -0
  152. package/src/math/Triangle.js +17 -5
  153. package/src/objects/BatchedMesh.js +1020 -0
  154. package/src/objects/Skeleton.js +1 -3
  155. package/src/renderers/WebGL3DRenderTarget.js +2 -2
  156. package/src/renderers/WebGLArrayRenderTarget.js +2 -2
  157. package/src/renderers/WebGLRenderer.js +23 -18
  158. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
  159. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  160. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
  161. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
  162. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
  163. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
  164. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
  165. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
  166. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
  167. package/src/renderers/shaders/ShaderChunk.js +4 -0
  168. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  169. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  170. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
  171. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
  172. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
  173. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
  174. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
  175. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -0
  176. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
  177. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
  178. package/src/renderers/webgl/WebGLAttributes.js +39 -5
  179. package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
  180. package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
  181. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  182. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
  183. package/src/renderers/webgl/WebGLLights.js +11 -2
  184. package/src/renderers/webgl/WebGLProgram.js +20 -1
  185. package/src/renderers/webgl/WebGLPrograms.js +5 -0
  186. package/src/renderers/webgl/WebGLShadowMap.js +35 -0
  187. package/src/renderers/webgl/WebGLTextures.js +7 -11
  188. package/src/renderers/webgl/WebGLUniforms.js +11 -1
  189. package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
  190. package/src/renderers/webxr/WebXRManager.js +16 -0
  191. 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 { DepthTexture, DepthFormat, DepthStencilFormat, UnsignedInt248Type, UnsignedIntType, WebGPUCoordinateSystem } from 'three';
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._getDepthBufferGPU( renderContext ).createView();
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( renderContext, color, depth, stencil ) {
498
+ clear( color, depth, stencil, renderTargetData = null ) {
496
499
 
497
500
  const device = this.device;
498
- const renderContextData = this.get( renderContext );
501
+ const renderer = this.renderer;
499
502
 
500
- const { descriptor } = renderContextData;
503
+ const colorAttachments = [];
501
504
 
502
- depth = depth && renderContext.depth;
503
- stencil = stencil && renderContext.stencil;
505
+ let depthStencilAttachment;
506
+ let clearValue;
504
507
 
505
- const colorAttachment = descriptor.colorAttachments[ 0 ];
506
- const depthStencilAttachment = descriptor.depthStencilAttachment;
508
+ let supportsDepth;
509
+ let supportsStencil;
507
510
 
508
- const antialias = this.parameters.antialias;
511
+ if ( color ) {
509
512
 
510
- // @TODO: Include render target in clear operation.
511
- if ( antialias === true ) {
513
+ const clearColor = this.getClearColor();
512
514
 
513
- colorAttachment.view = this.colorBuffer.createView();
514
- colorAttachment.resolveTarget = this.context.getCurrentTexture().createView();
515
+ clearValue = { r: clearColor.r, g: clearColor.g, b: clearColor.b, a: clearColor.a };
515
516
 
516
- } else {
517
+ }
517
518
 
518
- colorAttachment.view = this.context.getCurrentTexture().createView();
519
- colorAttachment.resolveTarget = undefined;
519
+ if ( renderTargetData === null ) {
520
520
 
521
- }
521
+ supportsDepth = renderer.depth;
522
+ supportsStencil = renderer.stencil;
522
523
 
523
- descriptor.depthStencilAttachment.view = this._getDepthBufferGPU( renderContext ).createView();
524
+ depth = depth && supportsDepth;
525
+ stencil = stencil && supportsStencil;
524
526
 
525
- if ( color ) {
527
+ if ( color ) {
526
528
 
527
- colorAttachment.loadOp = GPULoadOp.Clear;
528
- colorAttachment.clearValue = renderContext.clearColorValue;
529
+ const antialias = this.parameters.antialias;
529
530
 
530
- } else {
531
+ const colorAttachment = {};
531
532
 
532
- colorAttachment.loadOp = GPULoadOp.Load;
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
- if ( depth ) {
548
+ colorAttachments.push( colorAttachment );
537
549
 
538
- depthStencilAttachment.depthLoadOp = GPULoadOp.Clear;
539
- depthStencilAttachment.depthClearValue = renderContext.clearDepthValue;
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
- depthStencilAttachment.depthLoadOp = GPULoadOp.Load;
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
- if ( stencil ) {
613
+ //
548
614
 
549
- depthStencilAttachment.stencilLoadOp = GPULoadOp.Clear;
550
- depthStencilAttachment.stencilClearValue = renderContext.clearStencilValue;
615
+ if ( depthStencilAttachment !== undefined ) {
551
616
 
552
- } else {
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
- depthStencilAttachment.stencilLoadOp = GPULoadOp.Load;
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
- renderContextData.encoder = device.createCommandEncoder( {} );
559
- renderContextData.currentPass = renderContextData.encoder.beginRenderPass( descriptor );
647
+ //
560
648
 
561
- renderContextData.currentPass.end();
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( [ renderContextData.encoder.finish() ] );
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
- needsUpdate( renderObject ) {
828
+ needsRenderUpdate( renderObject ) {
735
829
 
736
- const renderObjectGPU = this.get( renderObject );
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 ( renderObjectGPU.sampleCount !== sampleCount || renderObjectGPU.colorSpace !== colorSpace ||
751
- renderObjectGPU.colorFormat !== colorFormat || renderObjectGPU.depthStencilFormat !== depthStencilFormat ||
752
- renderObjectGPU.primitiveTopology !== primitiveTopology ) {
753
-
754
- renderObjectGPU.sampleCount = sampleCount;
755
- renderObjectGPU.colorSpace = colorSpace;
756
- renderObjectGPU.colorFormat = colorFormat;
757
- renderObjectGPU.depthStencilFormat = depthStencilFormat;
758
- renderObjectGPU.primitiveTopology = primitiveTopology;
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
- getCacheKey( renderObject ) {
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._configureContext();
931
- this._setupColorBuffer();
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._getDepthBufferGPU( renderContext );
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;
@@ -37,7 +37,7 @@ class WebGPURenderer extends Renderer {
37
37
  const backend = new BackendClass( parameters );
38
38
 
39
39
  //super( new Proxy( backend, debugHandler ) );
40
- super( backend );
40
+ super( backend, parameters );
41
41
 
42
42
  this.isWebGPURenderer = true;
43
43