@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, NoColorSpace, LinearTransfer, SRGBTransfer } from '../../../constants.js';
|
|
2
2
|
import { ColorManagement } from '../../../math/ColorManagement.js';
|
|
3
3
|
import { getByteLength } from '../../../extras/TextureUtils.js';
|
|
4
|
+
import { warn } from '../../../utils.js';
|
|
4
5
|
|
|
5
6
|
let initialized = false, wrappingToGL, filterToGL, compareToGL;
|
|
6
7
|
|
|
@@ -48,6 +49,24 @@ class WebGLTextureUtils {
|
|
|
48
49
|
*/
|
|
49
50
|
this.defaultTextures = {};
|
|
50
51
|
|
|
52
|
+
/**
|
|
53
|
+
* A scratch framebuffer used for attaching the source texture in
|
|
54
|
+
* {@link copyTextureToTexture}.
|
|
55
|
+
*
|
|
56
|
+
* @private
|
|
57
|
+
* @type {?WebGLFramebuffer}
|
|
58
|
+
*/
|
|
59
|
+
this._srcFramebuffer = null;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A scratch framebuffer used for attaching the destination texture in
|
|
63
|
+
* {@link copyTextureToTexture}.
|
|
64
|
+
*
|
|
65
|
+
* @private
|
|
66
|
+
* @type {?WebGLFramebuffer}
|
|
67
|
+
*/
|
|
68
|
+
this._dstFramebuffer = null;
|
|
69
|
+
|
|
51
70
|
if ( initialized === false ) {
|
|
52
71
|
|
|
53
72
|
this._init();
|
|
@@ -151,7 +170,7 @@ class WebGLTextureUtils {
|
|
|
151
170
|
|
|
152
171
|
if ( gl[ internalFormatName ] !== undefined ) return gl[ internalFormatName ];
|
|
153
172
|
|
|
154
|
-
|
|
173
|
+
warn( 'WebGLBackend: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
|
|
155
174
|
|
|
156
175
|
}
|
|
157
176
|
|
|
@@ -390,8 +409,7 @@ class WebGLTextureUtils {
|
|
|
390
409
|
|
|
391
410
|
backend.set( texture, {
|
|
392
411
|
textureGPU,
|
|
393
|
-
glTextureType
|
|
394
|
-
isDefault: true
|
|
412
|
+
glTextureType
|
|
395
413
|
} );
|
|
396
414
|
|
|
397
415
|
}
|
|
@@ -480,7 +498,7 @@ class WebGLTextureUtils {
|
|
|
480
498
|
|
|
481
499
|
// gl.readPixels( 0, 0, width, height, altFormat, altType, readout );
|
|
482
500
|
// gl.bindFramebuffer( gl.FRAMEBUFFER, null );
|
|
483
|
-
//
|
|
501
|
+
// log( readout );
|
|
484
502
|
|
|
485
503
|
}
|
|
486
504
|
|
|
@@ -523,7 +541,7 @@ class WebGLTextureUtils {
|
|
|
523
541
|
|
|
524
542
|
} else {
|
|
525
543
|
|
|
526
|
-
|
|
544
|
+
warn( 'WebGLBackend: Attempt to load unsupported compressed texture format in .uploadTexture()' );
|
|
527
545
|
|
|
528
546
|
}
|
|
529
547
|
|
|
@@ -541,7 +559,7 @@ class WebGLTextureUtils {
|
|
|
541
559
|
|
|
542
560
|
} else {
|
|
543
561
|
|
|
544
|
-
|
|
562
|
+
warn( 'WebGLBackend: Unsupported compressed texture format' );
|
|
545
563
|
|
|
546
564
|
}
|
|
547
565
|
|
|
@@ -722,14 +740,20 @@ class WebGLTextureUtils {
|
|
|
722
740
|
* Destroys the GPU data for the given texture object.
|
|
723
741
|
*
|
|
724
742
|
* @param {Texture} texture - The texture.
|
|
743
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
725
744
|
*/
|
|
726
|
-
destroyTexture( texture ) {
|
|
745
|
+
destroyTexture( texture, isDefaultTexture = false ) {
|
|
727
746
|
|
|
728
747
|
const { gl, backend } = this;
|
|
729
748
|
const { textureGPU, renderTarget } = backend.get( texture );
|
|
730
749
|
|
|
731
750
|
this.deallocateRenderBuffers( renderTarget );
|
|
732
|
-
|
|
751
|
+
|
|
752
|
+
if ( isDefaultTexture === false ) {
|
|
753
|
+
|
|
754
|
+
gl.deleteTexture( textureGPU );
|
|
755
|
+
|
|
756
|
+
}
|
|
733
757
|
|
|
734
758
|
backend.delete( texture );
|
|
735
759
|
|
|
@@ -808,7 +832,6 @@ class WebGLTextureUtils {
|
|
|
808
832
|
|
|
809
833
|
}
|
|
810
834
|
|
|
811
|
-
|
|
812
835
|
gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
813
836
|
gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
814
837
|
gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
@@ -827,8 +850,10 @@ class WebGLTextureUtils {
|
|
|
827
850
|
gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
|
|
828
851
|
|
|
829
852
|
// set up the src texture
|
|
853
|
+
const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture || dstTexture.isArrayTexture;
|
|
830
854
|
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture || dstTexture.isArrayTexture;
|
|
831
|
-
|
|
855
|
+
|
|
856
|
+
if ( srcTexture.isDepthTexture ) {
|
|
832
857
|
|
|
833
858
|
const srcTextureData = backend.get( srcTexture );
|
|
834
859
|
const dstTextureData = backend.get( dstTexture );
|
|
@@ -842,12 +867,76 @@ class WebGLTextureUtils {
|
|
|
842
867
|
state.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffer );
|
|
843
868
|
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, dstFramebuffer );
|
|
844
869
|
|
|
845
|
-
let
|
|
870
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
871
|
+
|
|
872
|
+
// if the source or destination are a 3d target then a layer needs to be bound
|
|
873
|
+
if ( isSrc3D ) {
|
|
874
|
+
|
|
875
|
+
gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );
|
|
876
|
+
gl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );
|
|
877
|
+
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.DEPTH_BUFFER_BIT, gl.NEAREST );
|
|
881
|
+
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
885
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
886
|
+
|
|
887
|
+
} else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || backend.has( srcTexture ) ) {
|
|
888
|
+
|
|
889
|
+
// get the appropriate frame buffers
|
|
890
|
+
const srcTextureData = backend.get( srcTexture );
|
|
891
|
+
|
|
892
|
+
if ( this._srcFramebuffer === null ) this._srcFramebuffer = gl.createFramebuffer();
|
|
893
|
+
if ( this._dstFramebuffer === null ) this._dstFramebuffer = gl.createFramebuffer();
|
|
894
|
+
|
|
895
|
+
// bind the frame buffer targets
|
|
896
|
+
state.bindFramebuffer( gl.READ_FRAMEBUFFER, this._srcFramebuffer );
|
|
897
|
+
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, this._dstFramebuffer );
|
|
898
|
+
|
|
899
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
846
900
|
|
|
847
|
-
|
|
901
|
+
// assign the correct layers and mip maps to the frame buffers
|
|
902
|
+
if ( isSrc3D ) {
|
|
848
903
|
|
|
849
|
-
|
|
904
|
+
gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );
|
|
850
905
|
|
|
906
|
+
} else {
|
|
907
|
+
|
|
908
|
+
gl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, srcTextureData.textureGPU, srcLevel );
|
|
909
|
+
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
if ( isDst3D ) {
|
|
913
|
+
|
|
914
|
+
gl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );
|
|
915
|
+
|
|
916
|
+
} else {
|
|
917
|
+
|
|
918
|
+
gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, dstTextureGPU, dstLevel );
|
|
919
|
+
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// copy the data using the fastest function that can achieve the copy
|
|
923
|
+
if ( srcLevel !== 0 ) {
|
|
924
|
+
|
|
925
|
+
gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST );
|
|
926
|
+
|
|
927
|
+
} else if ( isDst3D ) {
|
|
928
|
+
|
|
929
|
+
gl.copyTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );
|
|
930
|
+
|
|
931
|
+
} else {
|
|
932
|
+
|
|
933
|
+
gl.copyTexSubImage2D( glTextureType, dstLevel, dstX, dstY, minX, minY, width, height );
|
|
934
|
+
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
// unbind read, draw buffers
|
|
851
940
|
state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
|
|
852
941
|
state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
|
|
853
942
|
|
|
@@ -875,15 +964,15 @@ class WebGLTextureUtils {
|
|
|
875
964
|
// copy data into the 2d texture
|
|
876
965
|
if ( srcTexture.isDataTexture ) {
|
|
877
966
|
|
|
878
|
-
gl.texSubImage2D(
|
|
967
|
+
gl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
879
968
|
|
|
880
969
|
} else if ( srcTexture.isCompressedTexture ) {
|
|
881
970
|
|
|
882
|
-
gl.compressedTexSubImage2D(
|
|
971
|
+
gl.compressedTexSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
883
972
|
|
|
884
973
|
} else {
|
|
885
974
|
|
|
886
|
-
gl.texSubImage2D(
|
|
975
|
+
gl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
|
|
887
976
|
|
|
888
977
|
}
|
|
889
978
|
|
|
@@ -1184,6 +1273,18 @@ class WebGLTextureUtils {
|
|
|
1184
1273
|
|
|
1185
1274
|
}
|
|
1186
1275
|
|
|
1276
|
+
/**
|
|
1277
|
+
* Frees the internal resources.
|
|
1278
|
+
*/
|
|
1279
|
+
dispose() {
|
|
1280
|
+
|
|
1281
|
+
const { gl } = this;
|
|
1282
|
+
|
|
1283
|
+
if ( this._srcFramebuffer !== null ) gl.deleteFramebuffer( this._srcFramebuffer );
|
|
1284
|
+
if ( this._dstFramebuffer !== null ) gl.deleteFramebuffer( this._dstFramebuffer );
|
|
1285
|
+
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1187
1288
|
}
|
|
1188
1289
|
|
|
1189
1290
|
function getImage( source ) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { warnOnce } from '../../../utils.js';
|
|
1
|
+
import { warnOnce, warn } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -29,7 +29,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
29
29
|
|
|
30
30
|
if ( ! this.ext ) {
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
warn( 'EXT_disjoint_timer_query not supported; timestamps will be disabled.' );
|
|
33
33
|
this.trackTimestamp = false;
|
|
34
34
|
return;
|
|
35
35
|
|
|
@@ -124,7 +124,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
124
124
|
|
|
125
125
|
} catch ( error ) {
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
error( 'Error in beginQuery:', error );
|
|
128
128
|
this.activeQuery = null;
|
|
129
129
|
this.queryStates.set( baseOffset, 'inactive' );
|
|
130
130
|
|
|
@@ -167,7 +167,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
167
167
|
|
|
168
168
|
} catch ( error ) {
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
error( 'Error in endQuery:', error );
|
|
171
171
|
// Reset state on error
|
|
172
172
|
this.queryStates.set( baseOffset, 'inactive' );
|
|
173
173
|
this.activeQuery = null;
|
|
@@ -195,30 +195,60 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
195
195
|
try {
|
|
196
196
|
|
|
197
197
|
// Wait for all ended queries to complete
|
|
198
|
-
const resolvePromises =
|
|
198
|
+
const resolvePromises = new Map();
|
|
199
199
|
|
|
200
|
-
for ( const [
|
|
200
|
+
for ( const [ uid, baseOffset ] of this.queryOffsets ) {
|
|
201
|
+
|
|
202
|
+
const state = this.queryStates.get( baseOffset );
|
|
201
203
|
|
|
202
204
|
if ( state === 'ended' ) {
|
|
203
205
|
|
|
204
206
|
const query = this.queries[ baseOffset ];
|
|
205
|
-
resolvePromises.
|
|
207
|
+
resolvePromises.set( uid, this.resolveQuery( query ) );
|
|
206
208
|
|
|
207
209
|
}
|
|
208
210
|
|
|
209
211
|
}
|
|
210
212
|
|
|
211
|
-
if ( resolvePromises.
|
|
213
|
+
if ( resolvePromises.size === 0 ) {
|
|
212
214
|
|
|
213
215
|
return this.lastValue;
|
|
214
216
|
|
|
215
217
|
}
|
|
216
218
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
+
//
|
|
220
|
+
|
|
221
|
+
const framesDuration = {};
|
|
222
|
+
|
|
223
|
+
const frames = [];
|
|
224
|
+
|
|
225
|
+
for ( const [ uid, promise ] of resolvePromises ) {
|
|
226
|
+
|
|
227
|
+
const match = uid.match( /^(.*):f(\d+)$/ );
|
|
228
|
+
const frame = parseInt( match[ 2 ] );
|
|
229
|
+
|
|
230
|
+
if ( frames.includes( frame ) === false ) {
|
|
231
|
+
|
|
232
|
+
frames.push( frame );
|
|
233
|
+
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;
|
|
237
|
+
|
|
238
|
+
const duration = await promise;
|
|
239
|
+
|
|
240
|
+
this.timestamps.set( uid, duration );
|
|
241
|
+
|
|
242
|
+
framesDuration[ frame ] += duration;
|
|
243
|
+
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Return the total duration of the last frame
|
|
247
|
+
const totalDuration = framesDuration[ frames[ frames.length - 1 ] ];
|
|
219
248
|
|
|
220
249
|
// Store the last valid result
|
|
221
250
|
this.lastValue = totalDuration;
|
|
251
|
+
this.frames = frames;
|
|
222
252
|
|
|
223
253
|
// Reset states
|
|
224
254
|
this.currentQueryIndex = 0;
|
|
@@ -230,7 +260,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
230
260
|
|
|
231
261
|
} catch ( error ) {
|
|
232
262
|
|
|
233
|
-
|
|
263
|
+
error( 'Error resolving queries:', error );
|
|
234
264
|
return this.lastValue;
|
|
235
265
|
|
|
236
266
|
} finally {
|
|
@@ -318,7 +348,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
|
|
|
318
348
|
|
|
319
349
|
} catch ( error ) {
|
|
320
350
|
|
|
321
|
-
|
|
351
|
+
error( 'Error checking query:', error );
|
|
322
352
|
resolve( this.lastValue );
|
|
323
353
|
|
|
324
354
|
}
|