@plastic-software/three 0.180.0 → 0.181.2
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 +944 -487
- package/build/three.core.js +506 -327
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +436 -164
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3753 -1177
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3752 -1176
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -2
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +3 -3
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +2 -2
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +5 -3
- package/examples/jsm/loaders/KTX2Loader.js +28 -21
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +7 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
- package/examples/jsm/tsl/display/BloomNode.js +4 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
- package/examples/jsm/tsl/display/GTAONode.js +45 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
- package/examples/jsm/tsl/display/OutlineNode.js +11 -0
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +2 -0
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +123 -6
- package/examples/jsm/tsl/display/boxBlur.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +1 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +3 -2
- package/src/Three.TSL.js +7 -1
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +3 -2
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +8 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +268 -55
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +7 -7
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +4 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/manager/NodeMaterialObserver.js +2 -1
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +2 -2
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +1 -1
- package/src/nodes/TSL.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +3 -2
- package/src/nodes/accessors/InstanceNode.js +22 -4
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceNode.js +2 -1
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +61 -27
- package/src/nodes/code/FunctionCallNode.js +5 -4
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +5 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +137 -12
- package/src/nodes/core/NodeBuilder.js +135 -21
- package/src/nodes/core/NodeFrame.js +20 -20
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUtils.js +17 -90
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +16 -14
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +70 -12
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +51 -10
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +25 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +2 -3
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/ConditionalNode.js +6 -5
- package/src/nodes/math/MathNode.js +22 -4
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +36 -15
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +3 -2
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +2 -1
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +12 -2
- package/src/nodes/utils/ReflectorNode.js +10 -3
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +2 -1
- package/src/renderers/WebGLRenderer.js +49 -33
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Backend.js +93 -30
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +56 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +3 -1
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +436 -228
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -0
- package/src/renderers/common/Sampler.js +37 -11
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +89 -35
- package/src/renderers/common/TimestampQueryPool.js +63 -1
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +7 -3
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeLibrary.js +4 -2
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +11 -10
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +2 -1
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +18 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
- package/src/renderers/webgpu/WebGPUBackend.js +134 -108
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +5 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +3 -2
- package/src/textures/Source.js +2 -1
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -0
- package/src/utils.js +67 -3
|
@@ -4,7 +4,7 @@ let _color4 = null;
|
|
|
4
4
|
import Color4 from './Color4.js';
|
|
5
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
6
|
import { createCanvasElement, warnOnce } from '../../utils.js';
|
|
7
|
-
import { REVISION } from '../../constants.js';
|
|
7
|
+
import { REVISION, TimestampQuery } from '../../constants.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Most of the rendering related logic is implemented in the
|
|
@@ -64,8 +64,8 @@ class Backend {
|
|
|
64
64
|
* @type {{render: ?TimestampQueryPool, compute: ?TimestampQueryPool}}
|
|
65
65
|
*/
|
|
66
66
|
this.timestampQueryPool = {
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
[ TimestampQuery.RENDER ]: null,
|
|
68
|
+
[ TimestampQuery.COMPUTE ]: null
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -273,20 +273,13 @@ class Backend {
|
|
|
273
273
|
// textures
|
|
274
274
|
|
|
275
275
|
/**
|
|
276
|
-
*
|
|
276
|
+
* Updates a GPU sampler for the given texture.
|
|
277
277
|
*
|
|
278
278
|
* @abstract
|
|
279
|
-
* @param {Texture} texture - The texture to
|
|
279
|
+
* @param {Texture} texture - The texture to update the sampler for.
|
|
280
|
+
* @return {string} The current sampler key.
|
|
280
281
|
*/
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Destroys the GPU sampler for the given texture.
|
|
285
|
-
*
|
|
286
|
-
* @abstract
|
|
287
|
-
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
288
|
-
*/
|
|
289
|
-
destroySampler( /*texture*/ ) {}
|
|
282
|
+
updateSampler( /*texture*/ ) { }
|
|
290
283
|
|
|
291
284
|
/**
|
|
292
285
|
* Creates a default texture for the given texture that can be used
|
|
@@ -328,8 +321,9 @@ class Backend {
|
|
|
328
321
|
*
|
|
329
322
|
* @abstract
|
|
330
323
|
* @param {Texture} texture - The texture.
|
|
324
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
331
325
|
*/
|
|
332
|
-
destroyTexture( /*texture*/ ) { }
|
|
326
|
+
destroyTexture( /*texture, isDefaultTexture*/ ) { }
|
|
333
327
|
|
|
334
328
|
/**
|
|
335
329
|
* Returns texture data as a typed array.
|
|
@@ -439,6 +433,33 @@ class Backend {
|
|
|
439
433
|
|
|
440
434
|
// utils
|
|
441
435
|
|
|
436
|
+
/**
|
|
437
|
+
* Updates a unique identifier for the given render context that can be used
|
|
438
|
+
* to allocate resources like occlusion queries or timestamp queries.
|
|
439
|
+
*
|
|
440
|
+
* @param {RenderContext|ComputeNode} abstractRenderContext - The render context.
|
|
441
|
+
*/
|
|
442
|
+
updateTimeStampUID( abstractRenderContext ) {
|
|
443
|
+
|
|
444
|
+
const contextData = this.get( abstractRenderContext );
|
|
445
|
+
const frame = this.renderer.info.frame;
|
|
446
|
+
|
|
447
|
+
let prefix;
|
|
448
|
+
|
|
449
|
+
if ( abstractRenderContext.isComputeNode === true ) {
|
|
450
|
+
|
|
451
|
+
prefix = 'c:' + this.renderer.info.compute.frameCalls;
|
|
452
|
+
|
|
453
|
+
} else {
|
|
454
|
+
|
|
455
|
+
prefix = 'r:' + this.renderer.info.render.frameCalls;
|
|
456
|
+
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
contextData.timestampUID = prefix + ':' + abstractRenderContext.id + ':f' + frame;
|
|
460
|
+
|
|
461
|
+
}
|
|
462
|
+
|
|
442
463
|
/**
|
|
443
464
|
* Returns a unique identifier for the given render context that can be used
|
|
444
465
|
* to allocate resources like occlusion queries or timestamp queries.
|
|
@@ -448,12 +469,64 @@ class Backend {
|
|
|
448
469
|
*/
|
|
449
470
|
getTimestampUID( abstractRenderContext ) {
|
|
450
471
|
|
|
451
|
-
|
|
472
|
+
return this.get( abstractRenderContext ).timestampUID;
|
|
452
473
|
|
|
453
|
-
|
|
454
|
-
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Returns all timestamp frames for the given type.
|
|
478
|
+
*
|
|
479
|
+
* @param {string} type - The type of the time stamp.
|
|
480
|
+
* @return {Array<number>} The timestamp frames.
|
|
481
|
+
*/
|
|
482
|
+
getTimestampFrames( type ) {
|
|
483
|
+
|
|
484
|
+
const queryPool = this.timestampQueryPool[ type ];
|
|
455
485
|
|
|
456
|
-
return
|
|
486
|
+
return queryPool ? queryPool.getTimestampFrames() : [];
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Returns the query pool for the given uid.
|
|
492
|
+
*
|
|
493
|
+
* @param {string} uid - The unique identifier.
|
|
494
|
+
* @return {TimestampQueryPool} The query pool.
|
|
495
|
+
*/
|
|
496
|
+
_getQueryPool( uid ) {
|
|
497
|
+
|
|
498
|
+
const type = uid.startsWith( 'c:' ) ? TimestampQuery.COMPUTE : TimestampQuery.RENDER;
|
|
499
|
+
const queryPool = this.timestampQueryPool[ type ];
|
|
500
|
+
|
|
501
|
+
return queryPool;
|
|
502
|
+
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Returns the timestamp for the given uid.
|
|
507
|
+
*
|
|
508
|
+
* @param {string} uid - The unique identifier.
|
|
509
|
+
* @return {number} The timestamp.
|
|
510
|
+
*/
|
|
511
|
+
getTimestamp( uid ) {
|
|
512
|
+
|
|
513
|
+
const queryPool = this._getQueryPool( uid );
|
|
514
|
+
|
|
515
|
+
return queryPool.getTimestamp( uid );
|
|
516
|
+
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Returns `true` if a timestamp for the given uid is available.
|
|
521
|
+
*
|
|
522
|
+
* @param {string} uid - The unique identifier.
|
|
523
|
+
* @return {boolean} Whether the timestamp is available or not.
|
|
524
|
+
*/
|
|
525
|
+
hasTimestamp( uid ) {
|
|
526
|
+
|
|
527
|
+
const queryPool = this._getQueryPool( uid );
|
|
528
|
+
|
|
529
|
+
return queryPool.hasTimestamp( uid );
|
|
457
530
|
|
|
458
531
|
}
|
|
459
532
|
|
|
@@ -487,9 +560,9 @@ class Backend {
|
|
|
487
560
|
}
|
|
488
561
|
|
|
489
562
|
const queryPool = this.timestampQueryPool[ type ];
|
|
563
|
+
|
|
490
564
|
if ( ! queryPool ) {
|
|
491
565
|
|
|
492
|
-
warnOnce( `WebGPURenderer: No timestamp query pool for type '${type}' found.` );
|
|
493
566
|
return;
|
|
494
567
|
|
|
495
568
|
}
|
|
@@ -502,16 +575,6 @@ class Backend {
|
|
|
502
575
|
|
|
503
576
|
}
|
|
504
577
|
|
|
505
|
-
/**
|
|
506
|
-
* Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
|
|
507
|
-
* the CPU waits for the GPU to complete its operation (e.g. a compute task).
|
|
508
|
-
*
|
|
509
|
-
* @async
|
|
510
|
-
* @abstract
|
|
511
|
-
* @return {Promise} A Promise that resolves when synchronization has been finished.
|
|
512
|
-
*/
|
|
513
|
-
async waitForGPU() {}
|
|
514
|
-
|
|
515
578
|
/**
|
|
516
579
|
* This method performs a readback operation by moving buffer data from
|
|
517
580
|
* a storage buffer attribute from the GPU to the CPU.
|
|
@@ -6,6 +6,7 @@ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
|
6
6
|
import { Mesh } from '../../objects/Mesh.js';
|
|
7
7
|
import { SphereGeometry } from '../../geometries/SphereGeometry.js';
|
|
8
8
|
import { BackSide } from '../../constants.js';
|
|
9
|
+
import { error } from '../../utils.js';
|
|
9
10
|
|
|
10
11
|
const _clearColor = /*@__PURE__*/ new Color4();
|
|
11
12
|
|
|
@@ -148,7 +149,7 @@ class Background extends DataMap {
|
|
|
148
149
|
|
|
149
150
|
} else {
|
|
150
151
|
|
|
151
|
-
|
|
152
|
+
error( 'Renderer: Unsupported background configuration.', background );
|
|
152
153
|
|
|
153
154
|
}
|
|
154
155
|
|
|
@@ -153,6 +153,40 @@ class Bindings extends DataMap {
|
|
|
153
153
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Deletes the bindings for the given compute node.
|
|
158
|
+
*
|
|
159
|
+
* @param {Node} computeNode - The compute node.
|
|
160
|
+
*/
|
|
161
|
+
deleteForCompute( computeNode ) {
|
|
162
|
+
|
|
163
|
+
const bindings = this.nodes.getForCompute( computeNode ).bindings;
|
|
164
|
+
|
|
165
|
+
for ( const bindGroup of bindings ) {
|
|
166
|
+
|
|
167
|
+
this.delete( bindGroup );
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Deletes the bindings for the given renderObject node.
|
|
175
|
+
*
|
|
176
|
+
* @param {RenderObject} renderObject - The renderObject.
|
|
177
|
+
*/
|
|
178
|
+
deleteForRender( renderObject ) {
|
|
179
|
+
|
|
180
|
+
const bindings = renderObject.getBindings();
|
|
181
|
+
|
|
182
|
+
for ( const bindGroup of bindings ) {
|
|
183
|
+
|
|
184
|
+
this.delete( bindGroup );
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
156
190
|
/**
|
|
157
191
|
* Updates the given array of bindings.
|
|
158
192
|
*
|
|
@@ -181,6 +215,10 @@ class Bindings extends DataMap {
|
|
|
181
215
|
|
|
182
216
|
this.textures.updateTexture( binding.texture );
|
|
183
217
|
|
|
218
|
+
} else if ( binding.isSampler ) {
|
|
219
|
+
|
|
220
|
+
this.textures.updateSampler( binding.texture );
|
|
221
|
+
|
|
184
222
|
} else if ( binding.isStorageBuffer ) {
|
|
185
223
|
|
|
186
224
|
const attribute = binding.attribute;
|
|
@@ -286,7 +324,7 @@ class Bindings extends DataMap {
|
|
|
286
324
|
|
|
287
325
|
}
|
|
288
326
|
|
|
289
|
-
if ( texture.isStorageTexture === true ) {
|
|
327
|
+
if ( texture.isStorageTexture === true && texture.mipmapsAutoUpdate === true ) {
|
|
290
328
|
|
|
291
329
|
const textureData = this.get( texture );
|
|
292
330
|
|
|
@@ -306,7 +344,23 @@ class Bindings extends DataMap {
|
|
|
306
344
|
|
|
307
345
|
} else if ( binding.isSampler ) {
|
|
308
346
|
|
|
309
|
-
binding.update();
|
|
347
|
+
const updated = binding.update();
|
|
348
|
+
|
|
349
|
+
if ( updated ) {
|
|
350
|
+
|
|
351
|
+
const samplerKey = this.textures.updateSampler( binding.texture );
|
|
352
|
+
|
|
353
|
+
if ( binding.samplerKey !== samplerKey ) {
|
|
354
|
+
|
|
355
|
+
binding.samplerKey = samplerKey;
|
|
356
|
+
|
|
357
|
+
needsBindingsUpdate = true;
|
|
358
|
+
|
|
359
|
+
cacheBindings = false;
|
|
360
|
+
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
}
|
|
310
364
|
|
|
311
365
|
}
|
|
312
366
|
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
2
|
+
import { Vector4 } from '../../math/Vector4.js';
|
|
3
|
+
import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
|
|
4
|
+
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* CanvasTarget is a class that represents the final output destination of the renderer.
|
|
8
|
+
*
|
|
9
|
+
* @augments EventDispatcher
|
|
10
|
+
*/
|
|
11
|
+
class CanvasTarget extends EventDispatcher {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new CanvasTarget.
|
|
15
|
+
*
|
|
16
|
+
* @param {HTMLCanvasElement|OffscreenCanvas} domElement - The canvas element to render to.
|
|
17
|
+
*/
|
|
18
|
+
constructor( domElement ) {
|
|
19
|
+
|
|
20
|
+
super();
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A reference to the canvas element the renderer is drawing to.
|
|
24
|
+
* This value of this property will automatically be created by
|
|
25
|
+
* the renderer.
|
|
26
|
+
*
|
|
27
|
+
* @type {HTMLCanvasElement|OffscreenCanvas}
|
|
28
|
+
*/
|
|
29
|
+
this.domElement = domElement;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The renderer's pixel ratio.
|
|
33
|
+
*
|
|
34
|
+
* @private
|
|
35
|
+
* @type {number}
|
|
36
|
+
* @default 1
|
|
37
|
+
*/
|
|
38
|
+
this._pixelRatio = 1;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The width of the renderer's default framebuffer in logical pixel unit.
|
|
42
|
+
*
|
|
43
|
+
* @private
|
|
44
|
+
* @type {number}
|
|
45
|
+
*/
|
|
46
|
+
this._width = this.domElement.width;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The height of the renderer's default framebuffer in logical pixel unit.
|
|
50
|
+
*
|
|
51
|
+
* @private
|
|
52
|
+
* @type {number}
|
|
53
|
+
*/
|
|
54
|
+
this._height = this.domElement.height;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The viewport of the renderer in logical pixel unit.
|
|
58
|
+
*
|
|
59
|
+
* @private
|
|
60
|
+
* @type {Vector4}
|
|
61
|
+
*/
|
|
62
|
+
this._viewport = new Vector4( 0, 0, this._width, this._height );
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The scissor rectangle of the renderer in logical pixel unit.
|
|
66
|
+
*
|
|
67
|
+
* @private
|
|
68
|
+
* @type {Vector4}
|
|
69
|
+
*/
|
|
70
|
+
this._scissor = new Vector4( 0, 0, this._width, this._height );
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Whether the scissor test should be enabled or not.
|
|
74
|
+
*
|
|
75
|
+
* @private
|
|
76
|
+
* @type {boolean}
|
|
77
|
+
*/
|
|
78
|
+
this._scissorTest = false;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The color texture of the default framebuffer.
|
|
82
|
+
*
|
|
83
|
+
* @type {FramebufferTexture}
|
|
84
|
+
*/
|
|
85
|
+
this.colorTexture = new FramebufferTexture();
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The depth texture of the default framebuffer.
|
|
89
|
+
*
|
|
90
|
+
* @type {DepthTexture}
|
|
91
|
+
*/
|
|
92
|
+
this.depthTexture = new DepthTexture();
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Returns the pixel ratio.
|
|
98
|
+
*
|
|
99
|
+
* @return {number} The pixel ratio.
|
|
100
|
+
*/
|
|
101
|
+
getPixelRatio() {
|
|
102
|
+
|
|
103
|
+
return this._pixelRatio;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.
|
|
109
|
+
*
|
|
110
|
+
* @param {Vector2} target - The method writes the result in this target object.
|
|
111
|
+
* @return {Vector2} The drawing buffer size.
|
|
112
|
+
*/
|
|
113
|
+
getDrawingBufferSize( target ) {
|
|
114
|
+
|
|
115
|
+
return target.set( this._width * this._pixelRatio, this._height * this._pixelRatio ).floor();
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.
|
|
121
|
+
*
|
|
122
|
+
* @param {Vector2} target - The method writes the result in this target object.
|
|
123
|
+
* @return {Vector2} The renderer's size in logical pixels.
|
|
124
|
+
*/
|
|
125
|
+
getSize( target ) {
|
|
126
|
+
|
|
127
|
+
return target.set( this._width, this._height );
|
|
128
|
+
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Sets the given pixel ratio and resizes the canvas if necessary.
|
|
133
|
+
*
|
|
134
|
+
* @param {number} [value=1] - The pixel ratio.
|
|
135
|
+
*/
|
|
136
|
+
setPixelRatio( value = 1 ) {
|
|
137
|
+
|
|
138
|
+
if ( this._pixelRatio === value ) return;
|
|
139
|
+
|
|
140
|
+
this._pixelRatio = value;
|
|
141
|
+
|
|
142
|
+
this.setSize( this._width, this._height, false );
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* This method allows to define the drawing buffer size by specifying
|
|
148
|
+
* width, height and pixel ratio all at once. The size of the drawing
|
|
149
|
+
* buffer is computed with this formula:
|
|
150
|
+
* ```js
|
|
151
|
+
* size.x = width * pixelRatio;
|
|
152
|
+
* size.y = height * pixelRatio;
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* @param {number} width - The width in logical pixels.
|
|
156
|
+
* @param {number} height - The height in logical pixels.
|
|
157
|
+
* @param {number} pixelRatio - The pixel ratio.
|
|
158
|
+
*/
|
|
159
|
+
setDrawingBufferSize( width, height, pixelRatio ) {
|
|
160
|
+
|
|
161
|
+
// Renderer can't be resized while presenting in XR.
|
|
162
|
+
if ( this.xr && this.xr.isPresenting ) return;
|
|
163
|
+
|
|
164
|
+
this._width = width;
|
|
165
|
+
this._height = height;
|
|
166
|
+
|
|
167
|
+
this._pixelRatio = pixelRatio;
|
|
168
|
+
|
|
169
|
+
this.domElement.width = Math.floor( width * pixelRatio );
|
|
170
|
+
this.domElement.height = Math.floor( height * pixelRatio );
|
|
171
|
+
|
|
172
|
+
this.setViewport( 0, 0, width, height );
|
|
173
|
+
|
|
174
|
+
this._dispatchResize();
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Sets the size of the renderer.
|
|
180
|
+
*
|
|
181
|
+
* @param {number} width - The width in logical pixels.
|
|
182
|
+
* @param {number} height - The height in logical pixels.
|
|
183
|
+
* @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
|
|
184
|
+
*/
|
|
185
|
+
setSize( width, height, updateStyle = true ) {
|
|
186
|
+
|
|
187
|
+
// Renderer can't be resized while presenting in XR.
|
|
188
|
+
if ( this.xr && this.xr.isPresenting ) return;
|
|
189
|
+
|
|
190
|
+
this._width = width;
|
|
191
|
+
this._height = height;
|
|
192
|
+
|
|
193
|
+
this.domElement.width = Math.floor( width * this._pixelRatio );
|
|
194
|
+
this.domElement.height = Math.floor( height * this._pixelRatio );
|
|
195
|
+
|
|
196
|
+
if ( updateStyle === true ) {
|
|
197
|
+
|
|
198
|
+
this.domElement.style.width = width + 'px';
|
|
199
|
+
this.domElement.style.height = height + 'px';
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
this.setViewport( 0, 0, width, height );
|
|
204
|
+
|
|
205
|
+
this._dispatchResize();
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Returns the scissor rectangle.
|
|
211
|
+
*
|
|
212
|
+
* @param {Vector4} target - The method writes the result in this target object.
|
|
213
|
+
* @return {Vector4} The scissor rectangle.
|
|
214
|
+
*/
|
|
215
|
+
getScissor( target ) {
|
|
216
|
+
|
|
217
|
+
const scissor = this._scissor;
|
|
218
|
+
|
|
219
|
+
target.x = scissor.x;
|
|
220
|
+
target.y = scissor.y;
|
|
221
|
+
target.width = scissor.width;
|
|
222
|
+
target.height = scissor.height;
|
|
223
|
+
|
|
224
|
+
return target;
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Defines the scissor rectangle.
|
|
230
|
+
*
|
|
231
|
+
* @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
|
|
232
|
+
* Instead of passing four arguments, the method also works with a single four-dimensional vector.
|
|
233
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
|
|
234
|
+
* @param {number} width - The width of the scissor box in logical pixel unit.
|
|
235
|
+
* @param {number} height - The height of the scissor box in logical pixel unit.
|
|
236
|
+
*/
|
|
237
|
+
setScissor( x, y, width, height ) {
|
|
238
|
+
|
|
239
|
+
const scissor = this._scissor;
|
|
240
|
+
|
|
241
|
+
if ( x.isVector4 ) {
|
|
242
|
+
|
|
243
|
+
scissor.copy( x );
|
|
244
|
+
|
|
245
|
+
} else {
|
|
246
|
+
|
|
247
|
+
scissor.set( x, y, width, height );
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Returns the scissor test value.
|
|
255
|
+
*
|
|
256
|
+
* @return {boolean} Whether the scissor test should be enabled or not.
|
|
257
|
+
*/
|
|
258
|
+
getScissorTest() {
|
|
259
|
+
|
|
260
|
+
return this._scissorTest;
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Defines the scissor test.
|
|
266
|
+
*
|
|
267
|
+
* @param {boolean} boolean - Whether the scissor test should be enabled or not.
|
|
268
|
+
*/
|
|
269
|
+
setScissorTest( boolean ) {
|
|
270
|
+
|
|
271
|
+
this._scissorTest = boolean;
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Returns the viewport definition.
|
|
277
|
+
*
|
|
278
|
+
* @param {Vector4} target - The method writes the result in this target object.
|
|
279
|
+
* @return {Vector4} The viewport definition.
|
|
280
|
+
*/
|
|
281
|
+
getViewport( target ) {
|
|
282
|
+
|
|
283
|
+
return target.copy( this._viewport );
|
|
284
|
+
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Defines the viewport.
|
|
289
|
+
*
|
|
290
|
+
* @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
291
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
292
|
+
* @param {number} width - The width of the viewport in logical pixel unit.
|
|
293
|
+
* @param {number} height - The height of the viewport in logical pixel unit.
|
|
294
|
+
* @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.
|
|
295
|
+
* @param {number} maxDepth - The maximum depth value of the viewport. WebGPU only.
|
|
296
|
+
*/
|
|
297
|
+
setViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {
|
|
298
|
+
|
|
299
|
+
const viewport = this._viewport;
|
|
300
|
+
|
|
301
|
+
if ( x.isVector4 ) {
|
|
302
|
+
|
|
303
|
+
viewport.copy( x );
|
|
304
|
+
|
|
305
|
+
} else {
|
|
306
|
+
|
|
307
|
+
viewport.set( x, y, width, height );
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
viewport.minDepth = minDepth;
|
|
312
|
+
viewport.maxDepth = maxDepth;
|
|
313
|
+
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Dispatches the resize event.
|
|
318
|
+
*
|
|
319
|
+
* @private
|
|
320
|
+
*/
|
|
321
|
+
_dispatchResize() {
|
|
322
|
+
|
|
323
|
+
this.dispatchEvent( { type: 'resize' } );
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
329
|
+
* method whenever this instance is no longer used in your app.
|
|
330
|
+
*
|
|
331
|
+
* @fires RenderTarget#dispose
|
|
332
|
+
*/
|
|
333
|
+
dispose() {
|
|
334
|
+
|
|
335
|
+
this.dispatchEvent( { type: 'dispose' } );
|
|
336
|
+
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
export default CanvasTarget;
|
|
@@ -117,6 +117,14 @@ class Geometries extends DataMap {
|
|
|
117
117
|
*/
|
|
118
118
|
this.attributeCall = new WeakMap();
|
|
119
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Stores the event listeners attached to geometries.
|
|
122
|
+
*
|
|
123
|
+
* @private
|
|
124
|
+
* @type {Map<BufferGeometry,Function>}
|
|
125
|
+
*/
|
|
126
|
+
this._geometryDisposeListeners = new Map();
|
|
127
|
+
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
/**
|
|
@@ -189,10 +197,16 @@ class Geometries extends DataMap {
|
|
|
189
197
|
|
|
190
198
|
geometry.removeEventListener( 'dispose', onDispose );
|
|
191
199
|
|
|
200
|
+
this._geometryDisposeListeners.delete( geometry );
|
|
201
|
+
|
|
192
202
|
};
|
|
193
203
|
|
|
194
204
|
geometry.addEventListener( 'dispose', onDispose );
|
|
195
205
|
|
|
206
|
+
// see #31798 why tracking separate remove listeners is required right now
|
|
207
|
+
// TODO: Re-evaluate how onDispose() is managed in this component
|
|
208
|
+
this._geometryDisposeListeners.set( geometry, onDispose );
|
|
209
|
+
|
|
196
210
|
}
|
|
197
211
|
|
|
198
212
|
/**
|
|
@@ -339,6 +353,18 @@ class Geometries extends DataMap {
|
|
|
339
353
|
|
|
340
354
|
}
|
|
341
355
|
|
|
356
|
+
dispose() {
|
|
357
|
+
|
|
358
|
+
for ( const [ geometry, onDispose ] of this._geometryDisposeListeners.entries() ) {
|
|
359
|
+
|
|
360
|
+
geometry.removeEventListener( 'dispose', onDispose );
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
this._geometryDisposeListeners.clear();
|
|
365
|
+
|
|
366
|
+
}
|
|
367
|
+
|
|
342
368
|
}
|
|
343
369
|
|
|
344
370
|
export default Geometries;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { error } from '../../utils.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* This renderer module provides a series of statistical information
|
|
3
5
|
* about the GPU memory and the rendering process. Useful for debugging
|
|
@@ -52,7 +54,7 @@ class Info {
|
|
|
52
54
|
* @property {number} triangles - The number of rendered triangle primitives of the current frame.
|
|
53
55
|
* @property {number} points - The number of rendered point primitives of the current frame.
|
|
54
56
|
* @property {number} lines - The number of rendered line primitives of the current frame.
|
|
55
|
-
* @property {number} timestamp - The timestamp of the frame
|
|
57
|
+
* @property {number} timestamp - The timestamp of the frame.
|
|
56
58
|
*/
|
|
57
59
|
this.render = {
|
|
58
60
|
calls: 0,
|
|
@@ -123,7 +125,7 @@ class Info {
|
|
|
123
125
|
|
|
124
126
|
} else {
|
|
125
127
|
|
|
126
|
-
|
|
128
|
+
error( 'WebGPUInfo: Unknown object type.' );
|
|
127
129
|
|
|
128
130
|
}
|
|
129
131
|
|