super-three 0.157.0 → 0.158.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/README.md +6 -4
- package/build/three.cjs +1486 -842
- package/build/three.js +1486 -842
- package/build/three.min.js +1 -1
- package/build/three.module.js +1481 -843
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +290 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +12 -1
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +72 -2
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/loaders/GLTFLoader.js +12 -3
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +70 -3
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +6 -6
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/MorphNode.js +5 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +7 -12
- package/examples/jsm/nodes/core/NodeBuilder.js +126 -16
- package/examples/jsm/nodes/core/NodeUtils.js +4 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +1 -1
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +4 -10
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/VarNode.js +6 -35
- package/examples/jsm/nodes/core/VaryingNode.js +2 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/ViewportNode.js +14 -4
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -6
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +62 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +70 -71
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +17 -20
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +5 -21
- package/examples/jsm/nodes/shadernode/ShaderNode.js +128 -9
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/SplitNode.js +2 -0
- package/examples/jsm/objects/BatchedMesh.js +586 -0
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Bindings.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +8 -1
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Textures.js +4 -36
- package/examples/jsm/renderers/common/nodes/Nodes.js +53 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +291 -50
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +88 -12
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +40 -5
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +2 -0
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +36 -4
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +2 -0
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +4 -5
- package/examples/jsm/shaders/SAOShader.js +5 -0
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +6 -0
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +231 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +899 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +611 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/webxr/VRButton.js +1 -1
- package/examples/jsm/webxr/XRButton.js +7 -5
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +4 -1
- package/src/constants.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/materials/Material.js +27 -13
- package/src/math/Box3.js +35 -18
- package/src/math/Vector3.js +11 -12
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
- package/src/renderers/WebGLRenderer.js +199 -45
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +1 -1
- package/src/renderers/webgl/WebGLMultiview.js +100 -0
- package/src/renderers/webgl/WebGLProgram.js +130 -50
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +197 -20
- package/src/renderers/webxr/WebXRManager.js +36 -12
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -13,12 +13,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
13
13
|
const maxSamples = capabilities.maxSamples;
|
|
14
14
|
const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
|
|
15
15
|
const supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
|
|
16
|
+
const multiviewExt = extensions.has( 'OCULUS_multiview' ) ? extensions.get( 'OCULUS_multiview' ) : null;
|
|
16
17
|
|
|
17
18
|
const _videoTextures = new WeakMap();
|
|
18
19
|
let _canvas;
|
|
19
20
|
|
|
20
21
|
const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
|
|
21
22
|
|
|
23
|
+
let _deferredUploads = [];
|
|
24
|
+
let _deferTextureUploads = false;
|
|
25
|
+
|
|
22
26
|
// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,
|
|
23
27
|
// also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")!
|
|
24
28
|
// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).
|
|
@@ -486,8 +490,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
486
490
|
|
|
487
491
|
} else {
|
|
488
492
|
|
|
489
|
-
uploadTexture( textureProperties, texture, slot )
|
|
490
|
-
|
|
493
|
+
if ( uploadTexture( textureProperties, texture, slot ) ) {
|
|
494
|
+
|
|
495
|
+
return;
|
|
496
|
+
|
|
497
|
+
}
|
|
491
498
|
|
|
492
499
|
}
|
|
493
500
|
|
|
@@ -720,8 +727,45 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
720
727
|
|
|
721
728
|
}
|
|
722
729
|
|
|
730
|
+
function setDeferTextureUploads( deferFlag ) {
|
|
731
|
+
|
|
732
|
+
_deferTextureUploads = deferFlag;
|
|
733
|
+
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
function runDeferredUploads() {
|
|
737
|
+
|
|
738
|
+
const previousDeferSetting = _deferTextureUploads;
|
|
739
|
+
_deferTextureUploads = false;
|
|
740
|
+
|
|
741
|
+
for ( const upload of _deferredUploads ) {
|
|
742
|
+
|
|
743
|
+
uploadTexture( upload.textureProperties, upload.texture, upload.slot );
|
|
744
|
+
upload.texture.isPendingDeferredUpload = false;
|
|
745
|
+
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
_deferredUploads = [];
|
|
749
|
+
|
|
750
|
+
_deferTextureUploads = previousDeferSetting;
|
|
751
|
+
|
|
752
|
+
}
|
|
753
|
+
|
|
723
754
|
function uploadTexture( textureProperties, texture, slot ) {
|
|
724
755
|
|
|
756
|
+
if ( _deferTextureUploads ) {
|
|
757
|
+
|
|
758
|
+
if ( ! texture.isPendingDeferredUpload ) {
|
|
759
|
+
|
|
760
|
+
texture.isPendingDeferredUpload = true;
|
|
761
|
+
_deferredUploads.push( { textureProperties: textureProperties, texture: texture, slot: slot } );
|
|
762
|
+
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
return false;
|
|
766
|
+
|
|
767
|
+
}
|
|
768
|
+
|
|
725
769
|
let textureType = _gl.TEXTURE_2D;
|
|
726
770
|
|
|
727
771
|
if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;
|
|
@@ -1138,6 +1182,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1138
1182
|
}
|
|
1139
1183
|
|
|
1140
1184
|
textureProperties.__version = texture.version;
|
|
1185
|
+
return true;
|
|
1141
1186
|
|
|
1142
1187
|
}
|
|
1143
1188
|
|
|
@@ -1367,7 +1412,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1367
1412
|
const width = Math.max( 1, renderTarget.width >> level );
|
|
1368
1413
|
const height = Math.max( 1, renderTarget.height >> level );
|
|
1369
1414
|
|
|
1370
|
-
if (
|
|
1415
|
+
if ( renderTarget.isWebGLMultiviewRenderTarget === true ) {
|
|
1416
|
+
|
|
1417
|
+
state.texStorage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.numViews );
|
|
1418
|
+
|
|
1419
|
+
} else if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
|
|
1371
1420
|
|
|
1372
1421
|
state.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );
|
|
1373
1422
|
|
|
@@ -1381,13 +1430,31 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1381
1430
|
|
|
1382
1431
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
1383
1432
|
|
|
1384
|
-
|
|
1433
|
+
const multisampled = useMultisampledRTT( renderTarget );
|
|
1385
1434
|
|
|
1386
|
-
|
|
1435
|
+
if ( renderTarget.isWebGLMultiviewRenderTarget === true ) {
|
|
1436
|
+
|
|
1437
|
+
if ( multisampled ) {
|
|
1438
|
+
|
|
1439
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ), 0, renderTarget.numViews );
|
|
1440
|
+
|
|
1441
|
+
} else {
|
|
1442
|
+
|
|
1443
|
+
multiviewExt.framebufferTextureMultiviewOVR( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, properties.get( texture ).__webglTexture, 0, 0, renderTarget.numViews );
|
|
1444
|
+
|
|
1445
|
+
}
|
|
1387
1446
|
|
|
1388
1447
|
} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
|
|
1389
1448
|
|
|
1390
|
-
|
|
1449
|
+
if ( multisampled ) {
|
|
1450
|
+
|
|
1451
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
1452
|
+
|
|
1453
|
+
} else {
|
|
1454
|
+
|
|
1455
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );
|
|
1456
|
+
|
|
1457
|
+
}
|
|
1391
1458
|
|
|
1392
1459
|
}
|
|
1393
1460
|
|
|
@@ -1401,7 +1468,59 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1401
1468
|
|
|
1402
1469
|
_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
|
|
1403
1470
|
|
|
1404
|
-
if ( renderTarget.
|
|
1471
|
+
if ( renderTarget.isWebGLMultiviewRenderTarget === true ) {
|
|
1472
|
+
|
|
1473
|
+
const useMultisample = useMultisampledRTT( renderTarget );
|
|
1474
|
+
const numViews = renderTarget.numViews;
|
|
1475
|
+
|
|
1476
|
+
const depthTexture = renderTarget.depthTexture;
|
|
1477
|
+
let glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
1478
|
+
let glDepthAttachment = _gl.DEPTH_ATTACHMENT;
|
|
1479
|
+
|
|
1480
|
+
if ( depthTexture && depthTexture.isDepthTexture ) {
|
|
1481
|
+
|
|
1482
|
+
if ( depthTexture.type === FloatType ) {
|
|
1483
|
+
|
|
1484
|
+
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
1485
|
+
|
|
1486
|
+
} else if ( depthTexture.type === UnsignedInt248Type ) {
|
|
1487
|
+
|
|
1488
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
1489
|
+
glDepthAttachment = _gl.DEPTH_STENCIL_ATTACHMENT;
|
|
1490
|
+
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
// we're defaulting to _gl.DEPTH_COMPONENT24 so don't assign here
|
|
1494
|
+
// or else DeepScan will complain
|
|
1495
|
+
|
|
1496
|
+
// else if ( depthTexture.type === UnsignedIntType ) {
|
|
1497
|
+
|
|
1498
|
+
// glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
1499
|
+
|
|
1500
|
+
// }
|
|
1501
|
+
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
let depthStencilTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
|
|
1505
|
+
if ( depthStencilTexture === undefined ) {
|
|
1506
|
+
|
|
1507
|
+
depthStencilTexture = _gl.createTexture();
|
|
1508
|
+
_gl.bindTexture( _gl.TEXTURE_2D_ARRAY, depthStencilTexture );
|
|
1509
|
+
_gl.texStorage3D( _gl.TEXTURE_2D_ARRAY, 1, glInternalFormat, renderTarget.width, renderTarget.height, numViews );
|
|
1510
|
+
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
if ( useMultisample ) {
|
|
1514
|
+
|
|
1515
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( _gl.FRAMEBUFFER, glDepthAttachment, depthStencilTexture, 0, getRenderTargetSamples( renderTarget ), 0, numViews );
|
|
1516
|
+
|
|
1517
|
+
} else {
|
|
1518
|
+
|
|
1519
|
+
multiviewExt.framebufferTextureMultiviewOVR( _gl.FRAMEBUFFER, glDepthAttachment, depthStencilTexture, 0, 0, numViews );
|
|
1520
|
+
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
} else if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
|
|
1405
1524
|
|
|
1406
1525
|
let glInternalFormat = ( isWebGL2 === true ) ? _gl.DEPTH_COMPONENT24 : _gl.DEPTH_COMPONENT16;
|
|
1407
1526
|
|
|
@@ -1525,37 +1644,85 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1525
1644
|
}
|
|
1526
1645
|
|
|
1527
1646
|
setTexture2D( renderTarget.depthTexture, 0 );
|
|
1647
|
+
if ( renderTarget.depthTexture.image.depth != 1 ) {
|
|
1648
|
+
|
|
1649
|
+
setTexture2DArray( renderTarget.depthTexture, 0 );
|
|
1650
|
+
|
|
1651
|
+
} else {
|
|
1652
|
+
|
|
1653
|
+
setTexture2D( renderTarget.depthTexture, 0 );
|
|
1654
|
+
|
|
1655
|
+
}
|
|
1528
1656
|
|
|
1529
1657
|
const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
|
|
1530
1658
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1531
1659
|
|
|
1532
|
-
if ( renderTarget.
|
|
1660
|
+
if ( renderTarget.isWebGLMultiviewRenderTarget === true ) {
|
|
1533
1661
|
|
|
1534
|
-
|
|
1662
|
+
const useMultisample = useMultisampledRTT( renderTarget );
|
|
1663
|
+
const numViews = renderTarget.numViews;
|
|
1535
1664
|
|
|
1536
|
-
|
|
1665
|
+
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1537
1666
|
|
|
1538
|
-
|
|
1667
|
+
if ( useMultisample ) {
|
|
1539
1668
|
|
|
1540
|
-
|
|
1669
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, webglDepthTexture, 0, samples, 0, numViews );
|
|
1541
1670
|
|
|
1542
|
-
|
|
1671
|
+
} else {
|
|
1543
1672
|
|
|
1544
|
-
|
|
1673
|
+
multiviewExt.framebufferTextureMultiviewOVR( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, webglDepthTexture, 0, 0, numViews );
|
|
1674
|
+
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
1678
|
+
|
|
1679
|
+
if ( useMultisample ) {
|
|
1680
|
+
|
|
1681
|
+
multiviewExt.framebufferTextureMultisampleMultiviewOVR( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, webglDepthTexture, 0, samples, 0, numViews );
|
|
1682
|
+
|
|
1683
|
+
} else {
|
|
1545
1684
|
|
|
1546
|
-
|
|
1685
|
+
multiviewExt.framebufferTextureMultiviewOVR( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, webglDepthTexture, 0, 0, numViews );
|
|
1547
1686
|
|
|
1548
|
-
|
|
1687
|
+
}
|
|
1549
1688
|
|
|
1550
1689
|
} else {
|
|
1551
1690
|
|
|
1552
|
-
|
|
1691
|
+
throw new Error( 'Unknown depthTexture format' );
|
|
1553
1692
|
|
|
1554
1693
|
}
|
|
1555
1694
|
|
|
1556
1695
|
} else {
|
|
1557
1696
|
|
|
1558
|
-
|
|
1697
|
+
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
1698
|
+
|
|
1699
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1700
|
+
|
|
1701
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1702
|
+
|
|
1703
|
+
} else {
|
|
1704
|
+
|
|
1705
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1706
|
+
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
1710
|
+
|
|
1711
|
+
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1712
|
+
|
|
1713
|
+
multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1714
|
+
|
|
1715
|
+
} else {
|
|
1716
|
+
|
|
1717
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1718
|
+
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
} else {
|
|
1722
|
+
|
|
1723
|
+
throw new Error( 'Unknown depthTexture format' );
|
|
1724
|
+
|
|
1725
|
+
}
|
|
1559
1726
|
|
|
1560
1727
|
}
|
|
1561
1728
|
|
|
@@ -1834,6 +2001,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1834
2001
|
|
|
1835
2002
|
}
|
|
1836
2003
|
|
|
2004
|
+
if ( renderTarget.isWebGLMultiviewRenderTarget === true ) {
|
|
2005
|
+
|
|
2006
|
+
glTextureType = _gl.TEXTURE_2D_ARRAY;
|
|
2007
|
+
|
|
2008
|
+
}
|
|
2009
|
+
|
|
1837
2010
|
state.bindTexture( glTextureType, textureProperties.__webglTexture );
|
|
1838
2011
|
setTextureParameters( glTextureType, texture, supportsMips );
|
|
1839
2012
|
|
|
@@ -1863,9 +2036,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1863
2036
|
|
|
1864
2037
|
// Setup depth and stencil buffers
|
|
1865
2038
|
|
|
1866
|
-
if ( renderTarget.depthBuffer ) {
|
|
2039
|
+
if ( renderTarget.depthBuffer || renderTarget.isWebGLMultiviewRenderTarget === true ) {
|
|
1867
2040
|
|
|
1868
|
-
setupDepthRenderbuffer( renderTarget );
|
|
2041
|
+
this.setupDepthRenderbuffer( renderTarget );
|
|
1869
2042
|
|
|
1870
2043
|
}
|
|
1871
2044
|
|
|
@@ -2101,12 +2274,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2101
2274
|
this.setTexture3D = setTexture3D;
|
|
2102
2275
|
this.setTextureCube = setTextureCube;
|
|
2103
2276
|
this.rebindTextures = rebindTextures;
|
|
2277
|
+
this.uploadTexture = uploadTexture;
|
|
2104
2278
|
this.setupRenderTarget = setupRenderTarget;
|
|
2105
2279
|
this.updateRenderTargetMipmap = updateRenderTargetMipmap;
|
|
2106
2280
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
2281
|
+
this.setupDepthTexture = setupDepthTexture;
|
|
2107
2282
|
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
2108
2283
|
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
2109
2284
|
this.useMultisampledRTT = useMultisampledRTT;
|
|
2285
|
+
this.runDeferredUploads = runDeferredUploads;
|
|
2286
|
+
this.setDeferTextureUploads = setDeferTextureUploads;
|
|
2110
2287
|
|
|
2111
2288
|
}
|
|
2112
2289
|
|
|
@@ -5,6 +5,7 @@ import { Vector3 } from '../../math/Vector3.js';
|
|
|
5
5
|
import { Vector4 } from '../../math/Vector4.js';
|
|
6
6
|
import { RAD2DEG } from '../../math/MathUtils.js';
|
|
7
7
|
import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
|
|
8
|
+
import { WebGLMultiviewRenderTarget } from '../WebGLMultiviewRenderTarget.js';
|
|
8
9
|
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
|
|
9
10
|
import { WebXRController } from './WebXRController.js';
|
|
10
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
@@ -12,7 +13,7 @@ import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, Unsigned
|
|
|
12
13
|
|
|
13
14
|
class WebXRManager extends EventDispatcher {
|
|
14
15
|
|
|
15
|
-
constructor( renderer, gl ) {
|
|
16
|
+
constructor( renderer, gl, extensions, useMultiview ) {
|
|
16
17
|
|
|
17
18
|
super();
|
|
18
19
|
|
|
@@ -68,6 +69,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
68
69
|
this.enabled = false;
|
|
69
70
|
|
|
70
71
|
this.isPresenting = false;
|
|
72
|
+
this.isMultiview = false;
|
|
71
73
|
|
|
72
74
|
this.getCameraPose = function ( ) {
|
|
73
75
|
|
|
@@ -311,29 +313,51 @@ class WebXRManager extends EventDispatcher {
|
|
|
311
313
|
|
|
312
314
|
}
|
|
313
315
|
|
|
316
|
+
scope.isMultiview = useMultiview && extensions.has( 'OCULUS_multiview' );
|
|
317
|
+
|
|
314
318
|
const projectionlayerInit = {
|
|
315
319
|
colorFormat: gl.RGBA8,
|
|
316
320
|
depthFormat: glDepthFormat,
|
|
317
321
|
scaleFactor: framebufferScaleFactor
|
|
318
322
|
};
|
|
319
323
|
|
|
324
|
+
if ( scope.isMultiview ) {
|
|
325
|
+
|
|
326
|
+
projectionlayerInit.textureType = 'texture-array';
|
|
327
|
+
|
|
328
|
+
}
|
|
329
|
+
|
|
320
330
|
glBinding = new XRWebGLBinding( session, gl );
|
|
321
331
|
|
|
322
332
|
glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
323
333
|
|
|
324
334
|
session.updateRenderState( { layers: [ glProjLayer ] } );
|
|
325
335
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
336
|
+
const renderTargetOptions = {
|
|
337
|
+
format: RGBAFormat,
|
|
338
|
+
type: UnsignedByteType,
|
|
339
|
+
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
340
|
+
stencilBuffer: attributes.stencil,
|
|
341
|
+
colorSpace: renderer.outputColorSpace,
|
|
342
|
+
samples: attributes.antialias ? 4 : 0
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
if ( scope.isMultiview ) {
|
|
346
|
+
|
|
347
|
+
const extension = extensions.get( 'OCULUS_multiview' );
|
|
348
|
+
|
|
349
|
+
this.maxNumViews = gl.getParameter( extension.MAX_VIEWS_OVR );
|
|
350
|
+
|
|
351
|
+
newRenderTarget = new WebGLMultiviewRenderTarget( glProjLayer.textureWidth, glProjLayer.textureHeight, 2, renderTargetOptions );
|
|
352
|
+
|
|
353
|
+
} else {
|
|
354
|
+
|
|
355
|
+
newRenderTarget = new WebGLRenderTarget(
|
|
356
|
+
glProjLayer.textureWidth,
|
|
357
|
+
glProjLayer.textureHeight,
|
|
358
|
+
renderTargetOptions );
|
|
359
|
+
|
|
360
|
+
}
|
|
337
361
|
|
|
338
362
|
const renderTargetProperties = renderer.properties.get( newRenderTarget );
|
|
339
363
|
renderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import MaterialNode from './MaterialNode.js';
|
|
2
|
-
import { materialReference } from './MaterialReferenceNode.js';
|
|
3
|
-
import { normalView } from './NormalNode.js';
|
|
4
|
-
import { normalMap } from '../display/NormalMapNode.js';
|
|
5
|
-
import { bumpMap } from '../display/BumpMapNode.js';
|
|
6
|
-
import { addNodeClass } from '../core/Node.js';
|
|
7
|
-
import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
8
|
-
|
|
9
|
-
class ExtendedMaterialNode extends MaterialNode {
|
|
10
|
-
|
|
11
|
-
constructor( scope ) {
|
|
12
|
-
|
|
13
|
-
super( scope );
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
getNodeType( builder ) {
|
|
18
|
-
|
|
19
|
-
const scope = this.scope;
|
|
20
|
-
let type = null;
|
|
21
|
-
|
|
22
|
-
if ( scope === ExtendedMaterialNode.NORMAL || scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
|
|
23
|
-
|
|
24
|
-
type = 'vec3';
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return type || super.getNodeType( builder );
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
setup( builder ) {
|
|
33
|
-
|
|
34
|
-
const material = builder.material;
|
|
35
|
-
const scope = this.scope;
|
|
36
|
-
|
|
37
|
-
let node = null;
|
|
38
|
-
|
|
39
|
-
if ( scope === ExtendedMaterialNode.NORMAL ) {
|
|
40
|
-
|
|
41
|
-
if ( material.normalMap ) {
|
|
42
|
-
|
|
43
|
-
node = normalMap( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) );
|
|
44
|
-
|
|
45
|
-
} else if ( material.bumpMap ) {
|
|
46
|
-
|
|
47
|
-
// @TODO: Replace material.bumpMap to this.getTexture( 'bumpMap' )
|
|
48
|
-
node = bumpMap( material.bumpMap, materialReference( 'bumpScale', 'float' ) );
|
|
49
|
-
|
|
50
|
-
} else {
|
|
51
|
-
|
|
52
|
-
node = normalView;
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
} else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
|
|
57
|
-
|
|
58
|
-
node = material.clearcoatNormalMap ? normalMap( this.getTexture( 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return node || super.setup( builder );
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
ExtendedMaterialNode.NORMAL = 'normal';
|
|
69
|
-
ExtendedMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
|
|
70
|
-
|
|
71
|
-
export default ExtendedMaterialNode;
|
|
72
|
-
|
|
73
|
-
export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
|
|
74
|
-
export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
|
|
75
|
-
|
|
76
|
-
addNodeClass( 'ExtendedMaterialNode', ExtendedMaterialNode );
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import MaterialNode from './MaterialNode.js';
|
|
2
|
-
import { addNodeClass } from '../core/Node.js';
|
|
3
|
-
import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
4
|
-
|
|
5
|
-
class LineMaterialNode extends MaterialNode {
|
|
6
|
-
|
|
7
|
-
setup( /*builder*/ ) {
|
|
8
|
-
|
|
9
|
-
return this.getFloat( this.scope );
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
LineMaterialNode.SCALE = 'scale';
|
|
16
|
-
LineMaterialNode.DASH_SIZE = 'dashSize';
|
|
17
|
-
LineMaterialNode.GAP_SIZE = 'gapSize';
|
|
18
|
-
LineMaterialNode.LINEWIDTH = 'linewidth';
|
|
19
|
-
LineMaterialNode.DASH_OFFSET = 'dashOffset';
|
|
20
|
-
|
|
21
|
-
export default LineMaterialNode;
|
|
22
|
-
|
|
23
|
-
export const materialLineScale = nodeImmutable( LineMaterialNode, LineMaterialNode.SCALE );
|
|
24
|
-
export const materialLineDashOffset = nodeImmutable( LineMaterialNode, LineMaterialNode.DASH_OFFSET );
|
|
25
|
-
export const materialLineDashSize = nodeImmutable( LineMaterialNode, LineMaterialNode.DASH_SIZE );
|
|
26
|
-
export const materialLineGapSize = nodeImmutable( LineMaterialNode, LineMaterialNode.GAP_SIZE );
|
|
27
|
-
export const materialLineWidth = nodeImmutable( LineMaterialNode, LineMaterialNode.LINEWIDTH );
|
|
28
|
-
|
|
29
|
-
addNodeClass( 'LineMaterialNode', LineMaterialNode );
|