super-three 0.169.1 → 0.170.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 +974 -562
- package/build/three.module.js +975 -559
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +8398 -9842
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +8398 -9842
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +3 -3
- package/examples/jsm/animation/MMDAnimationHelper.js +2 -0
- package/examples/jsm/animation/MMDPhysics.js +2 -0
- package/examples/jsm/controls/TransformControls.js +22 -6
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +435 -0
- package/examples/jsm/curves/NURBSCurve.js +34 -3
- package/examples/jsm/exporters/GLTFExporter.js +138 -71
- package/examples/jsm/exporters/KTX2Exporter.js +35 -12
- package/examples/jsm/exporters/MMDExporter.js +6 -0
- package/examples/jsm/exporters/USDZExporter.js +21 -3
- package/examples/jsm/geometries/DecalGeometry.js +65 -20
- package/examples/jsm/geometries/InstancedPointsGeometry.js +2 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +175 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +0 -15
- package/examples/jsm/lines/webgpu/Wireframe.js +56 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +91 -0
- package/examples/jsm/loaders/FBXLoader.js +12 -2
- package/examples/jsm/loaders/GLTFLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +140 -49
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +1 -0
- package/examples/jsm/loaders/MMDLoader.js +9 -2
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +6 -2
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +52 -40
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +293 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/objects/WaterMesh.js +8 -8
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/SSRPass.js +6 -0
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/{src/nodes → examples/jsm/tsl}/display/AfterImageNode.js +17 -20
- package/{src/nodes → examples/jsm/tsl}/display/AnaglyphPassNode.js +2 -6
- package/{src/nodes → examples/jsm/tsl}/display/AnamorphicNode.js +12 -18
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +1 -3
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +11 -40
- package/{src/nodes → examples/jsm/tsl}/display/DenoiseNode.js +18 -41
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +2 -8
- package/{src/nodes → examples/jsm/tsl}/display/DotScreenNode.js +2 -9
- package/examples/jsm/tsl/display/FXAANode.js +316 -0
- package/{src/nodes → examples/jsm/tsl}/display/FilmNode.js +2 -6
- package/{src/nodes → examples/jsm/tsl}/display/GTAONode.js +30 -70
- package/{src/nodes → examples/jsm/tsl}/display/GaussianBlurNode.js +74 -36
- package/examples/jsm/tsl/display/LensflareNode.js +161 -0
- package/{src/nodes → examples/jsm/tsl}/display/Lut3DNode.js +1 -4
- package/{src/nodes → examples/jsm/tsl}/display/MotionBlur.js +2 -3
- package/examples/jsm/tsl/display/OutlineNode.js +434 -0
- package/{src/nodes → examples/jsm/tsl}/display/ParallaxBarrierPassNode.js +1 -5
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +3 -15
- package/{src/nodes → examples/jsm/tsl}/display/RGBShiftNode.js +1 -6
- package/examples/jsm/tsl/display/SMAANode.js +620 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +10 -25
- package/examples/jsm/tsl/display/SSRNode.js +343 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +1 -2
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +3 -11
- package/{src/nodes → examples/jsm/tsl}/display/StereoCompositePassNode.js +9 -11
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +10 -11
- package/examples/jsm/tsl/display/TRAAPassNode.js +355 -0
- package/{src/nodes → examples/jsm/tsl}/display/TransitionNode.js +1 -6
- package/examples/jsm/tsl/display/hashBlur.js +24 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +392 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +2 -1
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/package.json +2 -2
- package/src/Three.WebGPU.Nodes.js +4 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/constants.js +1 -6
- package/src/core/BufferGeometry.js +44 -6
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/materials/LineBasicMaterial.js +6 -2
- package/src/materials/LineDashedMaterial.js +6 -2
- package/src/materials/Material.js +14 -1
- package/src/materials/MeshBasicMaterial.js +6 -2
- package/src/materials/MeshDepthMaterial.js +6 -2
- package/src/materials/MeshDistanceMaterial.js +6 -2
- package/src/materials/MeshLambertMaterial.js +6 -2
- package/src/materials/MeshMatcapMaterial.js +6 -2
- package/src/materials/MeshNormalMaterial.js +6 -2
- package/src/materials/MeshPhongMaterial.js +6 -2
- package/src/materials/MeshPhysicalMaterial.js +6 -2
- package/src/materials/MeshStandardMaterial.js +6 -2
- package/src/materials/MeshToonMaterial.js +6 -2
- package/src/materials/PointsMaterial.js +6 -2
- package/src/materials/RawShaderMaterial.js +6 -2
- package/src/materials/ShaderMaterial.js +6 -2
- package/src/materials/ShadowMaterial.js +6 -2
- package/src/materials/SpriteMaterial.js +6 -2
- package/src/materials/nodes/NodeMaterial.js +31 -9
- package/src/materials/nodes/SpriteNodeMaterial.js +11 -2
- package/src/materials/nodes/manager/NodeMaterialObserver.js +111 -2
- package/src/math/ColorManagement.js +118 -85
- package/src/math/Vector4.js +11 -0
- package/src/nodes/Nodes.js +1 -21
- package/src/nodes/TSL.js +6 -24
- package/src/nodes/accessors/Camera.js +0 -1
- package/src/nodes/accessors/SceneNode.js +35 -1
- package/src/nodes/accessors/StorageBufferNode.js +32 -10
- package/src/nodes/accessors/VelocityNode.js +13 -3
- package/src/nodes/code/FunctionCallNode.js +16 -5
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/core/Node.js +1 -0
- package/src/nodes/core/NodeBuilder.js +29 -5
- package/src/nodes/core/VarNode.js +15 -3
- package/src/nodes/display/ColorAdjustment.js +53 -4
- package/src/nodes/display/ColorSpaceFunctions.js +5 -5
- package/src/nodes/display/ColorSpaceNode.js +27 -39
- package/src/nodes/display/PassNode.js +6 -4
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ViewportDepthNode.js +33 -1
- package/src/nodes/functions/PhysicalLightingModel.js +21 -15
- package/src/nodes/functions/material/getAlphaHashThreshold.js +64 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +8 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +22 -0
- package/src/nodes/gpgpu/ComputeNode.js +9 -1
- package/src/nodes/lighting/AnalyticLightNode.js +12 -416
- package/src/nodes/lighting/LightsNode.js +24 -12
- package/src/nodes/lighting/PointLightNode.js +36 -26
- package/src/nodes/lighting/RectAreaLightNode.js +3 -0
- package/src/nodes/lighting/ShadowNode.js +484 -0
- package/src/nodes/utils/LoopNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +6 -0
- package/src/nodes/utils/PostProcessingUtils.js +89 -0
- package/src/nodes/utils/ReflectorNode.js +101 -15
- package/src/nodes/utils/Timer.js +29 -0
- package/src/objects/BatchedMesh.js +458 -241
- package/src/renderers/WebGLRenderer.js +120 -117
- package/src/renderers/common/Attributes.js +4 -0
- package/src/renderers/common/Backend.js +2 -0
- package/src/renderers/common/Background.js +14 -4
- package/src/renderers/common/Bindings.js +3 -2
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/Geometries.js +20 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +15 -0
- package/src/renderers/common/Lighting.js +45 -0
- package/src/renderers/common/PostProcessingUtils.js +86 -0
- package/src/renderers/common/RenderList.js +39 -11
- package/src/renderers/common/RenderLists.js +4 -2
- package/src/renderers/common/RenderObject.js +18 -1
- package/src/renderers/common/Renderer.js +165 -26
- package/src/renderers/common/Textures.js +30 -14
- package/src/renderers/common/nodes/NodeLibrary.js +1 -14
- package/src/renderers/common/nodes/Nodes.js +2 -2
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +0 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +24 -28
- package/src/renderers/webgl/WebGLPrograms.js +5 -2
- package/src/renderers/webgl/WebGLState.js +37 -1
- package/src/renderers/webgl/WebGLTextures.js +29 -12
- package/src/renderers/webgl-fallback/WebGLBackend.js +98 -31
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +2 -7
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +33 -8
- package/src/renderers/webgpu/WebGPUBackend.js +105 -25
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -1
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +0 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +10 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +12 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +29 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +24 -6
- package/src/renderers/webgpu/utils/WebGPUUtils.js +0 -1
- package/src/renderers/webxr/WebXRManager.js +4 -4
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/TimerNode.js +0 -97
- /package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +0 -0
|
@@ -17,9 +17,7 @@ import {
|
|
|
17
17
|
UnsignedInt248Type,
|
|
18
18
|
UnsignedShort4444Type,
|
|
19
19
|
UnsignedShort5551Type,
|
|
20
|
-
WebGLCoordinateSystem
|
|
21
|
-
DisplayP3ColorSpace,
|
|
22
|
-
LinearDisplayP3ColorSpace
|
|
20
|
+
WebGLCoordinateSystem
|
|
23
21
|
} from '../constants.js';
|
|
24
22
|
import { Color } from '../math/Color.js';
|
|
25
23
|
import { Frustum } from '../math/Frustum.js';
|
|
@@ -73,6 +71,7 @@ class WebGLRenderer {
|
|
|
73
71
|
preserveDrawingBuffer = false,
|
|
74
72
|
powerPreference = 'default',
|
|
75
73
|
failIfMajorPerformanceCaveat = false,
|
|
74
|
+
reverseDepthBuffer = false,
|
|
76
75
|
multiviewStereo = false,
|
|
77
76
|
} = parameters;
|
|
78
77
|
|
|
@@ -293,9 +292,13 @@ class WebGLRenderer {
|
|
|
293
292
|
|
|
294
293
|
capabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );
|
|
295
294
|
|
|
296
|
-
state = new WebGLState( _gl );
|
|
295
|
+
state = new WebGLState( _gl, extensions );
|
|
297
296
|
|
|
298
|
-
if ( capabilities.reverseDepthBuffer
|
|
297
|
+
if ( capabilities.reverseDepthBuffer && reverseDepthBuffer ) {
|
|
298
|
+
|
|
299
|
+
state.buffers.depth.setReversed( true );
|
|
300
|
+
|
|
301
|
+
}
|
|
299
302
|
|
|
300
303
|
info = new WebGLInfo( _gl );
|
|
301
304
|
properties = new WebGLProperties();
|
|
@@ -600,7 +603,6 @@ class WebGLRenderer {
|
|
|
600
603
|
if ( depth ) {
|
|
601
604
|
|
|
602
605
|
bits |= _gl.DEPTH_BUFFER_BIT;
|
|
603
|
-
_gl.clearDepth( this.capabilities.reverseDepthBuffer ? 0 : 1 );
|
|
604
606
|
|
|
605
607
|
}
|
|
606
608
|
|
|
@@ -2008,7 +2010,9 @@ class WebGLRenderer {
|
|
|
2008
2010
|
|
|
2009
2011
|
} else {
|
|
2010
2012
|
|
|
2011
|
-
|
|
2013
|
+
const reverseDepthBuffer = state.buffers.depth.getReversed();
|
|
2014
|
+
|
|
2015
|
+
if ( reverseDepthBuffer ) {
|
|
2012
2016
|
|
|
2013
2017
|
_currentProjectionMatrix.copy( camera.projectionMatrix );
|
|
2014
2018
|
|
|
@@ -2640,21 +2644,27 @@ class WebGLRenderer {
|
|
|
2640
2644
|
|
|
2641
2645
|
}
|
|
2642
2646
|
|
|
2643
|
-
|
|
2644
|
-
let
|
|
2647
|
+
// gather the necessary dimensions to copy
|
|
2648
|
+
let width, height, depth, minX, minY, minZ;
|
|
2649
|
+
let dstX, dstY, dstZ;
|
|
2650
|
+
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
2645
2651
|
if ( srcRegion !== null ) {
|
|
2646
2652
|
|
|
2647
2653
|
width = srcRegion.max.x - srcRegion.min.x;
|
|
2648
2654
|
height = srcRegion.max.y - srcRegion.min.y;
|
|
2655
|
+
depth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;
|
|
2649
2656
|
minX = srcRegion.min.x;
|
|
2650
2657
|
minY = srcRegion.min.y;
|
|
2658
|
+
minZ = srcRegion.isBox3 ? srcRegion.min.z : 0;
|
|
2651
2659
|
|
|
2652
2660
|
} else {
|
|
2653
2661
|
|
|
2654
|
-
width =
|
|
2655
|
-
height =
|
|
2662
|
+
width = image.width;
|
|
2663
|
+
height = image.height;
|
|
2664
|
+
depth = image.depth || 1;
|
|
2656
2665
|
minX = 0;
|
|
2657
2666
|
minY = 0;
|
|
2667
|
+
minZ = 0;
|
|
2658
2668
|
|
|
2659
2669
|
}
|
|
2660
2670
|
|
|
@@ -2662,177 +2672,143 @@ class WebGLRenderer {
|
|
|
2662
2672
|
|
|
2663
2673
|
dstX = dstPosition.x;
|
|
2664
2674
|
dstY = dstPosition.y;
|
|
2675
|
+
dstZ = dstPosition.z;
|
|
2665
2676
|
|
|
2666
2677
|
} else {
|
|
2667
2678
|
|
|
2668
2679
|
dstX = 0;
|
|
2669
2680
|
dstY = 0;
|
|
2681
|
+
dstZ = 0;
|
|
2670
2682
|
|
|
2671
2683
|
}
|
|
2672
2684
|
|
|
2685
|
+
// Set up the destination target
|
|
2673
2686
|
const glFormat = utils.convert( dstTexture.format );
|
|
2674
2687
|
const glType = utils.convert( dstTexture.type );
|
|
2688
|
+
let glTarget;
|
|
2689
|
+
|
|
2690
|
+
if ( dstTexture.isData3DTexture ) {
|
|
2675
2691
|
|
|
2676
|
-
|
|
2692
|
+
textures.setTexture3D( dstTexture, 0 );
|
|
2693
|
+
glTarget = _gl.TEXTURE_3D;
|
|
2694
|
+
|
|
2695
|
+
} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {
|
|
2696
|
+
|
|
2697
|
+
textures.setTexture2DArray( dstTexture, 0 );
|
|
2698
|
+
glTarget = _gl.TEXTURE_2D_ARRAY;
|
|
2699
|
+
|
|
2700
|
+
} else {
|
|
2701
|
+
|
|
2702
|
+
textures.setTexture2D( dstTexture, 0 );
|
|
2703
|
+
glTarget = _gl.TEXTURE_2D;
|
|
2704
|
+
|
|
2705
|
+
}
|
|
2677
2706
|
|
|
2678
|
-
// As another texture upload may have changed pixelStorei
|
|
2679
|
-
// parameters, make sure they are correct for the dstTexture
|
|
2680
2707
|
_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
|
|
2681
2708
|
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2682
2709
|
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2683
2710
|
|
|
2711
|
+
// used for copying data from cpu
|
|
2684
2712
|
const currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );
|
|
2685
2713
|
const currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
2686
2714
|
const currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
2687
2715
|
const currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
2688
2716
|
const currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
2689
2717
|
|
|
2690
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
2691
|
-
|
|
2692
2718
|
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
|
|
2693
2719
|
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
2694
2720
|
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
|
|
2695
2721
|
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
|
|
2722
|
+
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
|
|
2696
2723
|
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
} else {
|
|
2702
|
-
|
|
2703
|
-
if ( srcTexture.isCompressedTexture ) {
|
|
2704
|
-
|
|
2705
|
-
_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
2706
|
-
|
|
2707
|
-
} else {
|
|
2708
|
-
|
|
2709
|
-
_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );
|
|
2724
|
+
// set up the src texture
|
|
2725
|
+
const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;
|
|
2726
|
+
const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
|
|
2727
|
+
if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
|
|
2710
2728
|
|
|
2711
|
-
|
|
2729
|
+
const srcTextureProperties = properties.get( srcTexture );
|
|
2730
|
+
const dstTextureProperties = properties.get( dstTexture );
|
|
2731
|
+
const srcRenderTargetProperties = properties.get( srcTextureProperties.__renderTarget );
|
|
2732
|
+
const dstRenderTargetProperties = properties.get( dstTextureProperties.__renderTarget );
|
|
2712
2733
|
|
|
2713
|
-
|
|
2734
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, srcRenderTargetProperties.__webglFramebuffer );
|
|
2735
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, dstRenderTargetProperties.__webglFramebuffer );
|
|
2714
2736
|
|
|
2715
|
-
|
|
2716
|
-
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
2717
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
2718
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
|
|
2719
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
2737
|
+
for ( let i = 0; i < depth; i ++ ) {
|
|
2720
2738
|
|
|
2721
|
-
|
|
2722
|
-
|
|
2739
|
+
// if the source or destination are a 3d target then a layer needs to be bound
|
|
2740
|
+
if ( isSrc3D ) {
|
|
2723
2741
|
|
|
2724
|
-
|
|
2742
|
+
_gl.framebufferTextureLayer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( srcTexture ).__webglTexture, level, minZ + i );
|
|
2725
2743
|
|
|
2726
|
-
|
|
2744
|
+
}
|
|
2727
2745
|
|
|
2728
|
-
|
|
2746
|
+
if ( srcTexture.isDepthTexture ) {
|
|
2729
2747
|
|
|
2730
|
-
|
|
2731
|
-
if ( srcTexture.isTexture !== true ) {
|
|
2748
|
+
if ( isDst3D ) {
|
|
2732
2749
|
|
|
2733
|
-
|
|
2734
|
-
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );
|
|
2750
|
+
_gl.framebufferTextureLayer( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( dstTexture ).__webglTexture, level, dstZ + i );
|
|
2735
2751
|
|
|
2736
|
-
|
|
2737
|
-
dstPosition = arguments[ 1 ] || null;
|
|
2738
|
-
srcTexture = arguments[ 2 ];
|
|
2739
|
-
dstTexture = arguments[ 3 ];
|
|
2740
|
-
level = arguments[ 4 ] || 0;
|
|
2752
|
+
}
|
|
2741
2753
|
|
|
2742
|
-
|
|
2754
|
+
_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
|
|
2743
2755
|
|
|
2744
|
-
|
|
2745
|
-
let dstX, dstY, dstZ;
|
|
2746
|
-
const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
|
|
2747
|
-
if ( srcRegion !== null ) {
|
|
2756
|
+
} else if ( isDst3D ) {
|
|
2748
2757
|
|
|
2749
|
-
|
|
2750
|
-
height = srcRegion.max.y - srcRegion.min.y;
|
|
2751
|
-
depth = srcRegion.max.z - srcRegion.min.z;
|
|
2752
|
-
minX = srcRegion.min.x;
|
|
2753
|
-
minY = srcRegion.min.y;
|
|
2754
|
-
minZ = srcRegion.min.z;
|
|
2758
|
+
_gl.copyTexSubImage3D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );
|
|
2755
2759
|
|
|
2756
|
-
|
|
2760
|
+
} else {
|
|
2757
2761
|
|
|
2758
|
-
|
|
2759
|
-
height = image.height;
|
|
2760
|
-
depth = image.depth;
|
|
2761
|
-
minX = 0;
|
|
2762
|
-
minY = 0;
|
|
2763
|
-
minZ = 0;
|
|
2762
|
+
_gl.copyTexSubImage2D( glTarget, level, dstX, dstY, dstZ + i, minX, minY, width, height );
|
|
2764
2763
|
|
|
2765
|
-
|
|
2764
|
+
}
|
|
2766
2765
|
|
|
2767
|
-
|
|
2766
|
+
}
|
|
2768
2767
|
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
dstZ = dstPosition.z;
|
|
2768
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
2769
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2772
2770
|
|
|
2773
2771
|
} else {
|
|
2774
2772
|
|
|
2775
|
-
|
|
2776
|
-
dstY = 0;
|
|
2777
|
-
dstZ = 0;
|
|
2773
|
+
if ( isDst3D ) {
|
|
2778
2774
|
|
|
2779
|
-
|
|
2775
|
+
// copy data into the 3d texture
|
|
2776
|
+
if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
|
|
2780
2777
|
|
|
2781
|
-
|
|
2782
|
-
const glType = utils.convert( dstTexture.type );
|
|
2783
|
-
let glTarget;
|
|
2778
|
+
_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
|
|
2784
2779
|
|
|
2785
|
-
|
|
2780
|
+
} else if ( dstTexture.isCompressedArrayTexture ) {
|
|
2786
2781
|
|
|
2787
|
-
|
|
2788
|
-
glTarget = _gl.TEXTURE_3D;
|
|
2789
|
-
|
|
2790
|
-
} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {
|
|
2791
|
-
|
|
2792
|
-
textures.setTexture2DArray( dstTexture, 0 );
|
|
2793
|
-
glTarget = _gl.TEXTURE_2D_ARRAY;
|
|
2794
|
-
|
|
2795
|
-
} else {
|
|
2796
|
-
|
|
2797
|
-
console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );
|
|
2798
|
-
return;
|
|
2782
|
+
_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
|
|
2799
2783
|
|
|
2800
|
-
|
|
2784
|
+
} else {
|
|
2801
2785
|
|
|
2802
|
-
|
|
2803
|
-
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
|
|
2804
|
-
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
|
|
2786
|
+
_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
|
|
2805
2787
|
|
|
2806
|
-
|
|
2807
|
-
const currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
|
|
2808
|
-
const currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
|
|
2809
|
-
const currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
|
|
2810
|
-
const currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
|
|
2788
|
+
}
|
|
2811
2789
|
|
|
2812
|
-
|
|
2813
|
-
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
|
|
2814
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
|
|
2815
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
|
|
2816
|
-
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
|
|
2790
|
+
} else {
|
|
2817
2791
|
|
|
2818
|
-
|
|
2792
|
+
// copy data into the 2d texture
|
|
2793
|
+
if ( srcTexture.isDataTexture ) {
|
|
2819
2794
|
|
|
2820
|
-
|
|
2795
|
+
_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );
|
|
2821
2796
|
|
|
2822
|
-
|
|
2797
|
+
} else if ( srcTexture.isCompressedTexture ) {
|
|
2823
2798
|
|
|
2824
|
-
|
|
2799
|
+
_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );
|
|
2825
2800
|
|
|
2826
|
-
|
|
2801
|
+
} else {
|
|
2827
2802
|
|
|
2828
|
-
|
|
2803
|
+
_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );
|
|
2829
2804
|
|
|
2830
|
-
|
|
2805
|
+
}
|
|
2831
2806
|
|
|
2832
2807
|
}
|
|
2833
2808
|
|
|
2834
2809
|
}
|
|
2835
2810
|
|
|
2811
|
+
// reset values
|
|
2836
2812
|
_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
|
|
2837
2813
|
_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
|
|
2838
2814
|
_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
|
|
@@ -2840,12 +2816,39 @@ class WebGLRenderer {
|
|
|
2840
2816
|
_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
2841
2817
|
|
|
2842
2818
|
// Generate mipmaps only when copying level 0
|
|
2843
|
-
if ( level === 0 && dstTexture.generateMipmaps )
|
|
2819
|
+
if ( level === 0 && dstTexture.generateMipmaps ) {
|
|
2820
|
+
|
|
2821
|
+
_gl.generateMipmap( glTarget );
|
|
2822
|
+
|
|
2823
|
+
}
|
|
2844
2824
|
|
|
2845
2825
|
state.unbindTexture();
|
|
2846
2826
|
|
|
2847
2827
|
};
|
|
2848
2828
|
|
|
2829
|
+
this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
|
|
2830
|
+
|
|
2831
|
+
// support previous signature with source box first
|
|
2832
|
+
if ( srcTexture.isTexture !== true ) {
|
|
2833
|
+
|
|
2834
|
+
// @deprecated, r165
|
|
2835
|
+
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );
|
|
2836
|
+
|
|
2837
|
+
srcRegion = arguments[ 0 ] || null;
|
|
2838
|
+
dstPosition = arguments[ 1 ] || null;
|
|
2839
|
+
srcTexture = arguments[ 2 ];
|
|
2840
|
+
dstTexture = arguments[ 3 ];
|
|
2841
|
+
level = arguments[ 4 ] || 0;
|
|
2842
|
+
|
|
2843
|
+
}
|
|
2844
|
+
|
|
2845
|
+
// @deprecated, r170
|
|
2846
|
+
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
|
|
2847
|
+
|
|
2848
|
+
return this.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
|
|
2849
|
+
|
|
2850
|
+
};
|
|
2851
|
+
|
|
2849
2852
|
this.initRenderTarget = function ( target ) {
|
|
2850
2853
|
|
|
2851
2854
|
if ( properties.get( target ).__webglFramebuffer === undefined ) {
|
|
@@ -2916,8 +2919,8 @@ class WebGLRenderer {
|
|
|
2916
2919
|
this._outputColorSpace = colorSpace;
|
|
2917
2920
|
|
|
2918
2921
|
const gl = this.getContext();
|
|
2919
|
-
gl.
|
|
2920
|
-
gl.unpackColorSpace = ColorManagement.
|
|
2922
|
+
gl.drawingBufferColorspace = ColorManagement._getDrawingBufferColorSpace( colorSpace );
|
|
2923
|
+
gl.unpackColorSpace = ColorManagement._getUnpackColorSpace();
|
|
2921
2924
|
|
|
2922
2925
|
}
|
|
2923
2926
|
|
|
@@ -45,6 +45,10 @@ class Attributes extends DataMap {
|
|
|
45
45
|
|
|
46
46
|
this.backend.createStorageAttribute( attribute );
|
|
47
47
|
|
|
48
|
+
} else if ( type === AttributeType.INDIRECT ) {
|
|
49
|
+
|
|
50
|
+
this.backend.createIndirectStorageAttribute( attribute );
|
|
51
|
+
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
data.version = this._getBufferAttribute( attribute ).version;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, modelViewProjection } from '../../nodes/TSL.js';
|
|
3
|
+
import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
6
|
import { Mesh } from '../../objects/Mesh.js';
|
|
@@ -56,7 +56,7 @@ class Background extends DataMap {
|
|
|
56
56
|
|
|
57
57
|
const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
|
|
58
58
|
// @TODO: Add Texture2D support using node context
|
|
59
|
-
getUV: () => normalWorld,
|
|
59
|
+
getUV: () => backgroundRotation.mul( normalWorld ),
|
|
60
60
|
getTextureLevel: () => backgroundBlurriness
|
|
61
61
|
} );
|
|
62
62
|
|
|
@@ -111,8 +111,6 @@ class Background extends DataMap {
|
|
|
111
111
|
|
|
112
112
|
if ( renderer.autoClear === true || forceClear === true ) {
|
|
113
113
|
|
|
114
|
-
_clearColor.multiplyScalar( _clearColor.a );
|
|
115
|
-
|
|
116
114
|
const clearColorValue = renderContext.clearColorValue;
|
|
117
115
|
|
|
118
116
|
clearColorValue.r = _clearColor.r;
|
|
@@ -120,6 +118,18 @@ class Background extends DataMap {
|
|
|
120
118
|
clearColorValue.b = _clearColor.b;
|
|
121
119
|
clearColorValue.a = _clearColor.a;
|
|
122
120
|
|
|
121
|
+
// premultiply alpha
|
|
122
|
+
|
|
123
|
+
if ( renderer.backend.isWebGLBackend === true || renderer.alpha === true ) {
|
|
124
|
+
|
|
125
|
+
clearColorValue.r *= clearColorValue.a;
|
|
126
|
+
clearColorValue.g *= clearColorValue.a;
|
|
127
|
+
clearColorValue.b *= clearColorValue.a;
|
|
128
|
+
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
//
|
|
132
|
+
|
|
123
133
|
renderContext.depthClearValue = renderer._clearDepth;
|
|
124
134
|
renderContext.stencilClearValue = renderer._clearStencil;
|
|
125
135
|
|
|
@@ -101,8 +101,9 @@ class Bindings extends DataMap {
|
|
|
101
101
|
} else if ( binding.isStorageBuffer ) {
|
|
102
102
|
|
|
103
103
|
const attribute = binding.attribute;
|
|
104
|
+
const attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;
|
|
104
105
|
|
|
105
|
-
this.attributes.update( attribute,
|
|
106
|
+
this.attributes.update( attribute, attributeType );
|
|
106
107
|
|
|
107
108
|
}
|
|
108
109
|
|
|
@@ -176,7 +177,7 @@ class Bindings extends DataMap {
|
|
|
176
177
|
|
|
177
178
|
textureData.needsMipmap = true;
|
|
178
179
|
|
|
179
|
-
} else if (
|
|
180
|
+
} else if ( this.textures.needsMipmaps( texture ) && textureData.needsMipmap === true ) {
|
|
180
181
|
|
|
181
182
|
this.backend.generateMipmaps( texture );
|
|
182
183
|
|
|
@@ -144,6 +144,8 @@ class Geometries extends DataMap {
|
|
|
144
144
|
|
|
145
145
|
updateAttributes( renderObject ) {
|
|
146
146
|
|
|
147
|
+
// attributes
|
|
148
|
+
|
|
147
149
|
const attributes = renderObject.getAttributes();
|
|
148
150
|
|
|
149
151
|
for ( const attribute of attributes ) {
|
|
@@ -160,6 +162,8 @@ class Geometries extends DataMap {
|
|
|
160
162
|
|
|
161
163
|
}
|
|
162
164
|
|
|
165
|
+
// indexes
|
|
166
|
+
|
|
163
167
|
const index = this.getIndex( renderObject );
|
|
164
168
|
|
|
165
169
|
if ( index !== null ) {
|
|
@@ -168,6 +172,16 @@ class Geometries extends DataMap {
|
|
|
168
172
|
|
|
169
173
|
}
|
|
170
174
|
|
|
175
|
+
// indirect
|
|
176
|
+
|
|
177
|
+
const indirect = renderObject.geometry.indirect;
|
|
178
|
+
|
|
179
|
+
if ( indirect !== null ) {
|
|
180
|
+
|
|
181
|
+
this.updateAttribute( indirect, AttributeType.INDIRECT );
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
171
185
|
}
|
|
172
186
|
|
|
173
187
|
updateAttribute( attribute, type ) {
|
|
@@ -206,6 +220,12 @@ class Geometries extends DataMap {
|
|
|
206
220
|
|
|
207
221
|
}
|
|
208
222
|
|
|
223
|
+
getIndirect( renderObject ) {
|
|
224
|
+
|
|
225
|
+
return renderObject.geometry.indirect;
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
209
229
|
getIndex( renderObject ) {
|
|
210
230
|
|
|
211
231
|
const { geometry, material } = renderObject;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import StorageBufferAttribute from './StorageBufferAttribute.js';
|
|
2
|
+
|
|
3
|
+
class IndirectStorageBufferAttribute extends StorageBufferAttribute {
|
|
4
|
+
|
|
5
|
+
constructor( array, itemSize ) {
|
|
6
|
+
|
|
7
|
+
super( array, itemSize, Uint32Array );
|
|
8
|
+
|
|
9
|
+
this.isIndirectStorageBufferAttribute = true;
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default IndirectStorageBufferAttribute;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { LightsNode } from '../../nodes/Nodes.js';
|
|
2
|
+
import ChainMap from './ChainMap.js';
|
|
3
|
+
|
|
4
|
+
const _defaultLights = /*@__PURE__*/ new LightsNode();
|
|
5
|
+
|
|
6
|
+
class Lighting extends ChainMap {
|
|
7
|
+
|
|
8
|
+
constructor() {
|
|
9
|
+
|
|
10
|
+
super();
|
|
11
|
+
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
createNode( lights = [] ) {
|
|
15
|
+
|
|
16
|
+
return new LightsNode().setLights( lights );
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getNode( scene, camera ) {
|
|
21
|
+
|
|
22
|
+
// ignore post-processing
|
|
23
|
+
|
|
24
|
+
if ( scene.isQuadMesh ) return _defaultLights;
|
|
25
|
+
|
|
26
|
+
// tiled lighting
|
|
27
|
+
|
|
28
|
+
const keys = [ scene, camera ];
|
|
29
|
+
|
|
30
|
+
let node = this.get( keys );
|
|
31
|
+
|
|
32
|
+
if ( node === undefined ) {
|
|
33
|
+
|
|
34
|
+
node = this.createNode();
|
|
35
|
+
this.set( keys, node );
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return node;
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default Lighting;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Color } from '../../math/Color.js';
|
|
2
|
+
|
|
3
|
+
// renderer state
|
|
4
|
+
|
|
5
|
+
export function saveRendererState( renderer, state = {} ) {
|
|
6
|
+
|
|
7
|
+
state.toneMapping = renderer.toneMapping;
|
|
8
|
+
state.toneMappingExposure = renderer.toneMappingExposure;
|
|
9
|
+
state.outputColorSpace = renderer.outputColorSpace;
|
|
10
|
+
state.renderTarget = renderer.getRenderTarget();
|
|
11
|
+
state.activeCubeFace = renderer.getActiveCubeFace();
|
|
12
|
+
state.activeMipmapLevel = renderer.getActiveMipmapLevel();
|
|
13
|
+
state.renderObjectFunction = renderer.getRenderObjectFunction();
|
|
14
|
+
state.pixelRatio = renderer.getPixelRatio();
|
|
15
|
+
state.mrt = renderer.getMRT();
|
|
16
|
+
state.clearColor = renderer.getClearColor( state.clearColor || new Color() );
|
|
17
|
+
state.clearAlpha = renderer.getClearAlpha();
|
|
18
|
+
state.autoClear = renderer.autoClear;
|
|
19
|
+
state.scissorTest = renderer.getScissorTest();
|
|
20
|
+
|
|
21
|
+
return state;
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function resetRendererState( renderer, state ) {
|
|
26
|
+
|
|
27
|
+
state = saveRendererState( renderer, state );
|
|
28
|
+
|
|
29
|
+
renderer.setMRT( null );
|
|
30
|
+
renderer.setRenderObjectFunction( null );
|
|
31
|
+
renderer.setClearColor( 0x000000, 1 );
|
|
32
|
+
renderer.autoClear = true;
|
|
33
|
+
|
|
34
|
+
return state;
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function restoreRendererState( renderer, state ) {
|
|
39
|
+
|
|
40
|
+
renderer.toneMapping = state.toneMapping;
|
|
41
|
+
renderer.toneMappingExposure = state.toneMappingExposure;
|
|
42
|
+
renderer.outputColorSpace = state.outputColorSpace;
|
|
43
|
+
renderer.setRenderTarget( state.renderTarget, state.activeCubeFace, state.activeMipmapLevel );
|
|
44
|
+
renderer.setRenderObjectFunction( state.renderObjectFunction );
|
|
45
|
+
renderer.setPixelRatio( state.pixelRatio );
|
|
46
|
+
renderer.setMRT( state.mrt );
|
|
47
|
+
renderer.setClearColor( state.clearColor, state.clearAlpha );
|
|
48
|
+
renderer.autoClear = state.autoClear;
|
|
49
|
+
renderer.setScissorTest( state.scissorTest );
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// renderer and scene state
|
|
54
|
+
|
|
55
|
+
export function saveRendererAndSceneState( renderer, scene, state = {} ) {
|
|
56
|
+
|
|
57
|
+
state = saveRendererState( renderer, state );
|
|
58
|
+
state.background = scene.background;
|
|
59
|
+
state.backgroundNode = scene.backgroundNode;
|
|
60
|
+
state.overrideMaterial = scene.overrideMaterial;
|
|
61
|
+
|
|
62
|
+
return state;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function resetRendererAndSceneState( renderer, scene, state ) {
|
|
67
|
+
|
|
68
|
+
state = saveRendererAndSceneState( renderer, scene, state );
|
|
69
|
+
|
|
70
|
+
scene.background = null;
|
|
71
|
+
scene.backgroundNode = null;
|
|
72
|
+
scene.overrideMaterial = null;
|
|
73
|
+
|
|
74
|
+
return state;
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function restoreRendererAndSceneState( renderer, scene, state ) {
|
|
79
|
+
|
|
80
|
+
restoreRendererState( renderer, state );
|
|
81
|
+
|
|
82
|
+
scene.background = state.background;
|
|
83
|
+
scene.backgroundNode = state.backgroundNode;
|
|
84
|
+
scene.overrideMaterial = state.overrideMaterial;
|
|
85
|
+
|
|
86
|
+
}
|