@plastic-software/three 0.182.0 → 0.183.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/LICENSE +1 -1
- package/build/three.cjs +11520 -10877
- package/build/three.core.js +11732 -11340
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +509 -262
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +7 -11
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +3072 -2607
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +3071 -2607
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/OrbitControls.js +103 -0
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +1 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +21 -5
- package/examples/jsm/inspector/tabs/Console.js +39 -5
- package/examples/jsm/inspector/tabs/Parameters.js +16 -0
- package/examples/jsm/inspector/ui/Style.js +25 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +5 -5
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +3 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +182 -30
- package/examples/jsm/loaders/VRMLLoader.js +77 -0
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +114 -7
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/JoltPhysics.js +7 -5
- package/examples/jsm/physics/RapierPhysics.js +6 -4
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/SVGRenderer.js +2 -2
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +456 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +5 -5
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +2 -2
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +5 -5
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +2 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -7
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +9 -12
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/package.json +11 -19
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +5 -9
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/KeyframeTrack.js +46 -7
- package/src/animation/PropertyMixer.js +4 -4
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +30 -1
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +4 -8
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +0 -24
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/LightShadow.js +15 -3
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/ObjectLoader.js +18 -1
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/nodes/Line2NodeMaterial.js +5 -5
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -0
- package/src/materials/nodes/NodeMaterial.js +15 -24
- package/src/materials/nodes/manager/NodeMaterialObserver.js +9 -3
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +35 -26
- package/src/math/Quaternion.js +3 -29
- package/src/math/Vector3.js +3 -3
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +2 -5
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/InstanceNode.js +105 -40
- package/src/nodes/accessors/Normal.js +9 -9
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +12 -24
- package/src/nodes/accessors/StorageBufferNode.js +0 -19
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +6 -34
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +2 -0
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +115 -40
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeUtils.js +5 -3
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +2 -1
- package/src/nodes/core/StackNode.js +9 -8
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +15 -0
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +1 -1
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +21 -2
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/PhysicalLightingModel.js +25 -3
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/PointShadowNode.js +24 -12
- package/src/nodes/lighting/ShadowFilterNode.js +15 -43
- package/src/nodes/lighting/ShadowNode.js +54 -32
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +13 -10
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +4 -2
- package/src/objects/BatchedMesh.js +22 -12
- package/src/objects/InstancedMesh.js +11 -0
- package/src/renderers/WebGLRenderer.js +34 -60
- package/src/renderers/common/Backend.js +21 -0
- package/src/renderers/common/Background.js +7 -4
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Bindings.js +20 -5
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +17 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -56
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +2 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +207 -40
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +16 -0
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +60 -0
- package/src/renderers/common/XRManager.js +2 -2
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +23 -1
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +55 -24
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +4 -2
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +2 -2
- package/src/renderers/webgl/WebGLPrograms.js +10 -4
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +5 -4
- package/src/renderers/webgl/WebGLState.js +12 -17
- package/src/renderers/webgl-fallback/WebGLBackend.js +71 -7
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +98 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +168 -7
- package/src/renderers/webgpu/WebGPUBackend.js +58 -9
- package/src/renderers/webgpu/WebGPURenderer.js +1 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +257 -45
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +8 -19
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -31
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +25 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +10 -6
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +246 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -433
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import DataMap from '../../common/DataMap.js';
|
|
2
|
-
import {
|
|
2
|
+
import { GPUFilterMode, GPULoadOp, GPUStoreOp } from './WebGPUConstants.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A WebGPU backend utility module used by {@link WebGPUTextureUtils}.
|
|
@@ -24,65 +24,78 @@ class WebGPUTexturePassUtils extends DataMap {
|
|
|
24
24
|
*/
|
|
25
25
|
this.device = device;
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const mipmapSource = `
|
|
28
28
|
struct VarysStruct {
|
|
29
|
-
@builtin( position ) Position:
|
|
30
|
-
@location( 0 ) vTex :
|
|
29
|
+
@builtin( position ) Position: vec4f,
|
|
30
|
+
@location( 0 ) vTex : vec2f,
|
|
31
|
+
@location( 1 ) @interpolate(flat, either) vBaseArrayLayer: u32,
|
|
31
32
|
};
|
|
32
33
|
|
|
34
|
+
@group( 0 ) @binding ( 2 )
|
|
35
|
+
var<uniform> flipY: u32;
|
|
36
|
+
|
|
33
37
|
@vertex
|
|
34
|
-
fn
|
|
38
|
+
fn mainVS(
|
|
39
|
+
@builtin( vertex_index ) vertexIndex : u32,
|
|
40
|
+
@builtin( instance_index ) instanceIndex : u32 ) -> VarysStruct {
|
|
35
41
|
|
|
36
42
|
var Varys : VarysStruct;
|
|
37
43
|
|
|
38
|
-
var pos = array
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
vec2<f32>( 1.0, -1.0 )
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
var tex = array< vec2<f32>, 4 >(
|
|
46
|
-
vec2<f32>( 0.0, 0.0 ),
|
|
47
|
-
vec2<f32>( 1.0, 0.0 ),
|
|
48
|
-
vec2<f32>( 0.0, 1.0 ),
|
|
49
|
-
vec2<f32>( 1.0, 1.0 )
|
|
44
|
+
var pos = array(
|
|
45
|
+
vec2f( -1, -1 ),
|
|
46
|
+
vec2f( -1, 3 ),
|
|
47
|
+
vec2f( 3, -1 ),
|
|
50
48
|
);
|
|
51
49
|
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
let p = pos[ vertexIndex ];
|
|
51
|
+
let mult = select( vec2f( 0.5, -0.5 ), vec2f( 0.5, 0.5 ), flipY != 0 );
|
|
52
|
+
Varys.vTex = p * mult + vec2f( 0.5 );
|
|
53
|
+
Varys.Position = vec4f( p, 0, 1 );
|
|
54
|
+
Varys.vBaseArrayLayer = instanceIndex;
|
|
54
55
|
|
|
55
56
|
return Varys;
|
|
56
57
|
|
|
57
58
|
}
|
|
58
|
-
`;
|
|
59
59
|
|
|
60
|
-
const mipmapFragmentSource = `
|
|
61
60
|
@group( 0 ) @binding( 0 )
|
|
62
61
|
var imgSampler : sampler;
|
|
63
62
|
|
|
64
63
|
@group( 0 ) @binding( 1 )
|
|
65
|
-
var
|
|
64
|
+
var img2d : texture_2d<f32>;
|
|
66
65
|
|
|
67
66
|
@fragment
|
|
68
|
-
fn
|
|
67
|
+
fn main_2d( Varys: VarysStruct ) -> @location( 0 ) vec4<f32> {
|
|
69
68
|
|
|
70
|
-
return textureSample(
|
|
69
|
+
return textureSample( img2d, imgSampler, Varys.vTex );
|
|
71
70
|
|
|
72
71
|
}
|
|
73
|
-
`;
|
|
74
72
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
@group( 0 ) @binding( 1 )
|
|
74
|
+
var img2dArray : texture_2d_array<f32>;
|
|
75
|
+
|
|
76
|
+
@fragment
|
|
77
|
+
fn main_2d_array( Varys: VarysStruct ) -> @location( 0 ) vec4<f32> {
|
|
78
|
+
|
|
79
|
+
return textureSample( img2dArray, imgSampler, Varys.vTex, Varys.vBaseArrayLayer );
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const faceMat = array(
|
|
84
|
+
mat3x3f( 0, 0, -2, 0, -2, 0, 1, 1, 1 ), // pos-x
|
|
85
|
+
mat3x3f( 0, 0, 2, 0, -2, 0, -1, 1, -1 ), // neg-x
|
|
86
|
+
mat3x3f( 2, 0, 0, 0, 0, 2, -1, 1, -1 ), // pos-y
|
|
87
|
+
mat3x3f( 2, 0, 0, 0, 0, -2, -1, -1, 1 ), // neg-y
|
|
88
|
+
mat3x3f( 2, 0, 0, 0, -2, 0, -1, 1, 1 ), // pos-z
|
|
89
|
+
mat3x3f( -2, 0, 0, 0, -2, 0, 1, 1, -1 ), // neg-z
|
|
90
|
+
);
|
|
78
91
|
|
|
79
92
|
@group( 0 ) @binding( 1 )
|
|
80
|
-
var
|
|
93
|
+
var imgCube : texture_cube<f32>;
|
|
81
94
|
|
|
82
95
|
@fragment
|
|
83
|
-
fn
|
|
96
|
+
fn main_cube( Varys: VarysStruct ) -> @location( 0 ) vec4<f32> {
|
|
84
97
|
|
|
85
|
-
return textureSample(
|
|
98
|
+
return textureSample( imgCube, imgSampler, faceMat[ Varys.vBaseArrayLayer ] * vec3f( fract( Varys.vTex ), 1 ) );
|
|
86
99
|
|
|
87
100
|
}
|
|
88
101
|
`;
|
|
@@ -102,49 +115,40 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
102
115
|
this.flipYSampler = device.createSampler( { minFilter: GPUFilterMode.Nearest } ); //@TODO?: Consider using textureLoad()
|
|
103
116
|
|
|
104
117
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* @type {Object<string,GPURenderPipeline>}
|
|
118
|
+
* flip uniform buffer
|
|
119
|
+
* @type {GPUBuffer}
|
|
109
120
|
*/
|
|
110
|
-
this.
|
|
121
|
+
this.flipUniformBuffer = device.createBuffer( {
|
|
122
|
+
size: 4,
|
|
123
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
124
|
+
} );
|
|
125
|
+
device.queue.writeBuffer( this.flipUniformBuffer, 0, new Uint32Array( [ 1 ] ) );
|
|
111
126
|
|
|
112
127
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* @type {Object<string,GPURenderPipeline>}
|
|
128
|
+
* no flip uniform buffer
|
|
129
|
+
* @type {GPUBuffer}
|
|
117
130
|
*/
|
|
118
|
-
this.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
* The mipmap vertex shader module.
|
|
122
|
-
*
|
|
123
|
-
* @type {GPUShaderModule}
|
|
124
|
-
*/
|
|
125
|
-
this.mipmapVertexShaderModule = device.createShaderModule( {
|
|
126
|
-
label: 'mipmapVertex',
|
|
127
|
-
code: mipmapVertexSource
|
|
131
|
+
this.noFlipUniformBuffer = device.createBuffer( {
|
|
132
|
+
size: 4,
|
|
133
|
+
usage: GPUBufferUsage.UNIFORM
|
|
128
134
|
} );
|
|
129
135
|
|
|
130
136
|
/**
|
|
131
|
-
*
|
|
137
|
+
* A cache for GPU render pipelines used for copy/transfer passes.
|
|
138
|
+
* Every texture format and textureBindingViewDimension combo requires a unique pipeline.
|
|
132
139
|
*
|
|
133
|
-
* @type {
|
|
140
|
+
* @type {Object<string,GPURenderPipeline>}
|
|
134
141
|
*/
|
|
135
|
-
this.
|
|
136
|
-
label: 'mipmapFragment',
|
|
137
|
-
code: mipmapFragmentSource
|
|
138
|
-
} );
|
|
142
|
+
this.transferPipelines = {};
|
|
139
143
|
|
|
140
144
|
/**
|
|
141
|
-
* The
|
|
145
|
+
* The mipmap shader module.
|
|
142
146
|
*
|
|
143
147
|
* @type {GPUShaderModule}
|
|
144
148
|
*/
|
|
145
|
-
this.
|
|
146
|
-
label: '
|
|
147
|
-
code:
|
|
149
|
+
this.mipmapShaderModule = device.createShaderModule( {
|
|
150
|
+
label: 'mipmap',
|
|
151
|
+
code: mipmapSource
|
|
148
152
|
} );
|
|
149
153
|
|
|
150
154
|
}
|
|
@@ -154,72 +158,31 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
154
158
|
* requires a unique render pipeline for each texture format.
|
|
155
159
|
*
|
|
156
160
|
* @param {string} format - The GPU texture format
|
|
161
|
+
* @param {string?} textureBindingViewDimension - The GPU texture binding view dimension
|
|
157
162
|
* @return {GPURenderPipeline} The GPU render pipeline.
|
|
158
163
|
*/
|
|
159
|
-
getTransferPipeline( format ) {
|
|
164
|
+
getTransferPipeline( format, textureBindingViewDimension ) {
|
|
160
165
|
|
|
161
|
-
|
|
166
|
+
textureBindingViewDimension = textureBindingViewDimension || '2d-array';
|
|
167
|
+
const key = `${ format }-${ textureBindingViewDimension }`;
|
|
168
|
+
let pipeline = this.transferPipelines[ key ];
|
|
162
169
|
|
|
163
170
|
if ( pipeline === undefined ) {
|
|
164
171
|
|
|
165
172
|
pipeline = this.device.createRenderPipeline( {
|
|
166
|
-
label: `mipmap-${ format }`,
|
|
173
|
+
label: `mipmap-${ format }-${ textureBindingViewDimension }`,
|
|
167
174
|
vertex: {
|
|
168
|
-
module: this.
|
|
169
|
-
entryPoint: 'main'
|
|
175
|
+
module: this.mipmapShaderModule,
|
|
170
176
|
},
|
|
171
177
|
fragment: {
|
|
172
|
-
module: this.
|
|
173
|
-
entryPoint: '
|
|
178
|
+
module: this.mipmapShaderModule,
|
|
179
|
+
entryPoint: `main_${ textureBindingViewDimension.replace( '-', '_' ) }`,
|
|
174
180
|
targets: [ { format } ]
|
|
175
181
|
},
|
|
176
|
-
primitive: {
|
|
177
|
-
topology: GPUPrimitiveTopology.TriangleStrip,
|
|
178
|
-
stripIndexFormat: GPUIndexFormat.Uint32
|
|
179
|
-
},
|
|
180
182
|
layout: 'auto'
|
|
181
183
|
} );
|
|
182
184
|
|
|
183
|
-
this.transferPipelines[
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return pipeline;
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Returns a render pipeline for the flipY render pass. The pass
|
|
193
|
-
* requires a unique render pipeline for each texture format.
|
|
194
|
-
*
|
|
195
|
-
* @param {string} format - The GPU texture format
|
|
196
|
-
* @return {GPURenderPipeline} The GPU render pipeline.
|
|
197
|
-
*/
|
|
198
|
-
getFlipYPipeline( format ) {
|
|
199
|
-
|
|
200
|
-
let pipeline = this.flipYPipelines[ format ];
|
|
201
|
-
|
|
202
|
-
if ( pipeline === undefined ) {
|
|
203
|
-
|
|
204
|
-
pipeline = this.device.createRenderPipeline( {
|
|
205
|
-
label: `flipY-${ format }`,
|
|
206
|
-
vertex: {
|
|
207
|
-
module: this.mipmapVertexShaderModule,
|
|
208
|
-
entryPoint: 'main'
|
|
209
|
-
},
|
|
210
|
-
fragment: {
|
|
211
|
-
module: this.flipYFragmentShaderModule,
|
|
212
|
-
entryPoint: 'main',
|
|
213
|
-
targets: [ { format } ]
|
|
214
|
-
},
|
|
215
|
-
primitive: {
|
|
216
|
-
topology: GPUPrimitiveTopology.TriangleStrip,
|
|
217
|
-
stripIndexFormat: GPUIndexFormat.Uint32
|
|
218
|
-
},
|
|
219
|
-
layout: 'auto'
|
|
220
|
-
} );
|
|
221
|
-
|
|
222
|
-
this.flipYPipelines[ format ] = pipeline;
|
|
185
|
+
this.transferPipelines[ key ] = pipeline;
|
|
223
186
|
|
|
224
187
|
}
|
|
225
188
|
|
|
@@ -239,32 +202,18 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
239
202
|
const format = textureGPUDescriptor.format;
|
|
240
203
|
const { width, height } = textureGPUDescriptor.size;
|
|
241
204
|
|
|
242
|
-
const transferPipeline = this.getTransferPipeline( format );
|
|
243
|
-
const flipYPipeline = this.getFlipYPipeline( format );
|
|
244
|
-
|
|
245
205
|
const tempTexture = this.device.createTexture( {
|
|
246
|
-
size: { width, height
|
|
206
|
+
size: { width, height },
|
|
247
207
|
format,
|
|
248
208
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING
|
|
249
209
|
} );
|
|
250
210
|
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
mipLevelCount: 1,
|
|
254
|
-
dimension: GPUTextureViewDimension.TwoD,
|
|
255
|
-
baseArrayLayer
|
|
256
|
-
} );
|
|
257
|
-
|
|
258
|
-
const dstView = tempTexture.createView( {
|
|
259
|
-
baseMipLevel: 0,
|
|
260
|
-
mipLevelCount: 1,
|
|
261
|
-
dimension: GPUTextureViewDimension.TwoD,
|
|
262
|
-
baseArrayLayer: 0
|
|
263
|
-
} );
|
|
211
|
+
const copyTransferPipeline = this.getTransferPipeline( format, textureGPU.textureBindingViewDimension );
|
|
212
|
+
const flipTransferPipeline = this.getTransferPipeline( format, tempTexture.textureBindingViewDimension );
|
|
264
213
|
|
|
265
214
|
const commandEncoder = this.device.createCommandEncoder( {} );
|
|
266
215
|
|
|
267
|
-
const pass = ( pipeline,
|
|
216
|
+
const pass = ( pipeline, sourceTexture, sourceArrayLayer, destinationTexture, destinationArrayLayer, flipY ) => {
|
|
268
217
|
|
|
269
218
|
const bindGroupLayout = pipeline.getBindGroupLayout( 0 ); // @TODO: Consider making this static.
|
|
270
219
|
|
|
@@ -275,28 +224,40 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
275
224
|
resource: this.flipYSampler
|
|
276
225
|
}, {
|
|
277
226
|
binding: 1,
|
|
278
|
-
resource:
|
|
227
|
+
resource: sourceTexture.createView( {
|
|
228
|
+
dimension: sourceTexture.textureBindingViewDimension || '2d-array',
|
|
229
|
+
baseMipLevel: 0,
|
|
230
|
+
mipLevelCount: 1,
|
|
231
|
+
} ),
|
|
232
|
+
}, {
|
|
233
|
+
binding: 2,
|
|
234
|
+
resource: { buffer: flipY ? this.flipUniformBuffer : this.noFlipUniformBuffer }
|
|
279
235
|
} ]
|
|
280
236
|
} );
|
|
281
237
|
|
|
282
238
|
const passEncoder = commandEncoder.beginRenderPass( {
|
|
283
239
|
colorAttachments: [ {
|
|
284
|
-
view:
|
|
240
|
+
view: destinationTexture.createView( {
|
|
241
|
+
dimension: '2d',
|
|
242
|
+
baseMipLevel: 0,
|
|
243
|
+
mipLevelCount: 1,
|
|
244
|
+
baseArrayLayer: destinationArrayLayer,
|
|
245
|
+
arrayLayerCount: 1,
|
|
246
|
+
} ),
|
|
285
247
|
loadOp: GPULoadOp.Clear,
|
|
286
248
|
storeOp: GPUStoreOp.Store,
|
|
287
|
-
clearValue: [ 0, 0, 0, 0 ]
|
|
288
249
|
} ]
|
|
289
250
|
} );
|
|
290
251
|
|
|
291
252
|
passEncoder.setPipeline( pipeline );
|
|
292
253
|
passEncoder.setBindGroup( 0, bindGroup );
|
|
293
|
-
passEncoder.draw(
|
|
254
|
+
passEncoder.draw( 3, 1, 0, sourceArrayLayer );
|
|
294
255
|
passEncoder.end();
|
|
295
256
|
|
|
296
257
|
};
|
|
297
258
|
|
|
298
|
-
pass(
|
|
299
|
-
pass(
|
|
259
|
+
pass( copyTransferPipeline, textureGPU, baseArrayLayer, tempTexture, 0, false );
|
|
260
|
+
pass( flipTransferPipeline, tempTexture, 0, textureGPU, baseArrayLayer, true );
|
|
300
261
|
|
|
301
262
|
this.device.queue.submit( [ commandEncoder.finish() ] );
|
|
302
263
|
|
|
@@ -308,21 +269,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
308
269
|
* Generates mipmaps for the given GPU texture.
|
|
309
270
|
*
|
|
310
271
|
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
311
|
-
* @param {Object} textureGPUDescriptor - The texture descriptor.
|
|
312
|
-
* @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
313
272
|
* @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
|
|
314
273
|
*/
|
|
315
|
-
generateMipmaps( textureGPU,
|
|
274
|
+
generateMipmaps( textureGPU, encoder = null ) {
|
|
316
275
|
|
|
317
276
|
const textureData = this.get( textureGPU );
|
|
318
277
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
textureData.layers = [];
|
|
322
|
-
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
const passes = textureData.layers[ baseArrayLayer ] || this._mipmapCreateBundles( textureGPU, textureGPUDescriptor, baseArrayLayer );
|
|
278
|
+
const passes = textureData.layers || this._mipmapCreateBundles( textureGPU );
|
|
326
279
|
|
|
327
280
|
const commandEncoder = encoder || this.device.createCommandEncoder( { label: 'mipmapEncoder' } );
|
|
328
281
|
|
|
@@ -330,7 +283,7 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
330
283
|
|
|
331
284
|
if ( encoder === null ) this.device.queue.submit( [ commandEncoder.finish() ] );
|
|
332
285
|
|
|
333
|
-
textureData.layers
|
|
286
|
+
textureData.layers = passes;
|
|
334
287
|
|
|
335
288
|
}
|
|
336
289
|
|
|
@@ -339,68 +292,67 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
|
|
|
339
292
|
* are managed as render bundles to improve performance.
|
|
340
293
|
*
|
|
341
294
|
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
342
|
-
* @param {Object} textureGPUDescriptor - The texture descriptor.
|
|
343
|
-
* @param {number} baseArrayLayer - The index of the first array layer accessible to the texture view.
|
|
344
295
|
* @return {Array<Object>} An array of render bundles.
|
|
345
296
|
*/
|
|
346
|
-
_mipmapCreateBundles( textureGPU
|
|
297
|
+
_mipmapCreateBundles( textureGPU ) {
|
|
347
298
|
|
|
348
|
-
const
|
|
299
|
+
const textureBindingViewDimension = textureGPU.textureBindingViewDimension || '2d-array';
|
|
300
|
+
const pipeline = this.getTransferPipeline( textureGPU.format, textureBindingViewDimension );
|
|
349
301
|
|
|
350
302
|
const bindGroupLayout = pipeline.getBindGroupLayout( 0 ); // @TODO: Consider making this static.
|
|
351
303
|
|
|
352
|
-
let srcView = textureGPU.createView( {
|
|
353
|
-
baseMipLevel: 0,
|
|
354
|
-
mipLevelCount: 1,
|
|
355
|
-
dimension: GPUTextureViewDimension.TwoD,
|
|
356
|
-
baseArrayLayer
|
|
357
|
-
} );
|
|
358
|
-
|
|
359
304
|
const passes = [];
|
|
360
305
|
|
|
361
|
-
for ( let
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
306
|
+
for ( let baseMipLevel = 1; baseMipLevel < textureGPU.mipLevelCount; baseMipLevel ++ ) {
|
|
307
|
+
|
|
308
|
+
for ( let baseArrayLayer = 0; baseArrayLayer < textureGPU.depthOrArrayLayers; baseArrayLayer ++ ) {
|
|
309
|
+
|
|
310
|
+
const bindGroup = this.device.createBindGroup( {
|
|
311
|
+
layout: bindGroupLayout,
|
|
312
|
+
entries: [ {
|
|
313
|
+
binding: 0,
|
|
314
|
+
resource: this.mipmapSampler
|
|
315
|
+
}, {
|
|
316
|
+
binding: 1,
|
|
317
|
+
resource: textureGPU.createView( {
|
|
318
|
+
dimension: textureBindingViewDimension,
|
|
319
|
+
baseMipLevel: baseMipLevel - 1,
|
|
320
|
+
mipLevelCount: 1,
|
|
321
|
+
} ),
|
|
322
|
+
}, {
|
|
323
|
+
binding: 2,
|
|
324
|
+
resource: { buffer: this.noFlipUniformBuffer }
|
|
325
|
+
} ]
|
|
326
|
+
} );
|
|
327
|
+
|
|
328
|
+
const passDescriptor = {
|
|
329
|
+
colorAttachments: [ {
|
|
330
|
+
view: textureGPU.createView( {
|
|
331
|
+
dimension: '2d',
|
|
332
|
+
baseMipLevel,
|
|
333
|
+
mipLevelCount: 1,
|
|
334
|
+
baseArrayLayer,
|
|
335
|
+
arrayLayerCount: 1,
|
|
336
|
+
} ),
|
|
337
|
+
loadOp: GPULoadOp.Clear,
|
|
338
|
+
storeOp: GPUStoreOp.Store,
|
|
339
|
+
} ]
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
const passEncoder = this.device.createRenderBundleEncoder( {
|
|
343
|
+
colorFormats: [ textureGPU.format ]
|
|
344
|
+
} );
|
|
345
|
+
|
|
346
|
+
passEncoder.setPipeline( pipeline );
|
|
347
|
+
passEncoder.setBindGroup( 0, bindGroup );
|
|
348
|
+
passEncoder.draw( 3, 1, 0, baseArrayLayer );
|
|
349
|
+
|
|
350
|
+
passes.push( {
|
|
351
|
+
renderBundles: [ passEncoder.finish() ],
|
|
352
|
+
passDescriptor
|
|
353
|
+
} );
|
|
354
|
+
|
|
355
|
+
}
|
|
404
356
|
|
|
405
357
|
}
|
|
406
358
|
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
|
|
17
17
|
UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format,
|
|
18
18
|
R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
|
|
19
|
+
Compatibility
|
|
19
20
|
} from '../../../constants.js';
|
|
20
21
|
import { CubeTexture } from '../../../textures/CubeTexture.js';
|
|
21
22
|
import { Texture } from '../../../textures/Texture.js';
|
|
@@ -124,6 +125,15 @@ class WebGPUTextureUtils {
|
|
|
124
125
|
maxAnisotropy: 1
|
|
125
126
|
};
|
|
126
127
|
|
|
128
|
+
// Depth textures without compare function must use non-filtering (nearest) sampling
|
|
129
|
+
if ( texture.isDepthTexture && texture.compareFunction === null ) {
|
|
130
|
+
|
|
131
|
+
samplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;
|
|
132
|
+
samplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;
|
|
133
|
+
samplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
127
137
|
// anisotropy can only be used when all filter modes are set to linear.
|
|
128
138
|
|
|
129
139
|
if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
|
|
@@ -132,7 +142,7 @@ class WebGPUTextureUtils {
|
|
|
132
142
|
|
|
133
143
|
}
|
|
134
144
|
|
|
135
|
-
if ( texture.isDepthTexture && texture.compareFunction !== null ) {
|
|
145
|
+
if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
136
146
|
|
|
137
147
|
samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
|
|
138
148
|
|
|
@@ -302,7 +312,17 @@ class WebGPUTextureUtils {
|
|
|
302
312
|
|
|
303
313
|
}
|
|
304
314
|
|
|
305
|
-
|
|
315
|
+
try {
|
|
316
|
+
|
|
317
|
+
textureData.texture = backend.device.createTexture( textureDescriptorGPU );
|
|
318
|
+
|
|
319
|
+
} catch ( e ) {
|
|
320
|
+
|
|
321
|
+
warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
|
|
322
|
+
this.createDefaultTexture( texture );
|
|
323
|
+
return;
|
|
324
|
+
|
|
325
|
+
}
|
|
306
326
|
|
|
307
327
|
if ( isMSAA ) {
|
|
308
328
|
|
|
@@ -351,25 +371,7 @@ class WebGPUTextureUtils {
|
|
|
351
371
|
|
|
352
372
|
const textureData = this.backend.get( texture );
|
|
353
373
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
for ( let i = 0; i < 6; i ++ ) {
|
|
357
|
-
|
|
358
|
-
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
|
|
359
|
-
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
} else {
|
|
363
|
-
|
|
364
|
-
const depth = texture.image.depth || 1;
|
|
365
|
-
|
|
366
|
-
for ( let i = 0; i < depth; i ++ ) {
|
|
367
|
-
|
|
368
|
-
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
|
|
369
|
-
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
}
|
|
374
|
+
this._generateMipmaps( textureData.texture, encoder );
|
|
373
375
|
|
|
374
376
|
}
|
|
375
377
|
|
|
@@ -820,13 +822,11 @@ class WebGPUTextureUtils {
|
|
|
820
822
|
*
|
|
821
823
|
* @private
|
|
822
824
|
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
823
|
-
* @param {Object} textureDescriptorGPU - The texture descriptor.
|
|
824
|
-
* @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
825
825
|
* @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
|
|
826
826
|
*/
|
|
827
|
-
_generateMipmaps( textureGPU,
|
|
827
|
+
_generateMipmaps( textureGPU, encoder = null ) {
|
|
828
828
|
|
|
829
|
-
this._getPassUtils().generateMipmaps( textureGPU,
|
|
829
|
+
this._getPassUtils().generateMipmaps( textureGPU, encoder );
|
|
830
830
|
|
|
831
831
|
}
|
|
832
832
|
|
|
@@ -34,17 +34,21 @@ class WebGPUUtils {
|
|
|
34
34
|
|
|
35
35
|
let format;
|
|
36
36
|
|
|
37
|
-
if ( renderContext.
|
|
37
|
+
if ( renderContext.depth ) {
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
if ( renderContext.depthTexture !== null ) {
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
format = this.getTextureFormatGPU( renderContext.depthTexture );
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
} else if ( renderContext.stencil ) {
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
format = GPUTextureFormat.Depth24PlusStencil8;
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
} else {
|
|
48
|
+
|
|
49
|
+
format = GPUTextureFormat.Depth24Plus;
|
|
50
|
+
|
|
51
|
+
}
|
|
48
52
|
|
|
49
53
|
}
|
|
50
54
|
|
|
@@ -749,8 +749,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
749
749
|
|
|
750
750
|
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
751
751
|
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
752
|
-
cameraL.layers.mask = cameraXR.layers.mask &
|
|
753
|
-
cameraR.layers.mask = cameraXR.layers.mask &
|
|
752
|
+
cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
|
|
753
|
+
cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
|
|
754
754
|
|
|
755
755
|
const parent = camera.parent;
|
|
756
756
|
const cameras = cameraXR.cameras;
|
package/src/textures/Texture.js
CHANGED
|
@@ -68,7 +68,7 @@ class Texture extends EventDispatcher {
|
|
|
68
68
|
Object.defineProperty( this, 'id', { value: _textureId ++ } );
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
|
-
* The UUID of the
|
|
71
|
+
* The UUID of the texture.
|
|
72
72
|
*
|
|
73
73
|
* @type {string}
|
|
74
74
|
* @readonly
|
|
@@ -76,7 +76,7 @@ class Texture extends EventDispatcher {
|
|
|
76
76
|
this.uuid = generateUUID();
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
* The name of the
|
|
79
|
+
* The name of the texture.
|
|
80
80
|
*
|
|
81
81
|
* @type {string}
|
|
82
82
|
*/
|