@needle-tools/three 0.162.2 → 0.162.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +86 -86
- package/build/three.cjs +53266 -53266
- package/build/three.module.js +53266 -53266
- package/examples/fonts/LICENSE +13 -13
- package/examples/fonts/README.md +11 -11
- package/examples/fonts/droid/NOTICE +190 -190
- package/examples/fonts/droid/README.txt +18 -18
- package/examples/fonts/ttf/README.md +9 -9
- package/examples/jsm/Addons.js +295 -295
- package/examples/jsm/animation/AnimationClipCreator.js +116 -116
- package/examples/jsm/animation/CCDIKSolver.js +482 -482
- package/examples/jsm/animation/MMDAnimationHelper.js +1207 -1207
- package/examples/jsm/animation/MMDPhysics.js +1406 -1406
- package/examples/jsm/cameras/CinematicCamera.js +208 -208
- package/examples/jsm/capabilities/WebGL.js +108 -108
- package/examples/jsm/capabilities/WebGPU.js +57 -57
- package/examples/jsm/controls/ArcballControls.js +3224 -3224
- package/examples/jsm/controls/DragControls.js +282 -282
- package/examples/jsm/controls/FirstPersonControls.js +325 -325
- package/examples/jsm/controls/FlyControls.js +326 -326
- package/examples/jsm/controls/MapControls.js +28 -28
- package/examples/jsm/controls/OrbitControls.js +1548 -1548
- package/examples/jsm/controls/PointerLockControls.js +162 -162
- package/examples/jsm/controls/TrackballControls.js +828 -828
- package/examples/jsm/controls/TransformControls.js +1573 -1573
- package/examples/jsm/csm/CSM.js +384 -384
- package/examples/jsm/csm/CSMFrustum.js +152 -152
- package/examples/jsm/csm/CSMHelper.js +193 -193
- package/examples/jsm/csm/CSMShader.js +295 -295
- package/examples/jsm/curves/CurveExtras.js +422 -422
- package/examples/jsm/curves/NURBSCurve.js +80 -80
- package/examples/jsm/curves/NURBSSurface.js +52 -52
- package/examples/jsm/curves/NURBSUtils.js +542 -542
- package/examples/jsm/curves/NURBSVolume.js +62 -62
- package/examples/jsm/effects/AnaglyphEffect.js +154 -154
- package/examples/jsm/effects/AsciiEffect.js +263 -263
- package/examples/jsm/effects/OutlineEffect.js +539 -539
- package/examples/jsm/effects/ParallaxBarrierEffect.js +119 -119
- package/examples/jsm/effects/PeppersGhostEffect.js +153 -153
- package/examples/jsm/effects/StereoEffect.js +55 -55
- package/examples/jsm/environments/DebugEnvironment.js +52 -52
- package/examples/jsm/environments/RoomEnvironment.js +148 -148
- package/examples/jsm/exporters/DRACOExporter.js +267 -267
- package/examples/jsm/exporters/EXRExporter.js +579 -579
- package/examples/jsm/exporters/GLTFExporter.js +3322 -3321
- package/examples/jsm/exporters/KTX2Exporter.js +292 -292
- package/examples/jsm/exporters/MMDExporter.js +217 -217
- package/examples/jsm/exporters/OBJExporter.js +284 -284
- package/examples/jsm/exporters/PLYExporter.js +528 -528
- package/examples/jsm/exporters/STLExporter.js +199 -199
- package/examples/jsm/exporters/USDZExporter.js +720 -720
- package/examples/jsm/geometries/BoxLineGeometry.js +69 -69
- package/examples/jsm/geometries/ConvexGeometry.js +53 -53
- package/examples/jsm/geometries/DecalGeometry.js +356 -356
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -174
- package/examples/jsm/geometries/ParametricGeometries.js +254 -254
- package/examples/jsm/geometries/ParametricGeometry.js +139 -139
- package/examples/jsm/geometries/RoundedBoxGeometry.js +155 -155
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -144
- package/examples/jsm/geometries/TeapotGeometry.js +704 -704
- package/examples/jsm/geometries/TextGeometry.js +57 -57
- package/examples/jsm/helpers/LightProbeHelper.js +130 -130
- package/examples/jsm/helpers/OctreeHelper.js +73 -73
- package/examples/jsm/helpers/PositionalAudioHelper.js +109 -109
- package/examples/jsm/helpers/RectAreaLightHelper.js +85 -85
- package/examples/jsm/helpers/TextureHelper.js +237 -237
- package/examples/jsm/helpers/VertexNormalsHelper.js +96 -96
- package/examples/jsm/helpers/VertexTangentsHelper.js +88 -88
- package/examples/jsm/helpers/ViewHelper.js +333 -333
- package/examples/jsm/interactive/HTMLMesh.js +572 -572
- package/examples/jsm/interactive/InteractiveGroup.js +106 -106
- package/examples/jsm/interactive/SelectionBox.js +227 -227
- package/examples/jsm/interactive/SelectionHelper.js +104 -104
- package/examples/jsm/libs/ammo.wasm.js +822 -822
- package/examples/jsm/libs/basis/README.md +46 -46
- package/examples/jsm/libs/basis/basis_transcoder.js +21 -21
- package/examples/jsm/libs/chevrotain.module.min.js +141 -141
- package/examples/jsm/libs/draco/README.md +32 -32
- package/examples/jsm/libs/draco/draco_decoder.js +34 -34
- package/examples/jsm/libs/draco/draco_encoder.js +33 -33
- package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -117
- package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +33 -33
- package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -116
- package/examples/jsm/libs/ecsy.module.js +1792 -1792
- package/examples/jsm/libs/fflate.module.js +2474 -2474
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/lil-gui.module.min.js +8 -8
- package/examples/jsm/libs/lottie_canvas.module.js +14849 -14849
- package/examples/jsm/libs/meshopt_decoder.module.js +178 -178
- package/examples/jsm/libs/mikktspace.module.js +128 -128
- package/examples/jsm/libs/mmdparser.module.js +11530 -11530
- package/examples/jsm/libs/motion-controllers.module.js +397 -397
- package/examples/jsm/libs/opentype.module.js +14506 -14506
- package/examples/jsm/libs/potpack.module.js +124 -124
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +21 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +15 -15
- package/examples/jsm/libs/stats.module.js +167 -167
- package/examples/jsm/libs/surfaceNet.js +200 -200
- package/examples/jsm/libs/tween.module.js +876 -876
- package/examples/jsm/libs/utif.module.js +1664 -1664
- package/examples/jsm/libs/zstddec.module.js +1 -1
- package/examples/jsm/lights/IESSpotLight.js +25 -25
- package/examples/jsm/lights/LightProbeGenerator.js +286 -286
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +79 -79
- package/examples/jsm/lines/Line2.js +19 -19
- package/examples/jsm/lines/LineGeometry.js +79 -79
- package/examples/jsm/lines/LineMaterial.js +619 -619
- package/examples/jsm/lines/LineSegments2.js +361 -361
- package/examples/jsm/lines/LineSegmentsGeometry.js +241 -241
- package/examples/jsm/lines/Wireframe.js +56 -56
- package/examples/jsm/lines/WireframeGeometry2.js +24 -24
- package/examples/jsm/loaders/3DMLoader.js +1764 -1764
- package/examples/jsm/loaders/3MFLoader.js +1478 -1478
- package/examples/jsm/loaders/AMFLoader.js +521 -521
- package/examples/jsm/loaders/BVHLoader.js +437 -437
- package/examples/jsm/loaders/ColladaLoader.js +4116 -4116
- package/examples/jsm/loaders/DDSLoader.js +318 -318
- package/examples/jsm/loaders/DRACOLoader.js +613 -613
- package/examples/jsm/loaders/EXRLoader.js +2309 -2309
- package/examples/jsm/loaders/FBXLoader.js +4314 -4314
- package/examples/jsm/loaders/FontLoader.js +183 -183
- package/examples/jsm/loaders/GCodeLoader.js +261 -261
- package/examples/jsm/loaders/GLTFLoader.js +4666 -4666
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +729 -729
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +115 -115
- package/examples/jsm/loaders/IESLoader.js +337 -337
- package/examples/jsm/loaders/KMZLoader.js +130 -130
- package/examples/jsm/loaders/KTX2Loader.js +932 -932
- package/examples/jsm/loaders/KTXLoader.js +176 -176
- package/examples/jsm/loaders/LDrawLoader.js +2470 -2470
- package/examples/jsm/loaders/LUT3dlLoader.js +183 -183
- package/examples/jsm/loaders/LUTCubeLoader.js +167 -167
- package/examples/jsm/loaders/LUTImageLoader.js +163 -163
- package/examples/jsm/loaders/LWOLoader.js +1052 -1052
- package/examples/jsm/loaders/LogLuvLoader.js +606 -606
- package/examples/jsm/loaders/LottieLoader.js +77 -77
- package/examples/jsm/loaders/MD2Loader.js +399 -399
- package/examples/jsm/loaders/MDDLoader.js +102 -102
- package/examples/jsm/loaders/MMDLoader.js +2276 -2276
- package/examples/jsm/loaders/MTLLoader.js +567 -567
- package/examples/jsm/loaders/MaterialXLoader.js +852 -852
- package/examples/jsm/loaders/NRRDLoader.js +686 -686
- package/examples/jsm/loaders/OBJLoader.js +905 -905
- package/examples/jsm/loaders/PCDLoader.js +467 -467
- package/examples/jsm/loaders/PDBLoader.js +232 -232
- package/examples/jsm/loaders/PLYLoader.js +771 -771
- package/examples/jsm/loaders/PVRLoader.js +251 -251
- package/examples/jsm/loaders/RGBELoader.js +450 -450
- package/examples/jsm/loaders/RGBMLoader.js +1065 -1065
- package/examples/jsm/loaders/STLLoader.js +410 -410
- package/examples/jsm/loaders/SVGLoader.js +3173 -3173
- package/examples/jsm/loaders/TDSLoader.js +1124 -1124
- package/examples/jsm/loaders/TGALoader.js +517 -517
- package/examples/jsm/loaders/TIFFLoader.js +36 -36
- package/examples/jsm/loaders/TTFLoader.js +214 -214
- package/examples/jsm/loaders/TiltLoader.js +520 -520
- package/examples/jsm/loaders/USDZLoader.js +822 -822
- package/examples/jsm/loaders/VOXLoader.js +318 -318
- package/examples/jsm/loaders/VRMLLoader.js +3537 -3537
- package/examples/jsm/loaders/VTKLoader.js +1163 -1163
- package/examples/jsm/loaders/XYZLoader.js +106 -106
- package/examples/jsm/loaders/lwo/IFFParser.js +1214 -1214
- package/examples/jsm/loaders/lwo/LWO2Parser.js +414 -414
- package/examples/jsm/loaders/lwo/LWO3Parser.js +373 -373
- package/examples/jsm/materials/MeshGouraudMaterial.js +426 -426
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -144
- package/examples/jsm/math/Capsule.js +82 -82
- package/examples/jsm/math/ColorConverter.js +36 -36
- package/examples/jsm/math/ConvexHull.js +1271 -1271
- package/examples/jsm/math/ImprovedNoise.js +71 -71
- package/examples/jsm/math/Lut.js +204 -204
- package/examples/jsm/math/MeshSurfaceSampler.js +250 -250
- package/examples/jsm/math/OBB.js +423 -423
- package/examples/jsm/math/Octree.js +540 -540
- package/examples/jsm/math/SimplexNoise.js +444 -444
- package/examples/jsm/misc/ConvexObjectBreaker.js +519 -519
- package/examples/jsm/misc/GPUComputationRenderer.js +446 -446
- package/examples/jsm/misc/Gyroscope.js +66 -66
- package/examples/jsm/misc/MD2Character.js +276 -276
- package/examples/jsm/misc/MD2CharacterComplex.js +576 -576
- package/examples/jsm/misc/MorphAnimMesh.js +75 -75
- package/examples/jsm/misc/MorphBlendMesh.js +322 -322
- package/examples/jsm/misc/ProgressiveLightMap.js +324 -324
- package/examples/jsm/misc/RollerCoaster.js +566 -566
- package/examples/jsm/misc/Timer.js +128 -128
- package/examples/jsm/misc/TubePainter.js +202 -202
- package/examples/jsm/misc/Volume.js +473 -473
- package/examples/jsm/misc/VolumeSlice.js +229 -229
- package/examples/jsm/modifiers/CurveModifier.js +344 -344
- package/examples/jsm/modifiers/EdgeSplitModifier.js +279 -279
- package/examples/jsm/modifiers/SimplifyModifier.js +617 -617
- package/examples/jsm/modifiers/TessellateModifier.js +307 -307
- package/examples/jsm/nodes/Nodes.js +195 -195
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -10
- package/examples/jsm/nodes/accessors/BitangentNode.js +89 -89
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +127 -127
- package/examples/jsm/nodes/accessors/BufferNode.js +30 -30
- package/examples/jsm/nodes/accessors/CameraNode.js +119 -119
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -144
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +61 -61
- package/examples/jsm/nodes/accessors/InstanceNode.js +71 -71
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -21
- package/examples/jsm/nodes/accessors/MaterialNode.js +314 -314
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +41 -41
- package/examples/jsm/nodes/accessors/ModelNode.js +33 -33
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +39 -39
- package/examples/jsm/nodes/accessors/MorphNode.js +245 -245
- package/examples/jsm/nodes/accessors/NormalNode.js +96 -96
- package/examples/jsm/nodes/accessors/Object3DNode.js +150 -150
- package/examples/jsm/nodes/accessors/PointUVNode.js +26 -26
- package/examples/jsm/nodes/accessors/PositionNode.js +104 -104
- package/examples/jsm/nodes/accessors/ReferenceNode.js +160 -160
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +35 -35
- package/examples/jsm/nodes/accessors/SceneNode.js +52 -52
- package/examples/jsm/nodes/accessors/SkinningNode.js +124 -124
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +72 -72
- package/examples/jsm/nodes/accessors/TangentNode.js +109 -109
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -94
- package/examples/jsm/nodes/accessors/TextureNode.js +367 -367
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -35
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +82 -82
- package/examples/jsm/nodes/accessors/UVNode.js +47 -47
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -140
- package/examples/jsm/nodes/accessors/UserDataNode.js +29 -29
- package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -70
- package/examples/jsm/nodes/code/CodeNode.js +84 -84
- package/examples/jsm/nodes/code/ExpressionNode.js +37 -37
- package/examples/jsm/nodes/code/FunctionCallNode.js +96 -96
- package/examples/jsm/nodes/code/FunctionNode.js +138 -138
- package/examples/jsm/nodes/code/ScriptableNode.js +488 -488
- package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -167
- package/examples/jsm/nodes/core/AssignNode.js +128 -128
- package/examples/jsm/nodes/core/AttributeNode.js +108 -108
- package/examples/jsm/nodes/core/BypassNode.js +45 -45
- package/examples/jsm/nodes/core/CacheNode.js +49 -49
- package/examples/jsm/nodes/core/ConstNode.js +32 -32
- package/examples/jsm/nodes/core/ContextNode.js +61 -61
- package/examples/jsm/nodes/core/IndexNode.js +66 -66
- package/examples/jsm/nodes/core/InputNode.js +83 -83
- package/examples/jsm/nodes/core/LightingModel.js +17 -17
- package/examples/jsm/nodes/core/Node.js +493 -493
- package/examples/jsm/nodes/core/NodeAttribute.js +15 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +1250 -1250
- package/examples/jsm/nodes/core/NodeCache.js +26 -26
- package/examples/jsm/nodes/core/NodeCode.js +15 -15
- package/examples/jsm/nodes/core/NodeFrame.js +143 -143
- package/examples/jsm/nodes/core/NodeFunction.js +22 -22
- package/examples/jsm/nodes/core/NodeFunctionInput.js +17 -17
- package/examples/jsm/nodes/core/NodeKeywords.js +80 -80
- package/examples/jsm/nodes/core/NodeParser.js +11 -11
- package/examples/jsm/nodes/core/NodeUniform.js +40 -40
- package/examples/jsm/nodes/core/NodeUtils.js +210 -210
- package/examples/jsm/nodes/core/NodeVar.js +14 -14
- package/examples/jsm/nodes/core/NodeVarying.js +17 -17
- package/examples/jsm/nodes/core/OutputStructNode.js +62 -62
- package/examples/jsm/nodes/core/ParameterNode.js +33 -33
- package/examples/jsm/nodes/core/PropertyNode.js +72 -72
- package/examples/jsm/nodes/core/StackNode.js +89 -89
- package/examples/jsm/nodes/core/StructTypeNode.js +24 -24
- package/examples/jsm/nodes/core/TempNode.js +58 -58
- package/examples/jsm/nodes/core/UniformGroup.js +13 -13
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -36
- package/examples/jsm/nodes/core/UniformNode.js +80 -80
- package/examples/jsm/nodes/core/VarNode.js +60 -60
- package/examples/jsm/nodes/core/VaryingNode.js +65 -65
- package/examples/jsm/nodes/core/constants.js +28 -28
- package/examples/jsm/nodes/display/AfterImageNode.js +148 -148
- package/examples/jsm/nodes/display/AnamorphicNode.js +148 -148
- package/examples/jsm/nodes/display/BlendModeNode.js +128 -128
- package/examples/jsm/nodes/display/BumpMapNode.js +99 -99
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +99 -99
- package/examples/jsm/nodes/display/ColorSpaceNode.js +108 -108
- package/examples/jsm/nodes/display/FrontFacingNode.js +27 -27
- package/examples/jsm/nodes/display/GaussianBlurNode.js +190 -190
- package/examples/jsm/nodes/display/NormalMapNode.js +106 -106
- package/examples/jsm/nodes/display/PassNode.js +183 -183
- package/examples/jsm/nodes/display/PosterizeNode.js +32 -32
- package/examples/jsm/nodes/display/ToneMappingNode.js +184 -184
- package/examples/jsm/nodes/display/ViewportDepthNode.js +97 -97
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +31 -31
- package/examples/jsm/nodes/display/ViewportNode.js +134 -134
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -31
- package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -75
- package/examples/jsm/nodes/fog/FogExp2Node.js +35 -35
- package/examples/jsm/nodes/fog/FogNode.js +38 -38
- package/examples/jsm/nodes/fog/FogRangeNode.js +34 -34
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +40 -40
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +9 -9
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +57 -57
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +30 -30
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +23 -23
- package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -13
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +16 -16
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +21 -21
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +28 -28
- package/examples/jsm/nodes/functions/PhongLightingModel.js +67 -67
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +393 -393
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +13 -13
- package/examples/jsm/nodes/functions/material/getRoughness.js +18 -18
- package/examples/jsm/nodes/geometry/RangeNode.js +104 -104
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +85 -85
- package/examples/jsm/nodes/lighting/AONode.js +27 -27
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -27
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +241 -241
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +40 -40
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +181 -181
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +55 -55
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -39
- package/examples/jsm/nodes/lighting/LightNode.js +57 -57
- package/examples/jsm/nodes/lighting/LightUtils.js +17 -17
- package/examples/jsm/nodes/lighting/LightingContextNode.js +66 -66
- package/examples/jsm/nodes/lighting/LightingNode.js +21 -21
- package/examples/jsm/nodes/lighting/LightsNode.js +188 -188
- package/examples/jsm/nodes/lighting/PointLightNode.js +68 -68
- package/examples/jsm/nodes/lighting/SpotLightNode.js +89 -89
- package/examples/jsm/nodes/loaders/NodeLoader.js +108 -108
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +59 -59
- package/examples/jsm/nodes/loaders/NodeObjectLoader.js +70 -70
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -162
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +436 -436
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +28 -28
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -54
- package/examples/jsm/nodes/materials/Materials.js +16 -16
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +28 -28
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -34
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +40 -40
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -65
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +155 -155
- package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -84
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +80 -80
- package/examples/jsm/nodes/materials/NodeMaterial.js +601 -601
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +39 -39
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +90 -90
- package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -199
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +68 -68
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +130 -130
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -1430
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +29 -29
- package/examples/jsm/nodes/math/CondNode.js +121 -121
- package/examples/jsm/nodes/math/HashNode.js +34 -34
- package/examples/jsm/nodes/math/MathNode.js +391 -391
- package/examples/jsm/nodes/math/MathUtils.js +15 -15
- package/examples/jsm/nodes/math/OperatorNode.js +274 -274
- package/examples/jsm/nodes/math/TriNoise3D.js +71 -71
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +152 -152
- package/examples/jsm/nodes/parsers/GLSLNodeParser.js +14 -14
- package/examples/jsm/nodes/procedural/CheckerNode.js +42 -42
- package/examples/jsm/nodes/shadernode/ShaderNode.js +634 -634
- package/examples/jsm/nodes/utils/ArrayElementNode.js +35 -35
- package/examples/jsm/nodes/utils/ConvertNode.js +65 -65
- package/examples/jsm/nodes/utils/DiscardNode.js +27 -27
- package/examples/jsm/nodes/utils/EquirectUVNode.js +33 -33
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -95
- package/examples/jsm/nodes/utils/JoinNode.js +61 -61
- package/examples/jsm/nodes/utils/LoopNode.js +200 -200
- package/examples/jsm/nodes/utils/MatcapUVNode.js +30 -30
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +46 -46
- package/examples/jsm/nodes/utils/OscNode.js +81 -81
- package/examples/jsm/nodes/utils/PackingNode.js +55 -55
- package/examples/jsm/nodes/utils/ReflectorNode.js +227 -227
- package/examples/jsm/nodes/utils/RemapNode.js +42 -42
- package/examples/jsm/nodes/utils/RotateNode.js +68 -68
- package/examples/jsm/nodes/utils/RotateUVNode.js +35 -35
- package/examples/jsm/nodes/utils/SetNode.js +62 -62
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -37
- package/examples/jsm/nodes/utils/SplitNode.js +112 -112
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +41 -41
- package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -91
- package/examples/jsm/nodes/utils/TimerNode.js +94 -94
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +62 -62
- package/examples/jsm/objects/GroundedSkybox.js +50 -50
- package/examples/jsm/objects/InstancedPoints.js +21 -21
- package/examples/jsm/objects/Lensflare.js +397 -397
- package/examples/jsm/objects/MarchingCubes.js +1176 -1176
- package/examples/jsm/objects/QuadMesh.js +66 -66
- package/examples/jsm/objects/Reflector.js +264 -264
- package/examples/jsm/objects/ReflectorForSSRPass.js +352 -352
- package/examples/jsm/objects/Refractor.js +327 -327
- package/examples/jsm/objects/ShadowMesh.js +80 -80
- package/examples/jsm/objects/Sky.js +219 -219
- package/examples/jsm/objects/Water.js +333 -333
- package/examples/jsm/objects/Water2.js +361 -361
- package/examples/jsm/offscreen/jank.js +45 -45
- package/examples/jsm/offscreen/offscreen.js +8 -8
- package/examples/jsm/offscreen/scene.js +86 -86
- package/examples/jsm/physics/AmmoPhysics.js +306 -306
- package/examples/jsm/physics/RapierPhysics.js +220 -220
- package/examples/jsm/postprocessing/AfterimagePass.js +104 -104
- package/examples/jsm/postprocessing/BloomPass.js +172 -172
- package/examples/jsm/postprocessing/BokehPass.js +141 -141
- package/examples/jsm/postprocessing/ClearPass.js +46 -46
- package/examples/jsm/postprocessing/CubeTexturePass.js +85 -85
- package/examples/jsm/postprocessing/DotScreenPass.js +65 -65
- package/examples/jsm/postprocessing/EffectComposer.js +231 -231
- package/examples/jsm/postprocessing/FilmPass.js +64 -64
- package/examples/jsm/postprocessing/GTAOPass.js +582 -582
- package/examples/jsm/postprocessing/GlitchPass.js +128 -128
- package/examples/jsm/postprocessing/HalftonePass.js +79 -79
- package/examples/jsm/postprocessing/LUTPass.js +174 -174
- package/examples/jsm/postprocessing/MaskPass.js +104 -104
- package/examples/jsm/postprocessing/OutlinePass.js +654 -654
- package/examples/jsm/postprocessing/OutputPass.js +97 -97
- package/examples/jsm/postprocessing/Pass.js +95 -95
- package/examples/jsm/postprocessing/RenderPass.js +99 -99
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +235 -235
- package/examples/jsm/postprocessing/SAOPass.js +335 -335
- package/examples/jsm/postprocessing/SMAAPass.js +199 -199
- package/examples/jsm/postprocessing/SSAARenderPass.js +228 -228
- package/examples/jsm/postprocessing/SSAOPass.js +420 -420
- package/examples/jsm/postprocessing/SSRPass.js +641 -641
- package/examples/jsm/postprocessing/SavePass.js +79 -79
- package/examples/jsm/postprocessing/ShaderPass.js +77 -77
- package/examples/jsm/postprocessing/TAARenderPass.js +188 -188
- package/examples/jsm/postprocessing/TexturePass.js +67 -67
- package/examples/jsm/postprocessing/UnrealBloomPass.js +415 -415
- package/examples/jsm/renderers/CSS2DRenderer.js +215 -215
- package/examples/jsm/renderers/CSS3DRenderer.js +329 -329
- package/examples/jsm/renderers/Projector.js +918 -918
- package/examples/jsm/renderers/SVGRenderer.js +556 -556
- package/examples/jsm/renderers/common/Animation.js +47 -47
- package/examples/jsm/renderers/common/Attributes.js +75 -75
- package/examples/jsm/renderers/common/Backend.js +195 -195
- package/examples/jsm/renderers/common/Background.js +134 -134
- package/examples/jsm/renderers/common/Binding.js +25 -25
- package/examples/jsm/renderers/common/Bindings.js +173 -173
- package/examples/jsm/renderers/common/Buffer.js +38 -38
- package/examples/jsm/renderers/common/BufferUtils.js +33 -33
- package/examples/jsm/renderers/common/ChainMap.js +89 -89
- package/examples/jsm/renderers/common/ClippingContext.js +165 -165
- package/examples/jsm/renderers/common/Color4.js +37 -37
- package/examples/jsm/renderers/common/ComputePipeline.js +17 -17
- package/examples/jsm/renderers/common/Constants.js +14 -14
- package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -65
- package/examples/jsm/renderers/common/DataMap.js +54 -54
- package/examples/jsm/renderers/common/Geometries.js +215 -215
- package/examples/jsm/renderers/common/Info.js +107 -107
- package/examples/jsm/renderers/common/Pipeline.js +13 -13
- package/examples/jsm/renderers/common/Pipelines.js +322 -322
- package/examples/jsm/renderers/common/PostProcessing.js +25 -25
- package/examples/jsm/renderers/common/ProgrammableStage.js +20 -20
- package/examples/jsm/renderers/common/RenderContext.js +43 -43
- package/examples/jsm/renderers/common/RenderContexts.js +63 -63
- package/examples/jsm/renderers/common/RenderList.js +186 -186
- package/examples/jsm/renderers/common/RenderLists.js +38 -38
- package/examples/jsm/renderers/common/RenderObject.js +221 -221
- package/examples/jsm/renderers/common/RenderObjects.js +93 -93
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -16
- package/examples/jsm/renderers/common/Renderer.js +1304 -1304
- package/examples/jsm/renderers/common/SampledTexture.js +83 -83
- package/examples/jsm/renderers/common/Sampler.js +18 -18
- package/examples/jsm/renderers/common/StorageBuffer.js +17 -17
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -17
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -17
- package/examples/jsm/renderers/common/StorageTexture.js +20 -20
- package/examples/jsm/renderers/common/Textures.js +344 -344
- package/examples/jsm/renderers/common/Uniform.js +140 -140
- package/examples/jsm/renderers/common/UniformBuffer.js +15 -15
- package/examples/jsm/renderers/common/UniformsGroup.js +301 -301
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +44 -44
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +49 -49
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +15 -15
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -23
- package/examples/jsm/renderers/common/nodes/NodeUniform.js +135 -135
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -23
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -44
- package/examples/jsm/renderers/common/nodes/Nodes.js +496 -496
- package/examples/jsm/renderers/webgl/WebGLBackend.js +1382 -1382
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +804 -804
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +258 -258
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -36
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -11
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +36 -36
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +738 -738
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +694 -694
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +285 -285
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +320 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +26 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +794 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +51 -51
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +1322 -1322
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +53 -53
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +1078 -1078
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +104 -104
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeParser.js +14 -14
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +293 -293
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +244 -244
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +324 -324
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +591 -591
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -285
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +1040 -1040
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +93 -93
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +89 -89
- package/examples/jsm/shaders/AfterimageShader.js +58 -58
- package/examples/jsm/shaders/BasicShader.js +29 -29
- package/examples/jsm/shaders/BleachBypassShader.js +62 -62
- package/examples/jsm/shaders/BlendShader.js +49 -49
- package/examples/jsm/shaders/BokehShader.js +145 -145
- package/examples/jsm/shaders/BokehShader2.js +397 -397
- package/examples/jsm/shaders/BrightnessContrastShader.js +56 -56
- package/examples/jsm/shaders/ColorCorrectionShader.js +52 -52
- package/examples/jsm/shaders/ColorifyShader.js +51 -51
- package/examples/jsm/shaders/ConvolutionShader.js +103 -103
- package/examples/jsm/shaders/CopyShader.js +45 -45
- package/examples/jsm/shaders/DOFMipMapShader.js +56 -56
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +171 -171
- package/examples/jsm/shaders/DigitalGlitch.js +101 -101
- package/examples/jsm/shaders/DotScreenShader.js +70 -70
- package/examples/jsm/shaders/ExposureShader.js +44 -44
- package/examples/jsm/shaders/FXAAShader.js +288 -288
- package/examples/jsm/shaders/FilmShader.js +59 -59
- package/examples/jsm/shaders/FocusShader.js +89 -89
- package/examples/jsm/shaders/FreiChenShader.js +96 -96
- package/examples/jsm/shaders/GTAOShader.js +424 -424
- package/examples/jsm/shaders/GammaCorrectionShader.js +43 -43
- package/examples/jsm/shaders/GodRaysShader.js +321 -321
- package/examples/jsm/shaders/HalftoneShader.js +312 -312
- package/examples/jsm/shaders/HorizontalBlurShader.js +59 -59
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +63 -63
- package/examples/jsm/shaders/HueSaturationShader.js +67 -67
- package/examples/jsm/shaders/KaleidoShader.js +58 -58
- package/examples/jsm/shaders/LuminosityHighPassShader.js +66 -66
- package/examples/jsm/shaders/LuminosityShader.js +48 -48
- package/examples/jsm/shaders/MMDToonShader.js +134 -134
- package/examples/jsm/shaders/MirrorShader.js +56 -56
- package/examples/jsm/shaders/NormalMapShader.js +55 -55
- package/examples/jsm/shaders/OutputShader.js +85 -85
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -226
- package/examples/jsm/shaders/RGBShiftShader.js +54 -54
- package/examples/jsm/shaders/SAOShader.js +179 -179
- package/examples/jsm/shaders/SMAAShader.js +466 -466
- package/examples/jsm/shaders/SSAOShader.js +300 -300
- package/examples/jsm/shaders/SSRShader.js +370 -370
- package/examples/jsm/shaders/SepiaShader.js +52 -52
- package/examples/jsm/shaders/SobelOperatorShader.js +92 -92
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +90 -90
- package/examples/jsm/shaders/TechnicolorShader.js +45 -45
- package/examples/jsm/shaders/ToonShader.js +326 -326
- package/examples/jsm/shaders/TriangleBlurShader.js +74 -74
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +47 -47
- package/examples/jsm/shaders/VelocityShader.js +130 -130
- package/examples/jsm/shaders/VerticalBlurShader.js +59 -59
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +63 -63
- package/examples/jsm/shaders/VignetteShader.js +51 -51
- package/examples/jsm/shaders/VolumeShader.js +289 -289
- package/examples/jsm/shaders/WaterRefractionShader.js +95 -95
- package/examples/jsm/textures/FlakesTexture.js +40 -40
- package/examples/jsm/transpiler/AST.js +270 -270
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -941
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -49
- package/examples/jsm/transpiler/TSLEncoder.js +715 -715
- package/examples/jsm/transpiler/Transpiler.js +18 -18
- package/examples/jsm/utils/BufferGeometryUtils.js +1371 -1371
- package/examples/jsm/utils/CameraUtils.js +73 -73
- package/examples/jsm/utils/GPUStatsPanel.js +128 -128
- package/examples/jsm/utils/GeometryCompressionUtils.js +639 -639
- package/examples/jsm/utils/GeometryUtils.js +221 -221
- package/examples/jsm/utils/LDrawUtils.js +202 -202
- package/examples/jsm/utils/PackedPhongMaterial.js +178 -178
- package/examples/jsm/utils/SceneUtils.js +254 -254
- package/examples/jsm/utils/ShadowMapViewer.js +210 -210
- package/examples/jsm/utils/SkeletonUtils.js +424 -424
- package/examples/jsm/utils/SortUtils.js +160 -160
- package/examples/jsm/utils/TextureUtils.js +98 -98
- package/examples/jsm/utils/UVsDebug.js +165 -165
- package/examples/jsm/utils/WorkerPool.js +102 -102
- package/examples/jsm/webxr/ARButton.js +232 -232
- package/examples/jsm/webxr/OculusHandModel.js +109 -109
- package/examples/jsm/webxr/OculusHandPointerModel.js +416 -416
- package/examples/jsm/webxr/Text2D.js +38 -38
- package/examples/jsm/webxr/VRButton.js +233 -233
- package/examples/jsm/webxr/XRButton.js +223 -223
- package/examples/jsm/webxr/XRControllerModelFactory.js +323 -323
- package/examples/jsm/webxr/XREstimatedLight.js +223 -223
- package/examples/jsm/webxr/XRHandMeshModel.js +116 -116
- package/examples/jsm/webxr/XRHandModelFactory.js +105 -105
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +105 -105
- package/examples/jsm/webxr/XRPlanes.js +100 -100
- package/package.json +129 -129
- package/src/Three.Legacy.js +21 -21
- package/src/Three.js +183 -183
- package/src/animation/AnimationAction.js +700 -700
- package/src/animation/AnimationClip.js +473 -473
- package/src/animation/AnimationMixer.js +770 -770
- package/src/animation/AnimationObjectGroup.js +387 -387
- package/src/animation/AnimationUtils.js +356 -356
- package/src/animation/KeyframeTrack.js +462 -462
- package/src/animation/PropertyBinding.js +719 -719
- package/src/animation/PropertyMixer.js +318 -318
- package/src/animation/tracks/BooleanKeyframeTrack.js +19 -19
- package/src/animation/tracks/ColorKeyframeTrack.js +15 -15
- package/src/animation/tracks/NumberKeyframeTrack.js +12 -12
- package/src/animation/tracks/QuaternionKeyframeTrack.js +23 -23
- package/src/animation/tracks/StringKeyframeTrack.js +15 -15
- package/src/animation/tracks/VectorKeyframeTrack.js +12 -12
- package/src/audio/Audio.js +400 -400
- package/src/audio/AudioAnalyser.js +40 -40
- package/src/audio/AudioContext.js +25 -25
- package/src/audio/AudioListener.js +140 -140
- package/src/audio/PositionalAudio.js +146 -146
- package/src/cameras/ArrayCamera.js +17 -17
- package/src/cameras/Camera.js +69 -69
- package/src/cameras/CubeCamera.js +173 -173
- package/src/cameras/OrthographicCamera.js +136 -136
- package/src/cameras/PerspectiveCamera.js +268 -268
- package/src/cameras/StereoCamera.js +100 -100
- package/src/constants.js +217 -217
- package/src/core/BufferAttribute.js +639 -639
- package/src/core/BufferGeometry.js +1073 -1073
- package/src/core/Clock.js +74 -74
- package/src/core/EventDispatcher.js +87 -87
- package/src/core/GLBufferAttribute.js +60 -60
- package/src/core/InstancedBufferAttribute.js +39 -39
- package/src/core/InstancedBufferGeometry.js +40 -40
- package/src/core/InstancedInterleavedBuffer.js +48 -48
- package/src/core/InterleavedBuffer.js +166 -166
- package/src/core/InterleavedBufferAttribute.js +351 -351
- package/src/core/Layers.js +60 -60
- package/src/core/Object3D.js +1019 -1019
- package/src/core/Raycaster.js +124 -124
- package/src/core/RenderTarget.js +154 -154
- package/src/core/Uniform.js +17 -17
- package/src/core/UniformsGroup.js +98 -98
- package/src/extras/DataUtils.js +176 -176
- package/src/extras/Earcut.js +789 -789
- package/src/extras/ImageUtils.js +129 -129
- package/src/extras/PMREMGenerator.js +912 -912
- package/src/extras/ShapeUtils.js +92 -92
- package/src/extras/core/Curve.js +416 -416
- package/src/extras/core/CurvePath.js +255 -255
- package/src/extras/core/Interpolations.js +79 -79
- package/src/extras/core/Path.js +196 -196
- package/src/extras/core/Shape.js +102 -102
- package/src/extras/core/ShapePath.js +291 -291
- package/src/extras/curves/ArcCurve.js +17 -17
- package/src/extras/curves/CatmullRomCurve3.js +255 -255
- package/src/extras/curves/CubicBezierCurve.js +78 -78
- package/src/extras/curves/CubicBezierCurve3.js +79 -79
- package/src/extras/curves/Curves.js +10 -10
- package/src/extras/curves/EllipseCurve.js +156 -156
- package/src/extras/curves/LineCurve.js +92 -92
- package/src/extras/curves/LineCurve3.js +92 -92
- package/src/extras/curves/QuadraticBezierCurve.js +74 -74
- package/src/extras/curves/QuadraticBezierCurve3.js +75 -75
- package/src/extras/curves/SplineCurve.js +97 -97
- package/src/geometries/BoxGeometry.js +180 -180
- package/src/geometries/CapsuleGeometry.js +33 -33
- package/src/geometries/CircleGeometry.js +101 -101
- package/src/geometries/ConeGeometry.js +31 -31
- package/src/geometries/CylinderGeometry.js +286 -286
- package/src/geometries/DodecahedronGeometry.js +66 -66
- package/src/geometries/EdgesGeometry.js +152 -152
- package/src/geometries/ExtrudeGeometry.js +814 -814
- package/src/geometries/Geometries.js +21 -21
- package/src/geometries/IcosahedronGeometry.js +42 -42
- package/src/geometries/LatheGeometry.js +189 -189
- package/src/geometries/OctahedronGeometry.js +37 -37
- package/src/geometries/PlaneGeometry.js +98 -98
- package/src/geometries/PolyhedronGeometry.js +319 -319
- package/src/geometries/RingGeometry.js +128 -128
- package/src/geometries/ShapeGeometry.js +195 -195
- package/src/geometries/SphereGeometry.js +137 -137
- package/src/geometries/TetrahedronGeometry.js +34 -34
- package/src/geometries/TorusGeometry.js +120 -120
- package/src/geometries/TorusKnotGeometry.js +167 -167
- package/src/geometries/TubeGeometry.js +203 -203
- package/src/geometries/WireframeGeometry.js +147 -147
- package/src/helpers/ArrowHelper.js +114 -114
- package/src/helpers/AxesHelper.js +68 -68
- package/src/helpers/Box3Helper.js +55 -55
- package/src/helpers/BoxHelper.js +113 -113
- package/src/helpers/CameraHelper.js +269 -269
- package/src/helpers/DirectionalLightHelper.js +93 -93
- package/src/helpers/GridHelper.js +56 -56
- package/src/helpers/HemisphereLightHelper.js +88 -88
- package/src/helpers/PlaneHelper.js +63 -63
- package/src/helpers/PointLightHelper.js +92 -92
- package/src/helpers/PolarGridHelper.js +96 -96
- package/src/helpers/SkeletonHelper.js +128 -128
- package/src/helpers/SpotLightHelper.js +111 -111
- package/src/lights/AmbientLight.js +17 -17
- package/src/lights/DirectionalLight.js +43 -43
- package/src/lights/DirectionalLightShadow.js +16 -16
- package/src/lights/HemisphereLight.js +34 -34
- package/src/lights/Light.js +58 -58
- package/src/lights/LightProbe.js +47 -47
- package/src/lights/LightShadow.js +147 -147
- package/src/lights/PointLight.js +57 -57
- package/src/lights/PointLightShadow.js +96 -96
- package/src/lights/RectAreaLight.js +56 -56
- package/src/lights/SpotLight.js +71 -71
- package/src/lights/SpotLightShadow.js +50 -50
- package/src/loaders/AnimationLoader.js +66 -66
- package/src/loaders/AudioLoader.js +66 -66
- package/src/loaders/BufferGeometryLoader.js +217 -217
- package/src/loaders/Cache.js +42 -42
- package/src/loaders/CompressedTextureLoader.js +134 -134
- package/src/loaders/CubeTextureLoader.js +58 -58
- package/src/loaders/DataTextureLoader.js +131 -131
- package/src/loaders/FileLoader.js +284 -284
- package/src/loaders/ImageBitmapLoader.js +123 -123
- package/src/loaders/ImageLoader.js +91 -91
- package/src/loaders/Loader.js +72 -72
- package/src/loaders/LoaderUtils.js +75 -75
- package/src/loaders/LoadingManager.js +142 -142
- package/src/loaders/MaterialLoader.js +373 -373
- package/src/loaders/ObjectLoader.js +1149 -1149
- package/src/loaders/TextureLoader.js +41 -41
- package/src/materials/LineBasicMaterial.js +49 -49
- package/src/materials/LineDashedMaterial.js +35 -35
- package/src/materials/Material.js +523 -523
- package/src/materials/Materials.js +39 -39
- package/src/materials/MeshBasicMaterial.js +84 -84
- package/src/materials/MeshDepthMaterial.js +54 -54
- package/src/materials/MeshDistanceMaterial.js +43 -43
- package/src/materials/MeshLambertMaterial.js +119 -119
- package/src/materials/MeshMatcapMaterial.js +81 -81
- package/src/materials/MeshNormalMaterial.js +61 -61
- package/src/materials/MeshPhongMaterial.js +123 -123
- package/src/materials/MeshPhysicalMaterial.js +224 -224
- package/src/materials/MeshStandardMaterial.js +127 -127
- package/src/materials/MeshToonMaterial.js +102 -102
- package/src/materials/PointsMaterial.js +50 -50
- package/src/materials/RawShaderMaterial.js +17 -17
- package/src/materials/ShaderMaterial.js +189 -189
- package/src/materials/ShadowMaterial.js +37 -37
- package/src/materials/SpriteMaterial.js +54 -54
- package/src/math/Box2.js +204 -204
- package/src/math/Box3.js +534 -534
- package/src/math/Color.js +623 -623
- package/src/math/ColorManagement.js +139 -139
- package/src/math/Cylindrical.js +61 -61
- package/src/math/Euler.js +315 -315
- package/src/math/Frustum.js +186 -186
- package/src/math/Interpolant.js +241 -241
- package/src/math/Line3.js +115 -115
- package/src/math/MathUtils.js +363 -363
- package/src/math/Matrix3.js +388 -388
- package/src/math/Matrix4.js +915 -915
- package/src/math/Plane.js +205 -205
- package/src/math/Quaternion.js +686 -686
- package/src/math/Ray.js +493 -493
- package/src/math/Sphere.js +245 -245
- package/src/math/Spherical.js +86 -86
- package/src/math/SphericalHarmonics3.js +243 -243
- package/src/math/Triangle.js +311 -311
- package/src/math/Vector2.js +480 -480
- package/src/math/Vector3.js +724 -724
- package/src/math/Vector4.js +644 -644
- package/src/math/interpolants/CubicInterpolant.js +150 -150
- package/src/math/interpolants/DiscreteInterpolant.js +26 -26
- package/src/math/interpolants/LinearInterpolant.js +38 -38
- package/src/math/interpolants/QuaternionLinearInterpolant.js +39 -39
- package/src/objects/BatchedMesh.js +1020 -1020
- package/src/objects/Bone.js +17 -17
- package/src/objects/Group.js +17 -17
- package/src/objects/InstancedMesh.js +267 -267
- package/src/objects/LOD.js +214 -214
- package/src/objects/Line.js +222 -222
- package/src/objects/LineLoop.js +17 -17
- package/src/objects/LineSegments.js +55 -55
- package/src/objects/Mesh.js +428 -428
- package/src/objects/Points.js +166 -166
- package/src/objects/Skeleton.js +277 -277
- package/src/objects/SkinnedMesh.js +257 -257
- package/src/objects/Sprite.js +181 -181
- package/src/renderers/WebGL1Renderer.js +7 -7
- package/src/renderers/WebGL3DRenderTarget.js +22 -22
- package/src/renderers/WebGLArrayRenderTarget.js +22 -22
- package/src/renderers/WebGLCubeRenderTarget.js +146 -146
- package/src/renderers/WebGLRenderTarget.js +15 -15
- package/src/renderers/WebGLRenderer.js +2615 -2615
- package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +26 -26
- package/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -19
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +33 -33
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +43 -43
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +10 -10
- package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +78 -78
- package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +23 -23
- package/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +44 -44
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +147 -147
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +186 -186
- package/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +63 -63
- package/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +20 -20
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +15 -15
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +62 -62
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +22 -22
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +69 -69
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +37 -37
- package/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js +17 -17
- package/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js +19 -19
- package/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +120 -120
- package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +10 -10
- package/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +202 -202
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +13 -13
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +40 -40
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -28
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +228 -228
- package/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +32 -32
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +151 -151
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +562 -562
- package/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +26 -26
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +9 -9
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +22 -22
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +27 -27
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +47 -47
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +36 -36
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +76 -76
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +33 -33
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +43 -43
- package/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +19 -19
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +314 -314
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +68 -68
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +66 -66
- package/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js +10 -10
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +25 -25
- package/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js +15 -15
- package/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js +20 -20
- package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +14 -14
- package/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +192 -192
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +36 -36
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +201 -201
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +119 -119
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +145 -145
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +122 -122
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +21 -21
- package/src/renderers/shaders/ShaderChunk.js +272 -272
- package/src/renderers/shaders/ShaderLib/background.glsl.js +40 -40
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +63 -63
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +36 -36
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +97 -97
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +78 -78
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +35 -35
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +76 -76
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +116 -116
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +125 -125
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +112 -112
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +87 -87
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +127 -127
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +225 -225
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +119 -119
- package/src/renderers/shaders/ShaderLib/points.glsl.js +87 -87
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +58 -58
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +81 -81
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +53 -53
- package/src/renderers/shaders/ShaderLib.js +360 -360
- package/src/renderers/shaders/UniformsLib.js +231 -231
- package/src/renderers/shaders/UniformsUtils.js +104 -104
- package/src/renderers/webgl/WebGLAnimation.js +53 -53
- package/src/renderers/webgl/WebGLAttributes.js +229 -229
- package/src/renderers/webgl/WebGLBackground.js +257 -257
- package/src/renderers/webgl/WebGLBindingStates.js +631 -631
- package/src/renderers/webgl/WebGLBufferRenderer.js +92 -92
- package/src/renderers/webgl/WebGLCapabilities.js +120 -120
- package/src/renderers/webgl/WebGLClipping.js +171 -171
- package/src/renderers/webgl/WebGLCubeMaps.js +99 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +132 -132
- package/src/renderers/webgl/WebGLExtensions.js +97 -97
- package/src/renderers/webgl/WebGLGeometries.js +211 -211
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +102 -102
- package/src/renderers/webgl/WebGLInfo.js +71 -71
- package/src/renderers/webgl/WebGLLights.js +590 -590
- package/src/renderers/webgl/WebGLMaterials.js +590 -590
- package/src/renderers/webgl/WebGLMorphtargets.js +307 -307
- package/src/renderers/webgl/WebGLObjects.js +92 -92
- package/src/renderers/webgl/WebGLProgram.js +1120 -1120
- package/src/renderers/webgl/WebGLPrograms.js +664 -664
- package/src/renderers/webgl/WebGLProperties.js +48 -48
- package/src/renderers/webgl/WebGLRenderLists.js +238 -238
- package/src/renderers/webgl/WebGLRenderStates.js +107 -107
- package/src/renderers/webgl/WebGLShader.js +12 -12
- package/src/renderers/webgl/WebGLShaderCache.js +124 -124
- package/src/renderers/webgl/WebGLShadowMap.js +424 -424
- package/src/renderers/webgl/WebGLState.js +1318 -1318
- package/src/renderers/webgl/WebGLTextures.js +2213 -2213
- package/src/renderers/webgl/WebGLUniforms.js +1156 -1156
- package/src/renderers/webgl/WebGLUniformsGroups.js +392 -392
- package/src/renderers/webgl/WebGLUtils.js +283 -283
- package/src/renderers/webxr/WebXRController.js +343 -343
- package/src/renderers/webxr/WebXRDepthSensing.js +105 -105
- package/src/renderers/webxr/WebXRManager.js +824 -824
- package/src/scenes/Fog.js +38 -38
- package/src/scenes/FogExp2.js +35 -35
- package/src/scenes/Scene.js +71 -71
- package/src/textures/CanvasTexture.js +17 -17
- package/src/textures/CompressedArrayTexture.js +18 -18
- package/src/textures/CompressedCubeTexture.js +19 -19
- package/src/textures/CompressedTexture.js +28 -28
- package/src/textures/CubeTexture.js +33 -33
- package/src/textures/Data3DTexture.js +35 -35
- package/src/textures/DataArrayTexture.js +27 -27
- package/src/textures/DataTexture.js +22 -22
- package/src/textures/DepthTexture.js +58 -58
- package/src/textures/FramebufferTexture.js +23 -23
- package/src/textures/Source.js +128 -128
- package/src/textures/Texture.js +310 -310
- package/src/textures/VideoTexture.js +55 -55
- package/src/utils.js +91 -91
|
@@ -1,1120 +1,1120 @@
|
|
|
1
|
-
import { WebGLUniforms } from './WebGLUniforms.js';
|
|
2
|
-
import { WebGLShader } from './WebGLShader.js';
|
|
3
|
-
import { ShaderChunk } from '../shaders/ShaderChunk.js';
|
|
4
|
-
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
5
|
-
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
|
-
|
|
7
|
-
// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
|
|
8
|
-
const COMPLETION_STATUS_KHR = 0x91B1;
|
|
9
|
-
|
|
10
|
-
let programIdCount = 0;
|
|
11
|
-
|
|
12
|
-
function handleSource( string, errorLine ) {
|
|
13
|
-
|
|
14
|
-
const lines = string.split( '\n' );
|
|
15
|
-
const lines2 = [];
|
|
16
|
-
|
|
17
|
-
const from = Math.max( errorLine - 6, 0 );
|
|
18
|
-
const to = Math.min( errorLine + 6, lines.length );
|
|
19
|
-
|
|
20
|
-
for ( let i = from; i < to; i ++ ) {
|
|
21
|
-
|
|
22
|
-
const line = i + 1;
|
|
23
|
-
lines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return lines2.join( '\n' );
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function getEncodingComponents( colorSpace ) {
|
|
32
|
-
|
|
33
|
-
const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
|
|
34
|
-
const encodingPrimaries = ColorManagement.getPrimaries( colorSpace );
|
|
35
|
-
|
|
36
|
-
let gamutMapping;
|
|
37
|
-
|
|
38
|
-
if ( workingPrimaries === encodingPrimaries ) {
|
|
39
|
-
|
|
40
|
-
gamutMapping = '';
|
|
41
|
-
|
|
42
|
-
} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {
|
|
43
|
-
|
|
44
|
-
gamutMapping = 'LinearDisplayP3ToLinearSRGB';
|
|
45
|
-
|
|
46
|
-
} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {
|
|
47
|
-
|
|
48
|
-
gamutMapping = 'LinearSRGBToLinearDisplayP3';
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
switch ( colorSpace ) {
|
|
53
|
-
|
|
54
|
-
case LinearSRGBColorSpace:
|
|
55
|
-
case LinearDisplayP3ColorSpace:
|
|
56
|
-
return [ gamutMapping, 'LinearTransferOETF' ];
|
|
57
|
-
|
|
58
|
-
case SRGBColorSpace:
|
|
59
|
-
case DisplayP3ColorSpace:
|
|
60
|
-
return [ gamutMapping, 'sRGBTransferOETF' ];
|
|
61
|
-
|
|
62
|
-
default:
|
|
63
|
-
console.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );
|
|
64
|
-
return [ gamutMapping, 'LinearTransferOETF' ];
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function getShaderErrors( gl, shader, type ) {
|
|
71
|
-
|
|
72
|
-
const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
|
|
73
|
-
const errors = gl.getShaderInfoLog( shader ).trim();
|
|
74
|
-
|
|
75
|
-
if ( status && errors === '' ) return '';
|
|
76
|
-
|
|
77
|
-
const errorMatches = /ERROR: 0:(\d+)/.exec( errors );
|
|
78
|
-
if ( errorMatches ) {
|
|
79
|
-
|
|
80
|
-
// --enable-privileged-webgl-extension
|
|
81
|
-
// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );
|
|
82
|
-
|
|
83
|
-
const errorLine = parseInt( errorMatches[ 1 ] );
|
|
84
|
-
return type.toUpperCase() + '\n\n' + errors + '\n\n' + handleSource( gl.getShaderSource( shader ), errorLine );
|
|
85
|
-
|
|
86
|
-
} else {
|
|
87
|
-
|
|
88
|
-
return errors;
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function getTexelEncodingFunction( functionName, colorSpace ) {
|
|
95
|
-
|
|
96
|
-
const components = getEncodingComponents( colorSpace );
|
|
97
|
-
return `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function getToneMappingFunction( functionName, toneMapping ) {
|
|
102
|
-
|
|
103
|
-
let toneMappingName;
|
|
104
|
-
|
|
105
|
-
switch ( toneMapping ) {
|
|
106
|
-
|
|
107
|
-
case LinearToneMapping:
|
|
108
|
-
toneMappingName = 'Linear';
|
|
109
|
-
break;
|
|
110
|
-
|
|
111
|
-
case ReinhardToneMapping:
|
|
112
|
-
toneMappingName = 'Reinhard';
|
|
113
|
-
break;
|
|
114
|
-
|
|
115
|
-
case CineonToneMapping:
|
|
116
|
-
toneMappingName = 'OptimizedCineon';
|
|
117
|
-
break;
|
|
118
|
-
|
|
119
|
-
case ACESFilmicToneMapping:
|
|
120
|
-
toneMappingName = 'ACESFilmic';
|
|
121
|
-
break;
|
|
122
|
-
|
|
123
|
-
case AgXToneMapping:
|
|
124
|
-
toneMappingName = 'AgX';
|
|
125
|
-
break;
|
|
126
|
-
|
|
127
|
-
case NeutralToneMapping:
|
|
128
|
-
toneMappingName = 'Neutral';
|
|
129
|
-
break;
|
|
130
|
-
|
|
131
|
-
case CustomToneMapping:
|
|
132
|
-
toneMappingName = 'Custom';
|
|
133
|
-
break;
|
|
134
|
-
|
|
135
|
-
default:
|
|
136
|
-
console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );
|
|
137
|
-
toneMappingName = 'Linear';
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function generateExtensions( parameters ) {
|
|
146
|
-
|
|
147
|
-
const chunks = [
|
|
148
|
-
( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.alphaToCoverage || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
149
|
-
( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
150
|
-
( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
|
|
151
|
-
( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
|
|
152
|
-
];
|
|
153
|
-
|
|
154
|
-
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function generateVertexExtensions( parameters ) {
|
|
159
|
-
|
|
160
|
-
const chunks = [
|
|
161
|
-
parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',
|
|
162
|
-
parameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',
|
|
163
|
-
];
|
|
164
|
-
|
|
165
|
-
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function generateDefines( defines ) {
|
|
170
|
-
|
|
171
|
-
const chunks = [];
|
|
172
|
-
|
|
173
|
-
for ( const name in defines ) {
|
|
174
|
-
|
|
175
|
-
const value = defines[ name ];
|
|
176
|
-
|
|
177
|
-
if ( value === false ) continue;
|
|
178
|
-
|
|
179
|
-
chunks.push( '#define ' + name + ' ' + value );
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
return chunks.join( '\n' );
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function fetchAttributeLocations( gl, program ) {
|
|
188
|
-
|
|
189
|
-
const attributes = {};
|
|
190
|
-
|
|
191
|
-
const n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );
|
|
192
|
-
|
|
193
|
-
for ( let i = 0; i < n; i ++ ) {
|
|
194
|
-
|
|
195
|
-
const info = gl.getActiveAttrib( program, i );
|
|
196
|
-
const name = info.name;
|
|
197
|
-
|
|
198
|
-
let locationSize = 1;
|
|
199
|
-
if ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;
|
|
200
|
-
if ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;
|
|
201
|
-
if ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;
|
|
202
|
-
|
|
203
|
-
// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );
|
|
204
|
-
|
|
205
|
-
attributes[ name ] = {
|
|
206
|
-
type: info.type,
|
|
207
|
-
location: gl.getAttribLocation( program, name ),
|
|
208
|
-
locationSize: locationSize
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return attributes;
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function filterEmptyLine( string ) {
|
|
218
|
-
|
|
219
|
-
return string !== '';
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function replaceLightNums( string, parameters ) {
|
|
224
|
-
|
|
225
|
-
const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;
|
|
226
|
-
|
|
227
|
-
return string
|
|
228
|
-
.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )
|
|
229
|
-
.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )
|
|
230
|
-
.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )
|
|
231
|
-
.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )
|
|
232
|
-
.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )
|
|
233
|
-
.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )
|
|
234
|
-
.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )
|
|
235
|
-
.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )
|
|
236
|
-
.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )
|
|
237
|
-
.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )
|
|
238
|
-
.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function replaceClippingPlaneNums( string, parameters ) {
|
|
243
|
-
|
|
244
|
-
return string
|
|
245
|
-
.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )
|
|
246
|
-
.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Resolve Includes
|
|
251
|
-
|
|
252
|
-
const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm;
|
|
253
|
-
|
|
254
|
-
function resolveIncludes( string ) {
|
|
255
|
-
|
|
256
|
-
return string.replace( includePattern, includeReplacer );
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
const shaderChunkMap = new Map( [
|
|
261
|
-
[ 'encodings_fragment', 'colorspace_fragment' ], // @deprecated, r154
|
|
262
|
-
[ 'encodings_pars_fragment', 'colorspace_pars_fragment' ], // @deprecated, r154
|
|
263
|
-
[ 'output_fragment', 'opaque_fragment' ], // @deprecated, r154
|
|
264
|
-
] );
|
|
265
|
-
|
|
266
|
-
function includeReplacer( match, include ) {
|
|
267
|
-
|
|
268
|
-
let string = ShaderChunk[ include ];
|
|
269
|
-
|
|
270
|
-
if ( string === undefined ) {
|
|
271
|
-
|
|
272
|
-
const newInclude = shaderChunkMap.get( include );
|
|
273
|
-
|
|
274
|
-
if ( newInclude !== undefined ) {
|
|
275
|
-
|
|
276
|
-
string = ShaderChunk[ newInclude ];
|
|
277
|
-
console.warn( 'THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', include, newInclude );
|
|
278
|
-
|
|
279
|
-
} else {
|
|
280
|
-
|
|
281
|
-
throw new Error( 'Can not resolve #include <' + include + '>' );
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
return resolveIncludes( string );
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
// Unroll Loops
|
|
292
|
-
|
|
293
|
-
const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;
|
|
294
|
-
|
|
295
|
-
function unrollLoops( string ) {
|
|
296
|
-
|
|
297
|
-
return string.replace( unrollLoopPattern, loopReplacer );
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
function loopReplacer( match, start, end, snippet ) {
|
|
302
|
-
|
|
303
|
-
let string = '';
|
|
304
|
-
|
|
305
|
-
for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {
|
|
306
|
-
|
|
307
|
-
string += snippet
|
|
308
|
-
.replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' )
|
|
309
|
-
.replace( /UNROLLED_LOOP_INDEX/g, i );
|
|
310
|
-
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
return string;
|
|
314
|
-
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
//
|
|
318
|
-
|
|
319
|
-
function generatePrecision( parameters ) {
|
|
320
|
-
|
|
321
|
-
let precisionstring = `precision ${parameters.precision} float;
|
|
322
|
-
precision ${parameters.precision} int;
|
|
323
|
-
precision ${parameters.precision} sampler2D;
|
|
324
|
-
precision ${parameters.precision} samplerCube;
|
|
325
|
-
`;
|
|
326
|
-
|
|
327
|
-
if ( parameters.isWebGL2 ) {
|
|
328
|
-
|
|
329
|
-
precisionstring += `precision ${parameters.precision} sampler3D;
|
|
330
|
-
precision ${parameters.precision} sampler2DArray;
|
|
331
|
-
precision ${parameters.precision} sampler2DShadow;
|
|
332
|
-
precision ${parameters.precision} samplerCubeShadow;
|
|
333
|
-
precision ${parameters.precision} sampler2DArrayShadow;
|
|
334
|
-
precision ${parameters.precision} isampler2D;
|
|
335
|
-
precision ${parameters.precision} isampler3D;
|
|
336
|
-
precision ${parameters.precision} isamplerCube;
|
|
337
|
-
precision ${parameters.precision} isampler2DArray;
|
|
338
|
-
precision ${parameters.precision} usampler2D;
|
|
339
|
-
precision ${parameters.precision} usampler3D;
|
|
340
|
-
precision ${parameters.precision} usamplerCube;
|
|
341
|
-
precision ${parameters.precision} usampler2DArray;
|
|
342
|
-
`;
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
if ( parameters.precision === 'highp' ) {
|
|
347
|
-
|
|
348
|
-
precisionstring += '\n#define HIGH_PRECISION';
|
|
349
|
-
|
|
350
|
-
} else if ( parameters.precision === 'mediump' ) {
|
|
351
|
-
|
|
352
|
-
precisionstring += '\n#define MEDIUM_PRECISION';
|
|
353
|
-
|
|
354
|
-
} else if ( parameters.precision === 'lowp' ) {
|
|
355
|
-
|
|
356
|
-
precisionstring += '\n#define LOW_PRECISION';
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
return precisionstring;
|
|
361
|
-
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
function generateShadowMapTypeDefine( parameters ) {
|
|
365
|
-
|
|
366
|
-
let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';
|
|
367
|
-
|
|
368
|
-
if ( parameters.shadowMapType === PCFShadowMap ) {
|
|
369
|
-
|
|
370
|
-
shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';
|
|
371
|
-
|
|
372
|
-
} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {
|
|
373
|
-
|
|
374
|
-
shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';
|
|
375
|
-
|
|
376
|
-
} else if ( parameters.shadowMapType === VSMShadowMap ) {
|
|
377
|
-
|
|
378
|
-
shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';
|
|
379
|
-
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
return shadowMapTypeDefine;
|
|
383
|
-
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
function generateEnvMapTypeDefine( parameters ) {
|
|
387
|
-
|
|
388
|
-
let envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
|
|
389
|
-
|
|
390
|
-
if ( parameters.envMap ) {
|
|
391
|
-
|
|
392
|
-
switch ( parameters.envMapMode ) {
|
|
393
|
-
|
|
394
|
-
case CubeReflectionMapping:
|
|
395
|
-
case CubeRefractionMapping:
|
|
396
|
-
envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
|
|
397
|
-
break;
|
|
398
|
-
|
|
399
|
-
case CubeUVReflectionMapping:
|
|
400
|
-
envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';
|
|
401
|
-
break;
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
return envMapTypeDefine;
|
|
408
|
-
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
function generateEnvMapModeDefine( parameters ) {
|
|
412
|
-
|
|
413
|
-
let envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
|
|
414
|
-
|
|
415
|
-
if ( parameters.envMap ) {
|
|
416
|
-
|
|
417
|
-
switch ( parameters.envMapMode ) {
|
|
418
|
-
|
|
419
|
-
case CubeRefractionMapping:
|
|
420
|
-
|
|
421
|
-
envMapModeDefine = 'ENVMAP_MODE_REFRACTION';
|
|
422
|
-
break;
|
|
423
|
-
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
return envMapModeDefine;
|
|
429
|
-
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
function generateEnvMapBlendingDefine( parameters ) {
|
|
433
|
-
|
|
434
|
-
let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';
|
|
435
|
-
|
|
436
|
-
if ( parameters.envMap ) {
|
|
437
|
-
|
|
438
|
-
switch ( parameters.combine ) {
|
|
439
|
-
|
|
440
|
-
case MultiplyOperation:
|
|
441
|
-
envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
|
|
442
|
-
break;
|
|
443
|
-
|
|
444
|
-
case MixOperation:
|
|
445
|
-
envMapBlendingDefine = 'ENVMAP_BLENDING_MIX';
|
|
446
|
-
break;
|
|
447
|
-
|
|
448
|
-
case AddOperation:
|
|
449
|
-
envMapBlendingDefine = 'ENVMAP_BLENDING_ADD';
|
|
450
|
-
break;
|
|
451
|
-
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
return envMapBlendingDefine;
|
|
457
|
-
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
function generateCubeUVSize( parameters ) {
|
|
461
|
-
|
|
462
|
-
const imageHeight = parameters.envMapCubeUVHeight;
|
|
463
|
-
|
|
464
|
-
if ( imageHeight === null ) return null;
|
|
465
|
-
|
|
466
|
-
const maxMip = Math.log2( imageHeight ) - 2;
|
|
467
|
-
|
|
468
|
-
const texelHeight = 1.0 / imageHeight;
|
|
469
|
-
|
|
470
|
-
const texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );
|
|
471
|
-
|
|
472
|
-
return { texelWidth, texelHeight, maxMip };
|
|
473
|
-
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
477
|
-
|
|
478
|
-
// TODO Send this event to Three.js DevTools
|
|
479
|
-
// console.log( 'WebGLProgram', cacheKey );
|
|
480
|
-
|
|
481
|
-
const gl = renderer.getContext();
|
|
482
|
-
|
|
483
|
-
const defines = parameters.defines;
|
|
484
|
-
|
|
485
|
-
let vertexShader = parameters.vertexShader;
|
|
486
|
-
let fragmentShader = parameters.fragmentShader;
|
|
487
|
-
|
|
488
|
-
const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
|
|
489
|
-
const envMapTypeDefine = generateEnvMapTypeDefine( parameters );
|
|
490
|
-
const envMapModeDefine = generateEnvMapModeDefine( parameters );
|
|
491
|
-
const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
|
|
492
|
-
const envMapCubeUVSize = generateCubeUVSize( parameters );
|
|
493
|
-
|
|
494
|
-
const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
|
|
495
|
-
|
|
496
|
-
const customVertexExtensions = generateVertexExtensions( parameters );
|
|
497
|
-
|
|
498
|
-
const customDefines = generateDefines( defines );
|
|
499
|
-
|
|
500
|
-
const program = gl.createProgram();
|
|
501
|
-
|
|
502
|
-
let prefixVertex, prefixFragment;
|
|
503
|
-
let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : '';
|
|
504
|
-
|
|
505
|
-
if ( parameters.isRawShaderMaterial ) {
|
|
506
|
-
|
|
507
|
-
prefixVertex = [
|
|
508
|
-
|
|
509
|
-
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
510
|
-
'#define SHADER_NAME ' + parameters.shaderName,
|
|
511
|
-
|
|
512
|
-
customDefines
|
|
513
|
-
|
|
514
|
-
].filter( filterEmptyLine ).join( '\n' );
|
|
515
|
-
|
|
516
|
-
if ( prefixVertex.length > 0 ) {
|
|
517
|
-
|
|
518
|
-
prefixVertex += '\n';
|
|
519
|
-
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
prefixFragment = [
|
|
523
|
-
|
|
524
|
-
customExtensions,
|
|
525
|
-
|
|
526
|
-
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
527
|
-
'#define SHADER_NAME ' + parameters.shaderName,
|
|
528
|
-
|
|
529
|
-
customDefines
|
|
530
|
-
|
|
531
|
-
].filter( filterEmptyLine ).join( '\n' );
|
|
532
|
-
|
|
533
|
-
if ( prefixFragment.length > 0 ) {
|
|
534
|
-
|
|
535
|
-
prefixFragment += '\n';
|
|
536
|
-
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
} else {
|
|
540
|
-
|
|
541
|
-
prefixVertex = [
|
|
542
|
-
|
|
543
|
-
generatePrecision( parameters ),
|
|
544
|
-
|
|
545
|
-
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
546
|
-
'#define SHADER_NAME ' + parameters.shaderName,
|
|
547
|
-
|
|
548
|
-
customDefines,
|
|
549
|
-
|
|
550
|
-
parameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',
|
|
551
|
-
parameters.batching ? '#define USE_BATCHING' : '',
|
|
552
|
-
parameters.instancing ? '#define USE_INSTANCING' : '',
|
|
553
|
-
parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
|
|
554
|
-
parameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',
|
|
555
|
-
|
|
556
|
-
parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
|
|
557
|
-
parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
|
|
558
|
-
|
|
559
|
-
parameters.map ? '#define USE_MAP' : '',
|
|
560
|
-
parameters.envMap ? '#define USE_ENVMAP' : '',
|
|
561
|
-
parameters.envMap ? '#define ' + envMapModeDefine : '',
|
|
562
|
-
parameters.lightMap ? '#define USE_LIGHTMAP' : '',
|
|
563
|
-
parameters.aoMap ? '#define USE_AOMAP' : '',
|
|
564
|
-
parameters.bumpMap ? '#define USE_BUMPMAP' : '',
|
|
565
|
-
parameters.normalMap ? '#define USE_NORMALMAP' : '',
|
|
566
|
-
parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
|
|
567
|
-
parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
|
|
568
|
-
parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',
|
|
569
|
-
parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
|
|
570
|
-
|
|
571
|
-
parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
|
|
572
|
-
parameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',
|
|
573
|
-
|
|
574
|
-
parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
|
|
575
|
-
parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
|
|
576
|
-
parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
|
|
577
|
-
|
|
578
|
-
parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
|
|
579
|
-
parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
|
|
580
|
-
|
|
581
|
-
parameters.specularMap ? '#define USE_SPECULARMAP' : '',
|
|
582
|
-
parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',
|
|
583
|
-
parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
|
|
584
|
-
|
|
585
|
-
parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
|
|
586
|
-
parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
|
|
587
|
-
parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
|
|
588
|
-
parameters.alphaHash ? '#define USE_ALPHAHASH' : '',
|
|
589
|
-
|
|
590
|
-
parameters.transmission ? '#define USE_TRANSMISSION' : '',
|
|
591
|
-
parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
|
|
592
|
-
parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
|
|
593
|
-
|
|
594
|
-
parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',
|
|
595
|
-
parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',
|
|
596
|
-
|
|
597
|
-
//
|
|
598
|
-
|
|
599
|
-
parameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',
|
|
600
|
-
parameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',
|
|
601
|
-
parameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',
|
|
602
|
-
parameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',
|
|
603
|
-
parameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',
|
|
604
|
-
parameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',
|
|
605
|
-
parameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',
|
|
606
|
-
parameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',
|
|
607
|
-
|
|
608
|
-
parameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',
|
|
609
|
-
parameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',
|
|
610
|
-
|
|
611
|
-
parameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',
|
|
612
|
-
|
|
613
|
-
parameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',
|
|
614
|
-
parameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',
|
|
615
|
-
parameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',
|
|
616
|
-
|
|
617
|
-
parameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',
|
|
618
|
-
parameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',
|
|
619
|
-
|
|
620
|
-
parameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',
|
|
621
|
-
parameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',
|
|
622
|
-
|
|
623
|
-
parameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',
|
|
624
|
-
parameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',
|
|
625
|
-
parameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',
|
|
626
|
-
|
|
627
|
-
parameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',
|
|
628
|
-
parameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',
|
|
629
|
-
|
|
630
|
-
//
|
|
631
|
-
|
|
632
|
-
parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
|
|
633
|
-
parameters.vertexColors ? '#define USE_COLOR' : '',
|
|
634
|
-
parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
|
|
635
|
-
parameters.vertexUv1s ? '#define USE_UV1' : '',
|
|
636
|
-
parameters.vertexUv2s ? '#define USE_UV2' : '',
|
|
637
|
-
parameters.vertexUv3s ? '#define USE_UV3' : '',
|
|
638
|
-
|
|
639
|
-
parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
|
|
640
|
-
|
|
641
|
-
parameters.flatShading ? '#define FLAT_SHADED' : '',
|
|
642
|
-
|
|
643
|
-
parameters.skinning ? '#define USE_SKINNING' : '',
|
|
644
|
-
|
|
645
|
-
parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
|
|
646
|
-
parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
|
|
647
|
-
( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',
|
|
648
|
-
( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',
|
|
649
|
-
( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
|
|
650
|
-
( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
|
|
651
|
-
parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
|
|
652
|
-
parameters.flipSided ? '#define FLIP_SIDED' : '',
|
|
653
|
-
|
|
654
|
-
parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
|
|
655
|
-
parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',
|
|
656
|
-
|
|
657
|
-
parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
|
|
658
|
-
|
|
659
|
-
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
660
|
-
|
|
661
|
-
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
662
|
-
|
|
663
|
-
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
664
|
-
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
665
|
-
|
|
666
|
-
'uniform mat4 modelMatrix;',
|
|
667
|
-
'uniform mat4 modelViewMatrix;',
|
|
668
|
-
'uniform mat4 projectionMatrix;',
|
|
669
|
-
'uniform mat4 viewMatrix;',
|
|
670
|
-
'uniform mat3 normalMatrix;',
|
|
671
|
-
'uniform vec3 cameraPosition;',
|
|
672
|
-
'uniform bool isOrthographic;',
|
|
673
|
-
|
|
674
|
-
'#ifdef USE_INSTANCING',
|
|
675
|
-
|
|
676
|
-
' attribute mat4 instanceMatrix;',
|
|
677
|
-
|
|
678
|
-
'#endif',
|
|
679
|
-
|
|
680
|
-
'#ifdef USE_INSTANCING_COLOR',
|
|
681
|
-
|
|
682
|
-
' attribute vec3 instanceColor;',
|
|
683
|
-
|
|
684
|
-
'#endif',
|
|
685
|
-
|
|
686
|
-
'#ifdef USE_INSTANCING_MORPH',
|
|
687
|
-
|
|
688
|
-
' uniform sampler2D morphTexture;',
|
|
689
|
-
|
|
690
|
-
'#endif',
|
|
691
|
-
|
|
692
|
-
'attribute vec3 position;',
|
|
693
|
-
'attribute vec3 normal;',
|
|
694
|
-
'attribute vec2 uv;',
|
|
695
|
-
|
|
696
|
-
'#ifdef USE_UV1',
|
|
697
|
-
|
|
698
|
-
' attribute vec2 uv1;',
|
|
699
|
-
|
|
700
|
-
'#endif',
|
|
701
|
-
|
|
702
|
-
'#ifdef USE_UV2',
|
|
703
|
-
|
|
704
|
-
' attribute vec2 uv2;',
|
|
705
|
-
|
|
706
|
-
'#endif',
|
|
707
|
-
|
|
708
|
-
'#ifdef USE_UV3',
|
|
709
|
-
|
|
710
|
-
' attribute vec2 uv3;',
|
|
711
|
-
|
|
712
|
-
'#endif',
|
|
713
|
-
|
|
714
|
-
'#ifdef USE_TANGENT',
|
|
715
|
-
|
|
716
|
-
' attribute vec4 tangent;',
|
|
717
|
-
|
|
718
|
-
'#endif',
|
|
719
|
-
|
|
720
|
-
'#if defined( USE_COLOR_ALPHA )',
|
|
721
|
-
|
|
722
|
-
' attribute vec4 color;',
|
|
723
|
-
|
|
724
|
-
'#elif defined( USE_COLOR )',
|
|
725
|
-
|
|
726
|
-
' attribute vec3 color;',
|
|
727
|
-
|
|
728
|
-
'#endif',
|
|
729
|
-
|
|
730
|
-
'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',
|
|
731
|
-
|
|
732
|
-
' attribute vec3 morphTarget0;',
|
|
733
|
-
' attribute vec3 morphTarget1;',
|
|
734
|
-
' attribute vec3 morphTarget2;',
|
|
735
|
-
' attribute vec3 morphTarget3;',
|
|
736
|
-
|
|
737
|
-
' #ifdef USE_MORPHNORMALS',
|
|
738
|
-
|
|
739
|
-
' attribute vec3 morphNormal0;',
|
|
740
|
-
' attribute vec3 morphNormal1;',
|
|
741
|
-
' attribute vec3 morphNormal2;',
|
|
742
|
-
' attribute vec3 morphNormal3;',
|
|
743
|
-
|
|
744
|
-
' #else',
|
|
745
|
-
|
|
746
|
-
' attribute vec3 morphTarget4;',
|
|
747
|
-
' attribute vec3 morphTarget5;',
|
|
748
|
-
' attribute vec3 morphTarget6;',
|
|
749
|
-
' attribute vec3 morphTarget7;',
|
|
750
|
-
|
|
751
|
-
' #endif',
|
|
752
|
-
|
|
753
|
-
'#endif',
|
|
754
|
-
|
|
755
|
-
'#ifdef USE_SKINNING',
|
|
756
|
-
|
|
757
|
-
' attribute vec4 skinIndex;',
|
|
758
|
-
' attribute vec4 skinWeight;',
|
|
759
|
-
|
|
760
|
-
'#endif',
|
|
761
|
-
|
|
762
|
-
'\n'
|
|
763
|
-
|
|
764
|
-
].filter( filterEmptyLine ).join( '\n' );
|
|
765
|
-
|
|
766
|
-
prefixFragment = [
|
|
767
|
-
|
|
768
|
-
customExtensions,
|
|
769
|
-
|
|
770
|
-
generatePrecision( parameters ),
|
|
771
|
-
|
|
772
|
-
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
773
|
-
'#define SHADER_NAME ' + parameters.shaderName,
|
|
774
|
-
|
|
775
|
-
customDefines,
|
|
776
|
-
|
|
777
|
-
parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
|
|
778
|
-
parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
|
|
779
|
-
|
|
780
|
-
parameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',
|
|
781
|
-
parameters.map ? '#define USE_MAP' : '',
|
|
782
|
-
parameters.matcap ? '#define USE_MATCAP' : '',
|
|
783
|
-
parameters.envMap ? '#define USE_ENVMAP' : '',
|
|
784
|
-
parameters.envMap ? '#define ' + envMapTypeDefine : '',
|
|
785
|
-
parameters.envMap ? '#define ' + envMapModeDefine : '',
|
|
786
|
-
parameters.envMap ? '#define ' + envMapBlendingDefine : '',
|
|
787
|
-
envMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',
|
|
788
|
-
envMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',
|
|
789
|
-
envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',
|
|
790
|
-
parameters.lightMap ? '#define USE_LIGHTMAP' : '',
|
|
791
|
-
parameters.aoMap ? '#define USE_AOMAP' : '',
|
|
792
|
-
parameters.bumpMap ? '#define USE_BUMPMAP' : '',
|
|
793
|
-
parameters.normalMap ? '#define USE_NORMALMAP' : '',
|
|
794
|
-
parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
|
|
795
|
-
parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
|
|
796
|
-
parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
|
|
797
|
-
|
|
798
|
-
parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
|
|
799
|
-
parameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',
|
|
800
|
-
|
|
801
|
-
parameters.clearcoat ? '#define USE_CLEARCOAT' : '',
|
|
802
|
-
parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
|
|
803
|
-
parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
|
|
804
|
-
parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
|
|
805
|
-
|
|
806
|
-
parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
|
|
807
|
-
parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
|
|
808
|
-
parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
|
|
809
|
-
|
|
810
|
-
parameters.specularMap ? '#define USE_SPECULARMAP' : '',
|
|
811
|
-
parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',
|
|
812
|
-
parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
|
|
813
|
-
|
|
814
|
-
parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
|
|
815
|
-
parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
|
|
816
|
-
|
|
817
|
-
parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
|
|
818
|
-
parameters.alphaTest ? '#define USE_ALPHATEST' : '',
|
|
819
|
-
parameters.alphaHash ? '#define USE_ALPHAHASH' : '',
|
|
820
|
-
|
|
821
|
-
parameters.sheen ? '#define USE_SHEEN' : '',
|
|
822
|
-
parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',
|
|
823
|
-
parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',
|
|
824
|
-
|
|
825
|
-
parameters.transmission ? '#define USE_TRANSMISSION' : '',
|
|
826
|
-
parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
|
|
827
|
-
parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
|
|
828
|
-
|
|
829
|
-
parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
|
|
830
|
-
parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
|
|
831
|
-
parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
|
|
832
|
-
parameters.vertexUv1s ? '#define USE_UV1' : '',
|
|
833
|
-
parameters.vertexUv2s ? '#define USE_UV2' : '',
|
|
834
|
-
parameters.vertexUv3s ? '#define USE_UV3' : '',
|
|
835
|
-
|
|
836
|
-
parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
|
|
837
|
-
|
|
838
|
-
parameters.gradientMap ? '#define USE_GRADIENTMAP' : '',
|
|
839
|
-
|
|
840
|
-
parameters.flatShading ? '#define FLAT_SHADED' : '',
|
|
841
|
-
|
|
842
|
-
parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
|
|
843
|
-
parameters.flipSided ? '#define FLIP_SIDED' : '',
|
|
844
|
-
|
|
845
|
-
parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
|
|
846
|
-
parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',
|
|
847
|
-
|
|
848
|
-
parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',
|
|
849
|
-
|
|
850
|
-
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
851
|
-
|
|
852
|
-
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
853
|
-
|
|
854
|
-
parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
|
|
855
|
-
|
|
856
|
-
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
857
|
-
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
858
|
-
|
|
859
|
-
'uniform mat4 viewMatrix;',
|
|
860
|
-
'uniform vec3 cameraPosition;',
|
|
861
|
-
'uniform bool isOrthographic;',
|
|
862
|
-
|
|
863
|
-
( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',
|
|
864
|
-
( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below
|
|
865
|
-
( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
|
|
866
|
-
|
|
867
|
-
parameters.dithering ? '#define DITHERING' : '',
|
|
868
|
-
parameters.opaque ? '#define OPAQUE' : '',
|
|
869
|
-
|
|
870
|
-
ShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below
|
|
871
|
-
getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),
|
|
872
|
-
|
|
873
|
-
parameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',
|
|
874
|
-
|
|
875
|
-
'\n'
|
|
876
|
-
|
|
877
|
-
].filter( filterEmptyLine ).join( '\n' );
|
|
878
|
-
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
vertexShader = resolveIncludes( vertexShader );
|
|
882
|
-
vertexShader = replaceLightNums( vertexShader, parameters );
|
|
883
|
-
vertexShader = replaceClippingPlaneNums( vertexShader, parameters );
|
|
884
|
-
|
|
885
|
-
fragmentShader = resolveIncludes( fragmentShader );
|
|
886
|
-
fragmentShader = replaceLightNums( fragmentShader, parameters );
|
|
887
|
-
fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );
|
|
888
|
-
|
|
889
|
-
vertexShader = unrollLoops( vertexShader );
|
|
890
|
-
fragmentShader = unrollLoops( fragmentShader );
|
|
891
|
-
|
|
892
|
-
if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {
|
|
893
|
-
|
|
894
|
-
// GLSL 3.0 conversion for built-in materials and ShaderMaterial
|
|
895
|
-
|
|
896
|
-
versionString = '#version 300 es\n';
|
|
897
|
-
|
|
898
|
-
prefixVertex = [
|
|
899
|
-
customVertexExtensions,
|
|
900
|
-
'precision mediump sampler2DArray;',
|
|
901
|
-
'#define attribute in',
|
|
902
|
-
'#define varying out',
|
|
903
|
-
'#define texture2D texture'
|
|
904
|
-
].join( '\n' ) + '\n' + prefixVertex;
|
|
905
|
-
|
|
906
|
-
prefixFragment = [
|
|
907
|
-
'precision mediump sampler2DArray;',
|
|
908
|
-
'#define varying in',
|
|
909
|
-
( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
|
|
910
|
-
( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
|
|
911
|
-
'#define gl_FragDepthEXT gl_FragDepth',
|
|
912
|
-
'#define texture2D texture',
|
|
913
|
-
'#define textureCube texture',
|
|
914
|
-
'#define texture2DProj textureProj',
|
|
915
|
-
'#define texture2DLodEXT textureLod',
|
|
916
|
-
'#define texture2DProjLodEXT textureProjLod',
|
|
917
|
-
'#define textureCubeLodEXT textureLod',
|
|
918
|
-
'#define texture2DGradEXT textureGrad',
|
|
919
|
-
'#define texture2DProjGradEXT textureProjGrad',
|
|
920
|
-
'#define textureCubeGradEXT textureGrad'
|
|
921
|
-
].join( '\n' ) + '\n' + prefixFragment;
|
|
922
|
-
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
const vertexGlsl = versionString + prefixVertex + vertexShader;
|
|
926
|
-
const fragmentGlsl = versionString + prefixFragment + fragmentShader;
|
|
927
|
-
|
|
928
|
-
// console.log( '*VERTEX*', vertexGlsl );
|
|
929
|
-
// console.log( '*FRAGMENT*', fragmentGlsl );
|
|
930
|
-
|
|
931
|
-
const glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );
|
|
932
|
-
const glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );
|
|
933
|
-
|
|
934
|
-
gl.attachShader( program, glVertexShader );
|
|
935
|
-
gl.attachShader( program, glFragmentShader );
|
|
936
|
-
|
|
937
|
-
// Force a particular attribute to index 0.
|
|
938
|
-
|
|
939
|
-
if ( parameters.index0AttributeName !== undefined ) {
|
|
940
|
-
|
|
941
|
-
gl.bindAttribLocation( program, 0, parameters.index0AttributeName );
|
|
942
|
-
|
|
943
|
-
} else if ( parameters.morphTargets === true ) {
|
|
944
|
-
|
|
945
|
-
// programs with morphTargets displace position out of attribute 0
|
|
946
|
-
gl.bindAttribLocation( program, 0, 'position' );
|
|
947
|
-
|
|
948
|
-
}
|
|
949
|
-
|
|
950
|
-
gl.linkProgram( program );
|
|
951
|
-
|
|
952
|
-
function onFirstUse( self ) {
|
|
953
|
-
|
|
954
|
-
// check for link errors
|
|
955
|
-
if ( renderer.debug.checkShaderErrors ) {
|
|
956
|
-
|
|
957
|
-
const programLog = gl.getProgramInfoLog( program ).trim();
|
|
958
|
-
const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
|
|
959
|
-
const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
|
|
960
|
-
|
|
961
|
-
let runnable = true;
|
|
962
|
-
let haveDiagnostics = true;
|
|
963
|
-
|
|
964
|
-
if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
|
|
965
|
-
|
|
966
|
-
runnable = false;
|
|
967
|
-
|
|
968
|
-
if ( typeof renderer.debug.onShaderError === 'function' ) {
|
|
969
|
-
|
|
970
|
-
renderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );
|
|
971
|
-
|
|
972
|
-
} else {
|
|
973
|
-
|
|
974
|
-
// default error reporting
|
|
975
|
-
|
|
976
|
-
const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );
|
|
977
|
-
const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
978
|
-
|
|
979
|
-
console.error(
|
|
980
|
-
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
981
|
-
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
982
|
-
'Material Name: ' + self.name + '\n' +
|
|
983
|
-
'Material Type: ' + self.type + '\n\n' +
|
|
984
|
-
'Program Info Log: ' + programLog + '\n' +
|
|
985
|
-
vertexErrors + '\n' +
|
|
986
|
-
fragmentErrors
|
|
987
|
-
);
|
|
988
|
-
|
|
989
|
-
}
|
|
990
|
-
|
|
991
|
-
} else if ( programLog !== '' ) {
|
|
992
|
-
|
|
993
|
-
console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );
|
|
994
|
-
|
|
995
|
-
} else if ( vertexLog === '' || fragmentLog === '' ) {
|
|
996
|
-
|
|
997
|
-
haveDiagnostics = false;
|
|
998
|
-
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
if ( haveDiagnostics ) {
|
|
1002
|
-
|
|
1003
|
-
self.diagnostics = {
|
|
1004
|
-
|
|
1005
|
-
runnable: runnable,
|
|
1006
|
-
|
|
1007
|
-
programLog: programLog,
|
|
1008
|
-
|
|
1009
|
-
vertexShader: {
|
|
1010
|
-
|
|
1011
|
-
log: vertexLog,
|
|
1012
|
-
prefix: prefixVertex
|
|
1013
|
-
|
|
1014
|
-
},
|
|
1015
|
-
|
|
1016
|
-
fragmentShader: {
|
|
1017
|
-
|
|
1018
|
-
log: fragmentLog,
|
|
1019
|
-
prefix: prefixFragment
|
|
1020
|
-
|
|
1021
|
-
}
|
|
1022
|
-
|
|
1023
|
-
};
|
|
1024
|
-
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
// Clean up
|
|
1030
|
-
|
|
1031
|
-
// Crashes in iOS9 and iOS10. #18402
|
|
1032
|
-
// gl.detachShader( program, glVertexShader );
|
|
1033
|
-
// gl.detachShader( program, glFragmentShader );
|
|
1034
|
-
|
|
1035
|
-
gl.deleteShader( glVertexShader );
|
|
1036
|
-
gl.deleteShader( glFragmentShader );
|
|
1037
|
-
|
|
1038
|
-
cachedUniforms = new WebGLUniforms( gl, program );
|
|
1039
|
-
cachedAttributes = fetchAttributeLocations( gl, program );
|
|
1040
|
-
|
|
1041
|
-
}
|
|
1042
|
-
|
|
1043
|
-
// set up caching for uniform locations
|
|
1044
|
-
|
|
1045
|
-
let cachedUniforms;
|
|
1046
|
-
|
|
1047
|
-
this.getUniforms = function () {
|
|
1048
|
-
|
|
1049
|
-
if ( cachedUniforms === undefined ) {
|
|
1050
|
-
|
|
1051
|
-
// Populates cachedUniforms and cachedAttributes
|
|
1052
|
-
onFirstUse( this );
|
|
1053
|
-
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
return cachedUniforms;
|
|
1057
|
-
|
|
1058
|
-
};
|
|
1059
|
-
|
|
1060
|
-
// set up caching for attribute locations
|
|
1061
|
-
|
|
1062
|
-
let cachedAttributes;
|
|
1063
|
-
|
|
1064
|
-
this.getAttributes = function () {
|
|
1065
|
-
|
|
1066
|
-
if ( cachedAttributes === undefined ) {
|
|
1067
|
-
|
|
1068
|
-
// Populates cachedAttributes and cachedUniforms
|
|
1069
|
-
onFirstUse( this );
|
|
1070
|
-
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
|
-
return cachedAttributes;
|
|
1074
|
-
|
|
1075
|
-
};
|
|
1076
|
-
|
|
1077
|
-
// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,
|
|
1078
|
-
// flag the program as ready immediately. It may cause a stall when it's first used.
|
|
1079
|
-
|
|
1080
|
-
let programReady = ( parameters.rendererExtensionParallelShaderCompile === false );
|
|
1081
|
-
|
|
1082
|
-
this.isReady = function () {
|
|
1083
|
-
|
|
1084
|
-
if ( programReady === false ) {
|
|
1085
|
-
|
|
1086
|
-
programReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );
|
|
1087
|
-
|
|
1088
|
-
}
|
|
1089
|
-
|
|
1090
|
-
return programReady;
|
|
1091
|
-
|
|
1092
|
-
};
|
|
1093
|
-
|
|
1094
|
-
// free resource
|
|
1095
|
-
|
|
1096
|
-
this.destroy = function () {
|
|
1097
|
-
|
|
1098
|
-
bindingStates.releaseStatesOfProgram( this );
|
|
1099
|
-
|
|
1100
|
-
gl.deleteProgram( program );
|
|
1101
|
-
this.program = undefined;
|
|
1102
|
-
|
|
1103
|
-
};
|
|
1104
|
-
|
|
1105
|
-
//
|
|
1106
|
-
|
|
1107
|
-
this.type = parameters.shaderType;
|
|
1108
|
-
this.name = parameters.shaderName;
|
|
1109
|
-
this.id = programIdCount ++;
|
|
1110
|
-
this.cacheKey = cacheKey;
|
|
1111
|
-
this.usedTimes = 1;
|
|
1112
|
-
this.program = program;
|
|
1113
|
-
this.vertexShader = glVertexShader;
|
|
1114
|
-
this.fragmentShader = glFragmentShader;
|
|
1115
|
-
|
|
1116
|
-
return this;
|
|
1117
|
-
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
export { WebGLProgram };
|
|
1
|
+
import { WebGLUniforms } from './WebGLUniforms.js';
|
|
2
|
+
import { WebGLShader } from './WebGLShader.js';
|
|
3
|
+
import { ShaderChunk } from '../shaders/ShaderChunk.js';
|
|
4
|
+
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
5
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
|
+
|
|
7
|
+
// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
|
|
8
|
+
const COMPLETION_STATUS_KHR = 0x91B1;
|
|
9
|
+
|
|
10
|
+
let programIdCount = 0;
|
|
11
|
+
|
|
12
|
+
function handleSource( string, errorLine ) {
|
|
13
|
+
|
|
14
|
+
const lines = string.split( '\n' );
|
|
15
|
+
const lines2 = [];
|
|
16
|
+
|
|
17
|
+
const from = Math.max( errorLine - 6, 0 );
|
|
18
|
+
const to = Math.min( errorLine + 6, lines.length );
|
|
19
|
+
|
|
20
|
+
for ( let i = from; i < to; i ++ ) {
|
|
21
|
+
|
|
22
|
+
const line = i + 1;
|
|
23
|
+
lines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return lines2.join( '\n' );
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function getEncodingComponents( colorSpace ) {
|
|
32
|
+
|
|
33
|
+
const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
|
|
34
|
+
const encodingPrimaries = ColorManagement.getPrimaries( colorSpace );
|
|
35
|
+
|
|
36
|
+
let gamutMapping;
|
|
37
|
+
|
|
38
|
+
if ( workingPrimaries === encodingPrimaries ) {
|
|
39
|
+
|
|
40
|
+
gamutMapping = '';
|
|
41
|
+
|
|
42
|
+
} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {
|
|
43
|
+
|
|
44
|
+
gamutMapping = 'LinearDisplayP3ToLinearSRGB';
|
|
45
|
+
|
|
46
|
+
} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {
|
|
47
|
+
|
|
48
|
+
gamutMapping = 'LinearSRGBToLinearDisplayP3';
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
switch ( colorSpace ) {
|
|
53
|
+
|
|
54
|
+
case LinearSRGBColorSpace:
|
|
55
|
+
case LinearDisplayP3ColorSpace:
|
|
56
|
+
return [ gamutMapping, 'LinearTransferOETF' ];
|
|
57
|
+
|
|
58
|
+
case SRGBColorSpace:
|
|
59
|
+
case DisplayP3ColorSpace:
|
|
60
|
+
return [ gamutMapping, 'sRGBTransferOETF' ];
|
|
61
|
+
|
|
62
|
+
default:
|
|
63
|
+
console.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );
|
|
64
|
+
return [ gamutMapping, 'LinearTransferOETF' ];
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function getShaderErrors( gl, shader, type ) {
|
|
71
|
+
|
|
72
|
+
const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
|
|
73
|
+
const errors = gl.getShaderInfoLog( shader ).trim();
|
|
74
|
+
|
|
75
|
+
if ( status && errors === '' ) return '';
|
|
76
|
+
|
|
77
|
+
const errorMatches = /ERROR: 0:(\d+)/.exec( errors );
|
|
78
|
+
if ( errorMatches ) {
|
|
79
|
+
|
|
80
|
+
// --enable-privileged-webgl-extension
|
|
81
|
+
// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );
|
|
82
|
+
|
|
83
|
+
const errorLine = parseInt( errorMatches[ 1 ] );
|
|
84
|
+
return type.toUpperCase() + '\n\n' + errors + '\n\n' + handleSource( gl.getShaderSource( shader ), errorLine );
|
|
85
|
+
|
|
86
|
+
} else {
|
|
87
|
+
|
|
88
|
+
return errors;
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function getTexelEncodingFunction( functionName, colorSpace ) {
|
|
95
|
+
|
|
96
|
+
const components = getEncodingComponents( colorSpace );
|
|
97
|
+
return `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function getToneMappingFunction( functionName, toneMapping ) {
|
|
102
|
+
|
|
103
|
+
let toneMappingName;
|
|
104
|
+
|
|
105
|
+
switch ( toneMapping ) {
|
|
106
|
+
|
|
107
|
+
case LinearToneMapping:
|
|
108
|
+
toneMappingName = 'Linear';
|
|
109
|
+
break;
|
|
110
|
+
|
|
111
|
+
case ReinhardToneMapping:
|
|
112
|
+
toneMappingName = 'Reinhard';
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case CineonToneMapping:
|
|
116
|
+
toneMappingName = 'OptimizedCineon';
|
|
117
|
+
break;
|
|
118
|
+
|
|
119
|
+
case ACESFilmicToneMapping:
|
|
120
|
+
toneMappingName = 'ACESFilmic';
|
|
121
|
+
break;
|
|
122
|
+
|
|
123
|
+
case AgXToneMapping:
|
|
124
|
+
toneMappingName = 'AgX';
|
|
125
|
+
break;
|
|
126
|
+
|
|
127
|
+
case NeutralToneMapping:
|
|
128
|
+
toneMappingName = 'Neutral';
|
|
129
|
+
break;
|
|
130
|
+
|
|
131
|
+
case CustomToneMapping:
|
|
132
|
+
toneMappingName = 'Custom';
|
|
133
|
+
break;
|
|
134
|
+
|
|
135
|
+
default:
|
|
136
|
+
console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );
|
|
137
|
+
toneMappingName = 'Linear';
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function generateExtensions( parameters ) {
|
|
146
|
+
|
|
147
|
+
const chunks = [
|
|
148
|
+
( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.alphaToCoverage || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
149
|
+
( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
150
|
+
( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
|
|
151
|
+
( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function generateVertexExtensions( parameters ) {
|
|
159
|
+
|
|
160
|
+
const chunks = [
|
|
161
|
+
parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',
|
|
162
|
+
parameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',
|
|
163
|
+
];
|
|
164
|
+
|
|
165
|
+
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function generateDefines( defines ) {
|
|
170
|
+
|
|
171
|
+
const chunks = [];
|
|
172
|
+
|
|
173
|
+
for ( const name in defines ) {
|
|
174
|
+
|
|
175
|
+
const value = defines[ name ];
|
|
176
|
+
|
|
177
|
+
if ( value === false ) continue;
|
|
178
|
+
|
|
179
|
+
chunks.push( '#define ' + name + ' ' + value );
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return chunks.join( '\n' );
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function fetchAttributeLocations( gl, program ) {
|
|
188
|
+
|
|
189
|
+
const attributes = {};
|
|
190
|
+
|
|
191
|
+
const n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );
|
|
192
|
+
|
|
193
|
+
for ( let i = 0; i < n; i ++ ) {
|
|
194
|
+
|
|
195
|
+
const info = gl.getActiveAttrib( program, i );
|
|
196
|
+
const name = info.name;
|
|
197
|
+
|
|
198
|
+
let locationSize = 1;
|
|
199
|
+
if ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;
|
|
200
|
+
if ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;
|
|
201
|
+
if ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;
|
|
202
|
+
|
|
203
|
+
// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );
|
|
204
|
+
|
|
205
|
+
attributes[ name ] = {
|
|
206
|
+
type: info.type,
|
|
207
|
+
location: gl.getAttribLocation( program, name ),
|
|
208
|
+
locationSize: locationSize
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return attributes;
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function filterEmptyLine( string ) {
|
|
218
|
+
|
|
219
|
+
return string !== '';
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function replaceLightNums( string, parameters ) {
|
|
224
|
+
|
|
225
|
+
const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;
|
|
226
|
+
|
|
227
|
+
return string
|
|
228
|
+
.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )
|
|
229
|
+
.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )
|
|
230
|
+
.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )
|
|
231
|
+
.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )
|
|
232
|
+
.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )
|
|
233
|
+
.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )
|
|
234
|
+
.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )
|
|
235
|
+
.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )
|
|
236
|
+
.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )
|
|
237
|
+
.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )
|
|
238
|
+
.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function replaceClippingPlaneNums( string, parameters ) {
|
|
243
|
+
|
|
244
|
+
return string
|
|
245
|
+
.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )
|
|
246
|
+
.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );
|
|
247
|
+
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Resolve Includes
|
|
251
|
+
|
|
252
|
+
const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm;
|
|
253
|
+
|
|
254
|
+
function resolveIncludes( string ) {
|
|
255
|
+
|
|
256
|
+
return string.replace( includePattern, includeReplacer );
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const shaderChunkMap = new Map( [
|
|
261
|
+
[ 'encodings_fragment', 'colorspace_fragment' ], // @deprecated, r154
|
|
262
|
+
[ 'encodings_pars_fragment', 'colorspace_pars_fragment' ], // @deprecated, r154
|
|
263
|
+
[ 'output_fragment', 'opaque_fragment' ], // @deprecated, r154
|
|
264
|
+
] );
|
|
265
|
+
|
|
266
|
+
function includeReplacer( match, include ) {
|
|
267
|
+
|
|
268
|
+
let string = ShaderChunk[ include ];
|
|
269
|
+
|
|
270
|
+
if ( string === undefined ) {
|
|
271
|
+
|
|
272
|
+
const newInclude = shaderChunkMap.get( include );
|
|
273
|
+
|
|
274
|
+
if ( newInclude !== undefined ) {
|
|
275
|
+
|
|
276
|
+
string = ShaderChunk[ newInclude ];
|
|
277
|
+
console.warn( 'THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.', include, newInclude );
|
|
278
|
+
|
|
279
|
+
} else {
|
|
280
|
+
|
|
281
|
+
throw new Error( 'Can not resolve #include <' + include + '>' );
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
return resolveIncludes( string );
|
|
288
|
+
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Unroll Loops
|
|
292
|
+
|
|
293
|
+
const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;
|
|
294
|
+
|
|
295
|
+
function unrollLoops( string ) {
|
|
296
|
+
|
|
297
|
+
return string.replace( unrollLoopPattern, loopReplacer );
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function loopReplacer( match, start, end, snippet ) {
|
|
302
|
+
|
|
303
|
+
let string = '';
|
|
304
|
+
|
|
305
|
+
for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {
|
|
306
|
+
|
|
307
|
+
string += snippet
|
|
308
|
+
.replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' )
|
|
309
|
+
.replace( /UNROLLED_LOOP_INDEX/g, i );
|
|
310
|
+
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return string;
|
|
314
|
+
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
//
|
|
318
|
+
|
|
319
|
+
function generatePrecision( parameters ) {
|
|
320
|
+
|
|
321
|
+
let precisionstring = `precision ${parameters.precision} float;
|
|
322
|
+
precision ${parameters.precision} int;
|
|
323
|
+
precision ${parameters.precision} sampler2D;
|
|
324
|
+
precision ${parameters.precision} samplerCube;
|
|
325
|
+
`;
|
|
326
|
+
|
|
327
|
+
if ( parameters.isWebGL2 ) {
|
|
328
|
+
|
|
329
|
+
precisionstring += `precision ${parameters.precision} sampler3D;
|
|
330
|
+
precision ${parameters.precision} sampler2DArray;
|
|
331
|
+
precision ${parameters.precision} sampler2DShadow;
|
|
332
|
+
precision ${parameters.precision} samplerCubeShadow;
|
|
333
|
+
precision ${parameters.precision} sampler2DArrayShadow;
|
|
334
|
+
precision ${parameters.precision} isampler2D;
|
|
335
|
+
precision ${parameters.precision} isampler3D;
|
|
336
|
+
precision ${parameters.precision} isamplerCube;
|
|
337
|
+
precision ${parameters.precision} isampler2DArray;
|
|
338
|
+
precision ${parameters.precision} usampler2D;
|
|
339
|
+
precision ${parameters.precision} usampler3D;
|
|
340
|
+
precision ${parameters.precision} usamplerCube;
|
|
341
|
+
precision ${parameters.precision} usampler2DArray;
|
|
342
|
+
`;
|
|
343
|
+
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if ( parameters.precision === 'highp' ) {
|
|
347
|
+
|
|
348
|
+
precisionstring += '\n#define HIGH_PRECISION';
|
|
349
|
+
|
|
350
|
+
} else if ( parameters.precision === 'mediump' ) {
|
|
351
|
+
|
|
352
|
+
precisionstring += '\n#define MEDIUM_PRECISION';
|
|
353
|
+
|
|
354
|
+
} else if ( parameters.precision === 'lowp' ) {
|
|
355
|
+
|
|
356
|
+
precisionstring += '\n#define LOW_PRECISION';
|
|
357
|
+
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return precisionstring;
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
function generateShadowMapTypeDefine( parameters ) {
|
|
365
|
+
|
|
366
|
+
let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';
|
|
367
|
+
|
|
368
|
+
if ( parameters.shadowMapType === PCFShadowMap ) {
|
|
369
|
+
|
|
370
|
+
shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';
|
|
371
|
+
|
|
372
|
+
} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {
|
|
373
|
+
|
|
374
|
+
shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';
|
|
375
|
+
|
|
376
|
+
} else if ( parameters.shadowMapType === VSMShadowMap ) {
|
|
377
|
+
|
|
378
|
+
shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return shadowMapTypeDefine;
|
|
383
|
+
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
function generateEnvMapTypeDefine( parameters ) {
|
|
387
|
+
|
|
388
|
+
let envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
|
|
389
|
+
|
|
390
|
+
if ( parameters.envMap ) {
|
|
391
|
+
|
|
392
|
+
switch ( parameters.envMapMode ) {
|
|
393
|
+
|
|
394
|
+
case CubeReflectionMapping:
|
|
395
|
+
case CubeRefractionMapping:
|
|
396
|
+
envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
|
|
397
|
+
break;
|
|
398
|
+
|
|
399
|
+
case CubeUVReflectionMapping:
|
|
400
|
+
envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';
|
|
401
|
+
break;
|
|
402
|
+
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return envMapTypeDefine;
|
|
408
|
+
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
function generateEnvMapModeDefine( parameters ) {
|
|
412
|
+
|
|
413
|
+
let envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
|
|
414
|
+
|
|
415
|
+
if ( parameters.envMap ) {
|
|
416
|
+
|
|
417
|
+
switch ( parameters.envMapMode ) {
|
|
418
|
+
|
|
419
|
+
case CubeRefractionMapping:
|
|
420
|
+
|
|
421
|
+
envMapModeDefine = 'ENVMAP_MODE_REFRACTION';
|
|
422
|
+
break;
|
|
423
|
+
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
return envMapModeDefine;
|
|
429
|
+
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
function generateEnvMapBlendingDefine( parameters ) {
|
|
433
|
+
|
|
434
|
+
let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';
|
|
435
|
+
|
|
436
|
+
if ( parameters.envMap ) {
|
|
437
|
+
|
|
438
|
+
switch ( parameters.combine ) {
|
|
439
|
+
|
|
440
|
+
case MultiplyOperation:
|
|
441
|
+
envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
|
|
442
|
+
break;
|
|
443
|
+
|
|
444
|
+
case MixOperation:
|
|
445
|
+
envMapBlendingDefine = 'ENVMAP_BLENDING_MIX';
|
|
446
|
+
break;
|
|
447
|
+
|
|
448
|
+
case AddOperation:
|
|
449
|
+
envMapBlendingDefine = 'ENVMAP_BLENDING_ADD';
|
|
450
|
+
break;
|
|
451
|
+
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
return envMapBlendingDefine;
|
|
457
|
+
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
function generateCubeUVSize( parameters ) {
|
|
461
|
+
|
|
462
|
+
const imageHeight = parameters.envMapCubeUVHeight;
|
|
463
|
+
|
|
464
|
+
if ( imageHeight === null ) return null;
|
|
465
|
+
|
|
466
|
+
const maxMip = Math.log2( imageHeight ) - 2;
|
|
467
|
+
|
|
468
|
+
const texelHeight = 1.0 / imageHeight;
|
|
469
|
+
|
|
470
|
+
const texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );
|
|
471
|
+
|
|
472
|
+
return { texelWidth, texelHeight, maxMip };
|
|
473
|
+
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
477
|
+
|
|
478
|
+
// TODO Send this event to Three.js DevTools
|
|
479
|
+
// console.log( 'WebGLProgram', cacheKey );
|
|
480
|
+
|
|
481
|
+
const gl = renderer.getContext();
|
|
482
|
+
|
|
483
|
+
const defines = parameters.defines;
|
|
484
|
+
|
|
485
|
+
let vertexShader = parameters.vertexShader;
|
|
486
|
+
let fragmentShader = parameters.fragmentShader;
|
|
487
|
+
|
|
488
|
+
const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
|
|
489
|
+
const envMapTypeDefine = generateEnvMapTypeDefine( parameters );
|
|
490
|
+
const envMapModeDefine = generateEnvMapModeDefine( parameters );
|
|
491
|
+
const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
|
|
492
|
+
const envMapCubeUVSize = generateCubeUVSize( parameters );
|
|
493
|
+
|
|
494
|
+
const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
|
|
495
|
+
|
|
496
|
+
const customVertexExtensions = generateVertexExtensions( parameters );
|
|
497
|
+
|
|
498
|
+
const customDefines = generateDefines( defines );
|
|
499
|
+
|
|
500
|
+
const program = gl.createProgram();
|
|
501
|
+
|
|
502
|
+
let prefixVertex, prefixFragment;
|
|
503
|
+
let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : '';
|
|
504
|
+
|
|
505
|
+
if ( parameters.isRawShaderMaterial ) {
|
|
506
|
+
|
|
507
|
+
prefixVertex = [
|
|
508
|
+
|
|
509
|
+
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
510
|
+
'#define SHADER_NAME ' + parameters.shaderName,
|
|
511
|
+
|
|
512
|
+
customDefines
|
|
513
|
+
|
|
514
|
+
].filter( filterEmptyLine ).join( '\n' );
|
|
515
|
+
|
|
516
|
+
if ( prefixVertex.length > 0 ) {
|
|
517
|
+
|
|
518
|
+
prefixVertex += '\n';
|
|
519
|
+
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
prefixFragment = [
|
|
523
|
+
|
|
524
|
+
customExtensions,
|
|
525
|
+
|
|
526
|
+
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
527
|
+
'#define SHADER_NAME ' + parameters.shaderName,
|
|
528
|
+
|
|
529
|
+
customDefines
|
|
530
|
+
|
|
531
|
+
].filter( filterEmptyLine ).join( '\n' );
|
|
532
|
+
|
|
533
|
+
if ( prefixFragment.length > 0 ) {
|
|
534
|
+
|
|
535
|
+
prefixFragment += '\n';
|
|
536
|
+
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
} else {
|
|
540
|
+
|
|
541
|
+
prefixVertex = [
|
|
542
|
+
|
|
543
|
+
generatePrecision( parameters ),
|
|
544
|
+
|
|
545
|
+
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
546
|
+
'#define SHADER_NAME ' + parameters.shaderName,
|
|
547
|
+
|
|
548
|
+
customDefines,
|
|
549
|
+
|
|
550
|
+
parameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',
|
|
551
|
+
parameters.batching ? '#define USE_BATCHING' : '',
|
|
552
|
+
parameters.instancing ? '#define USE_INSTANCING' : '',
|
|
553
|
+
parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
|
|
554
|
+
parameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',
|
|
555
|
+
|
|
556
|
+
parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
|
|
557
|
+
parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
|
|
558
|
+
|
|
559
|
+
parameters.map ? '#define USE_MAP' : '',
|
|
560
|
+
parameters.envMap ? '#define USE_ENVMAP' : '',
|
|
561
|
+
parameters.envMap ? '#define ' + envMapModeDefine : '',
|
|
562
|
+
parameters.lightMap ? '#define USE_LIGHTMAP' : '',
|
|
563
|
+
parameters.aoMap ? '#define USE_AOMAP' : '',
|
|
564
|
+
parameters.bumpMap ? '#define USE_BUMPMAP' : '',
|
|
565
|
+
parameters.normalMap ? '#define USE_NORMALMAP' : '',
|
|
566
|
+
parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
|
|
567
|
+
parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
|
|
568
|
+
parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',
|
|
569
|
+
parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
|
|
570
|
+
|
|
571
|
+
parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
|
|
572
|
+
parameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',
|
|
573
|
+
|
|
574
|
+
parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
|
|
575
|
+
parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
|
|
576
|
+
parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
|
|
577
|
+
|
|
578
|
+
parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
|
|
579
|
+
parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
|
|
580
|
+
|
|
581
|
+
parameters.specularMap ? '#define USE_SPECULARMAP' : '',
|
|
582
|
+
parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',
|
|
583
|
+
parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
|
|
584
|
+
|
|
585
|
+
parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
|
|
586
|
+
parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
|
|
587
|
+
parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
|
|
588
|
+
parameters.alphaHash ? '#define USE_ALPHAHASH' : '',
|
|
589
|
+
|
|
590
|
+
parameters.transmission ? '#define USE_TRANSMISSION' : '',
|
|
591
|
+
parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
|
|
592
|
+
parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
|
|
593
|
+
|
|
594
|
+
parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',
|
|
595
|
+
parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',
|
|
596
|
+
|
|
597
|
+
//
|
|
598
|
+
|
|
599
|
+
parameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',
|
|
600
|
+
parameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',
|
|
601
|
+
parameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',
|
|
602
|
+
parameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',
|
|
603
|
+
parameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',
|
|
604
|
+
parameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',
|
|
605
|
+
parameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',
|
|
606
|
+
parameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',
|
|
607
|
+
|
|
608
|
+
parameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',
|
|
609
|
+
parameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',
|
|
610
|
+
|
|
611
|
+
parameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',
|
|
612
|
+
|
|
613
|
+
parameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',
|
|
614
|
+
parameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',
|
|
615
|
+
parameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',
|
|
616
|
+
|
|
617
|
+
parameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',
|
|
618
|
+
parameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',
|
|
619
|
+
|
|
620
|
+
parameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',
|
|
621
|
+
parameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',
|
|
622
|
+
|
|
623
|
+
parameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',
|
|
624
|
+
parameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',
|
|
625
|
+
parameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',
|
|
626
|
+
|
|
627
|
+
parameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',
|
|
628
|
+
parameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',
|
|
629
|
+
|
|
630
|
+
//
|
|
631
|
+
|
|
632
|
+
parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
|
|
633
|
+
parameters.vertexColors ? '#define USE_COLOR' : '',
|
|
634
|
+
parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
|
|
635
|
+
parameters.vertexUv1s ? '#define USE_UV1' : '',
|
|
636
|
+
parameters.vertexUv2s ? '#define USE_UV2' : '',
|
|
637
|
+
parameters.vertexUv3s ? '#define USE_UV3' : '',
|
|
638
|
+
|
|
639
|
+
parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
|
|
640
|
+
|
|
641
|
+
parameters.flatShading ? '#define FLAT_SHADED' : '',
|
|
642
|
+
|
|
643
|
+
parameters.skinning ? '#define USE_SKINNING' : '',
|
|
644
|
+
|
|
645
|
+
parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
|
|
646
|
+
parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
|
|
647
|
+
( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',
|
|
648
|
+
( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',
|
|
649
|
+
( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
|
|
650
|
+
( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
|
|
651
|
+
parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
|
|
652
|
+
parameters.flipSided ? '#define FLIP_SIDED' : '',
|
|
653
|
+
|
|
654
|
+
parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
|
|
655
|
+
parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',
|
|
656
|
+
|
|
657
|
+
parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
|
|
658
|
+
|
|
659
|
+
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
660
|
+
|
|
661
|
+
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
662
|
+
|
|
663
|
+
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
664
|
+
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
665
|
+
|
|
666
|
+
'uniform mat4 modelMatrix;',
|
|
667
|
+
'uniform mat4 modelViewMatrix;',
|
|
668
|
+
'uniform mat4 projectionMatrix;',
|
|
669
|
+
'uniform mat4 viewMatrix;',
|
|
670
|
+
'uniform mat3 normalMatrix;',
|
|
671
|
+
'uniform vec3 cameraPosition;',
|
|
672
|
+
'uniform bool isOrthographic;',
|
|
673
|
+
|
|
674
|
+
'#ifdef USE_INSTANCING',
|
|
675
|
+
|
|
676
|
+
' attribute mat4 instanceMatrix;',
|
|
677
|
+
|
|
678
|
+
'#endif',
|
|
679
|
+
|
|
680
|
+
'#ifdef USE_INSTANCING_COLOR',
|
|
681
|
+
|
|
682
|
+
' attribute vec3 instanceColor;',
|
|
683
|
+
|
|
684
|
+
'#endif',
|
|
685
|
+
|
|
686
|
+
'#ifdef USE_INSTANCING_MORPH',
|
|
687
|
+
|
|
688
|
+
' uniform sampler2D morphTexture;',
|
|
689
|
+
|
|
690
|
+
'#endif',
|
|
691
|
+
|
|
692
|
+
'attribute vec3 position;',
|
|
693
|
+
'attribute vec3 normal;',
|
|
694
|
+
'attribute vec2 uv;',
|
|
695
|
+
|
|
696
|
+
'#ifdef USE_UV1',
|
|
697
|
+
|
|
698
|
+
' attribute vec2 uv1;',
|
|
699
|
+
|
|
700
|
+
'#endif',
|
|
701
|
+
|
|
702
|
+
'#ifdef USE_UV2',
|
|
703
|
+
|
|
704
|
+
' attribute vec2 uv2;',
|
|
705
|
+
|
|
706
|
+
'#endif',
|
|
707
|
+
|
|
708
|
+
'#ifdef USE_UV3',
|
|
709
|
+
|
|
710
|
+
' attribute vec2 uv3;',
|
|
711
|
+
|
|
712
|
+
'#endif',
|
|
713
|
+
|
|
714
|
+
'#ifdef USE_TANGENT',
|
|
715
|
+
|
|
716
|
+
' attribute vec4 tangent;',
|
|
717
|
+
|
|
718
|
+
'#endif',
|
|
719
|
+
|
|
720
|
+
'#if defined( USE_COLOR_ALPHA )',
|
|
721
|
+
|
|
722
|
+
' attribute vec4 color;',
|
|
723
|
+
|
|
724
|
+
'#elif defined( USE_COLOR )',
|
|
725
|
+
|
|
726
|
+
' attribute vec3 color;',
|
|
727
|
+
|
|
728
|
+
'#endif',
|
|
729
|
+
|
|
730
|
+
'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',
|
|
731
|
+
|
|
732
|
+
' attribute vec3 morphTarget0;',
|
|
733
|
+
' attribute vec3 morphTarget1;',
|
|
734
|
+
' attribute vec3 morphTarget2;',
|
|
735
|
+
' attribute vec3 morphTarget3;',
|
|
736
|
+
|
|
737
|
+
' #ifdef USE_MORPHNORMALS',
|
|
738
|
+
|
|
739
|
+
' attribute vec3 morphNormal0;',
|
|
740
|
+
' attribute vec3 morphNormal1;',
|
|
741
|
+
' attribute vec3 morphNormal2;',
|
|
742
|
+
' attribute vec3 morphNormal3;',
|
|
743
|
+
|
|
744
|
+
' #else',
|
|
745
|
+
|
|
746
|
+
' attribute vec3 morphTarget4;',
|
|
747
|
+
' attribute vec3 morphTarget5;',
|
|
748
|
+
' attribute vec3 morphTarget6;',
|
|
749
|
+
' attribute vec3 morphTarget7;',
|
|
750
|
+
|
|
751
|
+
' #endif',
|
|
752
|
+
|
|
753
|
+
'#endif',
|
|
754
|
+
|
|
755
|
+
'#ifdef USE_SKINNING',
|
|
756
|
+
|
|
757
|
+
' attribute vec4 skinIndex;',
|
|
758
|
+
' attribute vec4 skinWeight;',
|
|
759
|
+
|
|
760
|
+
'#endif',
|
|
761
|
+
|
|
762
|
+
'\n'
|
|
763
|
+
|
|
764
|
+
].filter( filterEmptyLine ).join( '\n' );
|
|
765
|
+
|
|
766
|
+
prefixFragment = [
|
|
767
|
+
|
|
768
|
+
customExtensions,
|
|
769
|
+
|
|
770
|
+
generatePrecision( parameters ),
|
|
771
|
+
|
|
772
|
+
'#define SHADER_TYPE ' + parameters.shaderType,
|
|
773
|
+
'#define SHADER_NAME ' + parameters.shaderName,
|
|
774
|
+
|
|
775
|
+
customDefines,
|
|
776
|
+
|
|
777
|
+
parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
|
|
778
|
+
parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
|
|
779
|
+
|
|
780
|
+
parameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',
|
|
781
|
+
parameters.map ? '#define USE_MAP' : '',
|
|
782
|
+
parameters.matcap ? '#define USE_MATCAP' : '',
|
|
783
|
+
parameters.envMap ? '#define USE_ENVMAP' : '',
|
|
784
|
+
parameters.envMap ? '#define ' + envMapTypeDefine : '',
|
|
785
|
+
parameters.envMap ? '#define ' + envMapModeDefine : '',
|
|
786
|
+
parameters.envMap ? '#define ' + envMapBlendingDefine : '',
|
|
787
|
+
envMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',
|
|
788
|
+
envMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',
|
|
789
|
+
envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',
|
|
790
|
+
parameters.lightMap ? '#define USE_LIGHTMAP' : '',
|
|
791
|
+
parameters.aoMap ? '#define USE_AOMAP' : '',
|
|
792
|
+
parameters.bumpMap ? '#define USE_BUMPMAP' : '',
|
|
793
|
+
parameters.normalMap ? '#define USE_NORMALMAP' : '',
|
|
794
|
+
parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
|
|
795
|
+
parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
|
|
796
|
+
parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
|
|
797
|
+
|
|
798
|
+
parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
|
|
799
|
+
parameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',
|
|
800
|
+
|
|
801
|
+
parameters.clearcoat ? '#define USE_CLEARCOAT' : '',
|
|
802
|
+
parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
|
|
803
|
+
parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
|
|
804
|
+
parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
|
|
805
|
+
|
|
806
|
+
parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
|
|
807
|
+
parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
|
|
808
|
+
parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
|
|
809
|
+
|
|
810
|
+
parameters.specularMap ? '#define USE_SPECULARMAP' : '',
|
|
811
|
+
parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',
|
|
812
|
+
parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
|
|
813
|
+
|
|
814
|
+
parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
|
|
815
|
+
parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
|
|
816
|
+
|
|
817
|
+
parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
|
|
818
|
+
parameters.alphaTest ? '#define USE_ALPHATEST' : '',
|
|
819
|
+
parameters.alphaHash ? '#define USE_ALPHAHASH' : '',
|
|
820
|
+
|
|
821
|
+
parameters.sheen ? '#define USE_SHEEN' : '',
|
|
822
|
+
parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',
|
|
823
|
+
parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',
|
|
824
|
+
|
|
825
|
+
parameters.transmission ? '#define USE_TRANSMISSION' : '',
|
|
826
|
+
parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
|
|
827
|
+
parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
|
|
828
|
+
|
|
829
|
+
parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
|
|
830
|
+
parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
|
|
831
|
+
parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
|
|
832
|
+
parameters.vertexUv1s ? '#define USE_UV1' : '',
|
|
833
|
+
parameters.vertexUv2s ? '#define USE_UV2' : '',
|
|
834
|
+
parameters.vertexUv3s ? '#define USE_UV3' : '',
|
|
835
|
+
|
|
836
|
+
parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
|
|
837
|
+
|
|
838
|
+
parameters.gradientMap ? '#define USE_GRADIENTMAP' : '',
|
|
839
|
+
|
|
840
|
+
parameters.flatShading ? '#define FLAT_SHADED' : '',
|
|
841
|
+
|
|
842
|
+
parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
|
|
843
|
+
parameters.flipSided ? '#define FLIP_SIDED' : '',
|
|
844
|
+
|
|
845
|
+
parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
|
|
846
|
+
parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',
|
|
847
|
+
|
|
848
|
+
parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',
|
|
849
|
+
|
|
850
|
+
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
851
|
+
|
|
852
|
+
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
853
|
+
|
|
854
|
+
parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
|
|
855
|
+
|
|
856
|
+
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
857
|
+
( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
858
|
+
|
|
859
|
+
'uniform mat4 viewMatrix;',
|
|
860
|
+
'uniform vec3 cameraPosition;',
|
|
861
|
+
'uniform bool isOrthographic;',
|
|
862
|
+
|
|
863
|
+
( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',
|
|
864
|
+
( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below
|
|
865
|
+
( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
|
|
866
|
+
|
|
867
|
+
parameters.dithering ? '#define DITHERING' : '',
|
|
868
|
+
parameters.opaque ? '#define OPAQUE' : '',
|
|
869
|
+
|
|
870
|
+
ShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below
|
|
871
|
+
getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),
|
|
872
|
+
|
|
873
|
+
parameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',
|
|
874
|
+
|
|
875
|
+
'\n'
|
|
876
|
+
|
|
877
|
+
].filter( filterEmptyLine ).join( '\n' );
|
|
878
|
+
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
vertexShader = resolveIncludes( vertexShader );
|
|
882
|
+
vertexShader = replaceLightNums( vertexShader, parameters );
|
|
883
|
+
vertexShader = replaceClippingPlaneNums( vertexShader, parameters );
|
|
884
|
+
|
|
885
|
+
fragmentShader = resolveIncludes( fragmentShader );
|
|
886
|
+
fragmentShader = replaceLightNums( fragmentShader, parameters );
|
|
887
|
+
fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );
|
|
888
|
+
|
|
889
|
+
vertexShader = unrollLoops( vertexShader );
|
|
890
|
+
fragmentShader = unrollLoops( fragmentShader );
|
|
891
|
+
|
|
892
|
+
if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {
|
|
893
|
+
|
|
894
|
+
// GLSL 3.0 conversion for built-in materials and ShaderMaterial
|
|
895
|
+
|
|
896
|
+
versionString = '#version 300 es\n';
|
|
897
|
+
|
|
898
|
+
prefixVertex = [
|
|
899
|
+
customVertexExtensions,
|
|
900
|
+
'precision mediump sampler2DArray;',
|
|
901
|
+
'#define attribute in',
|
|
902
|
+
'#define varying out',
|
|
903
|
+
'#define texture2D texture'
|
|
904
|
+
].join( '\n' ) + '\n' + prefixVertex;
|
|
905
|
+
|
|
906
|
+
prefixFragment = [
|
|
907
|
+
'precision mediump sampler2DArray;',
|
|
908
|
+
'#define varying in',
|
|
909
|
+
( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
|
|
910
|
+
( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
|
|
911
|
+
'#define gl_FragDepthEXT gl_FragDepth',
|
|
912
|
+
'#define texture2D texture',
|
|
913
|
+
'#define textureCube texture',
|
|
914
|
+
'#define texture2DProj textureProj',
|
|
915
|
+
'#define texture2DLodEXT textureLod',
|
|
916
|
+
'#define texture2DProjLodEXT textureProjLod',
|
|
917
|
+
'#define textureCubeLodEXT textureLod',
|
|
918
|
+
'#define texture2DGradEXT textureGrad',
|
|
919
|
+
'#define texture2DProjGradEXT textureProjGrad',
|
|
920
|
+
'#define textureCubeGradEXT textureGrad'
|
|
921
|
+
].join( '\n' ) + '\n' + prefixFragment;
|
|
922
|
+
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
const vertexGlsl = versionString + prefixVertex + vertexShader;
|
|
926
|
+
const fragmentGlsl = versionString + prefixFragment + fragmentShader;
|
|
927
|
+
|
|
928
|
+
// console.log( '*VERTEX*', vertexGlsl );
|
|
929
|
+
// console.log( '*FRAGMENT*', fragmentGlsl );
|
|
930
|
+
|
|
931
|
+
const glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );
|
|
932
|
+
const glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );
|
|
933
|
+
|
|
934
|
+
gl.attachShader( program, glVertexShader );
|
|
935
|
+
gl.attachShader( program, glFragmentShader );
|
|
936
|
+
|
|
937
|
+
// Force a particular attribute to index 0.
|
|
938
|
+
|
|
939
|
+
if ( parameters.index0AttributeName !== undefined ) {
|
|
940
|
+
|
|
941
|
+
gl.bindAttribLocation( program, 0, parameters.index0AttributeName );
|
|
942
|
+
|
|
943
|
+
} else if ( parameters.morphTargets === true ) {
|
|
944
|
+
|
|
945
|
+
// programs with morphTargets displace position out of attribute 0
|
|
946
|
+
gl.bindAttribLocation( program, 0, 'position' );
|
|
947
|
+
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
gl.linkProgram( program );
|
|
951
|
+
|
|
952
|
+
function onFirstUse( self ) {
|
|
953
|
+
|
|
954
|
+
// check for link errors
|
|
955
|
+
if ( renderer.debug.checkShaderErrors ) {
|
|
956
|
+
|
|
957
|
+
const programLog = gl.getProgramInfoLog( program ).trim();
|
|
958
|
+
const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
|
|
959
|
+
const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
|
|
960
|
+
|
|
961
|
+
let runnable = true;
|
|
962
|
+
let haveDiagnostics = true;
|
|
963
|
+
|
|
964
|
+
if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
|
|
965
|
+
|
|
966
|
+
runnable = false;
|
|
967
|
+
|
|
968
|
+
if ( typeof renderer.debug.onShaderError === 'function' ) {
|
|
969
|
+
|
|
970
|
+
renderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );
|
|
971
|
+
|
|
972
|
+
} else {
|
|
973
|
+
|
|
974
|
+
// default error reporting
|
|
975
|
+
|
|
976
|
+
const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );
|
|
977
|
+
const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
978
|
+
|
|
979
|
+
console.error(
|
|
980
|
+
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
981
|
+
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
982
|
+
'Material Name: ' + self.name + '\n' +
|
|
983
|
+
'Material Type: ' + self.type + '\n\n' +
|
|
984
|
+
'Program Info Log: ' + programLog + '\n' +
|
|
985
|
+
vertexErrors + '\n' +
|
|
986
|
+
fragmentErrors
|
|
987
|
+
);
|
|
988
|
+
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
} else if ( programLog !== '' ) {
|
|
992
|
+
|
|
993
|
+
console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );
|
|
994
|
+
|
|
995
|
+
} else if ( vertexLog === '' || fragmentLog === '' ) {
|
|
996
|
+
|
|
997
|
+
haveDiagnostics = false;
|
|
998
|
+
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
if ( haveDiagnostics ) {
|
|
1002
|
+
|
|
1003
|
+
self.diagnostics = {
|
|
1004
|
+
|
|
1005
|
+
runnable: runnable,
|
|
1006
|
+
|
|
1007
|
+
programLog: programLog,
|
|
1008
|
+
|
|
1009
|
+
vertexShader: {
|
|
1010
|
+
|
|
1011
|
+
log: vertexLog,
|
|
1012
|
+
prefix: prefixVertex
|
|
1013
|
+
|
|
1014
|
+
},
|
|
1015
|
+
|
|
1016
|
+
fragmentShader: {
|
|
1017
|
+
|
|
1018
|
+
log: fragmentLog,
|
|
1019
|
+
prefix: prefixFragment
|
|
1020
|
+
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
};
|
|
1024
|
+
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
// Clean up
|
|
1030
|
+
|
|
1031
|
+
// Crashes in iOS9 and iOS10. #18402
|
|
1032
|
+
// gl.detachShader( program, glVertexShader );
|
|
1033
|
+
// gl.detachShader( program, glFragmentShader );
|
|
1034
|
+
|
|
1035
|
+
gl.deleteShader( glVertexShader );
|
|
1036
|
+
gl.deleteShader( glFragmentShader );
|
|
1037
|
+
|
|
1038
|
+
cachedUniforms = new WebGLUniforms( gl, program );
|
|
1039
|
+
cachedAttributes = fetchAttributeLocations( gl, program );
|
|
1040
|
+
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// set up caching for uniform locations
|
|
1044
|
+
|
|
1045
|
+
let cachedUniforms;
|
|
1046
|
+
|
|
1047
|
+
this.getUniforms = function () {
|
|
1048
|
+
|
|
1049
|
+
if ( cachedUniforms === undefined ) {
|
|
1050
|
+
|
|
1051
|
+
// Populates cachedUniforms and cachedAttributes
|
|
1052
|
+
onFirstUse( this );
|
|
1053
|
+
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
return cachedUniforms;
|
|
1057
|
+
|
|
1058
|
+
};
|
|
1059
|
+
|
|
1060
|
+
// set up caching for attribute locations
|
|
1061
|
+
|
|
1062
|
+
let cachedAttributes;
|
|
1063
|
+
|
|
1064
|
+
this.getAttributes = function () {
|
|
1065
|
+
|
|
1066
|
+
if ( cachedAttributes === undefined ) {
|
|
1067
|
+
|
|
1068
|
+
// Populates cachedAttributes and cachedUniforms
|
|
1069
|
+
onFirstUse( this );
|
|
1070
|
+
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
return cachedAttributes;
|
|
1074
|
+
|
|
1075
|
+
};
|
|
1076
|
+
|
|
1077
|
+
// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,
|
|
1078
|
+
// flag the program as ready immediately. It may cause a stall when it's first used.
|
|
1079
|
+
|
|
1080
|
+
let programReady = ( parameters.rendererExtensionParallelShaderCompile === false );
|
|
1081
|
+
|
|
1082
|
+
this.isReady = function () {
|
|
1083
|
+
|
|
1084
|
+
if ( programReady === false ) {
|
|
1085
|
+
|
|
1086
|
+
programReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );
|
|
1087
|
+
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
return programReady;
|
|
1091
|
+
|
|
1092
|
+
};
|
|
1093
|
+
|
|
1094
|
+
// free resource
|
|
1095
|
+
|
|
1096
|
+
this.destroy = function () {
|
|
1097
|
+
|
|
1098
|
+
bindingStates.releaseStatesOfProgram( this );
|
|
1099
|
+
|
|
1100
|
+
gl.deleteProgram( program );
|
|
1101
|
+
this.program = undefined;
|
|
1102
|
+
|
|
1103
|
+
};
|
|
1104
|
+
|
|
1105
|
+
//
|
|
1106
|
+
|
|
1107
|
+
this.type = parameters.shaderType;
|
|
1108
|
+
this.name = parameters.shaderName;
|
|
1109
|
+
this.id = programIdCount ++;
|
|
1110
|
+
this.cacheKey = cacheKey;
|
|
1111
|
+
this.usedTimes = 1;
|
|
1112
|
+
this.program = program;
|
|
1113
|
+
this.vertexShader = glVertexShader;
|
|
1114
|
+
this.fragmentShader = glFragmentShader;
|
|
1115
|
+
|
|
1116
|
+
return this;
|
|
1117
|
+
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
export { WebGLProgram };
|