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
|
@@ -4,6 +4,9 @@ import { ShaderChunk } from '../shaders/ShaderChunk.js';
|
|
|
4
4
|
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
5
5
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
6
|
|
|
7
|
+
// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
|
|
8
|
+
const COMPLETION_STATUS_KHR = 0x91B1;
|
|
9
|
+
|
|
7
10
|
let programIdCount = 0;
|
|
8
11
|
|
|
9
12
|
function handleSource( string, errorLine ) {
|
|
@@ -455,6 +458,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
455
458
|
let prefixVertex, prefixFragment;
|
|
456
459
|
let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : '';
|
|
457
460
|
|
|
461
|
+
const numMultiviewViews = parameters.numMultiviewViews;
|
|
462
|
+
|
|
458
463
|
if ( parameters.isRawShaderMaterial ) {
|
|
459
464
|
|
|
460
465
|
prefixVertex = [
|
|
@@ -846,6 +851,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
846
851
|
].join( '\n' ) + '\n' + prefixVertex;
|
|
847
852
|
|
|
848
853
|
prefixFragment = [
|
|
854
|
+
'precision mediump sampler2DArray;',
|
|
849
855
|
'#define varying in',
|
|
850
856
|
( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
|
|
851
857
|
( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
|
|
@@ -861,6 +867,53 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
861
867
|
'#define textureCubeGradEXT textureGrad'
|
|
862
868
|
].join( '\n' ) + '\n' + prefixFragment;
|
|
863
869
|
|
|
870
|
+
// Multiview
|
|
871
|
+
|
|
872
|
+
if ( numMultiviewViews > 0 ) {
|
|
873
|
+
|
|
874
|
+
// TODO: fix light transforms here?
|
|
875
|
+
|
|
876
|
+
prefixVertex = [
|
|
877
|
+
'#extension GL_OVR_multiview : require',
|
|
878
|
+
'layout(num_views = ' + numMultiviewViews + ') in;',
|
|
879
|
+
'#define VIEW_ID gl_ViewID_OVR'
|
|
880
|
+
].join( '\n' ) + '\n' + prefixVertex;
|
|
881
|
+
|
|
882
|
+
prefixVertex = prefixVertex.replace(
|
|
883
|
+
[
|
|
884
|
+
'uniform mat4 modelViewMatrix;',
|
|
885
|
+
'uniform mat4 projectionMatrix;',
|
|
886
|
+
'uniform mat4 viewMatrix;',
|
|
887
|
+
'uniform mat3 normalMatrix;'
|
|
888
|
+
].join( '\n' ),
|
|
889
|
+
[
|
|
890
|
+
'uniform mat4 modelViewMatrices[' + numMultiviewViews + '];',
|
|
891
|
+
'uniform mat4 projectionMatrices[' + numMultiviewViews + '];',
|
|
892
|
+
'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
|
|
893
|
+
'uniform mat3 normalMatrices[' + numMultiviewViews + '];',
|
|
894
|
+
|
|
895
|
+
'#define modelViewMatrix modelViewMatrices[VIEW_ID]',
|
|
896
|
+
'#define projectionMatrix projectionMatrices[VIEW_ID]',
|
|
897
|
+
'#define viewMatrix viewMatrices[VIEW_ID]',
|
|
898
|
+
'#define normalMatrix normalMatrices[VIEW_ID]'
|
|
899
|
+
].join( '\n' )
|
|
900
|
+
);
|
|
901
|
+
|
|
902
|
+
prefixFragment = [
|
|
903
|
+
'#extension GL_OVR_multiview : require',
|
|
904
|
+
'#define VIEW_ID gl_ViewID_OVR'
|
|
905
|
+
].join( '\n' ) + '\n' + prefixFragment;
|
|
906
|
+
|
|
907
|
+
prefixFragment = prefixFragment.replace(
|
|
908
|
+
'uniform mat4 viewMatrix;',
|
|
909
|
+
[
|
|
910
|
+
'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
|
|
911
|
+
'#define viewMatrix viewMatrices[VIEW_ID]'
|
|
912
|
+
].join( '\n' )
|
|
913
|
+
);
|
|
914
|
+
|
|
915
|
+
}
|
|
916
|
+
|
|
864
917
|
}
|
|
865
918
|
|
|
866
919
|
const vertexGlsl = versionString + prefixVertex + vertexShader;
|
|
@@ -890,87 +943,94 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
890
943
|
|
|
891
944
|
gl.linkProgram( program );
|
|
892
945
|
|
|
893
|
-
|
|
894
|
-
if ( renderer.debug.checkShaderErrors ) {
|
|
946
|
+
function onFirstUse( self ) {
|
|
895
947
|
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
|
|
948
|
+
// check for link errors
|
|
949
|
+
if ( renderer.debug.checkShaderErrors ) {
|
|
899
950
|
|
|
900
|
-
|
|
901
|
-
|
|
951
|
+
const programLog = gl.getProgramInfoLog( program ).trim();
|
|
952
|
+
const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
|
|
953
|
+
const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
|
|
902
954
|
|
|
903
|
-
|
|
955
|
+
let runnable = true;
|
|
956
|
+
let haveDiagnostics = true;
|
|
904
957
|
|
|
905
|
-
|
|
958
|
+
if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
|
|
906
959
|
|
|
907
|
-
|
|
960
|
+
runnable = false;
|
|
908
961
|
|
|
909
|
-
renderer.debug.onShaderError
|
|
962
|
+
if ( typeof renderer.debug.onShaderError === 'function' ) {
|
|
910
963
|
|
|
911
|
-
|
|
964
|
+
renderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );
|
|
912
965
|
|
|
913
|
-
|
|
966
|
+
} else {
|
|
914
967
|
|
|
915
|
-
|
|
916
|
-
const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
968
|
+
// default error reporting
|
|
917
969
|
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
921
|
-
'Program Info Log: ' + programLog + '\n' +
|
|
922
|
-
vertexErrors + '\n' +
|
|
923
|
-
fragmentErrors
|
|
924
|
-
);
|
|
970
|
+
const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );
|
|
971
|
+
const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
925
972
|
|
|
926
|
-
|
|
973
|
+
console.error(
|
|
974
|
+
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
975
|
+
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
976
|
+
'Program Info Log: ' + programLog + '\n' +
|
|
977
|
+
vertexErrors + '\n' +
|
|
978
|
+
fragmentErrors
|
|
979
|
+
);
|
|
927
980
|
|
|
928
|
-
|
|
981
|
+
}
|
|
929
982
|
|
|
930
|
-
|
|
983
|
+
} else if ( programLog !== '' ) {
|
|
931
984
|
|
|
932
|
-
|
|
985
|
+
console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );
|
|
933
986
|
|
|
934
|
-
|
|
987
|
+
} else if ( vertexLog === '' || fragmentLog === '' ) {
|
|
935
988
|
|
|
936
|
-
|
|
989
|
+
haveDiagnostics = false;
|
|
937
990
|
|
|
938
|
-
|
|
991
|
+
}
|
|
939
992
|
|
|
940
|
-
|
|
993
|
+
if ( haveDiagnostics ) {
|
|
941
994
|
|
|
942
|
-
|
|
995
|
+
self.diagnostics = {
|
|
943
996
|
|
|
944
|
-
|
|
997
|
+
runnable: runnable,
|
|
945
998
|
|
|
946
|
-
|
|
999
|
+
programLog: programLog,
|
|
947
1000
|
|
|
948
|
-
|
|
949
|
-
prefix: prefixVertex
|
|
1001
|
+
vertexShader: {
|
|
950
1002
|
|
|
951
|
-
|
|
1003
|
+
log: vertexLog,
|
|
1004
|
+
prefix: prefixVertex
|
|
952
1005
|
|
|
953
|
-
|
|
1006
|
+
},
|
|
954
1007
|
|
|
955
|
-
|
|
956
|
-
prefix: prefixFragment
|
|
1008
|
+
fragmentShader: {
|
|
957
1009
|
|
|
958
|
-
|
|
1010
|
+
log: fragmentLog,
|
|
1011
|
+
prefix: prefixFragment
|
|
959
1012
|
|
|
960
|
-
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
};
|
|
1016
|
+
|
|
1017
|
+
}
|
|
961
1018
|
|
|
962
1019
|
}
|
|
963
1020
|
|
|
964
|
-
|
|
1021
|
+
// Clean up
|
|
1022
|
+
|
|
1023
|
+
// Crashes in iOS9 and iOS10. #18402
|
|
1024
|
+
// gl.detachShader( program, glVertexShader );
|
|
1025
|
+
// gl.detachShader( program, glFragmentShader );
|
|
965
1026
|
|
|
966
|
-
|
|
1027
|
+
gl.deleteShader( glVertexShader );
|
|
1028
|
+
gl.deleteShader( glFragmentShader );
|
|
967
1029
|
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
// gl.detachShader( program, glFragmentShader );
|
|
1030
|
+
cachedUniforms = new WebGLUniforms( gl, program );
|
|
1031
|
+
cachedAttributes = fetchAttributeLocations( gl, program );
|
|
971
1032
|
|
|
972
|
-
|
|
973
|
-
gl.deleteShader( glFragmentShader );
|
|
1033
|
+
}
|
|
974
1034
|
|
|
975
1035
|
// set up caching for uniform locations
|
|
976
1036
|
|
|
@@ -980,7 +1040,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
980
1040
|
|
|
981
1041
|
if ( cachedUniforms === undefined ) {
|
|
982
1042
|
|
|
983
|
-
|
|
1043
|
+
// Populates cachedUniforms and cachedAttributes
|
|
1044
|
+
onFirstUse( this );
|
|
984
1045
|
|
|
985
1046
|
}
|
|
986
1047
|
|
|
@@ -996,7 +1057,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
996
1057
|
|
|
997
1058
|
if ( cachedAttributes === undefined ) {
|
|
998
1059
|
|
|
999
|
-
|
|
1060
|
+
// Populates cachedAttributes and cachedUniforms
|
|
1061
|
+
onFirstUse( this );
|
|
1000
1062
|
|
|
1001
1063
|
}
|
|
1002
1064
|
|
|
@@ -1004,6 +1066,23 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
1004
1066
|
|
|
1005
1067
|
};
|
|
1006
1068
|
|
|
1069
|
+
// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,
|
|
1070
|
+
// flag the program as ready immediately. It may cause a stall when it's first used.
|
|
1071
|
+
|
|
1072
|
+
let programReady = ( parameters.rendererExtensionParallelShaderCompile === false );
|
|
1073
|
+
|
|
1074
|
+
this.isReady = function () {
|
|
1075
|
+
|
|
1076
|
+
if ( programReady === false ) {
|
|
1077
|
+
|
|
1078
|
+
programReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );
|
|
1079
|
+
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
return programReady;
|
|
1083
|
+
|
|
1084
|
+
};
|
|
1085
|
+
|
|
1007
1086
|
// free resource
|
|
1008
1087
|
|
|
1009
1088
|
this.destroy = function () {
|
|
@@ -1025,6 +1104,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
1025
1104
|
this.program = program;
|
|
1026
1105
|
this.vertexShader = glVertexShader;
|
|
1027
1106
|
this.fragmentShader = glFragmentShader;
|
|
1107
|
+
this.numMultiviewViews = numMultiviewViews;
|
|
1028
1108
|
|
|
1029
1109
|
return this;
|
|
1030
1110
|
|
|
@@ -107,6 +107,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
107
107
|
|
|
108
108
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
109
109
|
|
|
110
|
+
const numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
|
|
111
|
+
|
|
110
112
|
const IS_INSTANCEDMESH = object.isInstancedMesh === true;
|
|
111
113
|
|
|
112
114
|
const HAS_MAP = !! material.map;
|
|
@@ -197,6 +199,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
197
199
|
instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
|
|
198
200
|
|
|
199
201
|
supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
|
|
202
|
+
numMultiviewViews: numMultiviewViews,
|
|
200
203
|
outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
|
|
201
204
|
|
|
202
205
|
map: HAS_MAP,
|
|
@@ -358,6 +361,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
358
361
|
rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
|
|
359
362
|
rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
|
|
360
363
|
rendererExtensionShaderTextureLod: IS_WEBGL2 || extensions.has( 'EXT_shader_texture_lod' ),
|
|
364
|
+
rendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),
|
|
361
365
|
|
|
362
366
|
customProgramCacheKey: material.customProgramCacheKey()
|
|
363
367
|
|
|
@@ -500,6 +504,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
500
504
|
_programLayers.enable( 16 );
|
|
501
505
|
if ( parameters.anisotropy )
|
|
502
506
|
_programLayers.enable( 17 );
|
|
507
|
+
if ( parameters.alphaHash )
|
|
508
|
+
_programLayers.enable( 18 );
|
|
503
509
|
|
|
504
510
|
array.push( _programLayers.mask );
|
|
505
511
|
_programLayers.disableAll();
|
|
@@ -544,6 +550,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
544
550
|
_programLayers.enable( 18 );
|
|
545
551
|
if ( parameters.decodeVideoTexture )
|
|
546
552
|
_programLayers.enable( 19 );
|
|
553
|
+
if ( parameters.numMultiviewViews )
|
|
554
|
+
_programLayers.enable( 20 );
|
|
547
555
|
|
|
548
556
|
array.push( _programLayers.mask );
|
|
549
557
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceFront, CullFaceBack, CullFaceNone, DoubleSide, BackSide, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, NoBlending, NormalBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor, OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor } from '../../constants.js';
|
|
1
|
+
import { NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDepth, LessDepth, AlwaysDepth, NeverDepth, CullFaceFront, CullFaceBack, CullFaceNone, DoubleSide, BackSide, CustomBlending, MultiplyBlending, SubtractiveBlending, AdditiveBlending, NoBlending, NormalBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor, OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor, ConstantColorFactor, OneMinusConstantColorFactor, ConstantAlphaFactor, OneMinusConstantAlphaFactor } from '../../constants.js';
|
|
2
|
+
import { Color } from '../../math/Color.js';
|
|
2
3
|
import { Vector4 } from '../../math/Vector4.js';
|
|
3
4
|
|
|
4
5
|
function WebGLState( gl, extensions, capabilities ) {
|
|
@@ -325,6 +326,8 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
325
326
|
let currentBlendEquationAlpha = null;
|
|
326
327
|
let currentBlendSrcAlpha = null;
|
|
327
328
|
let currentBlendDstAlpha = null;
|
|
329
|
+
let currentBlendColor = new Color( 0, 0, 0 );
|
|
330
|
+
let currentBlendAlpha = 0;
|
|
328
331
|
let currentPremultipledAlpha = false;
|
|
329
332
|
|
|
330
333
|
let currentFlipSided = null;
|
|
@@ -600,10 +603,14 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
600
603
|
[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,
|
|
601
604
|
[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,
|
|
602
605
|
[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,
|
|
603
|
-
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
|
|
606
|
+
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,
|
|
607
|
+
[ ConstantColorFactor ]: gl.CONSTANT_COLOR,
|
|
608
|
+
[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,
|
|
609
|
+
[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,
|
|
610
|
+
[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA
|
|
604
611
|
};
|
|
605
612
|
|
|
606
|
-
function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
|
613
|
+
function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {
|
|
607
614
|
|
|
608
615
|
if ( blending === NoBlending ) {
|
|
609
616
|
|
|
@@ -696,6 +703,8 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
696
703
|
currentBlendDst = null;
|
|
697
704
|
currentBlendSrcAlpha = null;
|
|
698
705
|
currentBlendDstAlpha = null;
|
|
706
|
+
currentBlendColor.set( 0, 0, 0 );
|
|
707
|
+
currentBlendAlpha = 0;
|
|
699
708
|
|
|
700
709
|
currentBlending = blending;
|
|
701
710
|
currentPremultipledAlpha = premultipliedAlpha;
|
|
@@ -732,6 +741,15 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
732
741
|
|
|
733
742
|
}
|
|
734
743
|
|
|
744
|
+
if ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {
|
|
745
|
+
|
|
746
|
+
gl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );
|
|
747
|
+
|
|
748
|
+
currentBlendColor.copy( blendColor );
|
|
749
|
+
currentBlendAlpha = blendAlpha;
|
|
750
|
+
|
|
751
|
+
}
|
|
752
|
+
|
|
735
753
|
currentBlending = blending;
|
|
736
754
|
currentPremultipledAlpha = false;
|
|
737
755
|
|
|
@@ -750,7 +768,7 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
750
768
|
|
|
751
769
|
( material.blending === NormalBlending && material.transparent === false )
|
|
752
770
|
? setBlending( NoBlending )
|
|
753
|
-
: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );
|
|
771
|
+
: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );
|
|
754
772
|
|
|
755
773
|
depthBuffer.setFunc( material.depthFunc );
|
|
756
774
|
depthBuffer.setTest( material.depthTest );
|
|
@@ -1174,6 +1192,7 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
1174
1192
|
gl.blendEquation( gl.FUNC_ADD );
|
|
1175
1193
|
gl.blendFunc( gl.ONE, gl.ZERO );
|
|
1176
1194
|
gl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );
|
|
1195
|
+
gl.blendColor( 0, 0, 0, 0 );
|
|
1177
1196
|
|
|
1178
1197
|
gl.colorMask( true, true, true, true );
|
|
1179
1198
|
gl.clearColor( 0, 0, 0, 0 );
|
|
@@ -1231,6 +1250,8 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
1231
1250
|
currentBlendEquationAlpha = null;
|
|
1232
1251
|
currentBlendSrcAlpha = null;
|
|
1233
1252
|
currentBlendDstAlpha = null;
|
|
1253
|
+
currentBlendColor = new Color( 0, 0, 0 );
|
|
1254
|
+
currentBlendAlpha = 0;
|
|
1234
1255
|
currentPremultipledAlpha = false;
|
|
1235
1256
|
|
|
1236
1257
|
currentFlipSided = null;
|