super-three 0.154.1 → 0.156.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/build/three.cjs +360 -160
- package/build/three.js +360 -160
- package/build/three.min.js +1 -1
- package/build/three.module.js +355 -161
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +155 -25
- package/examples/jsm/csm/CSMShader.js +35 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +7 -0
- package/examples/jsm/libs/tween.module.js +790 -735
- package/examples/jsm/libs/utif.module.js +1644 -1558
- package/examples/jsm/loaders/DDSLoader.js +46 -3
- package/examples/jsm/loaders/EXRLoader.js +4 -4
- package/examples/jsm/loaders/FBXLoader.js +3 -1
- package/examples/jsm/loaders/GLTFLoader.js +25 -10
- package/examples/jsm/loaders/KTX2Loader.js +128 -79
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MMDLoader.js +10 -7
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PLYLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +48 -66
- package/examples/jsm/loaders/STLLoader.js +7 -0
- package/examples/jsm/loaders/TGALoader.js +10 -10
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -9
- package/examples/jsm/misc/Volume.js +4 -6
- package/examples/jsm/nodes/Nodes.js +8 -6
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +29 -3
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +20 -3
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +15 -4
- package/examples/jsm/nodes/accessors/InstanceNode.js +8 -8
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +31 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +73 -61
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +3 -0
- package/examples/jsm/nodes/accessors/Object3DNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +6 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +54 -9
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
- package/examples/jsm/nodes/core/AttributeNode.js +2 -2
- package/examples/jsm/nodes/core/LightingModel.js +7 -9
- package/examples/jsm/nodes/core/Node.js +28 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +94 -12
- package/examples/jsm/nodes/core/NodeUniform.js +1 -1
- package/examples/jsm/nodes/core/OutputStructNode.js +58 -0
- package/examples/jsm/nodes/core/PropertyNode.js +6 -0
- package/examples/jsm/nodes/core/StackNode.js +4 -4
- package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +77 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +19 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -2
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +13 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +53 -14
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +236 -97
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +13 -0
- package/examples/jsm/nodes/lighting/AONode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +58 -20
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +7 -10
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -12
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightingContextNode.js +12 -9
- package/examples/jsm/nodes/lighting/PointLightNode.js +7 -10
- package/examples/jsm/nodes/lighting/SpotLightNode.js +7 -10
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
- package/examples/jsm/nodes/materials/Materials.js +2 -0
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -0
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +19 -2
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/NodeMaterial.js +61 -26
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/HashNode.js +35 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +6 -2
- package/examples/jsm/nodes/utils/SplitNode.js +1 -1
- package/examples/jsm/objects/Reflector.js +1 -9
- package/examples/jsm/objects/Refractor.js +0 -8
- package/examples/jsm/offscreen/scene.js +0 -1
- package/examples/jsm/postprocessing/FilmPass.js +3 -5
- package/examples/jsm/postprocessing/MaskPass.js +4 -1
- package/examples/jsm/postprocessing/OutputPass.js +33 -14
- package/examples/jsm/postprocessing/RenderPass.js +30 -12
- package/examples/jsm/postprocessing/SAOPass.js +23 -98
- package/examples/jsm/postprocessing/SSAOPass.js +10 -30
- package/examples/jsm/postprocessing/UnrealBloomPass.js +21 -17
- package/examples/jsm/renderers/common/Backend.js +11 -8
- package/examples/jsm/renderers/common/Background.js +22 -20
- package/examples/jsm/renderers/common/Binding.js +14 -0
- package/examples/jsm/renderers/common/Bindings.js +7 -10
- package/examples/jsm/renderers/common/Geometries.js +1 -1
- package/examples/jsm/renderers/common/Pipelines.js +96 -47
- package/examples/jsm/renderers/common/RenderContext.js +1 -0
- package/examples/jsm/renderers/common/RenderContexts.js +41 -5
- package/examples/jsm/renderers/common/RenderList.js +12 -4
- package/examples/jsm/renderers/common/RenderObject.js +26 -6
- package/examples/jsm/renderers/common/RenderObjects.js +10 -7
- package/examples/jsm/renderers/common/Renderer.js +82 -42
- package/examples/jsm/renderers/common/SampledTexture.js +2 -1
- package/examples/jsm/renderers/common/Sampler.js +1 -1
- package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
- package/examples/jsm/renderers/common/Textures.js +172 -20
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +2 -2
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +58 -13
- package/examples/jsm/renderers/webgl/WebGLBackend.js +607 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +118 -17
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +199 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
- package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +320 -84
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +120 -66
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +55 -36
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +96 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +24 -22
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +117 -139
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +60 -142
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +7 -6
- package/examples/jsm/shaders/FilmShader.js +11 -54
- package/examples/jsm/shaders/OutputShader.js +19 -2
- package/examples/jsm/shaders/SAOShader.js +0 -13
- package/examples/jsm/shaders/SSAOShader.js +33 -26
- package/examples/jsm/utils/BufferGeometryUtils.js +13 -4
- package/examples/jsm/webxr/OculusHandPointerModel.js +2 -2
- package/package.json +2 -2
- package/src/Three.js +3 -0
- package/src/animation/PropertyBinding.js +1 -1
- package/src/audio/Audio.js +6 -0
- package/src/cameras/CubeCamera.js +1 -4
- package/src/constants.js +4 -1
- package/src/core/BufferAttribute.js +20 -0
- package/src/core/Object3D.js +2 -15
- package/src/core/RenderTarget.js +122 -0
- package/src/core/UniformsGroup.js +2 -2
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/loaders/DataTextureLoader.js +19 -2
- package/src/materials/Material.js +2 -2
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +3 -3
- package/src/math/Vector4.js +4 -4
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -2
- package/src/renderers/WebGLRenderTarget.js +3 -110
- package/src/renderers/WebGLRenderer.js +83 -57
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
- package/src/renderers/webgl/WebGLBackground.js +5 -14
- package/src/renderers/webgl/WebGLGeometries.js +5 -1
- package/src/renderers/webgl/WebGLMaterials.js +1 -1
- package/src/renderers/webgl/WebGLProgram.js +2 -0
- package/src/renderers/webgl/WebGLPrograms.js +19 -3
- package/src/renderers/webgl/WebGLTextures.js +101 -16
- package/src/renderers/webgl/WebGLUtils.js +27 -20
- package/src/textures/CompressedCubeTexture.js +19 -0
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +9 -1
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +0 -30
- package/examples/jsm/renderers/common/RenderTarget.js +0 -15
- package/examples/jsm/renderers/common/nodes/NodeRender.js +0 -302
- /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
- /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +0 -0
|
@@ -59,15 +59,7 @@ import { WebVRManager } from './webvr/WebVRManager.js';
|
|
|
59
59
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
60
60
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
61
61
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
62
|
-
import {
|
|
63
|
-
|
|
64
|
-
function createCanvasElement() {
|
|
65
|
-
|
|
66
|
-
const canvas = createElementNS( 'canvas' );
|
|
67
|
-
canvas.style.display = 'block';
|
|
68
|
-
return canvas;
|
|
69
|
-
|
|
70
|
-
}
|
|
62
|
+
import { createCanvasElement } from '../utils.js';
|
|
71
63
|
|
|
72
64
|
class WebGLRenderer {
|
|
73
65
|
|
|
@@ -153,7 +145,7 @@ class WebGLRenderer {
|
|
|
153
145
|
|
|
154
146
|
// physical lights
|
|
155
147
|
|
|
156
|
-
this.
|
|
148
|
+
this._useLegacyLights = false;
|
|
157
149
|
|
|
158
150
|
// tone mapping
|
|
159
151
|
|
|
@@ -796,6 +788,9 @@ class WebGLRenderer {
|
|
|
796
788
|
if ( material.wireframe === true ) {
|
|
797
789
|
|
|
798
790
|
index = geometries.getWireframeAttribute( geometry );
|
|
791
|
+
|
|
792
|
+
if ( index === undefined ) return;
|
|
793
|
+
|
|
799
794
|
rangeFactor = 2;
|
|
800
795
|
|
|
801
796
|
}
|
|
@@ -960,7 +955,7 @@ class WebGLRenderer {
|
|
|
960
955
|
|
|
961
956
|
} );
|
|
962
957
|
|
|
963
|
-
currentRenderState.setupLights( _this.
|
|
958
|
+
currentRenderState.setupLights( _this._useLegacyLights );
|
|
964
959
|
|
|
965
960
|
scene.traverse( function ( object ) {
|
|
966
961
|
|
|
@@ -1113,7 +1108,7 @@ class WebGLRenderer {
|
|
|
1113
1108
|
|
|
1114
1109
|
// render scene
|
|
1115
1110
|
|
|
1116
|
-
currentRenderState.setupLights( _this.
|
|
1111
|
+
currentRenderState.setupLights( _this._useLegacyLights );
|
|
1117
1112
|
|
|
1118
1113
|
if ( camera.isArrayCamera ) {
|
|
1119
1114
|
|
|
@@ -1607,6 +1602,7 @@ class WebGLRenderer {
|
|
|
1607
1602
|
|
|
1608
1603
|
materialProperties.outputColorSpace = parameters.outputColorSpace;
|
|
1609
1604
|
materialProperties.instancing = parameters.instancing;
|
|
1605
|
+
materialProperties.instancingColor = parameters.instancingColor;
|
|
1610
1606
|
materialProperties.skinning = parameters.skinning;
|
|
1611
1607
|
materialProperties.morphTargets = parameters.morphTargets;
|
|
1612
1608
|
materialProperties.morphNormals = parameters.morphNormals;
|
|
@@ -1635,7 +1631,18 @@ class WebGLRenderer {
|
|
|
1635
1631
|
const morphTargets = !! geometry.morphAttributes.position;
|
|
1636
1632
|
const morphNormals = !! geometry.morphAttributes.normal;
|
|
1637
1633
|
const morphColors = !! geometry.morphAttributes.color;
|
|
1638
|
-
|
|
1634
|
+
|
|
1635
|
+
let toneMapping = NoToneMapping;
|
|
1636
|
+
|
|
1637
|
+
if ( material.toneMapped ) {
|
|
1638
|
+
|
|
1639
|
+
if ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {
|
|
1640
|
+
|
|
1641
|
+
toneMapping = _this.toneMapping;
|
|
1642
|
+
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
}
|
|
1639
1646
|
|
|
1640
1647
|
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
1641
1648
|
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
@@ -1690,6 +1697,14 @@ class WebGLRenderer {
|
|
|
1690
1697
|
|
|
1691
1698
|
needsProgramChange = true;
|
|
1692
1699
|
|
|
1700
|
+
} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {
|
|
1701
|
+
|
|
1702
|
+
needsProgramChange = true;
|
|
1703
|
+
|
|
1704
|
+
} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {
|
|
1705
|
+
|
|
1706
|
+
needsProgramChange = true;
|
|
1707
|
+
|
|
1693
1708
|
} else if ( materialProperties.envMap !== envMap ) {
|
|
1694
1709
|
|
|
1695
1710
|
needsProgramChange = true;
|
|
@@ -1776,48 +1791,28 @@ class WebGLRenderer {
|
|
|
1776
1791
|
|
|
1777
1792
|
if ( refreshProgram || _currentCamera !== camera ) {
|
|
1778
1793
|
|
|
1779
|
-
|
|
1794
|
+
// common camera uniforms
|
|
1780
1795
|
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
p_uniforms.setValue( _gl, 'logDepthBufFC',
|
|
1784
|
-
2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
|
|
1785
|
-
|
|
1786
|
-
}
|
|
1787
|
-
|
|
1788
|
-
if ( _currentCamera !== camera ) {
|
|
1796
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
1797
|
+
p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
|
|
1789
1798
|
|
|
1790
|
-
|
|
1799
|
+
const uCamPos = p_uniforms.map.cameraPosition;
|
|
1791
1800
|
|
|
1792
|
-
|
|
1793
|
-
// now, in case this material supports lights - or later, when
|
|
1794
|
-
// the next material that does gets activated:
|
|
1801
|
+
if ( uCamPos !== undefined ) {
|
|
1795
1802
|
|
|
1796
|
-
|
|
1797
|
-
refreshLights = true; // remains set until update done
|
|
1803
|
+
uCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );
|
|
1798
1804
|
|
|
1799
1805
|
}
|
|
1800
1806
|
|
|
1801
|
-
|
|
1802
|
-
// (shader material also gets them for the sake of genericity)
|
|
1803
|
-
|
|
1804
|
-
if ( material.isShaderMaterial ||
|
|
1805
|
-
material.isMeshPhongMaterial ||
|
|
1806
|
-
material.isMeshToonMaterial ||
|
|
1807
|
-
material.isMeshStandardMaterial ||
|
|
1808
|
-
material.envMap ) {
|
|
1809
|
-
|
|
1810
|
-
const uCamPos = p_uniforms.map.cameraPosition;
|
|
1811
|
-
|
|
1812
|
-
if ( uCamPos !== undefined ) {
|
|
1813
|
-
|
|
1814
|
-
uCamPos.setValue( _gl,
|
|
1815
|
-
_vector3.setFromMatrixPosition( camera.matrixWorld ) );
|
|
1807
|
+
if ( capabilities.logarithmicDepthBuffer ) {
|
|
1816
1808
|
|
|
1817
|
-
|
|
1809
|
+
p_uniforms.setValue( _gl, 'logDepthBufFC',
|
|
1810
|
+
2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
|
|
1818
1811
|
|
|
1819
1812
|
}
|
|
1820
1813
|
|
|
1814
|
+
// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067
|
|
1815
|
+
|
|
1821
1816
|
if ( material.isMeshPhongMaterial ||
|
|
1822
1817
|
material.isMeshToonMaterial ||
|
|
1823
1818
|
material.isMeshLambertMaterial ||
|
|
@@ -1829,16 +1824,16 @@ class WebGLRenderer {
|
|
|
1829
1824
|
|
|
1830
1825
|
}
|
|
1831
1826
|
|
|
1832
|
-
if (
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
material
|
|
1838
|
-
material
|
|
1839
|
-
object.isSkinnedMesh ) {
|
|
1827
|
+
if ( _currentCamera !== camera ) {
|
|
1828
|
+
|
|
1829
|
+
_currentCamera = camera;
|
|
1830
|
+
|
|
1831
|
+
// lighting uniforms depend on the camera so enforce an update
|
|
1832
|
+
// now, in case this material supports lights - or later, when
|
|
1833
|
+
// the next material that does gets activated:
|
|
1840
1834
|
|
|
1841
|
-
|
|
1835
|
+
refreshMaterial = true; // set to true on material change
|
|
1836
|
+
refreshLights = true; // remains set until update done
|
|
1842
1837
|
|
|
1843
1838
|
}
|
|
1844
1839
|
|
|
@@ -2131,7 +2126,16 @@ class WebGLRenderer {
|
|
|
2131
2126
|
|
|
2132
2127
|
if ( renderTarget.isWebGLCubeRenderTarget ) {
|
|
2133
2128
|
|
|
2134
|
-
|
|
2129
|
+
if ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {
|
|
2130
|
+
|
|
2131
|
+
framebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];
|
|
2132
|
+
|
|
2133
|
+
} else {
|
|
2134
|
+
|
|
2135
|
+
framebuffer = __webglFramebuffer[ activeCubeFace ];
|
|
2136
|
+
|
|
2137
|
+
}
|
|
2138
|
+
|
|
2135
2139
|
isCube = true;
|
|
2136
2140
|
|
|
2137
2141
|
} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
|
|
@@ -2140,7 +2144,15 @@ class WebGLRenderer {
|
|
|
2140
2144
|
|
|
2141
2145
|
} else {
|
|
2142
2146
|
|
|
2143
|
-
|
|
2147
|
+
if ( Array.isArray( __webglFramebuffer ) ) {
|
|
2148
|
+
|
|
2149
|
+
framebuffer = __webglFramebuffer[ activeMipmapLevel ];
|
|
2150
|
+
|
|
2151
|
+
} else {
|
|
2152
|
+
|
|
2153
|
+
framebuffer = __webglFramebuffer;
|
|
2154
|
+
|
|
2155
|
+
}
|
|
2144
2156
|
|
|
2145
2157
|
}
|
|
2146
2158
|
|
|
@@ -2439,14 +2451,14 @@ class WebGLRenderer {
|
|
|
2439
2451
|
|
|
2440
2452
|
get physicallyCorrectLights() { // @deprecated, r150
|
|
2441
2453
|
|
|
2442
|
-
console.warn( 'THREE.WebGLRenderer:
|
|
2454
|
+
console.warn( 'THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );
|
|
2443
2455
|
return ! this.useLegacyLights;
|
|
2444
2456
|
|
|
2445
2457
|
}
|
|
2446
2458
|
|
|
2447
2459
|
set physicallyCorrectLights( value ) { // @deprecated, r150
|
|
2448
2460
|
|
|
2449
|
-
console.warn( 'THREE.WebGLRenderer:
|
|
2461
|
+
console.warn( 'THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );
|
|
2450
2462
|
this.useLegacyLights = ! value;
|
|
2451
2463
|
|
|
2452
2464
|
}
|
|
@@ -2465,6 +2477,20 @@ class WebGLRenderer {
|
|
|
2465
2477
|
|
|
2466
2478
|
}
|
|
2467
2479
|
|
|
2480
|
+
get useLegacyLights() { // @deprecated, r155
|
|
2481
|
+
|
|
2482
|
+
console.warn( 'THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.' );
|
|
2483
|
+
return this._useLegacyLights;
|
|
2484
|
+
|
|
2485
|
+
}
|
|
2486
|
+
|
|
2487
|
+
set useLegacyLights( value ) { // @deprecated, r155
|
|
2488
|
+
|
|
2489
|
+
console.warn( 'THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733.' );
|
|
2490
|
+
this._useLegacyLights = value;
|
|
2491
|
+
|
|
2492
|
+
}
|
|
2493
|
+
|
|
2468
2494
|
}
|
|
2469
2495
|
|
|
2470
2496
|
|
|
@@ -64,7 +64,7 @@ export default /* glsl */`
|
|
|
64
64
|
float cosTheta2Sq = 1.0 - sinTheta2Sq;
|
|
65
65
|
if ( cosTheta2Sq < 0.0 ) {
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
return vec3( 1.0 );
|
|
68
68
|
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -73,7 +73,6 @@ export default /* glsl */`
|
|
|
73
73
|
// First interface
|
|
74
74
|
float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );
|
|
75
75
|
float R12 = F_Schlick( R0, 1.0, cosTheta1 );
|
|
76
|
-
float R21 = R12;
|
|
77
76
|
float T121 = 1.0 - R12;
|
|
78
77
|
float phi12 = 0.0;
|
|
79
78
|
if ( iridescenceIOR < outsideIOR ) phi12 = PI;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
2
|
#ifdef USE_MAP
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
vec4 sampledDiffuseColor = texture2D( map, vMapUv );
|
|
5
|
+
|
|
6
|
+
#ifdef DECODE_VIDEO_TEXTURE
|
|
7
|
+
|
|
8
|
+
// use inline sRGB decode until browsers properly support SRGB8_APLHA8 with video textures
|
|
9
|
+
|
|
10
|
+
sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );
|
|
11
|
+
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
diffuseColor *= sampledDiffuseColor;
|
|
5
15
|
|
|
6
16
|
#endif
|
|
7
17
|
`;
|
|
@@ -21,6 +21,14 @@ void main() {
|
|
|
21
21
|
|
|
22
22
|
vec4 texColor = texture2D( t2D, vUv );
|
|
23
23
|
|
|
24
|
+
#ifdef DECODE_VIDEO_TEXTURE
|
|
25
|
+
|
|
26
|
+
// use inline sRGB decode until browsers properly support SRGB8_APLHA8 with video textures
|
|
27
|
+
|
|
28
|
+
texColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );
|
|
29
|
+
|
|
30
|
+
#endif
|
|
31
|
+
|
|
24
32
|
texColor.rgb *= backgroundIntensity;
|
|
25
33
|
|
|
26
34
|
gl_FragColor = texColor;
|
|
@@ -44,24 +44,15 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
44
44
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const
|
|
48
|
-
const environmentBlendMode = xr.getEnvironmentBlendMode();
|
|
47
|
+
const environmentBlendMode = renderer.xr.getEnvironmentBlendMode();
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
if ( environmentBlendMode === 'additive' ) {
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
forceClear = true;
|
|
54
|
-
break;
|
|
51
|
+
state.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );
|
|
55
52
|
|
|
56
|
-
|
|
57
|
-
state.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );
|
|
58
|
-
forceClear = true;
|
|
59
|
-
break;
|
|
53
|
+
} else if ( environmentBlendMode === 'alpha-blend' ) {
|
|
60
54
|
|
|
61
|
-
|
|
62
|
-
state.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );
|
|
63
|
-
forceClear = true;
|
|
64
|
-
break;
|
|
55
|
+
state.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );
|
|
65
56
|
|
|
66
57
|
}
|
|
67
58
|
|
|
@@ -128,7 +128,7 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
128
128
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
} else {
|
|
131
|
+
} else if ( geometryPosition !== undefined ) {
|
|
132
132
|
|
|
133
133
|
const array = geometryPosition.array;
|
|
134
134
|
version = geometryPosition.version;
|
|
@@ -143,6 +143,10 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
143
143
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
+
} else {
|
|
147
|
+
|
|
148
|
+
return;
|
|
149
|
+
|
|
146
150
|
}
|
|
147
151
|
|
|
148
152
|
const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
@@ -228,7 +228,7 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
228
228
|
uniforms.lightMap.value = material.lightMap;
|
|
229
229
|
|
|
230
230
|
// artist-friendly light intensity scaling factor
|
|
231
|
-
const scaleFactor = ( renderer.
|
|
231
|
+
const scaleFactor = ( renderer._useLegacyLights === true ) ? Math.PI : 1;
|
|
232
232
|
|
|
233
233
|
uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;
|
|
234
234
|
|
|
@@ -765,6 +765,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
765
765
|
|
|
766
766
|
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
767
767
|
|
|
768
|
+
parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
|
|
769
|
+
|
|
768
770
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
769
771
|
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
770
772
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace } from '../../constants.js';
|
|
1
|
+
import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js';
|
|
2
2
|
import { Layers } from '../../core/Layers.js';
|
|
3
3
|
import { WebGLProgram } from './WebGLProgram.js';
|
|
4
4
|
import { WebGLShaderCache } from './WebGLShaderCache.js';
|
|
@@ -160,6 +160,18 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
160
160
|
const HAS_ATTRIBUTE_UV2 = !! geometry.attributes.uv2;
|
|
161
161
|
const HAS_ATTRIBUTE_UV3 = !! geometry.attributes.uv3;
|
|
162
162
|
|
|
163
|
+
let toneMapping = NoToneMapping;
|
|
164
|
+
|
|
165
|
+
if ( material.toneMapped ) {
|
|
166
|
+
|
|
167
|
+
if ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {
|
|
168
|
+
|
|
169
|
+
toneMapping = renderer.toneMapping;
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
|
174
|
+
|
|
163
175
|
const parameters = {
|
|
164
176
|
|
|
165
177
|
isWebGL2: IS_WEBGL2,
|
|
@@ -320,8 +332,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
320
332
|
shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,
|
|
321
333
|
shadowMapType: renderer.shadowMap.type,
|
|
322
334
|
|
|
323
|
-
toneMapping:
|
|
324
|
-
useLegacyLights: renderer.
|
|
335
|
+
toneMapping: toneMapping,
|
|
336
|
+
useLegacyLights: renderer._useLegacyLights,
|
|
337
|
+
|
|
338
|
+
decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( material.map.colorSpace === SRGBColorSpace ),
|
|
325
339
|
|
|
326
340
|
premultipliedAlpha: material.premultipliedAlpha,
|
|
327
341
|
|
|
@@ -524,6 +538,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
524
538
|
_programLayers.enable( 17 );
|
|
525
539
|
if ( parameters.pointsUvs )
|
|
526
540
|
_programLayers.enable( 18 );
|
|
541
|
+
if ( parameters.decodeVideoTexture )
|
|
542
|
+
_programLayers.enable( 19 );
|
|
527
543
|
|
|
528
544
|
array.push( _programLayers.mask );
|
|
529
545
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, _SRGBAFormat, NoColorSpace, LinearSRGBColorSpace, SRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare } from '../../constants.js';
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, _SRGBAFormat, NoColorSpace, LinearSRGBColorSpace, SRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, DisplayP3ColorSpace } from '../../constants.js';
|
|
2
2
|
import * as MathUtils from '../../math/MathUtils.js';
|
|
3
3
|
import { ImageUtils } from '../../extras/ImageUtils.js';
|
|
4
4
|
import { createElementNS } from '../../utils.js';
|
|
@@ -157,6 +157,17 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
157
157
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
if ( glFormat === _gl.RED_INTEGER ) {
|
|
161
|
+
|
|
162
|
+
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;
|
|
163
|
+
if ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;
|
|
164
|
+
if ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;
|
|
165
|
+
if ( glType === _gl.BYTE ) internalFormat = _gl.R8I;
|
|
166
|
+
if ( glType === _gl.SHORT ) internalFormat = _gl.R16I;
|
|
167
|
+
if ( glType === _gl.INT ) internalFormat = _gl.R32I;
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
160
171
|
if ( glFormat === _gl.RG ) {
|
|
161
172
|
|
|
162
173
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
|
|
@@ -333,14 +344,32 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
333
344
|
|
|
334
345
|
for ( let i = 0; i < 6; i ++ ) {
|
|
335
346
|
|
|
336
|
-
|
|
347
|
+
if ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {
|
|
348
|
+
|
|
349
|
+
for ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );
|
|
350
|
+
|
|
351
|
+
} else {
|
|
352
|
+
|
|
353
|
+
_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
337
357
|
if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
|
|
338
358
|
|
|
339
359
|
}
|
|
340
360
|
|
|
341
361
|
} else {
|
|
342
362
|
|
|
343
|
-
|
|
363
|
+
if ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {
|
|
364
|
+
|
|
365
|
+
for ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );
|
|
366
|
+
|
|
367
|
+
} else {
|
|
368
|
+
|
|
369
|
+
_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
344
373
|
if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
|
|
345
374
|
if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
|
|
346
375
|
|
|
@@ -719,7 +748,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
719
748
|
glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
720
749
|
|
|
721
750
|
let glType = utils.convert( texture.type ),
|
|
722
|
-
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
|
|
751
|
+
glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
|
|
723
752
|
|
|
724
753
|
setTextureParameters( textureType, texture, supportsMips );
|
|
725
754
|
|
|
@@ -1315,7 +1344,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1315
1344
|
// Render targets
|
|
1316
1345
|
|
|
1317
1346
|
// Setup storage for target texture and bind it to correct framebuffer
|
|
1318
|
-
function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
|
|
1347
|
+
function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {
|
|
1319
1348
|
|
|
1320
1349
|
const glFormat = utils.convert( texture.format, texture.colorSpace );
|
|
1321
1350
|
const glType = utils.convert( texture.type );
|
|
@@ -1324,13 +1353,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1324
1353
|
|
|
1325
1354
|
if ( ! renderTargetProperties.__hasExternalTextures ) {
|
|
1326
1355
|
|
|
1356
|
+
const width = Math.max( 1, renderTarget.width >> level );
|
|
1357
|
+
const height = Math.max( 1, renderTarget.height >> level );
|
|
1358
|
+
|
|
1327
1359
|
if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
|
|
1328
1360
|
|
|
1329
|
-
state.texImage3D( textureTarget,
|
|
1361
|
+
state.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );
|
|
1330
1362
|
|
|
1331
1363
|
} else {
|
|
1332
1364
|
|
|
1333
|
-
state.texImage2D( textureTarget,
|
|
1365
|
+
state.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );
|
|
1334
1366
|
|
|
1335
1367
|
}
|
|
1336
1368
|
|
|
@@ -1344,7 +1376,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1344
1376
|
|
|
1345
1377
|
} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
|
|
1346
1378
|
|
|
1347
|
-
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture,
|
|
1379
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );
|
|
1348
1380
|
|
|
1349
1381
|
}
|
|
1350
1382
|
|
|
@@ -1565,7 +1597,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1565
1597
|
|
|
1566
1598
|
if ( colorTexture !== undefined ) {
|
|
1567
1599
|
|
|
1568
|
-
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
|
|
1600
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );
|
|
1569
1601
|
|
|
1570
1602
|
}
|
|
1571
1603
|
|
|
@@ -1612,13 +1644,41 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1612
1644
|
|
|
1613
1645
|
for ( let i = 0; i < 6; i ++ ) {
|
|
1614
1646
|
|
|
1615
|
-
|
|
1647
|
+
if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
|
|
1648
|
+
|
|
1649
|
+
renderTargetProperties.__webglFramebuffer[ i ] = [];
|
|
1650
|
+
|
|
1651
|
+
for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
|
|
1652
|
+
|
|
1653
|
+
renderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();
|
|
1654
|
+
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1657
|
+
} else {
|
|
1658
|
+
|
|
1659
|
+
renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
|
|
1660
|
+
|
|
1661
|
+
}
|
|
1616
1662
|
|
|
1617
1663
|
}
|
|
1618
1664
|
|
|
1619
1665
|
} else {
|
|
1620
1666
|
|
|
1621
|
-
|
|
1667
|
+
if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
|
|
1668
|
+
|
|
1669
|
+
renderTargetProperties.__webglFramebuffer = [];
|
|
1670
|
+
|
|
1671
|
+
for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
|
|
1672
|
+
|
|
1673
|
+
renderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();
|
|
1674
|
+
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
} else {
|
|
1678
|
+
|
|
1679
|
+
renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
|
|
1680
|
+
|
|
1681
|
+
}
|
|
1622
1682
|
|
|
1623
1683
|
if ( isMultipleRenderTargets ) {
|
|
1624
1684
|
|
|
@@ -1698,7 +1758,19 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1698
1758
|
|
|
1699
1759
|
for ( let i = 0; i < 6; i ++ ) {
|
|
1700
1760
|
|
|
1701
|
-
|
|
1761
|
+
if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
|
|
1762
|
+
|
|
1763
|
+
for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
|
|
1764
|
+
|
|
1765
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );
|
|
1766
|
+
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
} else {
|
|
1770
|
+
|
|
1771
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );
|
|
1772
|
+
|
|
1773
|
+
}
|
|
1702
1774
|
|
|
1703
1775
|
}
|
|
1704
1776
|
|
|
@@ -1721,7 +1793,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1721
1793
|
|
|
1722
1794
|
state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
|
|
1723
1795
|
setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
|
|
1724
|
-
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D );
|
|
1796
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
|
|
1725
1797
|
|
|
1726
1798
|
if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
|
|
1727
1799
|
|
|
@@ -1753,7 +1825,20 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1753
1825
|
|
|
1754
1826
|
state.bindTexture( glTextureType, textureProperties.__webglTexture );
|
|
1755
1827
|
setTextureParameters( glTextureType, texture, supportsMips );
|
|
1756
|
-
|
|
1828
|
+
|
|
1829
|
+
if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
|
|
1830
|
+
|
|
1831
|
+
for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
|
|
1832
|
+
|
|
1833
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );
|
|
1834
|
+
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
} else {
|
|
1838
|
+
|
|
1839
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );
|
|
1840
|
+
|
|
1841
|
+
}
|
|
1757
1842
|
|
|
1758
1843
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1759
1844
|
|
|
@@ -1942,13 +2027,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1942
2027
|
const format = texture.format;
|
|
1943
2028
|
const type = texture.type;
|
|
1944
2029
|
|
|
1945
|
-
if ( texture.isCompressedTexture === true || texture.format === _SRGBAFormat ) return image;
|
|
2030
|
+
if ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;
|
|
1946
2031
|
|
|
1947
2032
|
if ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {
|
|
1948
2033
|
|
|
1949
2034
|
// sRGB
|
|
1950
2035
|
|
|
1951
|
-
if ( colorSpace === SRGBColorSpace ) {
|
|
2036
|
+
if ( colorSpace === SRGBColorSpace || colorSpace === DisplayP3ColorSpace ) {
|
|
1952
2037
|
|
|
1953
2038
|
if ( isWebGL2 === false ) {
|
|
1954
2039
|
|