super-three 0.147.1 → 0.154.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 +37190 -21678
- package/build/three.js +37182 -21669
- package/build/three.min.js +4 -2
- package/build/three.module.js +7656 -6548
- package/build/three.module.min.js +7 -0
- package/examples/jsm/animation/AnimationClipCreator.js +5 -3
- package/examples/jsm/cameras/CinematicCamera.js +1 -2
- package/examples/jsm/capabilities/WebGPU.js +17 -5
- package/examples/jsm/controls/ArcballControls.js +1835 -1827
- package/examples/jsm/controls/FlyControls.js +25 -9
- package/examples/jsm/controls/MapControls.js +28 -0
- package/examples/jsm/controls/OrbitControls.js +25 -46
- package/examples/jsm/controls/PointerLockControls.js +70 -65
- package/examples/jsm/controls/TrackballControls.js +18 -4
- package/examples/jsm/controls/TransformControls.js +0 -1
- package/examples/jsm/csm/CSM.js +12 -6
- package/examples/jsm/csm/CSMShader.js +7 -6
- package/examples/jsm/effects/AnaglyphEffect.js +6 -20
- package/examples/jsm/effects/AsciiEffect.js +3 -6
- package/examples/jsm/effects/OutlineEffect.js +2 -16
- package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
- package/examples/jsm/environments/RoomEnvironment.js +6 -2
- package/examples/jsm/exporters/DRACOExporter.js +53 -11
- package/examples/jsm/exporters/EXRExporter.js +3 -9
- package/examples/jsm/exporters/GLTFExporter.js +597 -112
- package/examples/jsm/exporters/KTX2Exporter.js +34 -23
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +8 -1
- package/examples/jsm/exporters/STLExporter.js +8 -4
- package/examples/jsm/exporters/USDZExporter.js +184 -124
- package/examples/jsm/geometries/ConvexGeometry.js +0 -6
- package/examples/jsm/geometries/ParametricGeometry.js +10 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +71 -57
- package/examples/jsm/interactive/HTMLMesh.js +16 -3
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/{js → jsm}/libs/basis/README.md +4 -4
- package/examples/jsm/libs/draco/draco_decoder.js +34 -0
- package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
- package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
- package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/examples/jsm/libs/lil-gui.module.min.js +2 -2
- package/examples/jsm/libs/tween.module.js +803 -0
- package/examples/jsm/lights/IESSpotLight.js +25 -0
- package/examples/jsm/lights/LightProbeGenerator.js +11 -9
- package/examples/jsm/lines/LineMaterial.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +12 -10
- package/examples/jsm/loaders/3DMLoader.js +9 -6
- package/examples/jsm/loaders/3MFLoader.js +17 -12
- package/examples/jsm/loaders/AMFLoader.js +7 -4
- package/examples/jsm/loaders/BVHLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +19 -17
- package/examples/jsm/loaders/DRACOLoader.js +69 -18
- package/examples/jsm/loaders/EXRLoader.js +23 -24
- package/examples/jsm/loaders/FBXLoader.js +41 -52
- package/examples/jsm/loaders/GCodeLoader.js +1 -2
- package/examples/jsm/loaders/GLTFLoader.js +452 -282
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
- package/examples/jsm/loaders/IESLoader.js +337 -0
- package/examples/jsm/loaders/KMZLoader.js +4 -4
- package/examples/jsm/loaders/KTX2Loader.js +145 -69
- package/examples/jsm/loaders/LDrawLoader.js +24 -25
- package/examples/jsm/loaders/LWOLoader.js +12 -29
- package/examples/jsm/loaders/LottieLoader.js +3 -1
- package/examples/jsm/loaders/MMDLoader.js +49 -18
- package/examples/jsm/loaders/MTLLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +9 -3
- package/examples/jsm/loaders/NRRDLoader.js +33 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +26 -12
- package/examples/jsm/loaders/PDBLoader.js +7 -2
- package/examples/jsm/loaders/PLYLoader.js +261 -106
- package/examples/jsm/loaders/RGBELoader.js +3 -3
- package/examples/jsm/loaders/STLLoader.js +9 -5
- package/examples/jsm/loaders/SVGLoader.js +36 -27
- package/examples/jsm/loaders/TTFLoader.js +1 -8
- package/examples/jsm/loaders/TiltLoader.js +13 -7
- package/examples/jsm/loaders/USDZLoader.js +5 -5
- package/examples/jsm/loaders/VOXLoader.js +8 -2
- package/examples/jsm/loaders/VRMLLoader.js +60 -20
- package/examples/jsm/loaders/VTKLoader.js +19 -10
- package/examples/jsm/loaders/XYZLoader.js +9 -3
- package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -5
- package/examples/jsm/math/Lut.js +5 -4
- package/examples/jsm/math/MeshSurfaceSampler.js +82 -43
- package/examples/jsm/misc/ConvexObjectBreaker.js +2 -8
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -5
- package/examples/jsm/misc/MD2Character.js +2 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +2 -2
- package/examples/jsm/misc/ProgressiveLightMap.js +12 -10
- package/examples/jsm/misc/RollerCoaster.js +7 -1
- package/examples/jsm/misc/Volume.js +20 -5
- package/examples/jsm/misc/VolumeSlice.js +3 -1
- package/examples/jsm/modifiers/CurveModifier.js +1 -0
- package/examples/jsm/modifiers/TessellateModifier.js +19 -19
- package/examples/jsm/nodes/Nodes.js +149 -335
- package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
- package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +36 -5
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +64 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +39 -26
- package/examples/jsm/nodes/accessors/MaterialNode.js +164 -39
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
- package/examples/jsm/nodes/accessors/ModelNode.js +13 -0
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
- package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +36 -19
- package/examples/jsm/nodes/accessors/Object3DNode.js +40 -12
- package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
- package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
- package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +55 -71
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +143 -13
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
- package/examples/jsm/nodes/accessors/UVNode.js +7 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
- package/examples/jsm/nodes/code/CodeNode.js +78 -0
- package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
- package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
- package/examples/jsm/nodes/{core → code}/FunctionNode.js +31 -9
- package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
- package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
- package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
- package/examples/jsm/nodes/core/AttributeNode.js +17 -9
- package/examples/jsm/nodes/core/BypassNode.js +11 -4
- package/examples/jsm/nodes/core/CacheNode.js +46 -0
- package/examples/jsm/nodes/core/ConstNode.js +3 -0
- package/examples/jsm/nodes/core/ContextNode.js +10 -1
- package/examples/jsm/nodes/core/IndexNode.js +66 -0
- package/examples/jsm/nodes/core/InputNode.js +26 -5
- package/examples/jsm/nodes/core/LightingModel.js +17 -0
- package/examples/jsm/nodes/core/Node.js +128 -37
- package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +287 -118
- package/examples/jsm/nodes/core/NodeCache.js +26 -0
- package/examples/jsm/nodes/core/NodeFrame.js +56 -5
- package/examples/jsm/nodes/core/NodeUtils.js +115 -28
- package/examples/jsm/nodes/core/PropertyNode.js +23 -2
- package/examples/jsm/nodes/core/StackNode.js +99 -0
- package/examples/jsm/nodes/core/TempNode.js +11 -3
- package/examples/jsm/nodes/core/UniformNode.js +16 -1
- package/examples/jsm/nodes/core/VarNode.js +19 -29
- package/examples/jsm/nodes/core/VaryingNode.js +15 -2
- package/examples/jsm/nodes/core/constants.js +6 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +33 -19
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +36 -20
- package/examples/jsm/nodes/display/ColorSpaceNode.js +60 -47
- package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +33 -20
- package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
- package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
- package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
- package/examples/jsm/nodes/display/ViewportNode.js +27 -18
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
- package/examples/jsm/nodes/fog/FogNode.js +12 -6
- package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +15 -16
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +3 -3
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +9 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +5 -5
- package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +4 -6
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -6
- package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +155 -45
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +5 -4
- package/examples/jsm/nodes/functions/material/getRoughness.js +6 -6
- package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
- package/examples/jsm/nodes/lighting/AONode.js +5 -3
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +153 -38
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
- package/examples/jsm/nodes/lighting/LightNode.js +57 -0
- package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
- package/examples/jsm/nodes/lighting/LightingContextNode.js +41 -17
- package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
- package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
- package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
- package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -24
- package/examples/jsm/nodes/materials/Materials.js +11 -55
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -26
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +38 -0
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -0
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +22 -110
- package/examples/jsm/nodes/materials/NodeMaterial.js +340 -67
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -32
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -13
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -3
- package/examples/jsm/nodes/math/CondNode.js +43 -17
- package/examples/jsm/nodes/math/MathNode.js +184 -73
- package/examples/jsm/nodes/math/OperatorNode.js +53 -3
- package/examples/jsm/nodes/procedural/CheckerNode.js +16 -8
- package/examples/jsm/nodes/shadernode/ShaderNode.js +206 -63
- package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
- package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
- package/examples/jsm/nodes/utils/JoinNode.js +4 -1
- package/examples/jsm/nodes/utils/LoopNode.js +186 -0
- package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
- package/examples/jsm/nodes/utils/OscNode.js +21 -14
- package/examples/jsm/nodes/utils/PackingNode.js +55 -0
- package/examples/jsm/nodes/utils/RemapNode.js +13 -5
- package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
- package/examples/jsm/nodes/utils/SplitNode.js +7 -5
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
- package/examples/jsm/nodes/utils/TimerNode.js +16 -6
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
- package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
- package/examples/jsm/objects/Lensflare.js +3 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -1
- package/examples/jsm/objects/Reflector.js +8 -5
- package/examples/jsm/objects/Refractor.js +5 -5
- package/examples/jsm/objects/ShadowMesh.js +3 -3
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -1
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/offscreen/scene.js +1 -0
- package/examples/jsm/physics/AmmoPhysics.js +27 -28
- package/examples/jsm/physics/RapierPhysics.js +199 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
- package/examples/jsm/postprocessing/BloomPass.js +7 -4
- package/examples/jsm/postprocessing/BokehPass.js +3 -8
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
- package/examples/jsm/postprocessing/EffectComposer.js +7 -95
- package/examples/jsm/postprocessing/FilmPass.js +1 -2
- package/examples/jsm/postprocessing/GlitchPass.js +0 -2
- package/examples/jsm/postprocessing/HalftonePass.js +0 -6
- package/examples/jsm/postprocessing/OutlinePass.js +8 -10
- package/examples/jsm/postprocessing/OutputPass.js +72 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +4 -26
- package/examples/jsm/postprocessing/SMAAPass.js +5 -8
- package/examples/jsm/postprocessing/SSAARenderPass.js +5 -5
- package/examples/jsm/postprocessing/SSAOPass.js +4 -14
- package/examples/jsm/postprocessing/SSRPass.js +3 -7
- package/examples/jsm/postprocessing/SavePass.js +5 -4
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
- package/examples/jsm/postprocessing/TexturePass.js +2 -3
- package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -21
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
- package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
- package/examples/jsm/renderers/common/Attributes.js +75 -0
- package/examples/jsm/renderers/common/Backend.js +162 -0
- package/examples/jsm/renderers/common/Background.js +134 -0
- package/examples/jsm/renderers/common/Binding.js +11 -0
- package/examples/jsm/renderers/common/Bindings.js +169 -0
- package/examples/jsm/renderers/common/Buffer.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
- package/examples/jsm/renderers/common/ChainMap.js +89 -0
- package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
- package/examples/jsm/renderers/common/Constants.js +14 -0
- package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
- package/examples/jsm/renderers/common/DataMap.js +54 -0
- package/examples/jsm/renderers/common/Geometries.js +215 -0
- package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
- package/examples/jsm/renderers/common/Pipeline.js +13 -0
- package/examples/jsm/renderers/common/Pipelines.js +321 -0
- package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
- package/examples/jsm/renderers/common/RenderContext.js +37 -0
- package/examples/jsm/renderers/common/RenderContexts.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
- package/examples/jsm/renderers/common/RenderLists.js +38 -0
- package/examples/jsm/renderers/common/RenderObject.js +113 -0
- package/examples/jsm/renderers/common/RenderObjects.js +92 -0
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
- package/examples/jsm/renderers/common/RenderTarget.js +15 -0
- package/examples/jsm/renderers/common/Renderer.js +864 -0
- package/examples/jsm/renderers/common/SampledTexture.js +80 -0
- package/examples/jsm/renderers/common/Sampler.js +18 -0
- package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +206 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
- package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
- package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +58 -50
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
- package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +139 -92
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
- package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
- package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +141 -296
- package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +937 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
- package/examples/jsm/shaders/BleachBypassShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +1 -2
- package/examples/jsm/shaders/BokehShader2.js +3 -0
- package/examples/jsm/shaders/ColorifyShader.js +2 -0
- package/examples/jsm/shaders/ConvolutionShader.js +2 -0
- package/examples/jsm/shaders/CopyShader.js +4 -2
- package/examples/jsm/shaders/DotScreenShader.js +2 -0
- package/examples/jsm/shaders/ExposureShader.js +44 -0
- package/examples/jsm/shaders/FilmShader.js +2 -0
- package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
- package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +15 -4
- package/examples/jsm/shaders/OutputShader.js +61 -0
- package/examples/jsm/shaders/RGBShiftShader.js +4 -2
- package/examples/jsm/shaders/SepiaShader.js +2 -0
- package/examples/jsm/shaders/ToonShader.js +13 -5
- package/examples/jsm/shaders/VelocityShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
- package/examples/jsm/shaders/VignetteShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
- package/examples/jsm/utils/LDrawUtils.js +4 -4
- package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
- package/examples/jsm/utils/SceneUtils.js +8 -4
- package/examples/jsm/utils/SkeletonUtils.js +27 -210
- package/examples/jsm/utils/TextureUtils.js +86 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
- package/examples/jsm/webxr/VRButton.js +1 -2
- package/examples/jsm/webxr/XRButton.js +198 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
- package/examples/jsm/webxr/XRPlanes.js +100 -0
- package/package.json +35 -87
- package/src/Three.Legacy.js +0 -319
- package/src/Three.js +4 -3
- package/src/animation/AnimationUtils.js +13 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +7 -2
- package/src/audio/PositionalAudio.js +8 -0
- package/src/cameras/Camera.js +5 -0
- package/src/cameras/CubeCamera.js +76 -13
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +22 -2
- package/src/core/BufferAttribute.js +146 -29
- package/src/core/BufferGeometry.js +2 -15
- package/src/core/GLBufferAttribute.js +2 -0
- package/src/core/InterleavedBufferAttribute.js +1 -1
- package/src/core/Object3D.js +37 -8
- package/src/extras/DataUtils.js +7 -1
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +5 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/curves/LineCurve.js +6 -4
- package/src/extras/curves/LineCurve3.js +13 -0
- package/src/geometries/BoxGeometry.js +10 -0
- package/src/geometries/CircleGeometry.js +11 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +11 -1
- package/src/geometries/EdgesGeometry.js +10 -0
- package/src/geometries/ExtrudeGeometry.js +11 -1
- package/src/geometries/LatheGeometry.js +10 -0
- package/src/geometries/PlaneGeometry.js +10 -0
- package/src/geometries/PolyhedronGeometry.js +10 -0
- package/src/geometries/RingGeometry.js +11 -1
- package/src/geometries/ShapeGeometry.js +10 -0
- package/src/geometries/SphereGeometry.js +12 -2
- package/src/geometries/TorusGeometry.js +11 -1
- package/src/geometries/TorusKnotGeometry.js +10 -0
- package/src/geometries/TubeGeometry.js +10 -0
- package/src/geometries/WireframeGeometry.js +10 -0
- package/src/helpers/Box3Helper.js +1 -2
- package/src/lights/DirectionalLight.js +1 -1
- package/src/lights/HemisphereLight.js +1 -1
- package/src/lights/SpotLight.js +1 -1
- package/src/loaders/AudioLoader.js +14 -8
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +5 -1
- package/src/loaders/Loader.js +2 -0
- package/src/loaders/MaterialLoader.js +9 -0
- package/src/loaders/ObjectLoader.js +10 -2
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +19 -4
- package/src/materials/MeshDistanceMaterial.js +0 -9
- package/src/materials/MeshPhysicalMaterial.js +32 -6
- package/src/materials/ShaderMaterial.js +6 -1
- package/src/math/Box2.js +3 -2
- package/src/math/Box3.js +49 -64
- package/src/math/Color.js +88 -66
- package/src/math/ColorManagement.js +75 -16
- package/src/math/Euler.js +2 -11
- package/src/math/Frustum.js +29 -5
- package/src/math/MathUtils.js +43 -1
- package/src/math/Matrix3.js +26 -6
- package/src/math/Matrix4.js +74 -19
- package/src/math/Plane.js +2 -2
- package/src/math/Quaternion.js +6 -0
- package/src/math/Ray.js +7 -7
- package/src/math/Triangle.js +37 -7
- package/src/math/Vector2.js +16 -0
- package/src/math/Vector3.js +10 -0
- package/src/math/interpolants/CubicInterpolant.js +1 -2
- package/src/objects/InstancedMesh.js +82 -1
- package/src/objects/Mesh.js +108 -76
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +123 -8
- package/src/objects/Sprite.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +12 -3
- package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
- package/src/renderers/WebGLRenderTarget.js +14 -2
- package/src/renderers/WebGLRenderer.js +1439 -1252
- package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +38 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -11
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +40 -10
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
- package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +135 -7
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +117 -2
- package/src/renderers/shaders/ShaderChunk.js +10 -12
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -9
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +5 -6
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -5
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -5
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +20 -14
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -5
- package/src/renderers/shaders/ShaderLib/points.glsl.js +17 -2
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +6 -1
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib.js +18 -4
- package/src/renderers/shaders/UniformsLib.js +27 -15
- package/src/renderers/shaders/UniformsUtils.js +12 -3
- package/src/renderers/webgl/WebGLBackground.js +23 -12
- package/src/renderers/webgl/WebGLBindingStates.js +13 -5
- package/src/renderers/webgl/WebGLCapabilities.js +1 -2
- package/src/renderers/webgl/WebGLClipping.js +7 -3
- package/src/renderers/webgl/WebGLGeometries.js +12 -0
- package/src/renderers/webgl/WebGLInfo.js +0 -1
- package/src/renderers/webgl/WebGLLights.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +123 -234
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
- package/src/renderers/webgl/WebGLObjects.js +23 -3
- package/src/renderers/webgl/WebGLProgram.js +154 -53
- package/src/renderers/webgl/WebGLPrograms.js +213 -130
- package/src/renderers/webgl/WebGLRenderStates.js +2 -2
- package/src/renderers/webgl/WebGLShadowMap.js +40 -27
- package/src/renderers/webgl/WebGLState.js +23 -9
- package/src/renderers/webgl/WebGLTextures.js +39 -19
- package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
- package/src/renderers/webgl/WebGLUtils.js +41 -29
- package/src/renderers/webvr/WebVRManager.js +12 -0
- package/src/renderers/webxr/WebXRController.js +3 -0
- package/src/renderers/webxr/WebXRManager.js +96 -134
- package/src/scenes/Scene.js +2 -18
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/CubeTexture.js +2 -2
- package/src/textures/DataTexture.js +2 -2
- package/src/textures/DepthTexture.js +22 -0
- package/src/textures/FramebufferTexture.js +1 -3
- package/src/textures/Source.js +4 -0
- package/src/textures/Texture.js +42 -13
- package/src/utils.js +13 -1
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +0 -9
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +0 -4
- package/examples/js/animation/AnimationClipCreator.js +0 -89
- package/examples/js/animation/CCDIKSolver.js +0 -416
- package/examples/js/animation/MMDAnimationHelper.js +0 -1046
- package/examples/js/animation/MMDPhysics.js +0 -1174
- package/examples/js/cameras/CinematicCamera.js +0 -168
- package/examples/js/controls/ArcballControls.js +0 -2770
- package/examples/js/controls/DragControls.js +0 -205
- package/examples/js/controls/FirstPersonControls.js +0 -312
- package/examples/js/controls/FlyControls.js +0 -321
- package/examples/js/controls/OrbitControls.js +0 -1101
- package/examples/js/controls/PointerLockControls.js +0 -144
- package/examples/js/controls/TrackballControls.js +0 -729
- package/examples/js/controls/TransformControls.js +0 -1301
- package/examples/js/csm/CSM.js +0 -347
- package/examples/js/csm/CSMFrustum.js +0 -127
- package/examples/js/csm/CSMHelper.js +0 -165
- package/examples/js/csm/CSMShader.js +0 -253
- package/examples/js/curves/CurveExtras.js +0 -348
- package/examples/js/curves/NURBSCurve.js +0 -63
- package/examples/js/curves/NURBSSurface.js +0 -48
- package/examples/js/curves/NURBSUtils.js +0 -439
- package/examples/js/effects/AnaglyphEffect.js +0 -86
- package/examples/js/effects/AsciiEffect.js +0 -260
- package/examples/js/effects/OutlineEffect.js +0 -450
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
- package/examples/js/effects/PeppersGhostEffect.js +0 -139
- package/examples/js/effects/StereoEffect.js +0 -46
- package/examples/js/environments/DebugEnvironment.js +0 -53
- package/examples/js/environments/RoomEnvironment.js +0 -124
- package/examples/js/exporters/ColladaExporter.js +0 -487
- package/examples/js/exporters/DRACOExporter.js +0 -212
- package/examples/js/exporters/EXRExporter.js +0 -455
- package/examples/js/exporters/GLTFExporter.js +0 -2367
- package/examples/js/exporters/MMDExporter.js +0 -187
- package/examples/js/exporters/OBJExporter.js +0 -260
- package/examples/js/exporters/PLYExporter.js +0 -427
- package/examples/js/exporters/STLExporter.js +0 -188
- package/examples/js/exporters/USDZExporter.js +0 -608
- package/examples/js/geometries/BoxLineGeometry.js +0 -59
- package/examples/js/geometries/ConvexGeometry.js +0 -53
- package/examples/js/geometries/DecalGeometry.js +0 -324
- package/examples/js/geometries/LightningStrike.js +0 -861
- package/examples/js/geometries/ParametricGeometries.js +0 -216
- package/examples/js/geometries/ParametricGeometry.js +0 -121
- package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
- package/examples/js/geometries/TeapotGeometry.js +0 -335
- package/examples/js/geometries/TextGeometry.js +0 -53
- package/examples/js/helpers/LightProbeHelper.js +0 -48
- package/examples/js/helpers/OctreeHelper.js +0 -76
- package/examples/js/helpers/PositionalAudioHelper.js +0 -91
- package/examples/js/helpers/RectAreaLightHelper.js +0 -73
- package/examples/js/helpers/VertexNormalsHelper.js +0 -74
- package/examples/js/helpers/VertexTangentsHelper.js +0 -68
- package/examples/js/helpers/ViewHelper.js +0 -281
- package/examples/js/interactive/HTMLMesh.js +0 -497
- package/examples/js/interactive/InteractiveGroup.js +0 -95
- package/examples/js/interactive/SelectionBox.js +0 -195
- package/examples/js/interactive/SelectionHelper.js +0 -83
- package/examples/js/libs/chevrotain.min.js +0 -3
- package/examples/js/libs/draco/draco_decoder.js +0 -52
- package/examples/js/libs/draco/draco_decoder.wasm +0 -0
- package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
- package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
- package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
- package/examples/js/libs/fflate.min.js +0 -7
- package/examples/js/libs/ktx-parse.umd.js +0 -1
- package/examples/js/libs/meshopt_decoder.js +0 -188
- package/examples/js/libs/opentype.min.js +0 -1
- package/examples/js/libs/stats.min.js +0 -5
- package/examples/js/lights/LightProbeGenerator.js +0 -221
- package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
- package/examples/js/lines/Line2.js +0 -19
- package/examples/js/lines/LineGeometry.js +0 -69
- package/examples/js/lines/LineMaterial.js +0 -635
- package/examples/js/lines/LineSegments2.js +0 -313
- package/examples/js/lines/LineSegmentsGeometry.js +0 -198
- package/examples/js/lines/Wireframe.js +0 -47
- package/examples/js/lines/WireframeGeometry2.js +0 -20
- package/examples/js/loaders/3DMLoader.js +0 -1273
- package/examples/js/loaders/3MFLoader.js +0 -1306
- package/examples/js/loaders/AMFLoader.js +0 -504
- package/examples/js/loaders/BVHLoader.js +0 -395
- package/examples/js/loaders/BasisTextureLoader.js +0 -706
- package/examples/js/loaders/ColladaLoader.js +0 -3690
- package/examples/js/loaders/DDSLoader.js +0 -244
- package/examples/js/loaders/DRACOLoader.js +0 -511
- package/examples/js/loaders/EXRLoader.js +0 -2039
- package/examples/js/loaders/FBXLoader.js +0 -3681
- package/examples/js/loaders/FontLoader.js +0 -160
- package/examples/js/loaders/GCodeLoader.js +0 -255
- package/examples/js/loaders/GLTFLoader.js +0 -3862
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
- package/examples/js/loaders/KMZLoader.js +0 -121
- package/examples/js/loaders/KTXLoader.js +0 -159
- package/examples/js/loaders/LDrawLoader.js +0 -2263
- package/examples/js/loaders/LUT3dlLoader.js +0 -135
- package/examples/js/loaders/LUTCubeLoader.js +0 -132
- package/examples/js/loaders/LWOLoader.js +0 -901
- package/examples/js/loaders/LogLuvLoader.js +0 -715
- package/examples/js/loaders/LottieLoader.js +0 -62
- package/examples/js/loaders/MD2Loader.js +0 -248
- package/examples/js/loaders/MDDLoader.js +0 -91
- package/examples/js/loaders/MMDLoader.js +0 -1915
- package/examples/js/loaders/MTLLoader.js +0 -472
- package/examples/js/loaders/NRRDLoader.js +0 -609
- package/examples/js/loaders/OBJLoader.js +0 -789
- package/examples/js/loaders/PCDLoader.js +0 -413
- package/examples/js/loaders/PDBLoader.js +0 -317
- package/examples/js/loaders/PLYLoader.js +0 -576
- package/examples/js/loaders/PRWMLoader.js +0 -249
- package/examples/js/loaders/PVRLoader.js +0 -218
- package/examples/js/loaders/RGBELoader.js +0 -442
- package/examples/js/loaders/RGBMLoader.js +0 -1354
- package/examples/js/loaders/STLLoader.js +0 -364
- package/examples/js/loaders/SVGLoader.js +0 -2783
- package/examples/js/loaders/TDSLoader.js +0 -992
- package/examples/js/loaders/TGALoader.js +0 -484
- package/examples/js/loaders/TIFFLoader.js +0 -30
- package/examples/js/loaders/TTFLoader.js +0 -203
- package/examples/js/loaders/TiltLoader.js +0 -459
- package/examples/js/loaders/VOXLoader.js +0 -240
- package/examples/js/loaders/VRMLLoader.js +0 -3140
- package/examples/js/loaders/VTKLoader.js +0 -1078
- package/examples/js/loaders/XYZLoader.js +0 -89
- package/examples/js/loaders/lwo/IFFParser.js +0 -1067
- package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
- package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
- package/examples/js/materials/MeshGouraudMaterial.js +0 -387
- package/examples/js/math/Capsule.js +0 -103
- package/examples/js/math/ColorConverter.js +0 -33
- package/examples/js/math/ConvexHull.js +0 -1154
- package/examples/js/math/ImprovedNoise.js +0 -66
- package/examples/js/math/Lut.js +0 -164
- package/examples/js/math/MeshSurfaceSampler.js +0 -171
- package/examples/js/math/OBB.js +0 -382
- package/examples/js/math/Octree.js +0 -410
- package/examples/js/math/SimplexNoise.js +0 -445
- package/examples/js/misc/ConvexObjectBreaker.js +0 -474
- package/examples/js/misc/GPUComputationRenderer.js +0 -393
- package/examples/js/misc/Gyroscope.js +0 -56
- package/examples/js/misc/MD2Character.js +0 -235
- package/examples/js/misc/MD2CharacterComplex.js +0 -513
- package/examples/js/misc/MorphAnimMesh.js +0 -63
- package/examples/js/misc/MorphBlendMesh.js +0 -265
- package/examples/js/misc/ProgressiveLightMap.js +0 -335
- package/examples/js/misc/RollerCoaster.js +0 -430
- package/examples/js/misc/TubePainter.js +0 -167
- package/examples/js/misc/Volume.js +0 -437
- package/examples/js/misc/VolumeSlice.js +0 -214
- package/examples/js/modifiers/CurveModifier.js +0 -309
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
- package/examples/js/modifiers/SimplifyModifier.js +0 -465
- package/examples/js/modifiers/TessellateModifier.js +0 -276
- package/examples/js/objects/GroundProjectedEnv.js +0 -181
- package/examples/js/objects/Lensflare.js +0 -356
- package/examples/js/objects/LightningStorm.js +0 -206
- package/examples/js/objects/MarchingCubes.js +0 -759
- package/examples/js/objects/Reflector.js +0 -216
- package/examples/js/objects/ReflectorForSSRPass.js +0 -315
- package/examples/js/objects/Refractor.js +0 -283
- package/examples/js/objects/ShadowMesh.js +0 -59
- package/examples/js/objects/Sky.js +0 -218
- package/examples/js/objects/Water.js +0 -292
- package/examples/js/objects/Water2.js +0 -307
- package/examples/js/physics/AmmoPhysics.js +0 -259
- package/examples/js/physics/OimoPhysics.js +0 -217
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
- package/examples/js/postprocessing/AfterimagePass.js +0 -77
- package/examples/js/postprocessing/BloomPass.js +0 -135
- package/examples/js/postprocessing/BokehPass.js +0 -120
- package/examples/js/postprocessing/ClearPass.js +0 -39
- package/examples/js/postprocessing/CubeTexturePass.js +0 -60
- package/examples/js/postprocessing/DotScreenPass.js +0 -51
- package/examples/js/postprocessing/EffectComposer.js +0 -272
- package/examples/js/postprocessing/FilmPass.js +0 -52
- package/examples/js/postprocessing/GlitchPass.js +0 -104
- package/examples/js/postprocessing/HalftonePass.js +0 -75
- package/examples/js/postprocessing/LUTPass.js +0 -171
- package/examples/js/postprocessing/MaskPass.js +0 -95
- package/examples/js/postprocessing/OutlinePass.js +0 -598
- package/examples/js/postprocessing/Pass.js +0 -72
- package/examples/js/postprocessing/RenderPass.js +0 -70
- package/examples/js/postprocessing/RenderPixelatedPass.js +0 -215
- package/examples/js/postprocessing/SAOPass.js +0 -374
- package/examples/js/postprocessing/SMAAPass.js +0 -170
- package/examples/js/postprocessing/SSAARenderPass.js +0 -156
- package/examples/js/postprocessing/SSAOPass.js +0 -365
- package/examples/js/postprocessing/SSRPass.js +0 -567
- package/examples/js/postprocessing/SavePass.js +0 -59
- package/examples/js/postprocessing/ShaderPass.js +0 -64
- package/examples/js/postprocessing/TAARenderPass.js +0 -130
- package/examples/js/postprocessing/TexturePass.js +0 -49
- package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
- package/examples/js/renderers/CSS2DRenderer.js +0 -178
- package/examples/js/renderers/CSS3DRenderer.js +0 -237
- package/examples/js/renderers/Projector.js +0 -818
- package/examples/js/renderers/SVGRenderer.js +0 -491
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
- package/examples/js/shaders/AfterimageShader.js +0 -60
- package/examples/js/shaders/BasicShader.js +0 -27
- package/examples/js/shaders/BleachBypassShader.js +0 -62
- package/examples/js/shaders/BlendShader.js +0 -54
- package/examples/js/shaders/BokehShader.js +0 -156
- package/examples/js/shaders/BokehShader2.js +0 -419
- package/examples/js/shaders/BrightnessContrastShader.js +0 -58
- package/examples/js/shaders/ColorCorrectionShader.js +0 -52
- package/examples/js/shaders/ColorifyShader.js +0 -47
- package/examples/js/shaders/ConvolutionShader.js +0 -92
- package/examples/js/shaders/CopyShader.js +0 -45
- package/examples/js/shaders/DOFMipMapShader.js +0 -60
- package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
- package/examples/js/shaders/DigitalGlitch.js +0 -127
- package/examples/js/shaders/DotScreenShader.js +0 -72
- package/examples/js/shaders/FXAAShader.js +0 -284
- package/examples/js/shaders/FilmShader.js +0 -110
- package/examples/js/shaders/FocusShader.js +0 -95
- package/examples/js/shaders/FreiChenShader.js +0 -93
- package/examples/js/shaders/GammaCorrectionShader.js +0 -41
- package/examples/js/shaders/GodRaysShader.js +0 -284
- package/examples/js/shaders/HalftoneShader.js +0 -336
- package/examples/js/shaders/HorizontalBlurShader.js +0 -59
- package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
- package/examples/js/shaders/HueSaturationShader.js +0 -69
- package/examples/js/shaders/KaleidoShader.js +0 -60
- package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
- package/examples/js/shaders/LuminosityShader.js +0 -46
- package/examples/js/shaders/MMDToonShader.js +0 -94
- package/examples/js/shaders/MirrorShader.js +0 -56
- package/examples/js/shaders/NormalMapShader.js +0 -55
- package/examples/js/shaders/RGBShiftShader.js +0 -56
- package/examples/js/shaders/SAOShader.js +0 -209
- package/examples/js/shaders/SMAAShader.js +0 -454
- package/examples/js/shaders/SSAOShader.js +0 -295
- package/examples/js/shaders/SSRShader.js +0 -381
- package/examples/js/shaders/SepiaShader.js +0 -52
- package/examples/js/shaders/SobelOperatorShader.js +0 -88
- package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
- package/examples/js/shaders/TechnicolorShader.js +0 -43
- package/examples/js/shaders/ToneMapShader.js +0 -84
- package/examples/js/shaders/ToonShader.js +0 -335
- package/examples/js/shaders/TriangleBlurShader.js +0 -70
- package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
- package/examples/js/shaders/VelocityShader.js +0 -126
- package/examples/js/shaders/VerticalBlurShader.js +0 -59
- package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
- package/examples/js/shaders/VignetteShader.js +0 -53
- package/examples/js/shaders/VolumeShader.js +0 -296
- package/examples/js/shaders/WaterRefractionShader.js +0 -84
- package/examples/js/textures/FlakesTexture.js +0 -40
- package/examples/js/utils/BufferGeometryUtils.js +0 -1160
- package/examples/js/utils/CameraUtils.js +0 -71
- package/examples/js/utils/GPUStatsPanel.js +0 -125
- package/examples/js/utils/GeometryCompressionUtils.js +0 -549
- package/examples/js/utils/GeometryUtils.js +0 -168
- package/examples/js/utils/LDrawUtils.js +0 -179
- package/examples/js/utils/PackedPhongMaterial.js +0 -109
- package/examples/js/utils/SceneUtils.js +0 -214
- package/examples/js/utils/ShadowMapViewer.js +0 -183
- package/examples/js/utils/SkeletonUtils.js +0 -493
- package/examples/js/utils/UVsDebug.js +0 -143
- package/examples/js/utils/WorkerPool.js +0 -105
- package/examples/jsm/exporters/ColladaExporter.js +0 -713
- package/examples/jsm/geometries/LightningStrike.js +0 -1017
- package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
- package/examples/jsm/libs/OimoPhysics/index.js +0 -43
- package/examples/jsm/libs/flow.module.js +0 -4552
- package/examples/jsm/libs/tween.module.min.js +0 -3
- package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
- package/examples/jsm/loaders/IFCLoader.js +0 -2431
- package/examples/jsm/loaders/PRWMLoader.js +0 -299
- package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
- package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
- package/examples/jsm/node-editor/NodeEditor.js +0 -857
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
- package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
- package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
- package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
- package/examples/jsm/node-editor/core/BaseNode.js +0 -96
- package/examples/jsm/node-editor/core/DataFile.js +0 -59
- package/examples/jsm/node-editor/core/FileEditor.js +0 -20
- package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
- package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
- package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
- package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
- package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
- package/examples/jsm/node-editor/examples/matcap.json +0 -1
- package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
- package/examples/jsm/node-editor/examples/rim.json +0 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
- package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
- package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
- package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
- package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
- package/examples/jsm/node-editor/math/DotEditor.js +0 -35
- package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
- package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
- package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
- package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
- package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
- package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
- package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
- package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
- package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
- package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
- package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
- package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
- package/examples/jsm/nodes/core/CodeNode.js +0 -50
- package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
- package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -21
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
- package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
- package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
- package/examples/jsm/objects/LightningStorm.js +0 -245
- package/examples/jsm/physics/OimoPhysics.js +0 -231
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
- package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
- package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
- package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
- package/examples/jsm/shaders/ToneMapShader.js +0 -73
- package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
- package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
- /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
- /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
- /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
- /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
- /package/examples/{js → jsm}/libs/draco/README.md +0 -0
- /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
- /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
- /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
- /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import {
|
|
2
2
|
REVISION,
|
|
3
3
|
BackSide,
|
|
4
|
-
DoubleSide,
|
|
5
4
|
FrontSide,
|
|
5
|
+
DoubleSide,
|
|
6
6
|
RGBAFormat,
|
|
7
7
|
HalfFloatType,
|
|
8
8
|
FloatType,
|
|
9
9
|
UnsignedByteType,
|
|
10
|
-
LinearEncoding,
|
|
11
10
|
NoToneMapping,
|
|
12
|
-
LinearMipmapLinearFilter
|
|
11
|
+
LinearMipmapLinearFilter,
|
|
12
|
+
SRGBColorSpace,
|
|
13
|
+
LinearSRGBColorSpace,
|
|
14
|
+
sRGBEncoding,
|
|
15
|
+
LinearEncoding,
|
|
16
|
+
RGBAIntegerFormat,
|
|
17
|
+
RGIntegerFormat,
|
|
18
|
+
RedIntegerFormat,
|
|
19
|
+
UnsignedIntType,
|
|
20
|
+
UnsignedShortType,
|
|
21
|
+
UnsignedInt248Type,
|
|
22
|
+
UnsignedShort4444Type,
|
|
23
|
+
UnsignedShort5551Type,
|
|
24
|
+
WebGLCoordinateSystem
|
|
13
25
|
} from '../constants.js';
|
|
14
|
-
import {
|
|
26
|
+
import { Color } from '../math/Color.js';
|
|
15
27
|
import { Frustum } from '../math/Frustum.js';
|
|
16
28
|
import { Matrix4 } from '../math/Matrix4.js';
|
|
17
29
|
import { Vector2 } from '../math/Vector2.js';
|
|
18
30
|
import { Vector3 } from '../math/Vector3.js';
|
|
19
31
|
import { Vector4 } from '../math/Vector4.js';
|
|
32
|
+
import { floorPowerOfTwo } from '../math/MathUtils.js';
|
|
20
33
|
import { WebGLAnimation } from './webgl/WebGLAnimation.js';
|
|
21
34
|
import { WebGLAttributes } from './webgl/WebGLAttributes.js';
|
|
22
35
|
import { WebGLBackground } from './webgl/WebGLBackground.js';
|
|
@@ -56,1138 +69,1222 @@ function createCanvasElement() {
|
|
|
56
69
|
|
|
57
70
|
}
|
|
58
71
|
|
|
59
|
-
|
|
72
|
+
class WebGLRenderer {
|
|
60
73
|
|
|
61
|
-
|
|
74
|
+
constructor( parameters = {} ) {
|
|
62
75
|
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
const {
|
|
77
|
+
canvas = createCanvasElement(),
|
|
78
|
+
context = null,
|
|
79
|
+
depth = true,
|
|
80
|
+
stencil = true,
|
|
81
|
+
alpha = false,
|
|
82
|
+
antialias = false,
|
|
83
|
+
premultipliedAlpha = true,
|
|
84
|
+
preserveDrawingBuffer = false,
|
|
85
|
+
powerPreference = 'default',
|
|
86
|
+
failIfMajorPerformanceCaveat = false,
|
|
87
|
+
} = parameters;
|
|
65
88
|
|
|
66
|
-
|
|
67
|
-
_stencil = parameters.stencil !== undefined ? parameters.stencil : true,
|
|
68
|
-
_antialias = parameters.antialias !== undefined ? parameters.antialias : false,
|
|
69
|
-
_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,
|
|
70
|
-
_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,
|
|
71
|
-
_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',
|
|
72
|
-
_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;
|
|
89
|
+
this.isWebGLRenderer = true;
|
|
73
90
|
|
|
74
|
-
|
|
91
|
+
let _alpha;
|
|
75
92
|
|
|
76
|
-
|
|
93
|
+
if ( context !== null ) {
|
|
77
94
|
|
|
78
|
-
|
|
95
|
+
_alpha = context.getContextAttributes().alpha;
|
|
79
96
|
|
|
80
|
-
|
|
97
|
+
} else {
|
|
81
98
|
|
|
82
|
-
|
|
99
|
+
_alpha = alpha;
|
|
83
100
|
|
|
84
|
-
|
|
101
|
+
}
|
|
85
102
|
|
|
86
|
-
|
|
87
|
-
|
|
103
|
+
const uintClearColor = new Uint32Array( 4 );
|
|
104
|
+
const intClearColor = new Int32Array( 4 );
|
|
88
105
|
|
|
89
|
-
|
|
90
|
-
|
|
106
|
+
let currentRenderList = null;
|
|
107
|
+
let currentRenderState = null;
|
|
91
108
|
|
|
92
|
-
|
|
93
|
-
|
|
109
|
+
// render() can be called from within a callback triggered by another render.
|
|
110
|
+
// We track this so that the nested render call gets its list and state isolated from the parent render call.
|
|
94
111
|
|
|
95
|
-
|
|
112
|
+
const renderListStack = [];
|
|
113
|
+
const renderStateStack = [];
|
|
96
114
|
|
|
97
|
-
|
|
115
|
+
// public properties
|
|
98
116
|
|
|
99
|
-
|
|
100
|
-
this.debug = {
|
|
117
|
+
this.domElement = canvas;
|
|
101
118
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* @type {boolean}
|
|
105
|
-
*/
|
|
106
|
-
checkShaderErrors: true
|
|
107
|
-
};
|
|
119
|
+
// Debug configuration container
|
|
120
|
+
this.debug = {
|
|
108
121
|
|
|
109
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Enables error checking and reporting when shader programs are being compiled
|
|
124
|
+
* @type {boolean}
|
|
125
|
+
*/
|
|
126
|
+
checkShaderErrors: true,
|
|
127
|
+
/**
|
|
128
|
+
* Callback for custom error reporting.
|
|
129
|
+
* @type {?Function}
|
|
130
|
+
*/
|
|
131
|
+
onShaderError: null
|
|
132
|
+
};
|
|
110
133
|
|
|
111
|
-
|
|
112
|
-
this.autoClearColor = true;
|
|
113
|
-
this.autoClearDepth = true;
|
|
114
|
-
this.autoClearStencil = true;
|
|
134
|
+
// clearing
|
|
115
135
|
|
|
116
|
-
|
|
136
|
+
this.autoClear = true;
|
|
137
|
+
this.autoClearColor = true;
|
|
138
|
+
this.autoClearDepth = true;
|
|
139
|
+
this.autoClearStencil = true;
|
|
117
140
|
|
|
118
|
-
|
|
141
|
+
// scene graph
|
|
119
142
|
|
|
120
|
-
|
|
143
|
+
this.sortObjects = true;
|
|
121
144
|
|
|
122
|
-
|
|
123
|
-
this.localClippingEnabled = false;
|
|
145
|
+
// user-defined clipping
|
|
124
146
|
|
|
125
|
-
|
|
147
|
+
this.clippingPlanes = [];
|
|
148
|
+
this.localClippingEnabled = false;
|
|
126
149
|
|
|
127
|
-
|
|
150
|
+
// physically based shading
|
|
128
151
|
|
|
129
|
-
|
|
152
|
+
this.outputColorSpace = SRGBColorSpace;
|
|
130
153
|
|
|
131
|
-
|
|
154
|
+
// physical lights
|
|
132
155
|
|
|
133
|
-
|
|
156
|
+
this.useLegacyLights = true;
|
|
134
157
|
|
|
135
|
-
|
|
136
|
-
this.toneMappingExposure = 1.0;
|
|
158
|
+
// tone mapping
|
|
137
159
|
|
|
138
|
-
|
|
160
|
+
this.toneMapping = NoToneMapping;
|
|
161
|
+
this.toneMappingExposure = 1.0;
|
|
139
162
|
|
|
140
|
-
|
|
163
|
+
// internal properties
|
|
141
164
|
|
|
142
|
-
|
|
165
|
+
const _this = this;
|
|
143
166
|
|
|
144
|
-
|
|
167
|
+
let _isContextLost = false;
|
|
145
168
|
|
|
146
|
-
|
|
147
|
-
let _currentActiveMipmapLevel = 0;
|
|
148
|
-
let _currentRenderTarget = null;
|
|
149
|
-
let _currentMaterialId = - 1;
|
|
169
|
+
// internal state cache
|
|
150
170
|
|
|
151
|
-
|
|
171
|
+
let _currentActiveCubeFace = 0;
|
|
172
|
+
let _currentActiveMipmapLevel = 0;
|
|
173
|
+
let _currentRenderTarget = null;
|
|
174
|
+
let _currentMaterialId = - 1;
|
|
152
175
|
|
|
153
|
-
|
|
154
|
-
const _currentScissor = new Vector4();
|
|
155
|
-
let _currentScissorTest = null;
|
|
176
|
+
let _currentCamera = null;
|
|
156
177
|
|
|
157
|
-
|
|
178
|
+
const _currentViewport = new Vector4();
|
|
179
|
+
const _currentScissor = new Vector4();
|
|
180
|
+
let _currentScissorTest = null;
|
|
158
181
|
|
|
159
|
-
|
|
160
|
-
|
|
182
|
+
const _currentClearColor = new Color( 0x000000 );
|
|
183
|
+
let _currentClearAlpha = 0;
|
|
161
184
|
|
|
162
|
-
|
|
163
|
-
let _opaqueSort = null;
|
|
164
|
-
let _transparentSort = null;
|
|
185
|
+
//
|
|
165
186
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
let _scissorTest = false;
|
|
187
|
+
let _width = canvas.width;
|
|
188
|
+
let _height = canvas.height;
|
|
169
189
|
|
|
170
|
-
|
|
190
|
+
let _pixelRatio = 1;
|
|
191
|
+
let _opaqueSort = null;
|
|
192
|
+
let _transparentSort = null;
|
|
171
193
|
|
|
172
|
-
|
|
194
|
+
const _viewport = new Vector4( 0, 0, _width, _height );
|
|
195
|
+
const _scissor = new Vector4( 0, 0, _width, _height );
|
|
196
|
+
let _scissorTest = false;
|
|
173
197
|
|
|
174
|
-
|
|
198
|
+
// frustum
|
|
175
199
|
|
|
176
|
-
|
|
177
|
-
let _localClippingEnabled = false;
|
|
200
|
+
const _frustum = new Frustum();
|
|
178
201
|
|
|
179
|
-
|
|
202
|
+
// clipping
|
|
180
203
|
|
|
181
|
-
|
|
204
|
+
let _clippingEnabled = false;
|
|
205
|
+
let _localClippingEnabled = false;
|
|
182
206
|
|
|
183
|
-
|
|
207
|
+
// transmission
|
|
184
208
|
|
|
185
|
-
|
|
209
|
+
let _transmissionRenderTarget = null;
|
|
186
210
|
|
|
187
|
-
|
|
188
|
-
const _vector3 = new Vector3();
|
|
211
|
+
// camera matrices cache
|
|
189
212
|
|
|
190
|
-
|
|
213
|
+
const _projScreenMatrix = new Matrix4();
|
|
191
214
|
|
|
192
|
-
|
|
215
|
+
const _vector2 = new Vector2();
|
|
216
|
+
const _vector3 = new Vector3();
|
|
193
217
|
|
|
194
|
-
|
|
218
|
+
const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };
|
|
195
219
|
|
|
196
|
-
|
|
220
|
+
function getTargetPixelRatio() {
|
|
197
221
|
|
|
198
|
-
|
|
222
|
+
return _currentRenderTarget === null ? _pixelRatio : 1;
|
|
199
223
|
|
|
200
|
-
|
|
224
|
+
}
|
|
201
225
|
|
|
202
|
-
|
|
226
|
+
// initialize
|
|
203
227
|
|
|
204
|
-
|
|
228
|
+
let _gl = context;
|
|
205
229
|
|
|
206
|
-
|
|
207
|
-
const context = _canvas.getContext( contextName, contextAttributes );
|
|
208
|
-
if ( context !== null ) return context;
|
|
230
|
+
function getContext( contextNames, contextAttributes ) {
|
|
209
231
|
|
|
210
|
-
|
|
232
|
+
for ( let i = 0; i < contextNames.length; i ++ ) {
|
|
211
233
|
|
|
212
|
-
|
|
234
|
+
const contextName = contextNames[ i ];
|
|
235
|
+
const context = canvas.getContext( contextName, contextAttributes );
|
|
236
|
+
if ( context !== null ) return context;
|
|
213
237
|
|
|
214
|
-
|
|
238
|
+
}
|
|
215
239
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const contextAttributes = {
|
|
219
|
-
alpha: true,
|
|
220
|
-
depth: _depth,
|
|
221
|
-
stencil: _stencil,
|
|
222
|
-
antialias: _antialias,
|
|
223
|
-
premultipliedAlpha: _premultipliedAlpha,
|
|
224
|
-
preserveDrawingBuffer: _preserveDrawingBuffer,
|
|
225
|
-
powerPreference: _powerPreference,
|
|
226
|
-
failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat
|
|
227
|
-
};
|
|
240
|
+
return null;
|
|
228
241
|
|
|
229
|
-
|
|
230
|
-
if ( 'setAttribute' in _canvas ) _canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );
|
|
242
|
+
}
|
|
231
243
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
244
|
+
try {
|
|
245
|
+
|
|
246
|
+
const contextAttributes = {
|
|
247
|
+
alpha: true,
|
|
248
|
+
depth,
|
|
249
|
+
stencil,
|
|
250
|
+
antialias,
|
|
251
|
+
premultipliedAlpha,
|
|
252
|
+
preserveDrawingBuffer,
|
|
253
|
+
powerPreference,
|
|
254
|
+
failIfMajorPerformanceCaveat,
|
|
255
|
+
};
|
|
236
256
|
|
|
237
|
-
|
|
257
|
+
// OffscreenCanvas does not have setAttribute, see #22811
|
|
258
|
+
if ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );
|
|
238
259
|
|
|
239
|
-
|
|
260
|
+
// event listeners must be registered before WebGL context is created, see #12753
|
|
261
|
+
canvas.addEventListener( 'webglcontextlost', onContextLost, false );
|
|
262
|
+
canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );
|
|
263
|
+
canvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );
|
|
240
264
|
|
|
241
|
-
if (
|
|
265
|
+
if ( _gl === null ) {
|
|
242
266
|
|
|
243
|
-
contextNames
|
|
267
|
+
const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];
|
|
244
268
|
|
|
245
|
-
|
|
269
|
+
if ( _this.isWebGL1Renderer === true ) {
|
|
246
270
|
|
|
247
|
-
|
|
271
|
+
contextNames.shift();
|
|
248
272
|
|
|
249
|
-
|
|
273
|
+
}
|
|
250
274
|
|
|
251
|
-
|
|
275
|
+
_gl = getContext( contextNames, contextAttributes );
|
|
252
276
|
|
|
253
|
-
|
|
277
|
+
if ( _gl === null ) {
|
|
254
278
|
|
|
255
|
-
|
|
279
|
+
if ( getContext( contextNames ) ) {
|
|
280
|
+
|
|
281
|
+
throw new Error( 'Error creating WebGL context with your selected attributes.' );
|
|
282
|
+
|
|
283
|
+
} else {
|
|
256
284
|
|
|
257
|
-
|
|
285
|
+
throw new Error( 'Error creating WebGL context.' );
|
|
286
|
+
|
|
287
|
+
}
|
|
258
288
|
|
|
259
289
|
}
|
|
260
290
|
|
|
261
291
|
}
|
|
262
292
|
|
|
263
|
-
|
|
293
|
+
if ( typeof WebGLRenderingContext !== 'undefined' && _gl instanceof WebGLRenderingContext ) { // @deprecated, r153
|
|
264
294
|
|
|
265
|
-
|
|
295
|
+
console.warn( 'THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163.' );
|
|
266
296
|
|
|
267
|
-
|
|
297
|
+
}
|
|
268
298
|
|
|
269
|
-
|
|
299
|
+
// Some experimental-webgl implementations do not have getShaderPrecisionFormat
|
|
270
300
|
|
|
271
|
-
|
|
301
|
+
if ( _gl.getShaderPrecisionFormat === undefined ) {
|
|
272
302
|
|
|
273
|
-
|
|
303
|
+
_gl.getShaderPrecisionFormat = function () {
|
|
304
|
+
|
|
305
|
+
return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };
|
|
306
|
+
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
} catch ( error ) {
|
|
312
|
+
|
|
313
|
+
console.error( 'THREE.WebGLRenderer: ' + error.message );
|
|
314
|
+
throw error;
|
|
274
315
|
|
|
275
316
|
}
|
|
276
317
|
|
|
277
|
-
|
|
318
|
+
let extensions, capabilities, state, info;
|
|
319
|
+
let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;
|
|
320
|
+
let programCache, materials, renderLists, renderStates, clipping, shadowMap;
|
|
278
321
|
|
|
279
|
-
|
|
280
|
-
throw error;
|
|
322
|
+
let background, morphtargets, bufferRenderer, indexedBufferRenderer;
|
|
281
323
|
|
|
282
|
-
|
|
324
|
+
let utils, bindingStates, uniformsGroups;
|
|
283
325
|
|
|
284
|
-
|
|
285
|
-
let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;
|
|
286
|
-
let programCache, materials, renderLists, renderStates, clipping, shadowMap;
|
|
326
|
+
function initGLContext() {
|
|
287
327
|
|
|
288
|
-
|
|
328
|
+
extensions = new WebGLExtensions( _gl );
|
|
289
329
|
|
|
290
|
-
|
|
330
|
+
capabilities = new WebGLCapabilities( _gl, extensions, parameters );
|
|
291
331
|
|
|
292
|
-
|
|
332
|
+
extensions.init( capabilities );
|
|
293
333
|
|
|
294
|
-
|
|
334
|
+
utils = new WebGLUtils( _gl, extensions, capabilities );
|
|
295
335
|
|
|
296
|
-
|
|
336
|
+
state = new WebGLState( _gl, extensions, capabilities );
|
|
297
337
|
|
|
298
|
-
|
|
338
|
+
info = new WebGLInfo( _gl );
|
|
339
|
+
properties = new WebGLProperties();
|
|
340
|
+
textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
|
|
341
|
+
cubemaps = new WebGLCubeMaps( _this );
|
|
342
|
+
cubeuvmaps = new WebGLCubeUVMaps( _this );
|
|
343
|
+
attributes = new WebGLAttributes( _gl, capabilities );
|
|
344
|
+
bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );
|
|
345
|
+
geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
|
|
346
|
+
objects = new WebGLObjects( _gl, geometries, attributes, info );
|
|
347
|
+
morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
|
|
348
|
+
clipping = new WebGLClipping( properties );
|
|
349
|
+
programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
|
|
350
|
+
materials = new WebGLMaterials( _this, properties );
|
|
351
|
+
renderLists = new WebGLRenderLists();
|
|
352
|
+
renderStates = new WebGLRenderStates( extensions, capabilities );
|
|
353
|
+
background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
|
|
354
|
+
shadowMap = new WebGLShadowMap( _this, objects, capabilities );
|
|
355
|
+
uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
|
|
299
356
|
|
|
300
|
-
|
|
357
|
+
bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );
|
|
358
|
+
indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );
|
|
301
359
|
|
|
302
|
-
|
|
360
|
+
info.programs = programCache.programs;
|
|
303
361
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
|
|
312
|
-
objects = new WebGLObjects( _gl, geometries, attributes, info );
|
|
313
|
-
morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
|
|
314
|
-
clipping = new WebGLClipping( properties );
|
|
315
|
-
programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
|
|
316
|
-
materials = new WebGLMaterials( _this, properties );
|
|
317
|
-
renderLists = new WebGLRenderLists();
|
|
318
|
-
renderStates = new WebGLRenderStates( extensions, capabilities );
|
|
319
|
-
background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, _premultipliedAlpha );
|
|
320
|
-
shadowMap = new WebGLShadowMap( _this, objects, capabilities );
|
|
321
|
-
uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
|
|
362
|
+
_this.capabilities = capabilities;
|
|
363
|
+
_this.extensions = extensions;
|
|
364
|
+
_this.properties = properties;
|
|
365
|
+
_this.renderLists = renderLists;
|
|
366
|
+
_this.shadowMap = shadowMap;
|
|
367
|
+
_this.state = state;
|
|
368
|
+
_this.info = info;
|
|
322
369
|
|
|
323
|
-
|
|
324
|
-
indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );
|
|
370
|
+
}
|
|
325
371
|
|
|
326
|
-
|
|
372
|
+
initGLContext();
|
|
327
373
|
|
|
328
|
-
|
|
329
|
-
_this.extensions = extensions;
|
|
330
|
-
_this.properties = properties;
|
|
331
|
-
_this.renderLists = renderLists;
|
|
332
|
-
_this.shadowMap = shadowMap;
|
|
333
|
-
_this.state = state;
|
|
334
|
-
_this.info = info;
|
|
374
|
+
// xr
|
|
335
375
|
|
|
336
|
-
|
|
376
|
+
const xr = ( typeof navigator !== 'undefined' && 'xr' in navigator ) ? new WebXRManager( _this, _gl ) : new WebVRManager( _this );
|
|
337
377
|
|
|
338
|
-
|
|
378
|
+
this.xr = xr;
|
|
339
379
|
|
|
340
|
-
|
|
380
|
+
// API
|
|
341
381
|
|
|
342
|
-
|
|
382
|
+
this.getContext = function () {
|
|
343
383
|
|
|
344
|
-
|
|
384
|
+
return _gl;
|
|
345
385
|
|
|
346
|
-
|
|
386
|
+
};
|
|
347
387
|
|
|
348
|
-
|
|
388
|
+
this.getContextAttributes = function () {
|
|
349
389
|
|
|
350
|
-
|
|
390
|
+
return _gl.getContextAttributes();
|
|
351
391
|
|
|
352
|
-
|
|
392
|
+
};
|
|
353
393
|
|
|
354
|
-
|
|
394
|
+
this.forceContextLoss = function () {
|
|
355
395
|
|
|
356
|
-
|
|
396
|
+
const extension = extensions.get( 'WEBGL_lose_context' );
|
|
397
|
+
if ( extension ) extension.loseContext();
|
|
357
398
|
|
|
358
|
-
|
|
399
|
+
};
|
|
359
400
|
|
|
360
|
-
|
|
361
|
-
if ( extension ) extension.loseContext();
|
|
401
|
+
this.forceContextRestore = function () {
|
|
362
402
|
|
|
363
|
-
|
|
403
|
+
const extension = extensions.get( 'WEBGL_lose_context' );
|
|
404
|
+
if ( extension ) extension.restoreContext();
|
|
364
405
|
|
|
365
|
-
|
|
406
|
+
};
|
|
366
407
|
|
|
367
|
-
|
|
368
|
-
if ( extension ) extension.restoreContext();
|
|
408
|
+
this.getPixelRatio = function () {
|
|
369
409
|
|
|
370
|
-
|
|
410
|
+
return _pixelRatio;
|
|
371
411
|
|
|
372
|
-
|
|
412
|
+
};
|
|
373
413
|
|
|
374
|
-
|
|
414
|
+
this.setPixelRatio = function ( value ) {
|
|
375
415
|
|
|
376
|
-
|
|
416
|
+
if ( value === undefined ) return;
|
|
377
417
|
|
|
378
|
-
|
|
418
|
+
_pixelRatio = value;
|
|
379
419
|
|
|
380
|
-
|
|
420
|
+
this.setSize( _width, _height, false );
|
|
381
421
|
|
|
382
|
-
|
|
422
|
+
};
|
|
383
423
|
|
|
384
|
-
this.
|
|
424
|
+
this.getSize = function ( target ) {
|
|
385
425
|
|
|
386
|
-
|
|
426
|
+
return target.set( _width, _height );
|
|
387
427
|
|
|
388
|
-
|
|
428
|
+
};
|
|
389
429
|
|
|
390
|
-
|
|
430
|
+
this.setSize = function ( width, height, updateStyle = true ) {
|
|
391
431
|
|
|
392
|
-
|
|
432
|
+
if ( xr.isPresenting ) {
|
|
393
433
|
|
|
394
|
-
|
|
434
|
+
console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' );
|
|
435
|
+
return;
|
|
395
436
|
|
|
396
|
-
|
|
437
|
+
}
|
|
397
438
|
|
|
398
|
-
|
|
399
|
-
|
|
439
|
+
_width = width;
|
|
440
|
+
_height = height;
|
|
400
441
|
|
|
401
|
-
|
|
442
|
+
canvas.width = Math.floor( width * _pixelRatio );
|
|
443
|
+
canvas.height = Math.floor( height * _pixelRatio );
|
|
402
444
|
|
|
403
|
-
|
|
404
|
-
_height = height;
|
|
445
|
+
if ( updateStyle === true ) {
|
|
405
446
|
|
|
406
|
-
|
|
407
|
-
|
|
447
|
+
canvas.style.width = width + 'px';
|
|
448
|
+
canvas.style.height = height + 'px';
|
|
408
449
|
|
|
409
|
-
|
|
450
|
+
}
|
|
410
451
|
|
|
411
|
-
|
|
412
|
-
_canvas.style.height = height + 'px';
|
|
452
|
+
this.setViewport( 0, 0, width, height );
|
|
413
453
|
|
|
414
|
-
}
|
|
454
|
+
};
|
|
415
455
|
|
|
416
|
-
this.
|
|
456
|
+
this.getDrawingBufferSize = function ( target ) {
|
|
417
457
|
|
|
418
|
-
|
|
458
|
+
return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();
|
|
419
459
|
|
|
420
|
-
|
|
460
|
+
};
|
|
421
461
|
|
|
422
|
-
|
|
462
|
+
this.setDrawingBufferSize = function ( width, height, pixelRatio ) {
|
|
423
463
|
|
|
424
|
-
|
|
464
|
+
_width = width;
|
|
465
|
+
_height = height;
|
|
425
466
|
|
|
426
|
-
|
|
467
|
+
_pixelRatio = pixelRatio;
|
|
427
468
|
|
|
428
|
-
|
|
429
|
-
|
|
469
|
+
canvas.width = Math.floor( width * pixelRatio );
|
|
470
|
+
canvas.height = Math.floor( height * pixelRatio );
|
|
430
471
|
|
|
431
|
-
|
|
472
|
+
this.setViewport( 0, 0, width, height );
|
|
432
473
|
|
|
433
|
-
|
|
434
|
-
_canvas.height = Math.floor( height * pixelRatio );
|
|
474
|
+
};
|
|
435
475
|
|
|
436
|
-
this.
|
|
476
|
+
this.getCurrentViewport = function ( target ) {
|
|
437
477
|
|
|
438
|
-
|
|
478
|
+
return target.copy( _currentViewport );
|
|
439
479
|
|
|
440
|
-
|
|
480
|
+
};
|
|
441
481
|
|
|
442
|
-
|
|
482
|
+
this.getViewport = function ( target ) {
|
|
443
483
|
|
|
444
|
-
|
|
484
|
+
return target.copy( _viewport );
|
|
445
485
|
|
|
446
|
-
|
|
486
|
+
};
|
|
447
487
|
|
|
448
|
-
|
|
488
|
+
this.setViewport = function ( x, y, width, height ) {
|
|
449
489
|
|
|
450
|
-
|
|
490
|
+
if ( x.isVector4 ) {
|
|
451
491
|
|
|
452
|
-
|
|
492
|
+
_viewport.set( x.x, x.y, x.z, x.w );
|
|
453
493
|
|
|
454
|
-
|
|
494
|
+
} else {
|
|
455
495
|
|
|
456
|
-
|
|
496
|
+
_viewport.set( x, y, width, height );
|
|
457
497
|
|
|
458
|
-
|
|
498
|
+
}
|
|
459
499
|
|
|
460
|
-
|
|
500
|
+
state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );
|
|
461
501
|
|
|
462
|
-
}
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
this.getScissor = function ( target ) {
|
|
463
505
|
|
|
464
|
-
|
|
506
|
+
return target.copy( _scissor );
|
|
465
507
|
|
|
466
|
-
|
|
508
|
+
};
|
|
467
509
|
|
|
468
|
-
|
|
510
|
+
this.setScissor = function ( x, y, width, height ) {
|
|
469
511
|
|
|
470
|
-
|
|
512
|
+
if ( x.isVector4 ) {
|
|
471
513
|
|
|
472
|
-
|
|
514
|
+
_scissor.set( x.x, x.y, x.z, x.w );
|
|
473
515
|
|
|
474
|
-
|
|
516
|
+
} else {
|
|
475
517
|
|
|
476
|
-
|
|
518
|
+
_scissor.set( x, y, width, height );
|
|
477
519
|
|
|
478
|
-
|
|
520
|
+
}
|
|
479
521
|
|
|
480
|
-
|
|
522
|
+
state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );
|
|
481
523
|
|
|
482
|
-
|
|
524
|
+
};
|
|
483
525
|
|
|
484
|
-
|
|
526
|
+
this.getScissorTest = function () {
|
|
485
527
|
|
|
486
|
-
|
|
528
|
+
return _scissorTest;
|
|
487
529
|
|
|
488
|
-
|
|
530
|
+
};
|
|
489
531
|
|
|
490
|
-
|
|
532
|
+
this.setScissorTest = function ( boolean ) {
|
|
491
533
|
|
|
492
|
-
|
|
534
|
+
state.setScissorTest( _scissorTest = boolean );
|
|
493
535
|
|
|
494
|
-
|
|
536
|
+
};
|
|
495
537
|
|
|
496
|
-
|
|
538
|
+
this.setOpaqueSort = function ( method ) {
|
|
497
539
|
|
|
498
|
-
|
|
540
|
+
_opaqueSort = method;
|
|
499
541
|
|
|
500
|
-
|
|
542
|
+
};
|
|
501
543
|
|
|
502
|
-
|
|
544
|
+
this.setTransparentSort = function ( method ) {
|
|
503
545
|
|
|
504
|
-
|
|
546
|
+
_transparentSort = method;
|
|
505
547
|
|
|
506
|
-
|
|
548
|
+
};
|
|
507
549
|
|
|
508
|
-
|
|
550
|
+
// Clearing
|
|
509
551
|
|
|
510
|
-
|
|
552
|
+
this.getClearColor = function ( target ) {
|
|
511
553
|
|
|
512
|
-
|
|
554
|
+
return target.copy( background.getClearColor() );
|
|
513
555
|
|
|
514
|
-
|
|
556
|
+
};
|
|
515
557
|
|
|
516
|
-
|
|
558
|
+
this.setClearColor = function () {
|
|
517
559
|
|
|
518
|
-
|
|
560
|
+
background.setClearColor.apply( background, arguments );
|
|
519
561
|
|
|
520
|
-
|
|
562
|
+
};
|
|
521
563
|
|
|
522
|
-
|
|
564
|
+
this.getClearAlpha = function () {
|
|
523
565
|
|
|
524
|
-
|
|
566
|
+
return background.getClearAlpha();
|
|
525
567
|
|
|
526
|
-
|
|
568
|
+
};
|
|
527
569
|
|
|
528
|
-
|
|
570
|
+
this.setClearAlpha = function () {
|
|
529
571
|
|
|
530
|
-
|
|
572
|
+
background.setClearAlpha.apply( background, arguments );
|
|
531
573
|
|
|
532
|
-
|
|
574
|
+
};
|
|
533
575
|
|
|
534
|
-
|
|
576
|
+
this.clear = function ( color = true, depth = true, stencil = true ) {
|
|
535
577
|
|
|
536
|
-
|
|
578
|
+
let bits = 0;
|
|
537
579
|
|
|
538
|
-
|
|
580
|
+
if ( color ) {
|
|
539
581
|
|
|
540
|
-
|
|
582
|
+
// check if we're trying to clear an integer target
|
|
583
|
+
let isIntegerFormat = false;
|
|
584
|
+
if ( _currentRenderTarget !== null ) {
|
|
541
585
|
|
|
542
|
-
|
|
586
|
+
const targetFormat = _currentRenderTarget.texture.format;
|
|
587
|
+
isIntegerFormat = targetFormat === RGBAIntegerFormat ||
|
|
588
|
+
targetFormat === RGIntegerFormat ||
|
|
589
|
+
targetFormat === RedIntegerFormat;
|
|
543
590
|
|
|
544
|
-
|
|
545
|
-
if ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;
|
|
546
|
-
if ( stencil ) bits |= _gl.STENCIL_BUFFER_BIT;
|
|
591
|
+
}
|
|
547
592
|
|
|
548
|
-
|
|
593
|
+
// use the appropriate clear functions to clear the target if it's a signed
|
|
594
|
+
// or unsigned integer target
|
|
595
|
+
if ( isIntegerFormat ) {
|
|
549
596
|
|
|
550
|
-
|
|
597
|
+
const targetType = _currentRenderTarget.texture.type;
|
|
598
|
+
const isUnsignedType = targetType === UnsignedByteType ||
|
|
599
|
+
targetType === UnsignedIntType ||
|
|
600
|
+
targetType === UnsignedShortType ||
|
|
601
|
+
targetType === UnsignedInt248Type ||
|
|
602
|
+
targetType === UnsignedShort4444Type ||
|
|
603
|
+
targetType === UnsignedShort5551Type;
|
|
551
604
|
|
|
552
|
-
|
|
605
|
+
const clearColor = background.getClearColor();
|
|
606
|
+
const a = background.getClearAlpha();
|
|
607
|
+
const r = clearColor.r;
|
|
608
|
+
const g = clearColor.g;
|
|
609
|
+
const b = clearColor.b;
|
|
553
610
|
|
|
554
|
-
|
|
611
|
+
if ( isUnsignedType ) {
|
|
555
612
|
|
|
556
|
-
|
|
613
|
+
uintClearColor[ 0 ] = r;
|
|
614
|
+
uintClearColor[ 1 ] = g;
|
|
615
|
+
uintClearColor[ 2 ] = b;
|
|
616
|
+
uintClearColor[ 3 ] = a;
|
|
617
|
+
_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );
|
|
557
618
|
|
|
558
|
-
|
|
619
|
+
} else {
|
|
559
620
|
|
|
560
|
-
|
|
621
|
+
intClearColor[ 0 ] = r;
|
|
622
|
+
intClearColor[ 1 ] = g;
|
|
623
|
+
intClearColor[ 2 ] = b;
|
|
624
|
+
intClearColor[ 3 ] = a;
|
|
625
|
+
_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );
|
|
561
626
|
|
|
562
|
-
|
|
627
|
+
}
|
|
563
628
|
|
|
564
|
-
|
|
629
|
+
} else {
|
|
565
630
|
|
|
566
|
-
|
|
631
|
+
bits |= _gl.COLOR_BUFFER_BIT;
|
|
567
632
|
|
|
568
|
-
|
|
633
|
+
}
|
|
569
634
|
|
|
570
|
-
|
|
635
|
+
}
|
|
571
636
|
|
|
572
|
-
|
|
637
|
+
if ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;
|
|
638
|
+
if ( stencil ) bits |= _gl.STENCIL_BUFFER_BIT;
|
|
573
639
|
|
|
574
|
-
|
|
575
|
-
_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );
|
|
576
|
-
_canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );
|
|
640
|
+
_gl.clear( bits );
|
|
577
641
|
|
|
578
|
-
|
|
579
|
-
renderStates.dispose();
|
|
580
|
-
properties.dispose();
|
|
581
|
-
cubemaps.dispose();
|
|
582
|
-
cubeuvmaps.dispose();
|
|
583
|
-
objects.dispose();
|
|
584
|
-
bindingStates.dispose();
|
|
585
|
-
uniformsGroups.dispose();
|
|
586
|
-
programCache.dispose();
|
|
642
|
+
};
|
|
587
643
|
|
|
588
|
-
|
|
644
|
+
this.clearColor = function () {
|
|
589
645
|
|
|
590
|
-
|
|
591
|
-
xr.removeEventListener( 'sessionend', onXRSessionEnd );
|
|
646
|
+
this.clear( true, false, false );
|
|
592
647
|
|
|
593
|
-
|
|
648
|
+
};
|
|
594
649
|
|
|
595
|
-
|
|
596
|
-
_transmissionRenderTarget = null;
|
|
650
|
+
this.clearDepth = function () {
|
|
597
651
|
|
|
598
|
-
|
|
652
|
+
this.clear( false, true, false );
|
|
599
653
|
|
|
600
|
-
|
|
654
|
+
};
|
|
601
655
|
|
|
602
|
-
|
|
656
|
+
this.clearStencil = function () {
|
|
603
657
|
|
|
604
|
-
|
|
658
|
+
this.clear( false, false, true );
|
|
605
659
|
|
|
606
|
-
|
|
660
|
+
};
|
|
607
661
|
|
|
608
|
-
|
|
662
|
+
//
|
|
609
663
|
|
|
610
|
-
|
|
664
|
+
this.dispose = function () {
|
|
611
665
|
|
|
612
|
-
|
|
666
|
+
canvas.removeEventListener( 'webglcontextlost', onContextLost, false );
|
|
667
|
+
canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );
|
|
668
|
+
canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );
|
|
613
669
|
|
|
614
|
-
|
|
670
|
+
renderLists.dispose();
|
|
671
|
+
renderStates.dispose();
|
|
672
|
+
properties.dispose();
|
|
673
|
+
cubemaps.dispose();
|
|
674
|
+
cubeuvmaps.dispose();
|
|
675
|
+
objects.dispose();
|
|
676
|
+
bindingStates.dispose();
|
|
677
|
+
uniformsGroups.dispose();
|
|
678
|
+
programCache.dispose();
|
|
615
679
|
|
|
616
|
-
|
|
680
|
+
xr.dispose();
|
|
617
681
|
|
|
618
|
-
|
|
682
|
+
xr.removeEventListener( 'sessionstart', onXRSessionStart );
|
|
683
|
+
xr.removeEventListener( 'sessionend', onXRSessionEnd );
|
|
619
684
|
|
|
620
|
-
|
|
685
|
+
if ( _transmissionRenderTarget ) {
|
|
621
686
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
const shadowMapAutoUpdate = shadowMap.autoUpdate;
|
|
625
|
-
const shadowMapNeedsUpdate = shadowMap.needsUpdate;
|
|
626
|
-
const shadowMapType = shadowMap.type;
|
|
687
|
+
_transmissionRenderTarget.dispose();
|
|
688
|
+
_transmissionRenderTarget = null;
|
|
627
689
|
|
|
628
|
-
|
|
690
|
+
}
|
|
629
691
|
|
|
630
|
-
|
|
631
|
-
shadowMap.enabled = shadowMapEnabled;
|
|
632
|
-
shadowMap.autoUpdate = shadowMapAutoUpdate;
|
|
633
|
-
shadowMap.needsUpdate = shadowMapNeedsUpdate;
|
|
634
|
-
shadowMap.type = shadowMapType;
|
|
692
|
+
animation.stop();
|
|
635
693
|
|
|
636
|
-
|
|
694
|
+
};
|
|
637
695
|
|
|
638
|
-
|
|
696
|
+
// Events
|
|
639
697
|
|
|
640
|
-
|
|
698
|
+
function onContextLost( event ) {
|
|
641
699
|
|
|
642
|
-
|
|
700
|
+
event.preventDefault();
|
|
643
701
|
|
|
644
|
-
|
|
702
|
+
console.log( 'THREE.WebGLRenderer: Context Lost.' );
|
|
645
703
|
|
|
646
|
-
|
|
704
|
+
_isContextLost = true;
|
|
647
705
|
|
|
648
|
-
|
|
706
|
+
}
|
|
649
707
|
|
|
650
|
-
|
|
708
|
+
function onContextRestore( /* event */ ) {
|
|
651
709
|
|
|
652
|
-
|
|
710
|
+
console.log( 'THREE.WebGLRenderer: Context Restored.' );
|
|
653
711
|
|
|
654
|
-
|
|
712
|
+
_isContextLost = false;
|
|
655
713
|
|
|
656
|
-
|
|
714
|
+
const infoAutoReset = info.autoReset;
|
|
715
|
+
const shadowMapEnabled = shadowMap.enabled;
|
|
716
|
+
const shadowMapAutoUpdate = shadowMap.autoUpdate;
|
|
717
|
+
const shadowMapNeedsUpdate = shadowMap.needsUpdate;
|
|
718
|
+
const shadowMapType = shadowMap.type;
|
|
657
719
|
|
|
658
|
-
|
|
720
|
+
initGLContext();
|
|
659
721
|
|
|
660
|
-
|
|
722
|
+
info.autoReset = infoAutoReset;
|
|
723
|
+
shadowMap.enabled = shadowMapEnabled;
|
|
724
|
+
shadowMap.autoUpdate = shadowMapAutoUpdate;
|
|
725
|
+
shadowMap.needsUpdate = shadowMapNeedsUpdate;
|
|
726
|
+
shadowMap.type = shadowMapType;
|
|
661
727
|
|
|
662
|
-
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
function onContextCreationError( event ) {
|
|
663
731
|
|
|
732
|
+
console.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
|
|
664
733
|
|
|
665
|
-
|
|
734
|
+
}
|
|
666
735
|
|
|
667
|
-
|
|
736
|
+
function onMaterialDispose( event ) {
|
|
668
737
|
|
|
669
|
-
|
|
738
|
+
const material = event.target;
|
|
670
739
|
|
|
671
|
-
|
|
740
|
+
material.removeEventListener( 'dispose', onMaterialDispose );
|
|
672
741
|
|
|
673
|
-
|
|
742
|
+
deallocateMaterial( material );
|
|
674
743
|
|
|
675
|
-
|
|
744
|
+
}
|
|
676
745
|
|
|
677
|
-
|
|
746
|
+
// Buffer deallocation
|
|
678
747
|
|
|
679
|
-
|
|
748
|
+
function deallocateMaterial( material ) {
|
|
680
749
|
|
|
681
|
-
|
|
750
|
+
releaseMaterialProgramReferences( material );
|
|
751
|
+
|
|
752
|
+
properties.remove( material );
|
|
682
753
|
|
|
683
754
|
}
|
|
684
755
|
|
|
685
|
-
}
|
|
686
756
|
|
|
687
|
-
|
|
757
|
+
function releaseMaterialProgramReferences( material ) {
|
|
688
758
|
|
|
689
|
-
|
|
759
|
+
const programs = properties.get( material ).programs;
|
|
690
760
|
|
|
691
|
-
|
|
761
|
+
if ( programs !== undefined ) {
|
|
692
762
|
|
|
693
|
-
|
|
763
|
+
programs.forEach( function ( program ) {
|
|
694
764
|
|
|
695
|
-
|
|
765
|
+
programCache.releaseProgram( program );
|
|
696
766
|
|
|
697
|
-
|
|
767
|
+
} );
|
|
698
768
|
|
|
699
|
-
|
|
769
|
+
if ( material.isShaderMaterial ) {
|
|
700
770
|
|
|
701
|
-
|
|
702
|
-
let rangeFactor = 1;
|
|
771
|
+
programCache.releaseShaderCache( material );
|
|
703
772
|
|
|
704
|
-
|
|
773
|
+
}
|
|
705
774
|
|
|
706
|
-
|
|
707
|
-
rangeFactor = 2;
|
|
775
|
+
}
|
|
708
776
|
|
|
709
777
|
}
|
|
710
778
|
|
|
711
|
-
//
|
|
779
|
+
// Buffer rendering
|
|
712
780
|
|
|
713
|
-
|
|
714
|
-
const position = geometry.attributes.position;
|
|
781
|
+
this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {
|
|
715
782
|
|
|
716
|
-
|
|
717
|
-
let drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;
|
|
783
|
+
if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
|
|
718
784
|
|
|
719
|
-
|
|
785
|
+
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
|
|
720
786
|
|
|
721
|
-
|
|
722
|
-
drawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );
|
|
787
|
+
const program = setProgram( camera, scene, geometry, material, object );
|
|
723
788
|
|
|
724
|
-
|
|
789
|
+
state.setMaterial( material, frontFaceCW );
|
|
725
790
|
|
|
726
|
-
|
|
791
|
+
//
|
|
727
792
|
|
|
728
|
-
|
|
729
|
-
|
|
793
|
+
let index = geometry.index;
|
|
794
|
+
let rangeFactor = 1;
|
|
730
795
|
|
|
731
|
-
|
|
796
|
+
if ( material.wireframe === true ) {
|
|
732
797
|
|
|
733
|
-
|
|
734
|
-
|
|
798
|
+
index = geometries.getWireframeAttribute( geometry );
|
|
799
|
+
rangeFactor = 2;
|
|
735
800
|
|
|
736
|
-
|
|
801
|
+
}
|
|
737
802
|
|
|
738
|
-
|
|
803
|
+
//
|
|
739
804
|
|
|
740
|
-
|
|
805
|
+
const drawRange = geometry.drawRange;
|
|
806
|
+
const position = geometry.attributes.position;
|
|
741
807
|
|
|
742
|
-
|
|
808
|
+
let drawStart = drawRange.start * rangeFactor;
|
|
809
|
+
let drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;
|
|
743
810
|
|
|
744
|
-
|
|
811
|
+
if ( group !== null ) {
|
|
745
812
|
|
|
746
|
-
|
|
747
|
-
|
|
813
|
+
drawStart = Math.max( drawStart, group.start * rangeFactor );
|
|
814
|
+
drawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );
|
|
748
815
|
|
|
749
|
-
|
|
816
|
+
}
|
|
750
817
|
|
|
751
|
-
|
|
818
|
+
if ( index !== null ) {
|
|
752
819
|
|
|
753
|
-
|
|
754
|
-
|
|
820
|
+
drawStart = Math.max( drawStart, 0 );
|
|
821
|
+
drawEnd = Math.min( drawEnd, index.count );
|
|
755
822
|
|
|
756
|
-
|
|
823
|
+
} else if ( position !== undefined && position !== null ) {
|
|
757
824
|
|
|
758
|
-
|
|
825
|
+
drawStart = Math.max( drawStart, 0 );
|
|
826
|
+
drawEnd = Math.min( drawEnd, position.count );
|
|
759
827
|
|
|
760
|
-
|
|
828
|
+
}
|
|
761
829
|
|
|
762
|
-
|
|
830
|
+
const drawCount = drawEnd - drawStart;
|
|
763
831
|
|
|
764
|
-
|
|
765
|
-
renderer.setMode( _gl.LINES );
|
|
832
|
+
if ( drawCount < 0 || drawCount === Infinity ) return;
|
|
766
833
|
|
|
767
|
-
|
|
834
|
+
//
|
|
768
835
|
|
|
769
|
-
|
|
836
|
+
bindingStates.setup( object, material, program, geometry, index );
|
|
770
837
|
|
|
771
|
-
|
|
838
|
+
let attribute;
|
|
839
|
+
let renderer = bufferRenderer;
|
|
772
840
|
|
|
773
|
-
|
|
841
|
+
if ( index !== null ) {
|
|
774
842
|
|
|
775
|
-
|
|
843
|
+
attribute = attributes.get( index );
|
|
776
844
|
|
|
777
|
-
|
|
845
|
+
renderer = indexedBufferRenderer;
|
|
846
|
+
renderer.setIndex( attribute );
|
|
778
847
|
|
|
779
|
-
|
|
848
|
+
}
|
|
780
849
|
|
|
781
|
-
|
|
850
|
+
//
|
|
782
851
|
|
|
783
|
-
|
|
852
|
+
if ( object.isMesh ) {
|
|
784
853
|
|
|
785
|
-
|
|
854
|
+
if ( material.wireframe === true ) {
|
|
786
855
|
|
|
787
|
-
|
|
856
|
+
state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );
|
|
857
|
+
renderer.setMode( _gl.LINES );
|
|
788
858
|
|
|
789
|
-
|
|
859
|
+
} else {
|
|
790
860
|
|
|
791
|
-
|
|
861
|
+
renderer.setMode( _gl.TRIANGLES );
|
|
792
862
|
|
|
793
|
-
|
|
863
|
+
}
|
|
794
864
|
|
|
795
|
-
|
|
865
|
+
} else if ( object.isLine ) {
|
|
796
866
|
|
|
797
|
-
|
|
867
|
+
let lineWidth = material.linewidth;
|
|
798
868
|
|
|
799
|
-
|
|
869
|
+
if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material
|
|
800
870
|
|
|
801
|
-
|
|
871
|
+
state.setLineWidth( lineWidth * getTargetPixelRatio() );
|
|
802
872
|
|
|
803
|
-
|
|
873
|
+
if ( object.isLineSegments ) {
|
|
804
874
|
|
|
805
|
-
|
|
875
|
+
renderer.setMode( _gl.LINES );
|
|
806
876
|
|
|
807
|
-
|
|
877
|
+
} else if ( object.isLineLoop ) {
|
|
808
878
|
|
|
809
|
-
|
|
879
|
+
renderer.setMode( _gl.LINE_LOOP );
|
|
810
880
|
|
|
811
|
-
|
|
812
|
-
const instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );
|
|
881
|
+
} else {
|
|
813
882
|
|
|
814
|
-
|
|
883
|
+
renderer.setMode( _gl.LINE_STRIP );
|
|
815
884
|
|
|
816
|
-
|
|
885
|
+
}
|
|
817
886
|
|
|
818
|
-
|
|
887
|
+
} else if ( object.isPoints ) {
|
|
819
888
|
|
|
820
|
-
|
|
889
|
+
renderer.setMode( _gl.POINTS );
|
|
821
890
|
|
|
822
|
-
|
|
891
|
+
} else if ( object.isSprite ) {
|
|
823
892
|
|
|
824
|
-
|
|
893
|
+
renderer.setMode( _gl.TRIANGLES );
|
|
825
894
|
|
|
826
|
-
|
|
895
|
+
}
|
|
827
896
|
|
|
828
|
-
|
|
897
|
+
if ( object.isInstancedMesh ) {
|
|
829
898
|
|
|
830
|
-
|
|
899
|
+
renderer.renderInstances( drawStart, drawCount, object.count );
|
|
831
900
|
|
|
832
|
-
|
|
833
|
-
material.needsUpdate = true;
|
|
834
|
-
getProgram( material, scene, object );
|
|
901
|
+
} else if ( geometry.isInstancedBufferGeometry ) {
|
|
835
902
|
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
getProgram( material, scene, object );
|
|
903
|
+
const maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;
|
|
904
|
+
const instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );
|
|
839
905
|
|
|
840
|
-
|
|
906
|
+
renderer.renderInstances( drawStart, drawCount, instanceCount );
|
|
841
907
|
|
|
842
908
|
} else {
|
|
843
909
|
|
|
844
|
-
|
|
910
|
+
renderer.render( drawStart, drawCount );
|
|
845
911
|
|
|
846
912
|
}
|
|
847
913
|
|
|
848
|
-
}
|
|
914
|
+
};
|
|
849
915
|
|
|
850
|
-
|
|
851
|
-
currentRenderState.init();
|
|
916
|
+
// Compile
|
|
852
917
|
|
|
853
|
-
|
|
918
|
+
this.compile = function ( scene, camera ) {
|
|
854
919
|
|
|
855
|
-
|
|
920
|
+
function prepare( material, scene, object ) {
|
|
856
921
|
|
|
857
|
-
|
|
922
|
+
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
858
923
|
|
|
859
|
-
|
|
924
|
+
material.side = BackSide;
|
|
925
|
+
material.needsUpdate = true;
|
|
926
|
+
getProgram( material, scene, object );
|
|
860
927
|
|
|
861
|
-
|
|
928
|
+
material.side = FrontSide;
|
|
929
|
+
material.needsUpdate = true;
|
|
930
|
+
getProgram( material, scene, object );
|
|
862
931
|
|
|
863
|
-
|
|
932
|
+
material.side = DoubleSide;
|
|
933
|
+
|
|
934
|
+
} else {
|
|
935
|
+
|
|
936
|
+
getProgram( material, scene, object );
|
|
864
937
|
|
|
865
938
|
}
|
|
866
939
|
|
|
867
940
|
}
|
|
868
941
|
|
|
869
|
-
|
|
942
|
+
currentRenderState = renderStates.get( scene );
|
|
943
|
+
currentRenderState.init();
|
|
870
944
|
|
|
871
|
-
|
|
945
|
+
renderStateStack.push( currentRenderState );
|
|
872
946
|
|
|
873
|
-
|
|
947
|
+
scene.traverseVisible( function ( object ) {
|
|
874
948
|
|
|
875
|
-
|
|
949
|
+
if ( object.isLight && object.layers.test( camera.layers ) ) {
|
|
876
950
|
|
|
877
|
-
|
|
951
|
+
currentRenderState.pushLight( object );
|
|
878
952
|
|
|
879
|
-
|
|
953
|
+
if ( object.castShadow ) {
|
|
880
954
|
|
|
881
|
-
|
|
955
|
+
currentRenderState.pushShadow( object );
|
|
882
956
|
|
|
883
|
-
|
|
957
|
+
}
|
|
884
958
|
|
|
885
|
-
|
|
959
|
+
}
|
|
886
960
|
|
|
887
|
-
|
|
961
|
+
} );
|
|
888
962
|
|
|
889
|
-
|
|
963
|
+
currentRenderState.setupLights( _this.useLegacyLights );
|
|
890
964
|
|
|
891
|
-
|
|
965
|
+
scene.traverse( function ( object ) {
|
|
892
966
|
|
|
893
|
-
|
|
967
|
+
const material = object.material;
|
|
894
968
|
|
|
895
|
-
|
|
969
|
+
if ( material ) {
|
|
896
970
|
|
|
897
|
-
|
|
971
|
+
if ( Array.isArray( material ) ) {
|
|
898
972
|
|
|
899
|
-
|
|
900
|
-
currentRenderState = null;
|
|
973
|
+
for ( let i = 0; i < material.length; i ++ ) {
|
|
901
974
|
|
|
902
|
-
|
|
975
|
+
const material2 = material[ i ];
|
|
903
976
|
|
|
904
|
-
|
|
977
|
+
prepare( material2, scene, object );
|
|
905
978
|
|
|
906
|
-
|
|
979
|
+
}
|
|
907
980
|
|
|
908
|
-
|
|
981
|
+
} else {
|
|
909
982
|
|
|
910
|
-
|
|
983
|
+
prepare( material, scene, object );
|
|
911
984
|
|
|
912
|
-
|
|
985
|
+
}
|
|
913
986
|
|
|
914
|
-
|
|
987
|
+
}
|
|
915
988
|
|
|
916
|
-
|
|
989
|
+
} );
|
|
917
990
|
|
|
918
|
-
|
|
991
|
+
renderStateStack.pop();
|
|
992
|
+
currentRenderState = null;
|
|
919
993
|
|
|
920
|
-
|
|
994
|
+
};
|
|
921
995
|
|
|
922
|
-
|
|
996
|
+
// Animation Loop
|
|
923
997
|
|
|
924
|
-
|
|
998
|
+
let onAnimationFrameCallback = null;
|
|
925
999
|
|
|
926
|
-
|
|
927
|
-
animation.setAnimationLoop( onAnimationFrame );
|
|
1000
|
+
function onAnimationFrame( time ) {
|
|
928
1001
|
|
|
929
|
-
|
|
1002
|
+
if ( onAnimationFrameCallback ) onAnimationFrameCallback( time );
|
|
930
1003
|
|
|
931
|
-
|
|
1004
|
+
}
|
|
932
1005
|
|
|
933
|
-
|
|
934
|
-
xr.setAnimationLoop( callback );
|
|
1006
|
+
function onXRSessionStart() {
|
|
935
1007
|
|
|
936
|
-
|
|
1008
|
+
animation.stop();
|
|
937
1009
|
|
|
938
|
-
|
|
1010
|
+
}
|
|
939
1011
|
|
|
940
|
-
|
|
941
|
-
xr.addEventListener( 'sessionend', onXRSessionEnd );
|
|
1012
|
+
function onXRSessionEnd() {
|
|
942
1013
|
|
|
943
|
-
|
|
1014
|
+
animation.start();
|
|
944
1015
|
|
|
945
|
-
|
|
1016
|
+
}
|
|
946
1017
|
|
|
947
|
-
|
|
1018
|
+
const animation = new WebGLAnimation();
|
|
1019
|
+
animation.setAnimationLoop( onAnimationFrame );
|
|
948
1020
|
|
|
949
|
-
|
|
950
|
-
return;
|
|
1021
|
+
if ( typeof self !== 'undefined' ) animation.setContext( self );
|
|
951
1022
|
|
|
952
|
-
|
|
1023
|
+
this.setAnimationLoop = function ( callback ) {
|
|
953
1024
|
|
|
954
|
-
|
|
1025
|
+
onAnimationFrameCallback = callback;
|
|
1026
|
+
xr.setAnimationLoop( callback );
|
|
955
1027
|
|
|
956
|
-
|
|
1028
|
+
( callback === null ) ? animation.stop() : animation.start();
|
|
957
1029
|
|
|
958
|
-
|
|
1030
|
+
};
|
|
959
1031
|
|
|
960
|
-
|
|
1032
|
+
xr.addEventListener( 'sessionstart', onXRSessionStart );
|
|
1033
|
+
xr.addEventListener( 'sessionend', onXRSessionEnd );
|
|
961
1034
|
|
|
962
|
-
|
|
1035
|
+
// Rendering
|
|
963
1036
|
|
|
964
|
-
|
|
1037
|
+
this.render = function ( scene, camera ) {
|
|
965
1038
|
|
|
966
|
-
if (
|
|
1039
|
+
if ( camera !== undefined && camera.isCamera !== true ) {
|
|
967
1040
|
|
|
968
|
-
|
|
1041
|
+
console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
|
|
1042
|
+
return;
|
|
969
1043
|
|
|
970
|
-
|
|
1044
|
+
}
|
|
971
1045
|
|
|
972
|
-
|
|
973
|
-
if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );
|
|
1046
|
+
if ( _isContextLost === true ) return;
|
|
974
1047
|
|
|
975
|
-
|
|
976
|
-
currentRenderState.init();
|
|
1048
|
+
// update scene graph
|
|
977
1049
|
|
|
978
|
-
|
|
1050
|
+
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
979
1051
|
|
|
980
|
-
|
|
981
|
-
_frustum.setFromProjectionMatrix( _projScreenMatrix );
|
|
1052
|
+
// update camera matrices and frustum
|
|
982
1053
|
|
|
983
|
-
|
|
984
|
-
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );
|
|
1054
|
+
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
985
1055
|
|
|
986
|
-
|
|
987
|
-
currentRenderList.init();
|
|
1056
|
+
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
988
1057
|
|
|
989
|
-
|
|
1058
|
+
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
990
1059
|
|
|
991
|
-
|
|
1060
|
+
camera = xr.getCamera(); // use XR camera for rendering
|
|
992
1061
|
|
|
993
|
-
|
|
1062
|
+
}
|
|
994
1063
|
|
|
995
|
-
|
|
1064
|
+
//
|
|
1065
|
+
if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );
|
|
996
1066
|
|
|
997
|
-
|
|
1067
|
+
currentRenderState = renderStates.get( scene, renderStateStack.length );
|
|
1068
|
+
currentRenderState.init();
|
|
998
1069
|
|
|
999
|
-
|
|
1070
|
+
renderStateStack.push( currentRenderState );
|
|
1000
1071
|
|
|
1001
|
-
|
|
1072
|
+
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1073
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix );
|
|
1002
1074
|
|
|
1003
|
-
|
|
1075
|
+
_localClippingEnabled = this.localClippingEnabled;
|
|
1076
|
+
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
|
|
1004
1077
|
|
|
1005
|
-
|
|
1078
|
+
currentRenderList = renderLists.get( scene, renderListStack.length );
|
|
1079
|
+
currentRenderList.init();
|
|
1006
1080
|
|
|
1007
|
-
|
|
1081
|
+
renderListStack.push( currentRenderList );
|
|
1008
1082
|
|
|
1009
|
-
|
|
1083
|
+
projectObject( scene, camera, 0, _this.sortObjects );
|
|
1010
1084
|
|
|
1011
|
-
|
|
1085
|
+
currentRenderList.finish();
|
|
1012
1086
|
|
|
1013
|
-
|
|
1087
|
+
if ( _this.sortObjects === true ) {
|
|
1014
1088
|
|
|
1015
|
-
|
|
1089
|
+
currentRenderList.sort( _opaqueSort, _transparentSort );
|
|
1016
1090
|
|
|
1017
|
-
|
|
1091
|
+
}
|
|
1018
1092
|
|
|
1019
|
-
|
|
1093
|
+
//
|
|
1020
1094
|
|
|
1021
|
-
|
|
1095
|
+
this.info.render.frame ++;
|
|
1022
1096
|
|
|
1023
|
-
|
|
1097
|
+
if ( _clippingEnabled === true ) clipping.beginShadows();
|
|
1024
1098
|
|
|
1025
|
-
const
|
|
1099
|
+
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
1026
1100
|
|
|
1027
|
-
|
|
1101
|
+
shadowMap.render( shadowsArray, scene, camera );
|
|
1028
1102
|
|
|
1029
|
-
|
|
1103
|
+
if ( _clippingEnabled === true ) clipping.endShadows();
|
|
1030
1104
|
|
|
1031
|
-
|
|
1105
|
+
//
|
|
1032
1106
|
|
|
1033
|
-
|
|
1107
|
+
if ( this.info.autoReset === true ) this.info.reset();
|
|
1034
1108
|
|
|
1035
|
-
} else {
|
|
1036
1109
|
|
|
1037
|
-
|
|
1110
|
+
//
|
|
1038
1111
|
|
|
1039
|
-
|
|
1112
|
+
background.render( currentRenderList, scene );
|
|
1040
1113
|
|
|
1041
|
-
|
|
1114
|
+
// render scene
|
|
1042
1115
|
|
|
1043
|
-
|
|
1116
|
+
currentRenderState.setupLights( _this.useLegacyLights );
|
|
1044
1117
|
|
|
1045
|
-
|
|
1118
|
+
if ( camera.isArrayCamera ) {
|
|
1046
1119
|
|
|
1047
|
-
|
|
1120
|
+
const cameras = camera.cameras;
|
|
1048
1121
|
|
|
1049
|
-
|
|
1122
|
+
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
1050
1123
|
|
|
1051
|
-
|
|
1124
|
+
const camera2 = cameras[ i ];
|
|
1052
1125
|
|
|
1053
|
-
|
|
1126
|
+
renderScene( currentRenderList, scene, camera2, camera2.viewport );
|
|
1054
1127
|
|
|
1055
|
-
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
} else {
|
|
1056
1131
|
|
|
1057
|
-
|
|
1132
|
+
renderScene( currentRenderList, scene, camera );
|
|
1058
1133
|
|
|
1059
|
-
|
|
1134
|
+
}
|
|
1060
1135
|
|
|
1061
|
-
|
|
1136
|
+
//
|
|
1062
1137
|
|
|
1063
|
-
|
|
1064
|
-
// _gl.finish();
|
|
1138
|
+
if ( _currentRenderTarget !== null ) {
|
|
1065
1139
|
|
|
1066
|
-
|
|
1067
|
-
_currentMaterialId = - 1;
|
|
1068
|
-
_currentCamera = null;
|
|
1140
|
+
// resolve multisample renderbuffers to a single-sample texture if necessary
|
|
1069
1141
|
|
|
1070
|
-
|
|
1142
|
+
textures.updateMultisampleRenderTarget( _currentRenderTarget );
|
|
1071
1143
|
|
|
1072
|
-
|
|
1144
|
+
// Generate mipmap if we're using any kind of mipmap filtering
|
|
1073
1145
|
|
|
1074
|
-
|
|
1146
|
+
textures.updateRenderTargetMipmap( _currentRenderTarget );
|
|
1075
1147
|
|
|
1076
|
-
|
|
1148
|
+
}
|
|
1077
1149
|
|
|
1078
|
-
|
|
1150
|
+
//
|
|
1079
1151
|
|
|
1080
|
-
|
|
1152
|
+
if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
|
|
1081
1153
|
|
|
1082
|
-
|
|
1154
|
+
if ( xr.enabled && xr.submitFrame ) {
|
|
1083
1155
|
|
|
1084
|
-
|
|
1156
|
+
xr.submitFrame();
|
|
1085
1157
|
|
|
1086
|
-
|
|
1158
|
+
}
|
|
1159
|
+
// _gl.finish();
|
|
1087
1160
|
|
|
1088
|
-
|
|
1161
|
+
bindingStates.resetDefaultState();
|
|
1162
|
+
_currentMaterialId = - 1;
|
|
1163
|
+
_currentCamera = null;
|
|
1089
1164
|
|
|
1090
|
-
|
|
1165
|
+
renderStateStack.pop();
|
|
1091
1166
|
|
|
1092
|
-
|
|
1167
|
+
if ( renderStateStack.length > 0 ) {
|
|
1093
1168
|
|
|
1094
|
-
|
|
1169
|
+
currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
|
|
1095
1170
|
|
|
1096
|
-
|
|
1171
|
+
} else {
|
|
1097
1172
|
|
|
1098
|
-
|
|
1173
|
+
currentRenderState = null;
|
|
1099
1174
|
|
|
1100
|
-
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
renderListStack.pop();
|
|
1101
1178
|
|
|
1102
|
-
|
|
1179
|
+
if ( renderListStack.length > 0 ) {
|
|
1103
1180
|
|
|
1104
|
-
|
|
1181
|
+
currentRenderList = renderListStack[ renderListStack.length - 1 ];
|
|
1105
1182
|
|
|
1106
|
-
|
|
1183
|
+
} else {
|
|
1107
1184
|
|
|
1108
|
-
|
|
1185
|
+
currentRenderList = null;
|
|
1109
1186
|
|
|
1110
|
-
|
|
1187
|
+
}
|
|
1111
1188
|
|
|
1112
|
-
|
|
1189
|
+
};
|
|
1113
1190
|
|
|
1114
|
-
|
|
1191
|
+
function projectObject( object, camera, groupOrder, sortObjects ) {
|
|
1115
1192
|
|
|
1116
|
-
|
|
1193
|
+
if ( object.visible === false ) return;
|
|
1117
1194
|
|
|
1118
|
-
|
|
1195
|
+
const visible = object.layers.test( camera.layers );
|
|
1119
1196
|
|
|
1120
|
-
|
|
1197
|
+
if ( visible ) {
|
|
1121
1198
|
|
|
1122
|
-
|
|
1199
|
+
if ( object.isGroup ) {
|
|
1123
1200
|
|
|
1124
|
-
|
|
1201
|
+
groupOrder = object.renderOrder;
|
|
1125
1202
|
|
|
1126
|
-
|
|
1203
|
+
} else if ( object.isLOD ) {
|
|
1127
1204
|
|
|
1128
|
-
|
|
1129
|
-
.applyMatrix4( _projScreenMatrix );
|
|
1205
|
+
if ( object.autoUpdate === true ) object.update( camera );
|
|
1130
1206
|
|
|
1131
|
-
|
|
1207
|
+
} else if ( object.isLight ) {
|
|
1132
1208
|
|
|
1133
|
-
|
|
1134
|
-
const material = object.material;
|
|
1209
|
+
currentRenderState.pushLight( object );
|
|
1135
1210
|
|
|
1136
|
-
if (
|
|
1211
|
+
if ( object.castShadow ) {
|
|
1137
1212
|
|
|
1138
|
-
|
|
1213
|
+
currentRenderState.pushShadow( object );
|
|
1139
1214
|
|
|
1140
1215
|
}
|
|
1141
1216
|
|
|
1142
|
-
}
|
|
1217
|
+
} else if ( object.isSprite ) {
|
|
1218
|
+
|
|
1219
|
+
if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {
|
|
1143
1220
|
|
|
1144
|
-
|
|
1221
|
+
if ( sortObjects ) {
|
|
1145
1222
|
|
|
1146
|
-
|
|
1223
|
+
_vector3.setFromMatrixPosition( object.matrixWorld )
|
|
1224
|
+
.applyMatrix4( _projScreenMatrix );
|
|
1147
1225
|
|
|
1148
|
-
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
const geometry = objects.update( object );
|
|
1229
|
+
const material = object.material;
|
|
1149
1230
|
|
|
1150
|
-
|
|
1231
|
+
if ( material.visible ) {
|
|
1151
1232
|
|
|
1152
|
-
|
|
1153
|
-
|
|
1233
|
+
currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );
|
|
1234
|
+
|
|
1235
|
+
}
|
|
1154
1236
|
|
|
1155
1237
|
}
|
|
1156
1238
|
|
|
1157
|
-
}
|
|
1239
|
+
} else if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
1158
1240
|
|
|
1159
|
-
|
|
1241
|
+
if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
|
|
1160
1242
|
|
|
1161
|
-
|
|
1243
|
+
const geometry = objects.update( object );
|
|
1244
|
+
const material = object.material;
|
|
1162
1245
|
|
|
1163
|
-
|
|
1164
|
-
.applyMatrix4( _projScreenMatrix );
|
|
1246
|
+
if ( sortObjects ) {
|
|
1165
1247
|
|
|
1166
|
-
|
|
1248
|
+
if ( object.boundingSphere !== undefined ) {
|
|
1167
1249
|
|
|
1168
|
-
|
|
1169
|
-
|
|
1250
|
+
if ( object.boundingSphere === null ) object.computeBoundingSphere();
|
|
1251
|
+
_vector3.copy( object.boundingSphere.center );
|
|
1170
1252
|
|
|
1171
|
-
|
|
1253
|
+
} else {
|
|
1172
1254
|
|
|
1173
|
-
|
|
1255
|
+
if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
|
|
1256
|
+
_vector3.copy( geometry.boundingSphere.center );
|
|
1174
1257
|
|
|
1175
|
-
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
_vector3
|
|
1261
|
+
.applyMatrix4( object.matrixWorld )
|
|
1262
|
+
.applyMatrix4( _projScreenMatrix );
|
|
1263
|
+
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
if ( Array.isArray( material ) ) {
|
|
1267
|
+
|
|
1268
|
+
const groups = geometry.groups;
|
|
1269
|
+
|
|
1270
|
+
for ( let i = 0, l = groups.length; i < l; i ++ ) {
|
|
1176
1271
|
|
|
1177
|
-
|
|
1178
|
-
|
|
1272
|
+
const group = groups[ i ];
|
|
1273
|
+
const groupMaterial = material[ group.materialIndex ];
|
|
1179
1274
|
|
|
1180
|
-
|
|
1275
|
+
if ( groupMaterial && groupMaterial.visible ) {
|
|
1181
1276
|
|
|
1182
|
-
|
|
1277
|
+
currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );
|
|
1278
|
+
|
|
1279
|
+
}
|
|
1183
1280
|
|
|
1184
1281
|
}
|
|
1185
1282
|
|
|
1186
|
-
}
|
|
1283
|
+
} else if ( material.visible ) {
|
|
1187
1284
|
|
|
1188
|
-
|
|
1285
|
+
currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );
|
|
1189
1286
|
|
|
1190
|
-
|
|
1287
|
+
}
|
|
1191
1288
|
|
|
1192
1289
|
}
|
|
1193
1290
|
|
|
@@ -1195,1090 +1292,1180 @@ function WebGLRenderer( parameters = {} ) {
|
|
|
1195
1292
|
|
|
1196
1293
|
}
|
|
1197
1294
|
|
|
1198
|
-
|
|
1295
|
+
const children = object.children;
|
|
1199
1296
|
|
|
1200
|
-
|
|
1297
|
+
for ( let i = 0, l = children.length; i < l; i ++ ) {
|
|
1201
1298
|
|
|
1202
|
-
|
|
1299
|
+
projectObject( children[ i ], camera, groupOrder, sortObjects );
|
|
1203
1300
|
|
|
1204
|
-
|
|
1301
|
+
}
|
|
1205
1302
|
|
|
1206
1303
|
}
|
|
1207
1304
|
|
|
1208
|
-
|
|
1305
|
+
function renderScene( currentRenderList, scene, camera, viewport ) {
|
|
1209
1306
|
|
|
1210
|
-
|
|
1307
|
+
const opaqueObjects = currentRenderList.opaque;
|
|
1308
|
+
const transmissiveObjects = currentRenderList.transmissive;
|
|
1309
|
+
const transparentObjects = currentRenderList.transparent;
|
|
1211
1310
|
|
|
1212
|
-
|
|
1213
|
-
const transmissiveObjects = currentRenderList.transmissive;
|
|
1214
|
-
const transparentObjects = currentRenderList.transparent;
|
|
1311
|
+
currentRenderState.setupLightsView( camera );
|
|
1215
1312
|
|
|
1216
|
-
|
|
1313
|
+
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
|
|
1217
1314
|
|
|
1218
|
-
|
|
1315
|
+
if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
|
|
1219
1316
|
|
|
1220
|
-
|
|
1317
|
+
if ( viewport ) state.viewport( _currentViewport.copy( viewport ) );
|
|
1221
1318
|
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1319
|
+
if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );
|
|
1320
|
+
if ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );
|
|
1321
|
+
if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );
|
|
1225
1322
|
|
|
1226
|
-
|
|
1323
|
+
// Ensure depth buffer writing is enabled so it can be cleared on next render
|
|
1227
1324
|
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1325
|
+
state.buffers.depth.setTest( true );
|
|
1326
|
+
state.buffers.depth.setMask( true );
|
|
1327
|
+
state.buffers.color.setMask( true );
|
|
1231
1328
|
|
|
1232
|
-
|
|
1329
|
+
state.setPolygonOffset( false );
|
|
1233
1330
|
|
|
1234
|
-
|
|
1331
|
+
}
|
|
1235
1332
|
|
|
1236
|
-
|
|
1333
|
+
function renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {
|
|
1237
1334
|
|
|
1238
|
-
|
|
1335
|
+
const isWebGL2 = capabilities.isWebGL2;
|
|
1239
1336
|
|
|
1240
|
-
|
|
1337
|
+
if ( _transmissionRenderTarget === null ) {
|
|
1241
1338
|
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1339
|
+
_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
|
|
1340
|
+
generateMipmaps: true,
|
|
1341
|
+
type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
|
|
1342
|
+
minFilter: LinearMipmapLinearFilter,
|
|
1343
|
+
samples: ( isWebGL2 ) ? 4 : 0
|
|
1344
|
+
} );
|
|
1248
1345
|
|
|
1249
|
-
|
|
1346
|
+
// debug
|
|
1250
1347
|
|
|
1251
|
-
|
|
1348
|
+
/*
|
|
1349
|
+
const geometry = new PlaneGeometry();
|
|
1350
|
+
const material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );
|
|
1252
1351
|
|
|
1253
|
-
|
|
1352
|
+
const mesh = new Mesh( geometry, material );
|
|
1353
|
+
scene.add( mesh );
|
|
1354
|
+
*/
|
|
1254
1355
|
|
|
1255
|
-
|
|
1356
|
+
}
|
|
1256
1357
|
|
|
1257
|
-
|
|
1358
|
+
_this.getDrawingBufferSize( _vector2 );
|
|
1258
1359
|
|
|
1259
|
-
|
|
1360
|
+
if ( isWebGL2 ) {
|
|
1260
1361
|
|
|
1261
|
-
|
|
1362
|
+
_transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
|
|
1262
1363
|
|
|
1263
|
-
|
|
1364
|
+
} else {
|
|
1264
1365
|
|
|
1265
|
-
|
|
1266
|
-
_this.setRenderTarget( _transmissionRenderTarget );
|
|
1267
|
-
_this.clear();
|
|
1366
|
+
_transmissionRenderTarget.setSize( floorPowerOfTwo( _vector2.x ), floorPowerOfTwo( _vector2.y ) );
|
|
1268
1367
|
|
|
1269
|
-
|
|
1270
|
-
// Otherwise they are applied twice in opaque objects pass and transmission objects pass.
|
|
1271
|
-
const currentToneMapping = _this.toneMapping;
|
|
1272
|
-
_this.toneMapping = NoToneMapping;
|
|
1368
|
+
}
|
|
1273
1369
|
|
|
1274
|
-
|
|
1370
|
+
//
|
|
1275
1371
|
|
|
1276
|
-
|
|
1372
|
+
const currentRenderTarget = _this.getRenderTarget();
|
|
1373
|
+
_this.setRenderTarget( _transmissionRenderTarget );
|
|
1277
1374
|
|
|
1278
|
-
|
|
1279
|
-
|
|
1375
|
+
_this.getClearColor( _currentClearColor );
|
|
1376
|
+
_currentClearAlpha = _this.getClearAlpha();
|
|
1377
|
+
if ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );
|
|
1280
1378
|
|
|
1281
|
-
|
|
1379
|
+
_this.clear();
|
|
1282
1380
|
|
|
1283
|
-
|
|
1381
|
+
// Turn off the features which can affect the frag color for opaque objects pass.
|
|
1382
|
+
// Otherwise they are applied twice in opaque objects pass and transmission objects pass.
|
|
1383
|
+
const currentToneMapping = _this.toneMapping;
|
|
1384
|
+
_this.toneMapping = NoToneMapping;
|
|
1284
1385
|
|
|
1285
|
-
|
|
1386
|
+
renderObjects( opaqueObjects, scene, camera );
|
|
1286
1387
|
|
|
1287
|
-
|
|
1388
|
+
textures.updateMultisampleRenderTarget( _transmissionRenderTarget );
|
|
1389
|
+
textures.updateRenderTargetMipmap( _transmissionRenderTarget );
|
|
1288
1390
|
|
|
1289
|
-
|
|
1391
|
+
let renderTargetNeedsUpdate = false;
|
|
1290
1392
|
|
|
1291
|
-
|
|
1393
|
+
for ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {
|
|
1292
1394
|
|
|
1293
|
-
|
|
1294
|
-
const geometry = renderItem.geometry;
|
|
1295
|
-
const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
1296
|
-
const group = renderItem.group;
|
|
1395
|
+
const renderItem = transmissiveObjects[ i ];
|
|
1297
1396
|
|
|
1298
|
-
|
|
1397
|
+
const object = renderItem.object;
|
|
1398
|
+
const geometry = renderItem.geometry;
|
|
1399
|
+
const material = renderItem.material;
|
|
1400
|
+
const group = renderItem.group;
|
|
1299
1401
|
|
|
1300
|
-
|
|
1402
|
+
if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
|
|
1301
1403
|
|
|
1302
|
-
|
|
1404
|
+
const currentSide = material.side;
|
|
1303
1405
|
|
|
1304
|
-
|
|
1406
|
+
material.side = BackSide;
|
|
1407
|
+
material.needsUpdate = true;
|
|
1305
1408
|
|
|
1306
|
-
|
|
1409
|
+
renderObject( object, scene, camera, geometry, material, group );
|
|
1307
1410
|
|
|
1308
|
-
|
|
1411
|
+
material.side = currentSide;
|
|
1412
|
+
material.needsUpdate = true;
|
|
1309
1413
|
|
|
1310
|
-
|
|
1414
|
+
renderTargetNeedsUpdate = true;
|
|
1311
1415
|
|
|
1312
|
-
|
|
1313
|
-
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
1416
|
+
}
|
|
1314
1417
|
|
|
1315
|
-
|
|
1418
|
+
}
|
|
1316
1419
|
|
|
1317
|
-
|
|
1420
|
+
if ( renderTargetNeedsUpdate === true ) {
|
|
1318
1421
|
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
_this.renderBufferDirect( camera, scene, geometry, material, object, group );
|
|
1422
|
+
textures.updateMultisampleRenderTarget( _transmissionRenderTarget );
|
|
1423
|
+
textures.updateRenderTargetMipmap( _transmissionRenderTarget );
|
|
1322
1424
|
|
|
1323
|
-
|
|
1324
|
-
material.needsUpdate = true;
|
|
1325
|
-
_this.renderBufferDirect( camera, scene, geometry, material, object, group );
|
|
1425
|
+
}
|
|
1326
1426
|
|
|
1327
|
-
|
|
1427
|
+
_this.setRenderTarget( currentRenderTarget );
|
|
1328
1428
|
|
|
1329
|
-
|
|
1429
|
+
_this.setClearColor( _currentClearColor, _currentClearAlpha );
|
|
1330
1430
|
|
|
1331
|
-
_this.
|
|
1431
|
+
_this.toneMapping = currentToneMapping;
|
|
1332
1432
|
|
|
1333
1433
|
}
|
|
1334
1434
|
|
|
1335
|
-
|
|
1435
|
+
function renderObjects( renderList, scene, camera ) {
|
|
1336
1436
|
|
|
1337
|
-
|
|
1437
|
+
const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
|
|
1338
1438
|
|
|
1339
|
-
|
|
1439
|
+
for ( let i = 0, l = renderList.length; i < l; i ++ ) {
|
|
1340
1440
|
|
|
1341
|
-
|
|
1441
|
+
const renderItem = renderList[ i ];
|
|
1342
1442
|
|
|
1343
|
-
|
|
1443
|
+
const object = renderItem.object;
|
|
1444
|
+
const geometry = renderItem.geometry;
|
|
1445
|
+
const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
1446
|
+
const group = renderItem.group;
|
|
1344
1447
|
|
|
1345
|
-
|
|
1346
|
-
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
1448
|
+
if ( object.layers.test( camera.layers ) ) {
|
|
1347
1449
|
|
|
1348
|
-
|
|
1450
|
+
renderObject( object, scene, camera, geometry, material, group );
|
|
1349
1451
|
|
|
1350
|
-
|
|
1351
|
-
const programCacheKey = programCache.getProgramCacheKey( parameters );
|
|
1452
|
+
}
|
|
1352
1453
|
|
|
1353
|
-
|
|
1454
|
+
}
|
|
1354
1455
|
|
|
1355
|
-
|
|
1456
|
+
}
|
|
1356
1457
|
|
|
1357
|
-
|
|
1358
|
-
materialProperties.fog = scene.fog;
|
|
1359
|
-
materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );
|
|
1458
|
+
function renderObject( object, scene, camera, geometry, material, group ) {
|
|
1360
1459
|
|
|
1361
|
-
|
|
1460
|
+
object.onBeforeRender( _this, scene, camera, geometry, material, group );
|
|
1362
1461
|
|
|
1363
|
-
|
|
1462
|
+
object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
1463
|
+
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
1364
1464
|
|
|
1365
|
-
material.
|
|
1465
|
+
material.onBeforeRender( _this, scene, camera, geometry, object, group );
|
|
1366
1466
|
|
|
1367
|
-
|
|
1368
|
-
materialProperties.programs = programs;
|
|
1467
|
+
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
1369
1468
|
|
|
1370
|
-
|
|
1469
|
+
material.side = BackSide;
|
|
1470
|
+
material.needsUpdate = true;
|
|
1471
|
+
_this.renderBufferDirect( camera, scene, geometry, material, object, group );
|
|
1371
1472
|
|
|
1372
|
-
|
|
1473
|
+
material.side = FrontSide;
|
|
1474
|
+
material.needsUpdate = true;
|
|
1475
|
+
_this.renderBufferDirect( camera, scene, geometry, material, object, group );
|
|
1373
1476
|
|
|
1374
|
-
|
|
1477
|
+
material.side = DoubleSide;
|
|
1375
1478
|
|
|
1376
|
-
|
|
1479
|
+
} else {
|
|
1377
1480
|
|
|
1378
|
-
|
|
1481
|
+
_this.renderBufferDirect( camera, scene, geometry, material, object, group );
|
|
1379
1482
|
|
|
1380
|
-
|
|
1483
|
+
}
|
|
1381
1484
|
|
|
1382
|
-
|
|
1485
|
+
object.onAfterRender( _this, scene, camera, geometry, material, group );
|
|
1383
1486
|
|
|
1384
|
-
|
|
1487
|
+
}
|
|
1385
1488
|
|
|
1386
|
-
|
|
1489
|
+
function getProgram( material, scene, object ) {
|
|
1387
1490
|
|
|
1388
|
-
|
|
1491
|
+
if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
1389
1492
|
|
|
1390
|
-
|
|
1493
|
+
const materialProperties = properties.get( material );
|
|
1391
1494
|
|
|
1392
|
-
|
|
1495
|
+
const lights = currentRenderState.state.lights;
|
|
1496
|
+
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
1393
1497
|
|
|
1394
|
-
|
|
1395
|
-
programs.set( programCacheKey, program );
|
|
1498
|
+
const lightsStateVersion = lights.state.version;
|
|
1396
1499
|
|
|
1397
|
-
|
|
1500
|
+
const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );
|
|
1501
|
+
const programCacheKey = programCache.getProgramCacheKey( parameters );
|
|
1398
1502
|
|
|
1399
|
-
|
|
1503
|
+
let programs = materialProperties.programs;
|
|
1400
1504
|
|
|
1401
|
-
|
|
1505
|
+
// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change
|
|
1402
1506
|
|
|
1403
|
-
|
|
1507
|
+
materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
1508
|
+
materialProperties.fog = scene.fog;
|
|
1509
|
+
materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );
|
|
1404
1510
|
|
|
1405
|
-
|
|
1511
|
+
if ( programs === undefined ) {
|
|
1406
1512
|
|
|
1407
|
-
|
|
1513
|
+
// new material
|
|
1408
1514
|
|
|
1409
|
-
|
|
1515
|
+
material.addEventListener( 'dispose', onMaterialDispose );
|
|
1410
1516
|
|
|
1411
|
-
|
|
1517
|
+
programs = new Map();
|
|
1518
|
+
materialProperties.programs = programs;
|
|
1412
1519
|
|
|
1413
|
-
|
|
1414
|
-
materialProperties.lightsStateVersion = lightsStateVersion;
|
|
1520
|
+
}
|
|
1415
1521
|
|
|
1416
|
-
|
|
1522
|
+
let program = programs.get( programCacheKey );
|
|
1417
1523
|
|
|
1418
|
-
|
|
1524
|
+
if ( program !== undefined ) {
|
|
1419
1525
|
|
|
1420
|
-
|
|
1421
|
-
uniforms.lightProbe.value = lights.state.probe;
|
|
1422
|
-
uniforms.directionalLights.value = lights.state.directional;
|
|
1423
|
-
uniforms.directionalLightShadows.value = lights.state.directionalShadow;
|
|
1424
|
-
uniforms.spotLights.value = lights.state.spot;
|
|
1425
|
-
uniforms.spotLightShadows.value = lights.state.spotShadow;
|
|
1426
|
-
uniforms.rectAreaLights.value = lights.state.rectArea;
|
|
1427
|
-
uniforms.ltc_1.value = lights.state.rectAreaLTC1;
|
|
1428
|
-
uniforms.ltc_2.value = lights.state.rectAreaLTC2;
|
|
1429
|
-
uniforms.pointLights.value = lights.state.point;
|
|
1430
|
-
uniforms.pointLightShadows.value = lights.state.pointShadow;
|
|
1431
|
-
uniforms.hemisphereLights.value = lights.state.hemi;
|
|
1526
|
+
// early out if program and light state is identical
|
|
1432
1527
|
|
|
1433
|
-
|
|
1434
|
-
uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
|
|
1435
|
-
uniforms.spotShadowMap.value = lights.state.spotShadowMap;
|
|
1436
|
-
uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
|
|
1437
|
-
uniforms.spotLightMap.value = lights.state.spotLightMap;
|
|
1438
|
-
uniforms.pointShadowMap.value = lights.state.pointShadowMap;
|
|
1439
|
-
uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;
|
|
1440
|
-
// TODO (abelnation): add area lights shadow info to uniforms
|
|
1528
|
+
if ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {
|
|
1441
1529
|
|
|
1442
|
-
|
|
1530
|
+
updateCommonMaterialProperties( material, parameters );
|
|
1443
1531
|
|
|
1444
|
-
|
|
1445
|
-
const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );
|
|
1532
|
+
return program;
|
|
1446
1533
|
|
|
1447
|
-
|
|
1448
|
-
materialProperties.uniformsList = uniformsList;
|
|
1534
|
+
}
|
|
1449
1535
|
|
|
1450
|
-
|
|
1536
|
+
} else {
|
|
1451
1537
|
|
|
1452
|
-
|
|
1538
|
+
parameters.uniforms = programCache.getUniforms( material );
|
|
1453
1539
|
|
|
1454
|
-
|
|
1540
|
+
material.onBuild( object, parameters, _this );
|
|
1455
1541
|
|
|
1456
|
-
|
|
1542
|
+
material.onBeforeCompile( parameters, _this );
|
|
1457
1543
|
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
materialProperties.skinning = parameters.skinning;
|
|
1461
|
-
materialProperties.morphTargets = parameters.morphTargets;
|
|
1462
|
-
materialProperties.morphNormals = parameters.morphNormals;
|
|
1463
|
-
materialProperties.morphColors = parameters.morphColors;
|
|
1464
|
-
materialProperties.morphTargetsCount = parameters.morphTargetsCount;
|
|
1465
|
-
materialProperties.numClippingPlanes = parameters.numClippingPlanes;
|
|
1466
|
-
materialProperties.numIntersection = parameters.numClipIntersection;
|
|
1467
|
-
materialProperties.vertexAlphas = parameters.vertexAlphas;
|
|
1468
|
-
materialProperties.vertexTangents = parameters.vertexTangents;
|
|
1469
|
-
materialProperties.toneMapping = parameters.toneMapping;
|
|
1544
|
+
program = programCache.acquireProgram( parameters, programCacheKey );
|
|
1545
|
+
programs.set( programCacheKey, program );
|
|
1470
1546
|
|
|
1471
|
-
|
|
1547
|
+
materialProperties.uniforms = parameters.uniforms;
|
|
1472
1548
|
|
|
1473
|
-
|
|
1549
|
+
}
|
|
1474
1550
|
|
|
1475
|
-
|
|
1551
|
+
const uniforms = materialProperties.uniforms;
|
|
1476
1552
|
|
|
1477
|
-
|
|
1553
|
+
if ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {
|
|
1478
1554
|
|
|
1479
|
-
|
|
1480
|
-
const environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
1481
|
-
const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding );
|
|
1482
|
-
const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
|
|
1483
|
-
const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
|
|
1484
|
-
const vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;
|
|
1485
|
-
const morphTargets = !! geometry.morphAttributes.position;
|
|
1486
|
-
const morphNormals = !! geometry.morphAttributes.normal;
|
|
1487
|
-
const morphColors = !! geometry.morphAttributes.color;
|
|
1488
|
-
const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;
|
|
1555
|
+
uniforms.clippingPlanes = clipping.uniform;
|
|
1489
1556
|
|
|
1490
|
-
|
|
1491
|
-
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
1557
|
+
}
|
|
1492
1558
|
|
|
1493
|
-
|
|
1494
|
-
const lights = currentRenderState.state.lights;
|
|
1559
|
+
updateCommonMaterialProperties( material, parameters );
|
|
1495
1560
|
|
|
1496
|
-
|
|
1561
|
+
// store the light setup it was created for
|
|
1497
1562
|
|
|
1498
|
-
|
|
1563
|
+
materialProperties.needsLights = materialNeedsLights( material );
|
|
1564
|
+
materialProperties.lightsStateVersion = lightsStateVersion;
|
|
1499
1565
|
|
|
1500
|
-
|
|
1501
|
-
camera === _currentCamera &&
|
|
1502
|
-
material.id === _currentMaterialId;
|
|
1566
|
+
if ( materialProperties.needsLights ) {
|
|
1503
1567
|
|
|
1504
|
-
//
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1568
|
+
// wire up the material to this renderer's lighting state
|
|
1569
|
+
|
|
1570
|
+
uniforms.ambientLightColor.value = lights.state.ambient;
|
|
1571
|
+
uniforms.lightProbe.value = lights.state.probe;
|
|
1572
|
+
uniforms.directionalLights.value = lights.state.directional;
|
|
1573
|
+
uniforms.directionalLightShadows.value = lights.state.directionalShadow;
|
|
1574
|
+
uniforms.spotLights.value = lights.state.spot;
|
|
1575
|
+
uniforms.spotLightShadows.value = lights.state.spotShadow;
|
|
1576
|
+
uniforms.rectAreaLights.value = lights.state.rectArea;
|
|
1577
|
+
uniforms.ltc_1.value = lights.state.rectAreaLTC1;
|
|
1578
|
+
uniforms.ltc_2.value = lights.state.rectAreaLTC2;
|
|
1579
|
+
uniforms.pointLights.value = lights.state.point;
|
|
1580
|
+
uniforms.pointLightShadows.value = lights.state.pointShadow;
|
|
1581
|
+
uniforms.hemisphereLights.value = lights.state.hemi;
|
|
1582
|
+
|
|
1583
|
+
uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;
|
|
1584
|
+
uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
|
|
1585
|
+
uniforms.spotShadowMap.value = lights.state.spotShadowMap;
|
|
1586
|
+
uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
|
|
1587
|
+
uniforms.spotLightMap.value = lights.state.spotLightMap;
|
|
1588
|
+
uniforms.pointShadowMap.value = lights.state.pointShadowMap;
|
|
1589
|
+
uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;
|
|
1590
|
+
// TODO (abelnation): add area lights shadow info to uniforms
|
|
1508
1591
|
|
|
1509
1592
|
}
|
|
1510
1593
|
|
|
1511
|
-
|
|
1594
|
+
const progUniforms = program.getUniforms();
|
|
1595
|
+
const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );
|
|
1512
1596
|
|
|
1513
|
-
|
|
1597
|
+
materialProperties.currentProgram = program;
|
|
1598
|
+
materialProperties.uniformsList = uniformsList;
|
|
1514
1599
|
|
|
1515
|
-
|
|
1600
|
+
return program;
|
|
1516
1601
|
|
|
1517
|
-
|
|
1602
|
+
}
|
|
1518
1603
|
|
|
1519
|
-
|
|
1604
|
+
function updateCommonMaterialProperties( material, parameters ) {
|
|
1520
1605
|
|
|
1521
|
-
|
|
1606
|
+
const materialProperties = properties.get( material );
|
|
1522
1607
|
|
|
1523
|
-
|
|
1608
|
+
materialProperties.outputColorSpace = parameters.outputColorSpace;
|
|
1609
|
+
materialProperties.instancing = parameters.instancing;
|
|
1610
|
+
materialProperties.skinning = parameters.skinning;
|
|
1611
|
+
materialProperties.morphTargets = parameters.morphTargets;
|
|
1612
|
+
materialProperties.morphNormals = parameters.morphNormals;
|
|
1613
|
+
materialProperties.morphColors = parameters.morphColors;
|
|
1614
|
+
materialProperties.morphTargetsCount = parameters.morphTargetsCount;
|
|
1615
|
+
materialProperties.numClippingPlanes = parameters.numClippingPlanes;
|
|
1616
|
+
materialProperties.numIntersection = parameters.numClipIntersection;
|
|
1617
|
+
materialProperties.vertexAlphas = parameters.vertexAlphas;
|
|
1618
|
+
materialProperties.vertexTangents = parameters.vertexTangents;
|
|
1619
|
+
materialProperties.toneMapping = parameters.toneMapping;
|
|
1524
1620
|
|
|
1525
|
-
|
|
1621
|
+
}
|
|
1526
1622
|
|
|
1527
|
-
|
|
1623
|
+
function setProgram( camera, scene, geometry, material, object ) {
|
|
1528
1624
|
|
|
1529
|
-
|
|
1625
|
+
if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
1530
1626
|
|
|
1531
|
-
|
|
1627
|
+
textures.resetTextureUnits();
|
|
1532
1628
|
|
|
1533
|
-
|
|
1629
|
+
const fog = scene.fog;
|
|
1630
|
+
const environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
1631
|
+
const colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );
|
|
1632
|
+
const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
|
|
1633
|
+
const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
|
|
1634
|
+
const vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );
|
|
1635
|
+
const morphTargets = !! geometry.morphAttributes.position;
|
|
1636
|
+
const morphNormals = !! geometry.morphAttributes.normal;
|
|
1637
|
+
const morphColors = !! geometry.morphAttributes.color;
|
|
1638
|
+
const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;
|
|
1534
1639
|
|
|
1535
|
-
|
|
1640
|
+
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
1641
|
+
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
1536
1642
|
|
|
1537
|
-
|
|
1643
|
+
const materialProperties = properties.get( material );
|
|
1644
|
+
const lights = currentRenderState.state.lights;
|
|
1538
1645
|
|
|
1539
|
-
|
|
1646
|
+
if ( _clippingEnabled === true ) {
|
|
1540
1647
|
|
|
1541
|
-
|
|
1648
|
+
if ( _localClippingEnabled === true || camera !== _currentCamera ) {
|
|
1542
1649
|
|
|
1543
|
-
|
|
1650
|
+
const useCache =
|
|
1651
|
+
camera === _currentCamera &&
|
|
1652
|
+
material.id === _currentMaterialId;
|
|
1544
1653
|
|
|
1545
|
-
|
|
1654
|
+
// we might want to call this function with some ClippingGroup
|
|
1655
|
+
// object instead of the material, once it becomes feasible
|
|
1656
|
+
// (#8465, #8379)
|
|
1657
|
+
clipping.setState( material, camera, useCache );
|
|
1546
1658
|
|
|
1547
|
-
|
|
1659
|
+
}
|
|
1548
1660
|
|
|
1549
|
-
|
|
1661
|
+
}
|
|
1550
1662
|
|
|
1551
|
-
|
|
1552
|
-
( materialProperties.numClippingPlanes !== clipping.numPlanes ||
|
|
1553
|
-
materialProperties.numIntersection !== clipping.numIntersection ) ) {
|
|
1663
|
+
//
|
|
1554
1664
|
|
|
1555
|
-
|
|
1665
|
+
let needsProgramChange = false;
|
|
1556
1666
|
|
|
1557
|
-
|
|
1667
|
+
if ( material.version === materialProperties.__version ) {
|
|
1558
1668
|
|
|
1559
|
-
|
|
1669
|
+
if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {
|
|
1560
1670
|
|
|
1561
|
-
|
|
1671
|
+
needsProgramChange = true;
|
|
1562
1672
|
|
|
1563
|
-
|
|
1673
|
+
} else if ( materialProperties.outputColorSpace !== colorSpace ) {
|
|
1564
1674
|
|
|
1565
|
-
|
|
1675
|
+
needsProgramChange = true;
|
|
1566
1676
|
|
|
1567
|
-
|
|
1677
|
+
} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {
|
|
1568
1678
|
|
|
1569
|
-
|
|
1679
|
+
needsProgramChange = true;
|
|
1570
1680
|
|
|
1571
|
-
|
|
1681
|
+
} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {
|
|
1572
1682
|
|
|
1573
|
-
|
|
1683
|
+
needsProgramChange = true;
|
|
1574
1684
|
|
|
1575
|
-
|
|
1685
|
+
} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {
|
|
1576
1686
|
|
|
1577
|
-
|
|
1687
|
+
needsProgramChange = true;
|
|
1578
1688
|
|
|
1579
|
-
|
|
1689
|
+
} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {
|
|
1580
1690
|
|
|
1581
|
-
|
|
1691
|
+
needsProgramChange = true;
|
|
1582
1692
|
|
|
1583
|
-
|
|
1693
|
+
} else if ( materialProperties.envMap !== envMap ) {
|
|
1584
1694
|
|
|
1585
|
-
|
|
1695
|
+
needsProgramChange = true;
|
|
1586
1696
|
|
|
1587
|
-
|
|
1697
|
+
} else if ( material.fog === true && materialProperties.fog !== fog ) {
|
|
1588
1698
|
|
|
1589
|
-
|
|
1590
|
-
materialProperties.__version = material.version;
|
|
1699
|
+
needsProgramChange = true;
|
|
1591
1700
|
|
|
1592
|
-
|
|
1701
|
+
} else if ( materialProperties.numClippingPlanes !== undefined &&
|
|
1702
|
+
( materialProperties.numClippingPlanes !== clipping.numPlanes ||
|
|
1703
|
+
materialProperties.numIntersection !== clipping.numIntersection ) ) {
|
|
1593
1704
|
|
|
1594
|
-
|
|
1705
|
+
needsProgramChange = true;
|
|
1595
1706
|
|
|
1596
|
-
|
|
1707
|
+
} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {
|
|
1597
1708
|
|
|
1598
|
-
|
|
1709
|
+
needsProgramChange = true;
|
|
1599
1710
|
|
|
1600
|
-
|
|
1711
|
+
} else if ( materialProperties.vertexTangents !== vertexTangents ) {
|
|
1601
1712
|
|
|
1602
|
-
|
|
1713
|
+
needsProgramChange = true;
|
|
1603
1714
|
|
|
1604
|
-
|
|
1605
|
-
let refreshMaterial = false;
|
|
1606
|
-
let refreshLights = false;
|
|
1715
|
+
} else if ( materialProperties.morphTargets !== morphTargets ) {
|
|
1607
1716
|
|
|
1608
|
-
|
|
1609
|
-
m_uniforms = materialProperties.uniforms;
|
|
1717
|
+
needsProgramChange = true;
|
|
1610
1718
|
|
|
1611
|
-
|
|
1719
|
+
} else if ( materialProperties.morphNormals !== morphNormals ) {
|
|
1612
1720
|
|
|
1613
|
-
|
|
1614
|
-
refreshMaterial = true;
|
|
1615
|
-
refreshLights = true;
|
|
1721
|
+
needsProgramChange = true;
|
|
1616
1722
|
|
|
1617
|
-
|
|
1723
|
+
} else if ( materialProperties.morphColors !== morphColors ) {
|
|
1618
1724
|
|
|
1619
|
-
|
|
1725
|
+
needsProgramChange = true;
|
|
1620
1726
|
|
|
1621
|
-
|
|
1727
|
+
} else if ( materialProperties.toneMapping !== toneMapping ) {
|
|
1622
1728
|
|
|
1623
|
-
|
|
1729
|
+
needsProgramChange = true;
|
|
1624
1730
|
|
|
1625
|
-
|
|
1731
|
+
} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {
|
|
1626
1732
|
|
|
1627
|
-
|
|
1733
|
+
needsProgramChange = true;
|
|
1628
1734
|
|
|
1629
|
-
|
|
1735
|
+
}
|
|
1630
1736
|
|
|
1631
|
-
|
|
1737
|
+
} else {
|
|
1632
1738
|
|
|
1633
|
-
|
|
1634
|
-
|
|
1739
|
+
needsProgramChange = true;
|
|
1740
|
+
materialProperties.__version = material.version;
|
|
1635
1741
|
|
|
1636
1742
|
}
|
|
1637
1743
|
|
|
1638
|
-
|
|
1744
|
+
//
|
|
1639
1745
|
|
|
1640
|
-
|
|
1746
|
+
let program = materialProperties.currentProgram;
|
|
1641
1747
|
|
|
1642
|
-
|
|
1643
|
-
// now, in case this material supports lights - or later, when
|
|
1644
|
-
// the next material that does gets activated:
|
|
1748
|
+
if ( needsProgramChange === true ) {
|
|
1645
1749
|
|
|
1646
|
-
|
|
1647
|
-
refreshLights = true; // remains set until update done
|
|
1750
|
+
program = getProgram( material, scene, object );
|
|
1648
1751
|
|
|
1649
1752
|
}
|
|
1650
1753
|
|
|
1651
|
-
|
|
1652
|
-
|
|
1754
|
+
let refreshProgram = false;
|
|
1755
|
+
let refreshMaterial = false;
|
|
1756
|
+
let refreshLights = false;
|
|
1653
1757
|
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
material.isMeshToonMaterial ||
|
|
1657
|
-
material.isMeshStandardMaterial ||
|
|
1658
|
-
material.envMap ) {
|
|
1758
|
+
const p_uniforms = program.getUniforms(),
|
|
1759
|
+
m_uniforms = materialProperties.uniforms;
|
|
1659
1760
|
|
|
1660
|
-
|
|
1761
|
+
if ( state.useProgram( program.program ) ) {
|
|
1661
1762
|
|
|
1662
|
-
|
|
1763
|
+
refreshProgram = true;
|
|
1764
|
+
refreshMaterial = true;
|
|
1765
|
+
refreshLights = true;
|
|
1663
1766
|
|
|
1664
|
-
|
|
1665
|
-
_vector3.setFromMatrixPosition( camera.matrixWorld ) );
|
|
1767
|
+
}
|
|
1666
1768
|
|
|
1667
|
-
|
|
1769
|
+
if ( material.id !== _currentMaterialId ) {
|
|
1770
|
+
|
|
1771
|
+
_currentMaterialId = material.id;
|
|
1772
|
+
|
|
1773
|
+
refreshMaterial = true;
|
|
1668
1774
|
|
|
1669
1775
|
}
|
|
1670
1776
|
|
|
1671
|
-
if (
|
|
1672
|
-
material.isMeshToonMaterial ||
|
|
1673
|
-
material.isMeshLambertMaterial ||
|
|
1674
|
-
material.isMeshBasicMaterial ||
|
|
1675
|
-
material.isMeshStandardMaterial ||
|
|
1676
|
-
material.isShaderMaterial ) {
|
|
1777
|
+
if ( refreshProgram || _currentCamera !== camera ) {
|
|
1677
1778
|
|
|
1678
|
-
p_uniforms.setValue( _gl, '
|
|
1779
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
1679
1780
|
|
|
1680
|
-
|
|
1781
|
+
if ( capabilities.logarithmicDepthBuffer ) {
|
|
1681
1782
|
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
material.isMeshLambertMaterial ||
|
|
1685
|
-
material.isMeshBasicMaterial ||
|
|
1686
|
-
material.isMeshStandardMaterial ||
|
|
1687
|
-
material.isShaderMaterial ||
|
|
1688
|
-
material.isShadowMaterial ||
|
|
1689
|
-
object.isSkinnedMesh ) {
|
|
1783
|
+
p_uniforms.setValue( _gl, 'logDepthBufFC',
|
|
1784
|
+
2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
|
|
1690
1785
|
|
|
1691
|
-
|
|
1786
|
+
}
|
|
1692
1787
|
|
|
1693
|
-
|
|
1788
|
+
if ( _currentCamera !== camera ) {
|
|
1694
1789
|
|
|
1695
|
-
|
|
1790
|
+
_currentCamera = camera;
|
|
1696
1791
|
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1792
|
+
// lighting uniforms depend on the camera so enforce an update
|
|
1793
|
+
// now, in case this material supports lights - or later, when
|
|
1794
|
+
// the next material that does gets activated:
|
|
1700
1795
|
|
|
1701
|
-
|
|
1796
|
+
refreshMaterial = true; // set to true on material change
|
|
1797
|
+
refreshLights = true; // remains set until update done
|
|
1702
1798
|
|
|
1703
|
-
|
|
1704
|
-
p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );
|
|
1799
|
+
}
|
|
1705
1800
|
|
|
1706
|
-
|
|
1801
|
+
// load material specific uniforms
|
|
1802
|
+
// (shader material also gets them for the sake of genericity)
|
|
1707
1803
|
|
|
1708
|
-
|
|
1804
|
+
if ( material.isShaderMaterial ||
|
|
1805
|
+
material.isMeshPhongMaterial ||
|
|
1806
|
+
material.isMeshToonMaterial ||
|
|
1807
|
+
material.isMeshStandardMaterial ||
|
|
1808
|
+
material.envMap ) {
|
|
1709
1809
|
|
|
1710
|
-
|
|
1810
|
+
const uCamPos = p_uniforms.map.cameraPosition;
|
|
1711
1811
|
|
|
1712
|
-
if (
|
|
1812
|
+
if ( uCamPos !== undefined ) {
|
|
1713
1813
|
|
|
1714
|
-
|
|
1715
|
-
|
|
1814
|
+
uCamPos.setValue( _gl,
|
|
1815
|
+
_vector3.setFromMatrixPosition( camera.matrixWorld ) );
|
|
1716
1816
|
|
|
1717
|
-
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
if ( material.isMeshPhongMaterial ||
|
|
1822
|
+
material.isMeshToonMaterial ||
|
|
1823
|
+
material.isMeshLambertMaterial ||
|
|
1824
|
+
material.isMeshBasicMaterial ||
|
|
1825
|
+
material.isMeshStandardMaterial ||
|
|
1826
|
+
material.isShaderMaterial ) {
|
|
1827
|
+
|
|
1828
|
+
p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );
|
|
1829
|
+
|
|
1830
|
+
}
|
|
1718
1831
|
|
|
1719
|
-
|
|
1832
|
+
if ( material.isMeshPhongMaterial ||
|
|
1833
|
+
material.isMeshToonMaterial ||
|
|
1834
|
+
material.isMeshLambertMaterial ||
|
|
1835
|
+
material.isMeshBasicMaterial ||
|
|
1836
|
+
material.isMeshStandardMaterial ||
|
|
1837
|
+
material.isShaderMaterial ||
|
|
1838
|
+
material.isShadowMaterial ||
|
|
1839
|
+
object.isSkinnedMesh ) {
|
|
1840
|
+
|
|
1841
|
+
p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
|
|
1720
1842
|
|
|
1721
1843
|
}
|
|
1722
1844
|
|
|
1723
1845
|
}
|
|
1724
1846
|
|
|
1725
|
-
|
|
1847
|
+
// skinning and morph target uniforms must be set even if material didn't change
|
|
1848
|
+
// auto-setting of texture unit for bone and morph texture must go before other textures
|
|
1849
|
+
// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures
|
|
1726
1850
|
|
|
1727
|
-
|
|
1851
|
+
if ( object.isSkinnedMesh ) {
|
|
1728
1852
|
|
|
1729
|
-
|
|
1853
|
+
p_uniforms.setOptional( _gl, object, 'bindMatrix' );
|
|
1854
|
+
p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );
|
|
1730
1855
|
|
|
1731
|
-
|
|
1856
|
+
const skeleton = object.skeleton;
|
|
1732
1857
|
|
|
1733
|
-
|
|
1858
|
+
if ( skeleton ) {
|
|
1734
1859
|
|
|
1735
|
-
|
|
1860
|
+
if ( capabilities.floatVertexTextures ) {
|
|
1736
1861
|
|
|
1737
|
-
|
|
1738
|
-
p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );
|
|
1862
|
+
if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
|
|
1739
1863
|
|
|
1740
|
-
|
|
1864
|
+
p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
|
|
1865
|
+
p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );
|
|
1741
1866
|
|
|
1742
|
-
|
|
1867
|
+
} else {
|
|
1743
1868
|
|
|
1744
|
-
|
|
1869
|
+
console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );
|
|
1745
1870
|
|
|
1746
|
-
|
|
1871
|
+
}
|
|
1747
1872
|
|
|
1748
|
-
|
|
1873
|
+
}
|
|
1749
1874
|
|
|
1750
|
-
|
|
1875
|
+
}
|
|
1751
1876
|
|
|
1752
|
-
|
|
1877
|
+
const morphAttributes = geometry.morphAttributes;
|
|
1753
1878
|
|
|
1754
|
-
|
|
1879
|
+
if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {
|
|
1755
1880
|
|
|
1756
|
-
|
|
1881
|
+
morphtargets.update( object, geometry, program );
|
|
1757
1882
|
|
|
1758
|
-
|
|
1883
|
+
}
|
|
1759
1884
|
|
|
1760
|
-
|
|
1761
|
-
// they simply reference the renderer's state for their
|
|
1762
|
-
// values
|
|
1763
|
-
//
|
|
1764
|
-
// use the current material's .needsUpdate flags to set
|
|
1765
|
-
// the GL state when required
|
|
1885
|
+
if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {
|
|
1766
1886
|
|
|
1767
|
-
|
|
1887
|
+
materialProperties.receiveShadow = object.receiveShadow;
|
|
1888
|
+
p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );
|
|
1768
1889
|
|
|
1769
1890
|
}
|
|
1770
1891
|
|
|
1771
|
-
//
|
|
1892
|
+
// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512
|
|
1893
|
+
|
|
1894
|
+
if ( material.isMeshGouraudMaterial && material.envMap !== null ) {
|
|
1772
1895
|
|
|
1773
|
-
|
|
1896
|
+
m_uniforms.envMap.value = envMap;
|
|
1774
1897
|
|
|
1775
|
-
|
|
1898
|
+
m_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
1776
1899
|
|
|
1777
1900
|
}
|
|
1778
1901
|
|
|
1779
|
-
|
|
1902
|
+
if ( refreshMaterial ) {
|
|
1780
1903
|
|
|
1781
|
-
|
|
1904
|
+
p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
|
|
1782
1905
|
|
|
1783
|
-
|
|
1906
|
+
if ( materialProperties.needsLights ) {
|
|
1784
1907
|
|
|
1785
|
-
|
|
1908
|
+
// the current material requires lighting info
|
|
1786
1909
|
|
|
1787
|
-
|
|
1788
|
-
|
|
1910
|
+
// note: all lighting uniforms are always set correctly
|
|
1911
|
+
// they simply reference the renderer's state for their
|
|
1912
|
+
// values
|
|
1913
|
+
//
|
|
1914
|
+
// use the current material's .needsUpdate flags to set
|
|
1915
|
+
// the GL state when required
|
|
1789
1916
|
|
|
1790
|
-
|
|
1917
|
+
markUniformsLightsNeedsUpdate( m_uniforms, refreshLights );
|
|
1918
|
+
|
|
1919
|
+
}
|
|
1791
1920
|
|
|
1792
|
-
|
|
1921
|
+
// refresh uniforms common to several materials
|
|
1793
1922
|
|
|
1794
|
-
|
|
1923
|
+
if ( fog && material.fog === true ) {
|
|
1795
1924
|
|
|
1796
|
-
|
|
1925
|
+
materials.refreshFogUniforms( m_uniforms, fog );
|
|
1797
1926
|
|
|
1798
|
-
|
|
1927
|
+
}
|
|
1799
1928
|
|
|
1800
|
-
|
|
1801
|
-
p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );
|
|
1802
|
-
p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );
|
|
1929
|
+
materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );
|
|
1803
1930
|
|
|
1804
|
-
|
|
1931
|
+
WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );
|
|
1805
1932
|
|
|
1806
|
-
|
|
1933
|
+
}
|
|
1807
1934
|
|
|
1808
|
-
|
|
1935
|
+
if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {
|
|
1809
1936
|
|
|
1810
|
-
|
|
1937
|
+
WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );
|
|
1938
|
+
material.uniformsNeedUpdate = false;
|
|
1811
1939
|
|
|
1812
|
-
|
|
1940
|
+
}
|
|
1813
1941
|
|
|
1814
|
-
|
|
1942
|
+
if ( material.isSpriteMaterial ) {
|
|
1815
1943
|
|
|
1816
|
-
|
|
1817
|
-
uniformsGroups.bind( group, program );
|
|
1944
|
+
p_uniforms.setValue( _gl, 'center', object.center );
|
|
1818
1945
|
|
|
1819
|
-
|
|
1946
|
+
}
|
|
1820
1947
|
|
|
1821
|
-
|
|
1948
|
+
// common matrices
|
|
1949
|
+
|
|
1950
|
+
p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );
|
|
1951
|
+
p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );
|
|
1952
|
+
p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );
|
|
1953
|
+
|
|
1954
|
+
// UBOs
|
|
1955
|
+
|
|
1956
|
+
if ( material.isShaderMaterial || material.isRawShaderMaterial ) {
|
|
1957
|
+
|
|
1958
|
+
const groups = material.uniformsGroups;
|
|
1959
|
+
|
|
1960
|
+
for ( let i = 0, l = groups.length; i < l; i ++ ) {
|
|
1961
|
+
|
|
1962
|
+
if ( capabilities.isWebGL2 ) {
|
|
1963
|
+
|
|
1964
|
+
const group = groups[ i ];
|
|
1965
|
+
|
|
1966
|
+
uniformsGroups.update( group, program );
|
|
1967
|
+
uniformsGroups.bind( group, program );
|
|
1968
|
+
|
|
1969
|
+
} else {
|
|
1970
|
+
|
|
1971
|
+
console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );
|
|
1972
|
+
|
|
1973
|
+
}
|
|
1822
1974
|
|
|
1823
1975
|
}
|
|
1824
1976
|
|
|
1825
1977
|
}
|
|
1826
1978
|
|
|
1979
|
+
return program;
|
|
1980
|
+
|
|
1827
1981
|
}
|
|
1828
1982
|
|
|
1829
|
-
|
|
1983
|
+
// If uniforms are marked as clean, they don't need to be loaded to the GPU.
|
|
1830
1984
|
|
|
1831
|
-
|
|
1985
|
+
function markUniformsLightsNeedsUpdate( uniforms, value ) {
|
|
1832
1986
|
|
|
1833
|
-
|
|
1987
|
+
uniforms.ambientLightColor.needsUpdate = value;
|
|
1988
|
+
uniforms.lightProbe.needsUpdate = value;
|
|
1834
1989
|
|
|
1835
|
-
|
|
1990
|
+
uniforms.directionalLights.needsUpdate = value;
|
|
1991
|
+
uniforms.directionalLightShadows.needsUpdate = value;
|
|
1992
|
+
uniforms.pointLights.needsUpdate = value;
|
|
1993
|
+
uniforms.pointLightShadows.needsUpdate = value;
|
|
1994
|
+
uniforms.spotLights.needsUpdate = value;
|
|
1995
|
+
uniforms.spotLightShadows.needsUpdate = value;
|
|
1996
|
+
uniforms.rectAreaLights.needsUpdate = value;
|
|
1997
|
+
uniforms.hemisphereLights.needsUpdate = value;
|
|
1836
1998
|
|
|
1837
|
-
|
|
1838
|
-
uniforms.lightProbe.needsUpdate = value;
|
|
1999
|
+
}
|
|
1839
2000
|
|
|
1840
|
-
|
|
1841
|
-
uniforms.directionalLightShadows.needsUpdate = value;
|
|
1842
|
-
uniforms.pointLights.needsUpdate = value;
|
|
1843
|
-
uniforms.pointLightShadows.needsUpdate = value;
|
|
1844
|
-
uniforms.spotLights.needsUpdate = value;
|
|
1845
|
-
uniforms.spotLightShadows.needsUpdate = value;
|
|
1846
|
-
uniforms.rectAreaLights.needsUpdate = value;
|
|
1847
|
-
uniforms.hemisphereLights.needsUpdate = value;
|
|
2001
|
+
function materialNeedsLights( material ) {
|
|
1848
2002
|
|
|
1849
|
-
|
|
2003
|
+
return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||
|
|
2004
|
+
material.isMeshStandardMaterial || material.isShadowMaterial ||
|
|
2005
|
+
( material.isShaderMaterial && material.lights === true );
|
|
1850
2006
|
|
|
1851
|
-
|
|
2007
|
+
}
|
|
1852
2008
|
|
|
1853
|
-
|
|
1854
|
-
material.isMeshStandardMaterial || material.isShadowMaterial ||
|
|
1855
|
-
( material.isShaderMaterial && material.lights === true );
|
|
2009
|
+
this.setTexture2D = ( function () {
|
|
1856
2010
|
|
|
1857
|
-
|
|
2011
|
+
var warned = false;
|
|
1858
2012
|
|
|
1859
|
-
|
|
2013
|
+
// backwards compatibility: peel texture.texture
|
|
2014
|
+
return function setTexture2D( texture, slot ) {
|
|
1860
2015
|
|
|
1861
|
-
|
|
2016
|
+
if ( texture && texture.isWebGLRenderTarget ) {
|
|
1862
2017
|
|
|
1863
|
-
|
|
1864
|
-
return function setTexture2D( texture, slot ) {
|
|
2018
|
+
if ( ! warned ) {
|
|
1865
2019
|
|
|
1866
|
-
|
|
2020
|
+
console.warn( "THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead." );
|
|
2021
|
+
warned = true;
|
|
1867
2022
|
|
|
1868
|
-
|
|
2023
|
+
}
|
|
1869
2024
|
|
|
1870
|
-
|
|
1871
|
-
warned = true;
|
|
2025
|
+
texture = texture.texture;
|
|
1872
2026
|
|
|
1873
2027
|
}
|
|
1874
2028
|
|
|
1875
|
-
texture
|
|
1876
|
-
|
|
1877
|
-
}
|
|
2029
|
+
textures.setTexture2D( texture, slot );
|
|
1878
2030
|
|
|
1879
|
-
|
|
2031
|
+
};
|
|
1880
2032
|
|
|
1881
|
-
};
|
|
2033
|
+
}() );
|
|
1882
2034
|
|
|
1883
|
-
|
|
2035
|
+
this.getActiveCubeFace = function () {
|
|
1884
2036
|
|
|
1885
|
-
|
|
2037
|
+
return _currentActiveCubeFace;
|
|
1886
2038
|
|
|
1887
|
-
|
|
2039
|
+
};
|
|
1888
2040
|
|
|
1889
|
-
|
|
2041
|
+
this.getActiveMipmapLevel = function () {
|
|
1890
2042
|
|
|
1891
|
-
|
|
2043
|
+
return _currentActiveMipmapLevel;
|
|
1892
2044
|
|
|
1893
|
-
|
|
2045
|
+
};
|
|
1894
2046
|
|
|
1895
|
-
|
|
2047
|
+
this.getRenderTarget = function () {
|
|
1896
2048
|
|
|
1897
|
-
|
|
2049
|
+
return _currentRenderTarget;
|
|
1898
2050
|
|
|
1899
|
-
|
|
2051
|
+
};
|
|
1900
2052
|
|
|
1901
|
-
|
|
2053
|
+
this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {
|
|
1902
2054
|
|
|
1903
|
-
|
|
2055
|
+
properties.get( renderTarget.texture ).__webglTexture = colorTexture;
|
|
2056
|
+
properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;
|
|
1904
2057
|
|
|
1905
|
-
|
|
1906
|
-
|
|
2058
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
2059
|
+
renderTargetProperties.__hasExternalTextures = true;
|
|
1907
2060
|
|
|
1908
|
-
|
|
1909
|
-
renderTargetProperties.__hasExternalTextures = true;
|
|
2061
|
+
if ( renderTargetProperties.__hasExternalTextures ) {
|
|
1910
2062
|
|
|
1911
|
-
|
|
2063
|
+
renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;
|
|
1912
2064
|
|
|
1913
|
-
|
|
2065
|
+
if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
1914
2066
|
|
|
1915
|
-
|
|
2067
|
+
// The multisample_render_to_texture extension doesn't work properly if there
|
|
2068
|
+
// are midframe flushes and an external depth buffer. Disable use of the extension.
|
|
2069
|
+
if ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
|
|
1916
2070
|
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
if ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
|
|
2071
|
+
console.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );
|
|
2072
|
+
renderTargetProperties.__useRenderToTexture = false;
|
|
1920
2073
|
|
|
1921
|
-
|
|
1922
|
-
renderTargetProperties.__useRenderToTexture = false;
|
|
2074
|
+
}
|
|
1923
2075
|
|
|
1924
2076
|
}
|
|
1925
2077
|
|
|
1926
2078
|
}
|
|
1927
2079
|
|
|
1928
|
-
}
|
|
2080
|
+
};
|
|
1929
2081
|
|
|
1930
|
-
|
|
2082
|
+
this.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {
|
|
1931
2083
|
|
|
1932
|
-
|
|
2084
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
2085
|
+
renderTargetProperties.__webglFramebuffer = defaultFramebuffer;
|
|
2086
|
+
renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;
|
|
1933
2087
|
|
|
1934
|
-
|
|
1935
|
-
renderTargetProperties.__webglFramebuffer = defaultFramebuffer;
|
|
1936
|
-
renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;
|
|
2088
|
+
};
|
|
1937
2089
|
|
|
1938
|
-
|
|
2090
|
+
this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
|
|
1939
2091
|
|
|
1940
|
-
|
|
2092
|
+
_currentRenderTarget = renderTarget;
|
|
2093
|
+
_currentActiveCubeFace = activeCubeFace;
|
|
2094
|
+
_currentActiveMipmapLevel = activeMipmapLevel;
|
|
1941
2095
|
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
2096
|
+
let useDefaultFramebuffer = true;
|
|
2097
|
+
let framebuffer = null;
|
|
2098
|
+
let isCube = false;
|
|
2099
|
+
let isRenderTarget3D = false;
|
|
1945
2100
|
|
|
1946
|
-
|
|
1947
|
-
let framebuffer = null;
|
|
1948
|
-
let isCube = false;
|
|
1949
|
-
let isRenderTarget3D = false;
|
|
2101
|
+
if ( renderTarget ) {
|
|
1950
2102
|
|
|
1951
|
-
|
|
2103
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1952
2104
|
|
|
1953
|
-
|
|
2105
|
+
if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {
|
|
1954
2106
|
|
|
1955
|
-
|
|
2107
|
+
// We need to make sure to rebind the framebuffer.
|
|
2108
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
2109
|
+
useDefaultFramebuffer = false;
|
|
1956
2110
|
|
|
1957
|
-
|
|
1958
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
1959
|
-
useDefaultFramebuffer = false;
|
|
2111
|
+
} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {
|
|
1960
2112
|
|
|
1961
|
-
|
|
2113
|
+
textures.setupRenderTarget( renderTarget );
|
|
1962
2114
|
|
|
1963
|
-
|
|
2115
|
+
} else if ( renderTargetProperties.__hasExternalTextures ) {
|
|
1964
2116
|
|
|
1965
|
-
|
|
2117
|
+
// Color and depth texture must be rebound in order for the swapchain to update.
|
|
2118
|
+
textures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );
|
|
1966
2119
|
|
|
1967
|
-
|
|
1968
|
-
textures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );
|
|
2120
|
+
}
|
|
1969
2121
|
|
|
1970
|
-
|
|
2122
|
+
const texture = renderTarget.texture;
|
|
2123
|
+
|
|
2124
|
+
if ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
|
|
1971
2125
|
|
|
1972
|
-
|
|
2126
|
+
isRenderTarget3D = true;
|
|
1973
2127
|
|
|
1974
|
-
|
|
2128
|
+
}
|
|
1975
2129
|
|
|
1976
|
-
|
|
2130
|
+
const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;
|
|
1977
2131
|
|
|
1978
|
-
|
|
2132
|
+
if ( renderTarget.isWebGLCubeRenderTarget ) {
|
|
1979
2133
|
|
|
1980
|
-
|
|
2134
|
+
framebuffer = __webglFramebuffer[ activeCubeFace ];
|
|
2135
|
+
isCube = true;
|
|
1981
2136
|
|
|
1982
|
-
|
|
2137
|
+
} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
|
|
2138
|
+
|
|
2139
|
+
framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
|
|
2140
|
+
|
|
2141
|
+
} else {
|
|
1983
2142
|
|
|
1984
|
-
|
|
1985
|
-
isCube = true;
|
|
2143
|
+
framebuffer = __webglFramebuffer;
|
|
1986
2144
|
|
|
1987
|
-
|
|
2145
|
+
}
|
|
1988
2146
|
|
|
1989
|
-
|
|
2147
|
+
_currentViewport.copy( renderTarget.viewport );
|
|
2148
|
+
_currentScissor.copy( renderTarget.scissor );
|
|
2149
|
+
_currentScissorTest = renderTarget.scissorTest;
|
|
1990
2150
|
|
|
1991
2151
|
} else {
|
|
1992
2152
|
|
|
1993
|
-
|
|
2153
|
+
_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();
|
|
2154
|
+
_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();
|
|
2155
|
+
_currentScissorTest = _scissorTest;
|
|
1994
2156
|
|
|
1995
2157
|
}
|
|
1996
2158
|
|
|
1997
|
-
|
|
1998
|
-
_currentScissor.copy( renderTarget.scissor );
|
|
1999
|
-
_currentScissorTest = renderTarget.scissorTest;
|
|
2159
|
+
const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2000
2160
|
|
|
2001
|
-
|
|
2161
|
+
if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {
|
|
2002
2162
|
|
|
2003
|
-
|
|
2004
|
-
_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();
|
|
2005
|
-
_currentScissorTest = _scissorTest;
|
|
2163
|
+
state.drawBuffers( renderTarget, framebuffer );
|
|
2006
2164
|
|
|
2007
|
-
|
|
2165
|
+
}
|
|
2008
2166
|
|
|
2009
|
-
|
|
2167
|
+
state.viewport( _currentViewport );
|
|
2168
|
+
state.scissor( _currentScissor );
|
|
2169
|
+
state.setScissorTest( _currentScissorTest );
|
|
2010
2170
|
|
|
2011
|
-
|
|
2171
|
+
if ( isCube ) {
|
|
2012
2172
|
|
|
2013
|
-
|
|
2173
|
+
const textureProperties = properties.get( renderTarget.texture );
|
|
2174
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );
|
|
2014
2175
|
|
|
2015
|
-
|
|
2176
|
+
} else if ( isRenderTarget3D ) {
|
|
2177
|
+
|
|
2178
|
+
const textureProperties = properties.get( renderTarget.texture );
|
|
2179
|
+
const layer = activeCubeFace || 0;
|
|
2180
|
+
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );
|
|
2016
2181
|
|
|
2017
|
-
|
|
2018
|
-
state.scissor( _currentScissor );
|
|
2019
|
-
state.setScissorTest( _currentScissorTest );
|
|
2182
|
+
}
|
|
2020
2183
|
|
|
2021
|
-
|
|
2184
|
+
_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings
|
|
2022
2185
|
|
|
2023
|
-
|
|
2024
|
-
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );
|
|
2186
|
+
};
|
|
2025
2187
|
|
|
2026
|
-
|
|
2188
|
+
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2027
2189
|
|
|
2028
|
-
|
|
2029
|
-
const layer = activeCubeFace || 0;
|
|
2030
|
-
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );
|
|
2190
|
+
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2031
2191
|
|
|
2032
|
-
|
|
2192
|
+
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
|
|
2193
|
+
return;
|
|
2033
2194
|
|
|
2034
|
-
|
|
2195
|
+
}
|
|
2035
2196
|
|
|
2036
|
-
|
|
2197
|
+
let framebuffer = properties.get( renderTarget ).__webglFramebuffer;
|
|
2037
2198
|
|
|
2038
|
-
|
|
2199
|
+
if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {
|
|
2039
2200
|
|
|
2040
|
-
|
|
2201
|
+
framebuffer = framebuffer[ activeCubeFaceIndex ];
|
|
2041
2202
|
|
|
2042
|
-
|
|
2043
|
-
return;
|
|
2203
|
+
}
|
|
2044
2204
|
|
|
2045
|
-
|
|
2205
|
+
if ( framebuffer ) {
|
|
2046
2206
|
|
|
2047
|
-
|
|
2207
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2048
2208
|
|
|
2049
|
-
|
|
2209
|
+
try {
|
|
2050
2210
|
|
|
2051
|
-
|
|
2211
|
+
const texture = renderTarget.texture;
|
|
2212
|
+
const textureFormat = texture.format;
|
|
2213
|
+
const textureType = texture.type;
|
|
2052
2214
|
|
|
2053
|
-
|
|
2215
|
+
if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
|
|
2054
2216
|
|
|
2055
|
-
|
|
2217
|
+
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
2218
|
+
return;
|
|
2056
2219
|
|
|
2057
|
-
|
|
2220
|
+
}
|
|
2058
2221
|
|
|
2059
|
-
|
|
2222
|
+
const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );
|
|
2060
2223
|
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2224
|
+
if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
|
|
2225
|
+
! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox
|
|
2226
|
+
! halfFloatSupportedByExt ) {
|
|
2064
2227
|
|
|
2065
|
-
|
|
2228
|
+
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
2229
|
+
return;
|
|
2066
2230
|
|
|
2067
|
-
|
|
2068
|
-
return;
|
|
2231
|
+
}
|
|
2069
2232
|
|
|
2070
|
-
|
|
2233
|
+
// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)
|
|
2234
|
+
|
|
2235
|
+
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2236
|
+
|
|
2237
|
+
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
|
|
2238
|
+
|
|
2239
|
+
}
|
|
2071
2240
|
|
|
2072
|
-
|
|
2241
|
+
} finally {
|
|
2073
2242
|
|
|
2074
|
-
|
|
2075
|
-
! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox
|
|
2076
|
-
! halfFloatSupportedByExt ) {
|
|
2243
|
+
// restore framebuffer of current render target if necessary
|
|
2077
2244
|
|
|
2078
|
-
|
|
2079
|
-
|
|
2245
|
+
const framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;
|
|
2246
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2080
2247
|
|
|
2081
2248
|
}
|
|
2082
2249
|
|
|
2083
|
-
|
|
2250
|
+
}
|
|
2084
2251
|
|
|
2085
|
-
|
|
2252
|
+
};
|
|
2086
2253
|
|
|
2087
|
-
|
|
2254
|
+
this.copyFramebufferToTexture = function ( position, texture, level = 0 ) {
|
|
2088
2255
|
|
|
2089
|
-
|
|
2256
|
+
const levelScale = Math.pow( 2, - level );
|
|
2257
|
+
const width = Math.floor( texture.image.width * levelScale );
|
|
2258
|
+
const height = Math.floor( texture.image.height * levelScale );
|
|
2090
2259
|
|
|
2091
|
-
|
|
2260
|
+
textures.setTexture2D( texture, 0 );
|
|
2092
2261
|
|
|
2093
|
-
|
|
2262
|
+
_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, position.x, position.y, width, height );
|
|
2094
2263
|
|
|
2095
|
-
|
|
2096
|
-
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2264
|
+
state.unbindTexture();
|
|
2097
2265
|
|
|
2098
|
-
|
|
2266
|
+
};
|
|
2099
2267
|
|
|
2100
|
-
|
|
2268
|
+
this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {
|
|
2101
2269
|
|
|
2102
|
-
|
|
2270
|
+
const width = srcTexture.image.width;
|
|
2271
|
+
const height = srcTexture.image.height;
|
|
2272
|
+
const glFormat = utils.convert( dstTexture.format );
|
|
2273
|
+
const glType = utils.convert( dstTexture.type );
|
|
2103
2274
|
|
|
2104
|
-
|
|
2275
|
+
textures.setTexture2D( dstTexture, 0 );
|
|
2105
2276
|
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2277
|
+
// As another texture upload may have changed pixelStorei
|
|
2278
|
+
// parameters, make sure they are correct for the dstTexture
|
|
2279
|
+
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
2280
|
+
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2281
|
+
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2109
2282
|
|
|
2110
|
-
|
|
2283
|
+
if ( srcTexture.isDataTexture ) {
|
|
2111
2284
|
|
|
2112
|
-
|
|
2285
|
+
_gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );
|
|
2113
2286
|
|
|
2114
|
-
|
|
2287
|
+
} else {
|
|
2115
2288
|
|
|
2116
|
-
|
|
2289
|
+
if ( srcTexture.isCompressedTexture ) {
|
|
2117
2290
|
|
|
2118
|
-
|
|
2291
|
+
_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );
|
|
2119
2292
|
|
|
2120
|
-
|
|
2121
|
-
const height = srcTexture.image.height;
|
|
2122
|
-
const glFormat = utils.convert( dstTexture.format );
|
|
2123
|
-
const glType = utils.convert( dstTexture.type );
|
|
2293
|
+
} else {
|
|
2124
2294
|
|
|
2125
|
-
|
|
2295
|
+
_gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, glFormat, glType, srcTexture.image );
|
|
2126
2296
|
|
|
2127
|
-
|
|
2128
|
-
// parameters, make sure they are correct for the dstTexture
|
|
2129
|
-
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
2130
|
-
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2131
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2297
|
+
}
|
|
2132
2298
|
|
|
2133
|
-
|
|
2299
|
+
}
|
|
2134
2300
|
|
|
2135
|
-
|
|
2301
|
+
// Generate mipmaps only when copying level 0
|
|
2302
|
+
if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );
|
|
2136
2303
|
|
|
2137
|
-
|
|
2304
|
+
state.unbindTexture();
|
|
2138
2305
|
|
|
2139
|
-
|
|
2306
|
+
};
|
|
2140
2307
|
|
|
2141
|
-
|
|
2308
|
+
this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {
|
|
2142
2309
|
|
|
2143
|
-
|
|
2310
|
+
if ( _this.isWebGL1Renderer ) {
|
|
2144
2311
|
|
|
2145
|
-
|
|
2312
|
+
console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );
|
|
2313
|
+
return;
|
|
2146
2314
|
|
|
2147
2315
|
}
|
|
2148
2316
|
|
|
2149
|
-
|
|
2317
|
+
const width = sourceBox.max.x - sourceBox.min.x + 1;
|
|
2318
|
+
const height = sourceBox.max.y - sourceBox.min.y + 1;
|
|
2319
|
+
const depth = sourceBox.max.z - sourceBox.min.z + 1;
|
|
2320
|
+
const glFormat = utils.convert( dstTexture.format );
|
|
2321
|
+
const glType = utils.convert( dstTexture.type );
|
|
2322
|
+
let glTarget;
|
|
2150
2323
|
|
|
2151
|
-
|
|
2152
|
-
if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );
|
|
2324
|
+
if ( dstTexture.isData3DTexture ) {
|
|
2153
2325
|
|
|
2154
|
-
|
|
2326
|
+
textures.setTexture3D( dstTexture, 0 );
|
|
2327
|
+
glTarget = _gl.TEXTURE_3D;
|
|
2155
2328
|
|
|
2156
|
-
|
|
2329
|
+
} else if ( dstTexture.isDataArrayTexture ) {
|
|
2157
2330
|
|
|
2158
|
-
|
|
2331
|
+
textures.setTexture2DArray( dstTexture, 0 );
|
|
2332
|
+
glTarget = _gl.TEXTURE_2D_ARRAY;
|
|
2159
2333
|
|
|
2160
|
-
|
|
2334
|
+
} else {
|
|
2161
2335
|
|
|
2162
|
-
|
|
2163
|
-
|
|
2336
|
+
console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );
|
|
2337
|
+
return;
|
|
2164
2338
|
|
|
2165
|
-
|
|
2339
|
+
}
|
|
2166
2340
|
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
const glFormat = utils.convert( dstTexture.format );
|
|
2171
|
-
const glType = utils.convert( dstTexture.type );
|
|
2172
|
-
let glTarget;
|
|
2341
|
+
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
2342
|
+
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2343
|
+
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2173
2344
|
|
|
2174
|
-
|
|
2345
|
+
const unpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );
|
|
2346
|
+
const unpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
2347
|
+
const unpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
2348
|
+
const unpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
2349
|
+
const unpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
2175
2350
|
|
|
2176
|
-
|
|
2177
|
-
glTarget = _gl.TEXTURE_3D;
|
|
2351
|
+
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;
|
|
2178
2352
|
|
|
2179
|
-
|
|
2353
|
+
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
|
|
2354
|
+
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
2355
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, sourceBox.min.x );
|
|
2356
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, sourceBox.min.y );
|
|
2357
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, sourceBox.min.z );
|
|
2180
2358
|
|
|
2181
|
-
|
|
2182
|
-
glTarget = _gl.TEXTURE_2D_ARRAY;
|
|
2359
|
+
if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
|
|
2183
2360
|
|
|
2184
|
-
|
|
2361
|
+
_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );
|
|
2185
2362
|
|
|
2186
|
-
|
|
2187
|
-
return;
|
|
2363
|
+
} else {
|
|
2188
2364
|
|
|
2189
|
-
|
|
2365
|
+
if ( srcTexture.isCompressedArrayTexture ) {
|
|
2190
2366
|
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2367
|
+
console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );
|
|
2368
|
+
_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );
|
|
2194
2369
|
|
|
2195
|
-
|
|
2196
|
-
const unpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
2197
|
-
const unpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
2198
|
-
const unpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
2199
|
-
const unpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
2370
|
+
} else {
|
|
2200
2371
|
|
|
2201
|
-
|
|
2372
|
+
_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );
|
|
2202
2373
|
|
|
2203
|
-
|
|
2204
|
-
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
2205
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, sourceBox.min.x );
|
|
2206
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, sourceBox.min.y );
|
|
2207
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, sourceBox.min.z );
|
|
2374
|
+
}
|
|
2208
2375
|
|
|
2209
|
-
|
|
2376
|
+
}
|
|
2210
2377
|
|
|
2211
|
-
_gl.
|
|
2378
|
+
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, unpackRowLen );
|
|
2379
|
+
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight );
|
|
2380
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, unpackSkipPixels );
|
|
2381
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, unpackSkipRows );
|
|
2382
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, unpackSkipImages );
|
|
2212
2383
|
|
|
2213
|
-
|
|
2384
|
+
// Generate mipmaps only when copying level 0
|
|
2385
|
+
if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );
|
|
2386
|
+
|
|
2387
|
+
state.unbindTexture();
|
|
2388
|
+
|
|
2389
|
+
};
|
|
2390
|
+
|
|
2391
|
+
this.initTexture = function ( texture ) {
|
|
2392
|
+
|
|
2393
|
+
if ( texture.isCubeTexture ) {
|
|
2394
|
+
|
|
2395
|
+
textures.setTextureCube( texture, 0 );
|
|
2396
|
+
|
|
2397
|
+
} else if ( texture.isData3DTexture ) {
|
|
2398
|
+
|
|
2399
|
+
textures.setTexture3D( texture, 0 );
|
|
2214
2400
|
|
|
2215
|
-
if (
|
|
2401
|
+
} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
|
|
2216
2402
|
|
|
2217
|
-
|
|
2218
|
-
_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );
|
|
2403
|
+
textures.setTexture2DArray( texture, 0 );
|
|
2219
2404
|
|
|
2220
2405
|
} else {
|
|
2221
2406
|
|
|
2222
|
-
|
|
2407
|
+
textures.setTexture2D( texture, 0 );
|
|
2223
2408
|
|
|
2224
2409
|
}
|
|
2225
2410
|
|
|
2226
|
-
|
|
2411
|
+
state.unbindTexture();
|
|
2227
2412
|
|
|
2228
|
-
|
|
2229
|
-
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight );
|
|
2230
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, unpackSkipPixels );
|
|
2231
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, unpackSkipRows );
|
|
2232
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, unpackSkipImages );
|
|
2413
|
+
};
|
|
2233
2414
|
|
|
2234
|
-
|
|
2235
|
-
if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );
|
|
2415
|
+
this.resetState = function () {
|
|
2236
2416
|
|
|
2237
|
-
|
|
2417
|
+
_currentActiveCubeFace = 0;
|
|
2418
|
+
_currentActiveMipmapLevel = 0;
|
|
2419
|
+
_currentRenderTarget = null;
|
|
2238
2420
|
|
|
2239
|
-
|
|
2421
|
+
state.reset();
|
|
2422
|
+
bindingStates.reset();
|
|
2240
2423
|
|
|
2241
|
-
|
|
2424
|
+
};
|
|
2242
2425
|
|
|
2243
|
-
if (
|
|
2426
|
+
if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
|
|
2244
2427
|
|
|
2245
|
-
|
|
2428
|
+
__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
|
|
2246
2429
|
|
|
2247
|
-
}
|
|
2430
|
+
}
|
|
2248
2431
|
|
|
2249
|
-
|
|
2432
|
+
}
|
|
2250
2433
|
|
|
2251
|
-
|
|
2434
|
+
get coordinateSystem() {
|
|
2252
2435
|
|
|
2253
|
-
|
|
2436
|
+
return WebGLCoordinateSystem;
|
|
2254
2437
|
|
|
2255
|
-
|
|
2438
|
+
}
|
|
2256
2439
|
|
|
2257
|
-
|
|
2440
|
+
get physicallyCorrectLights() { // @deprecated, r150
|
|
2258
2441
|
|
|
2259
|
-
|
|
2442
|
+
console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );
|
|
2443
|
+
return ! this.useLegacyLights;
|
|
2260
2444
|
|
|
2261
|
-
|
|
2445
|
+
}
|
|
2262
2446
|
|
|
2263
|
-
|
|
2447
|
+
set physicallyCorrectLights( value ) { // @deprecated, r150
|
|
2264
2448
|
|
|
2265
|
-
|
|
2449
|
+
console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );
|
|
2450
|
+
this.useLegacyLights = ! value;
|
|
2266
2451
|
|
|
2267
|
-
|
|
2268
|
-
_currentActiveMipmapLevel = 0;
|
|
2269
|
-
_currentRenderTarget = null;
|
|
2452
|
+
}
|
|
2270
2453
|
|
|
2271
|
-
|
|
2272
|
-
bindingStates.reset();
|
|
2454
|
+
get outputEncoding() { // @deprecated, r152
|
|
2273
2455
|
|
|
2274
|
-
|
|
2456
|
+
console.warn( 'THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.' );
|
|
2457
|
+
return this.outputColorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
|
|
2275
2458
|
|
|
2276
|
-
|
|
2459
|
+
}
|
|
2460
|
+
|
|
2461
|
+
set outputEncoding( encoding ) { // @deprecated, r152
|
|
2277
2462
|
|
|
2278
|
-
|
|
2463
|
+
console.warn( 'THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.' );
|
|
2464
|
+
this.outputColorSpace = encoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
|
|
2279
2465
|
|
|
2280
2466
|
}
|
|
2281
2467
|
|
|
2282
2468
|
}
|
|
2283
2469
|
|
|
2470
|
+
|
|
2284
2471
|
export { WebGLRenderer };
|