super-three 0.157.1 → 0.160.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/build/three.cjs +3100 -1537
- package/build/three.js +3100 -1537
- package/build/three.min.js +1 -1
- package/build/three.module.js +3093 -1538
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +291 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +62 -41
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +53 -48
- package/examples/jsm/exporters/GLTFExporter.js +151 -3
- package/examples/jsm/exporters/USDZExporter.js +27 -19
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/helpers/TextureHelper.js +237 -0
- package/examples/jsm/interactive/HTMLMesh.js +9 -2
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/lines/LineMaterial.js +16 -33
- package/examples/jsm/loaders/ColladaLoader.js +0 -6
- package/examples/jsm/loaders/DRACOLoader.js +4 -3
- package/examples/jsm/loaders/FBXLoader.js +294 -124
- package/examples/jsm/loaders/GLTFLoader.js +83 -6
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/MaterialXLoader.js +73 -54
- package/examples/jsm/loaders/NRRDLoader.js +0 -13
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/USDZLoader.js +3 -17
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +85 -7
- package/examples/jsm/misc/Timer.js +119 -0
- package/examples/jsm/misc/TubePainter.js +3 -6
- package/examples/jsm/modifiers/CurveModifier.js +20 -2
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +16 -12
- package/examples/jsm/nodes/accessors/CameraNode.js +18 -2
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +5 -73
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +11 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +12 -3
- package/examples/jsm/nodes/accessors/MorphNode.js +191 -16
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +25 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +123 -37
- package/examples/jsm/nodes/code/CodeNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/AttributeNode.js +7 -1
- package/examples/jsm/nodes/core/CacheNode.js +4 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +13 -15
- package/examples/jsm/nodes/core/NodeBuilder.js +209 -42
- package/examples/jsm/nodes/core/NodeFrame.js +10 -8
- package/examples/jsm/nodes/core/NodeUniform.js +12 -0
- package/examples/jsm/nodes/core/NodeUtils.js +7 -9
- package/examples/jsm/nodes/core/OutputStructNode.js +4 -4
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +15 -6
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/StructTypeNode.js +4 -4
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformGroup.js +13 -0
- package/examples/jsm/nodes/core/UniformGroupNode.js +36 -0
- package/examples/jsm/nodes/core/UniformNode.js +17 -0
- package/examples/jsm/nodes/core/VarNode.js +7 -34
- package/examples/jsm/nodes/core/VaryingNode.js +3 -7
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +6 -10
- package/examples/jsm/nodes/display/GaussianBlurNode.js +170 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/PassNode.js +182 -0
- package/examples/jsm/nodes/display/ViewportDepthNode.js +31 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +17 -10
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +55 -6
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -18
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +80 -20
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +76 -77
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +82 -60
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +10 -10
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +128 -54
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +1430 -618
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +24 -14
- package/examples/jsm/nodes/math/MathNode.js +2 -0
- package/examples/jsm/nodes/math/OperatorNode.js +24 -27
- package/examples/jsm/nodes/shadernode/ShaderNode.js +158 -10
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/FunctionOverloadingNode.js +95 -0
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +10 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/QuadMesh.js +60 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/GTAOPass.js +572 -0
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +3 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Animation.js +10 -21
- package/examples/jsm/renderers/common/Backend.js +19 -3
- package/examples/jsm/renderers/common/Background.js +20 -22
- package/examples/jsm/renderers/common/Bindings.js +31 -22
- package/examples/jsm/renderers/common/ChainMap.js +3 -3
- package/examples/jsm/renderers/common/Color4.js +37 -0
- package/examples/jsm/renderers/common/Geometries.js +4 -4
- package/examples/jsm/renderers/common/Info.js +12 -2
- package/examples/jsm/renderers/common/Pipelines.js +3 -51
- package/examples/jsm/renderers/common/PostProcessing.js +25 -0
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderContexts.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +21 -2
- package/examples/jsm/renderers/common/RenderObjects.js +5 -3
- package/examples/jsm/renderers/common/Renderer.js +137 -37
- package/examples/jsm/renderers/common/StorageTexture.js +1 -0
- package/examples/jsm/renderers/common/Textures.js +8 -37
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +44 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +121 -19
- package/examples/jsm/renderers/webgl/WebGLBackend.js +366 -67
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +183 -38
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +92 -5
- package/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +36 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +11 -1
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +71 -2
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +42 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +33 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +4 -14
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +188 -137
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +1 -1
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +241 -90
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -10
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +11 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +2 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +88 -6
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +135 -133
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GTAOShader.js +424 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +8 -5
- package/examples/jsm/shaders/PoissonDenoiseShader.js +226 -0
- package/examples/jsm/shaders/SAOShader.js +7 -3
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +8 -3
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +270 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +941 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +715 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/utils/SortUtils.js +158 -0
- package/examples/jsm/utils/TextureUtils.js +33 -21
- package/examples/jsm/webxr/ARButton.js +14 -0
- package/examples/jsm/webxr/VRButton.js +24 -9
- package/examples/jsm/webxr/XRButton.js +27 -11
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -6
- package/src/Three.js +1 -0
- package/src/constants.js +8 -1
- package/src/core/BufferAttribute.js +21 -2
- package/src/core/InterleavedBuffer.js +21 -1
- package/src/core/Object3D.js +60 -12
- package/src/core/UniformsGroup.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/extras/curves/LineCurve3.js +4 -0
- package/src/loaders/AudioLoader.js +1 -1
- package/src/loaders/BufferGeometryLoader.js +0 -7
- package/src/loaders/ImageBitmapLoader.js +25 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/loaders/ObjectLoader.js +49 -0
- package/src/materials/Material.js +27 -13
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Box3.js +35 -18
- package/src/math/ColorManagement.js +0 -16
- package/src/math/Quaternion.js +5 -4
- package/src/math/Sphere.js +2 -0
- package/src/math/Triangle.js +17 -5
- package/src/math/Vector3.js +11 -12
- package/src/objects/BatchedMesh.js +1020 -0
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGL3DRenderTarget.js +2 -2
- package/src/renderers/WebGLArrayRenderTarget.js +2 -2
- package/src/renderers/WebGLRenderer.js +165 -43
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +19 -0
- package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -5
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +31 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +9 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +9 -17
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +84 -0
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk.js +4 -0
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +3 -0
- package/src/renderers/webgl/WebGLAttributes.js +39 -5
- package/src/renderers/webgl/WebGLBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +31 -0
- package/src/renderers/webgl/WebGLLights.js +11 -2
- package/src/renderers/webgl/WebGLProgram.js +100 -51
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLShadowMap.js +35 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +7 -11
- package/src/renderers/webgl/WebGLUniforms.js +11 -1
- package/src/renderers/webgl/WebGLUniformsGroups.js +72 -93
- package/src/renderers/webxr/WebXRManager.js +16 -0
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { MathNode, GLSLNodeParser, NodeBuilder, NodeMaterial } from '../../../nodes/Nodes.js';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import UniformBuffer from '../../common/UniformBuffer.js';
|
|
4
|
+
import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
|
|
5
|
+
|
|
4
6
|
import { NodeSampledTexture, NodeSampledCubeTexture } from '../../common/nodes/NodeSampledTexture.js';
|
|
5
7
|
|
|
8
|
+
import { IntType } from 'three';
|
|
9
|
+
|
|
6
10
|
const glslMethods = {
|
|
7
11
|
[ MathNode.ATAN2 ]: 'atan',
|
|
8
12
|
textureDimensions: 'textureSize'
|
|
@@ -14,13 +18,24 @@ const precisionLib = {
|
|
|
14
18
|
high: 'highp'
|
|
15
19
|
};
|
|
16
20
|
|
|
21
|
+
const supports = {
|
|
22
|
+
instance: true
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const defaultPrecisions = `
|
|
26
|
+
precision highp float;
|
|
27
|
+
precision highp int;
|
|
28
|
+
precision mediump sampler2DArray;
|
|
29
|
+
precision lowp sampler2DShadow;
|
|
30
|
+
`;
|
|
31
|
+
|
|
17
32
|
class GLSLNodeBuilder extends NodeBuilder {
|
|
18
33
|
|
|
19
34
|
constructor( object, renderer, scene = null ) {
|
|
20
35
|
|
|
21
36
|
super( object, renderer, new GLSLNodeParser(), scene );
|
|
22
37
|
|
|
23
|
-
this.
|
|
38
|
+
this.uniformGroups = {};
|
|
24
39
|
|
|
25
40
|
}
|
|
26
41
|
|
|
@@ -38,35 +53,81 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
38
53
|
|
|
39
54
|
}
|
|
40
55
|
|
|
41
|
-
|
|
56
|
+
buildFunctionCode( shaderNode ) {
|
|
57
|
+
|
|
58
|
+
const layout = shaderNode.layout;
|
|
59
|
+
const flowData = this.flowShaderNode( shaderNode );
|
|
60
|
+
|
|
61
|
+
const parameters = [];
|
|
62
|
+
|
|
63
|
+
for ( const input of layout.inputs ) {
|
|
64
|
+
|
|
65
|
+
parameters.push( this.getType( input.type ) + ' ' + input.name );
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//
|
|
70
|
+
|
|
71
|
+
const code = `${ this.getType( layout.type ) } ${ layout.name }( ${ parameters.join( ', ' ) } ) {
|
|
72
|
+
|
|
73
|
+
${ flowData.vars }
|
|
74
|
+
|
|
75
|
+
${ flowData.code }
|
|
76
|
+
return ${ flowData.result };
|
|
77
|
+
|
|
78
|
+
}`;
|
|
79
|
+
|
|
80
|
+
//
|
|
81
|
+
|
|
82
|
+
return code;
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0' ) {
|
|
87
|
+
|
|
88
|
+
if ( depthSnippet ) {
|
|
89
|
+
|
|
90
|
+
return `texelFetch( ${ textureProperty }, ivec3( ${ uvIndexSnippet }, ${ depthSnippet } ), ${ levelSnippet } )`;
|
|
91
|
+
|
|
92
|
+
} else {
|
|
93
|
+
|
|
94
|
+
return `texelFetch( ${ textureProperty }, ${ uvIndexSnippet }, ${ levelSnippet } )`;
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
generateTexture( texture, textureProperty, uvSnippet, depthSnippet ) {
|
|
42
101
|
|
|
43
102
|
if ( texture.isTextureCube ) {
|
|
44
103
|
|
|
45
|
-
return `textureCube( ${textureProperty}, ${uvSnippet} )`;
|
|
104
|
+
return `textureCube( ${ textureProperty }, ${ uvSnippet } )`;
|
|
46
105
|
|
|
47
106
|
} else if ( texture.isDepthTexture ) {
|
|
48
107
|
|
|
49
|
-
return `texture( ${textureProperty}, ${uvSnippet} ).x`;
|
|
108
|
+
return `texture( ${ textureProperty }, ${ uvSnippet } ).x`;
|
|
50
109
|
|
|
51
110
|
} else {
|
|
52
111
|
|
|
53
|
-
|
|
112
|
+
if ( depthSnippet ) uvSnippet = `vec3( ${ uvSnippet }, ${ depthSnippet } )`;
|
|
113
|
+
|
|
114
|
+
return `texture( ${ textureProperty }, ${ uvSnippet } )`;
|
|
54
115
|
|
|
55
116
|
}
|
|
56
117
|
|
|
57
118
|
}
|
|
58
119
|
|
|
59
|
-
|
|
120
|
+
generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet ) {
|
|
60
121
|
|
|
61
|
-
return `textureLod( ${textureProperty}, ${uvSnippet}, ${
|
|
122
|
+
return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
|
|
62
123
|
|
|
63
124
|
}
|
|
64
125
|
|
|
65
|
-
|
|
126
|
+
generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
|
|
66
127
|
|
|
67
128
|
if ( shaderStage === 'fragment' ) {
|
|
68
129
|
|
|
69
|
-
return `texture( ${textureProperty}, vec3( ${uvSnippet}, ${compareSnippet} ) )`;
|
|
130
|
+
return `texture( ${ textureProperty }, vec3( ${ uvSnippet }, ${ compareSnippet } ) )`;
|
|
70
131
|
|
|
71
132
|
} else {
|
|
72
133
|
|
|
@@ -82,11 +143,15 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
82
143
|
|
|
83
144
|
const vars = this.vars[ shaderStage ];
|
|
84
145
|
|
|
85
|
-
|
|
146
|
+
if ( vars !== undefined ) {
|
|
147
|
+
|
|
148
|
+
for ( const variable of vars ) {
|
|
149
|
+
|
|
150
|
+
if ( variable.isOutputStructVar ) continue;
|
|
86
151
|
|
|
87
|
-
|
|
152
|
+
snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
|
|
88
153
|
|
|
89
|
-
|
|
154
|
+
}
|
|
90
155
|
|
|
91
156
|
}
|
|
92
157
|
|
|
@@ -99,7 +164,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
99
164
|
const uniforms = this.uniforms[ shaderStage ];
|
|
100
165
|
|
|
101
166
|
const bindingSnippets = [];
|
|
102
|
-
const
|
|
167
|
+
const uniformGroups = {};
|
|
103
168
|
|
|
104
169
|
for ( const uniform of uniforms ) {
|
|
105
170
|
|
|
@@ -108,19 +173,34 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
108
173
|
|
|
109
174
|
if ( uniform.type === 'texture' ) {
|
|
110
175
|
|
|
111
|
-
|
|
176
|
+
const texture = uniform.node.value;
|
|
177
|
+
|
|
178
|
+
if ( texture.compareFunction ) {
|
|
179
|
+
|
|
180
|
+
snippet = `sampler2DShadow ${ uniform.name };`;
|
|
112
181
|
|
|
113
|
-
|
|
182
|
+
} else if ( texture.isDataArrayTexture === true ) {
|
|
183
|
+
|
|
184
|
+
snippet = `sampler2DArray ${ uniform.name };`;
|
|
114
185
|
|
|
115
186
|
} else {
|
|
116
187
|
|
|
117
|
-
snippet = `sampler2D ${uniform.name};`;
|
|
188
|
+
snippet = `sampler2D ${ uniform.name };`;
|
|
118
189
|
|
|
119
190
|
}
|
|
120
191
|
|
|
121
192
|
} else if ( uniform.type === 'cubeTexture' ) {
|
|
122
193
|
|
|
123
|
-
snippet = `samplerCube ${uniform.name};`;
|
|
194
|
+
snippet = `samplerCube ${ uniform.name };`;
|
|
195
|
+
|
|
196
|
+
} else if ( uniform.type === 'buffer' ) {
|
|
197
|
+
|
|
198
|
+
const bufferNode = uniform.node;
|
|
199
|
+
const bufferType = this.getType( bufferNode.bufferType );
|
|
200
|
+
const bufferCount = bufferNode.bufferCount;
|
|
201
|
+
|
|
202
|
+
const bufferCountSnippet = bufferCount > 0 ? bufferCount : '';
|
|
203
|
+
snippet = `${bufferNode.name} {\n\t${ bufferType } ${ uniform.name }[${ bufferCountSnippet }];\n};\n`;
|
|
124
204
|
|
|
125
205
|
} else {
|
|
126
206
|
|
|
@@ -144,6 +224,9 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
144
224
|
|
|
145
225
|
snippet = '\t' + snippet;
|
|
146
226
|
|
|
227
|
+
const groupName = uniform.groupNode.name;
|
|
228
|
+
const groupSnippets = uniformGroups[ groupName ] || ( uniformGroups[ groupName ] = [] );
|
|
229
|
+
|
|
147
230
|
groupSnippets.push( snippet );
|
|
148
231
|
|
|
149
232
|
} else {
|
|
@@ -158,9 +241,11 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
158
241
|
|
|
159
242
|
let output = '';
|
|
160
243
|
|
|
161
|
-
|
|
244
|
+
for ( const name in uniformGroups ) {
|
|
162
245
|
|
|
163
|
-
|
|
246
|
+
const groupSnippets = uniformGroups[ name ];
|
|
247
|
+
|
|
248
|
+
output += this._getGLSLUniformStruct( shaderStage + '_' + name, groupSnippets.join( '\n' ) ) + '\n';
|
|
164
249
|
|
|
165
250
|
}
|
|
166
251
|
|
|
@@ -170,13 +255,37 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
170
255
|
|
|
171
256
|
}
|
|
172
257
|
|
|
258
|
+
getTypeFromAttribute( attribute ) {
|
|
259
|
+
|
|
260
|
+
let nodeType = super.getTypeFromAttribute( attribute );
|
|
261
|
+
|
|
262
|
+
if ( /^[iu]/.test( nodeType ) && attribute.gpuType !== IntType ) {
|
|
263
|
+
|
|
264
|
+
let dataAttribute = attribute;
|
|
265
|
+
|
|
266
|
+
if ( attribute.isInterleavedBufferAttribute ) dataAttribute = attribute.data;
|
|
267
|
+
|
|
268
|
+
const array = dataAttribute.array;
|
|
269
|
+
|
|
270
|
+
if ( ( array instanceof Uint32Array || array instanceof Int32Array ) === false ) {
|
|
271
|
+
|
|
272
|
+
nodeType = nodeType.slice( 1 );
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return nodeType;
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
173
282
|
getAttributes( shaderStage ) {
|
|
174
283
|
|
|
175
284
|
let snippet = '';
|
|
176
285
|
|
|
177
286
|
if ( shaderStage === 'vertex' ) {
|
|
178
287
|
|
|
179
|
-
const attributes = this.
|
|
288
|
+
const attributes = this.getAttributesArray();
|
|
180
289
|
|
|
181
290
|
let location = 0;
|
|
182
291
|
|
|
@@ -215,7 +324,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
215
324
|
|
|
216
325
|
if ( structs.length === 0 ) {
|
|
217
326
|
|
|
218
|
-
return
|
|
327
|
+
return 'layout( location = 0 ) out vec4 fragColor;\n';
|
|
219
328
|
|
|
220
329
|
}
|
|
221
330
|
|
|
@@ -223,7 +332,7 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
223
332
|
|
|
224
333
|
const struct = structs[ index ];
|
|
225
334
|
|
|
226
|
-
let snippet =
|
|
335
|
+
let snippet = '\n';
|
|
227
336
|
snippet += this.getStructMembers( struct );
|
|
228
337
|
snippet += '\n';
|
|
229
338
|
|
|
@@ -245,7 +354,10 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
245
354
|
|
|
246
355
|
for ( const varying of varyings ) {
|
|
247
356
|
|
|
248
|
-
|
|
357
|
+
const type = varying.type;
|
|
358
|
+
const flat = type === 'int' || type === 'uint' ? 'flat ' : '';
|
|
359
|
+
|
|
360
|
+
snippet += `${flat}${varying.needsInterpolation ? 'out' : '/*out*/'} ${type} ${varying.name};\n`;
|
|
249
361
|
|
|
250
362
|
}
|
|
251
363
|
|
|
@@ -255,7 +367,10 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
255
367
|
|
|
256
368
|
if ( varying.needsInterpolation ) {
|
|
257
369
|
|
|
258
|
-
|
|
370
|
+
const type = varying.type;
|
|
371
|
+
const flat = type === 'int' || type === 'uint' ? 'flat ' : '';
|
|
372
|
+
|
|
373
|
+
snippet += `${flat}in ${type} ${varying.name};\n`;
|
|
259
374
|
|
|
260
375
|
}
|
|
261
376
|
|
|
@@ -269,7 +384,13 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
269
384
|
|
|
270
385
|
getVertexIndex() {
|
|
271
386
|
|
|
272
|
-
return 'gl_VertexID';
|
|
387
|
+
return 'uint( gl_VertexID )';
|
|
388
|
+
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
getInstanceIndex() {
|
|
392
|
+
|
|
393
|
+
return 'uint( gl_InstanceID )';
|
|
273
394
|
|
|
274
395
|
}
|
|
275
396
|
|
|
@@ -285,6 +406,19 @@ class GLSLNodeBuilder extends NodeBuilder {
|
|
|
285
406
|
|
|
286
407
|
}
|
|
287
408
|
|
|
409
|
+
getFragDepth() {
|
|
410
|
+
|
|
411
|
+
return 'gl_FragDepth';
|
|
412
|
+
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
isAvailable( name ) {
|
|
416
|
+
|
|
417
|
+
return supports[ name ] === true;
|
|
418
|
+
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
|
|
288
422
|
isFlipY() {
|
|
289
423
|
|
|
290
424
|
return true;
|
|
@@ -307,8 +441,7 @@ ${vars}
|
|
|
307
441
|
${ this.getSignature() }
|
|
308
442
|
|
|
309
443
|
// precision
|
|
310
|
-
|
|
311
|
-
precision highp int;
|
|
444
|
+
${ defaultPrecisions }
|
|
312
445
|
|
|
313
446
|
// uniforms
|
|
314
447
|
${shaderData.uniforms}
|
|
@@ -344,9 +477,7 @@ void main() {
|
|
|
344
477
|
${ this.getSignature() }
|
|
345
478
|
|
|
346
479
|
// precision
|
|
347
|
-
|
|
348
|
-
precision highp int;
|
|
349
|
-
precision lowp sampler2DShadow;
|
|
480
|
+
${ defaultPrecisions }
|
|
350
481
|
|
|
351
482
|
// uniforms
|
|
352
483
|
${shaderData.uniforms}
|
|
@@ -440,9 +571,6 @@ void main() {
|
|
|
440
571
|
this.vertexShader = this._getGLSLVertexCode( shadersData.vertex );
|
|
441
572
|
this.fragmentShader = this._getGLSLFragmentCode( shadersData.fragment );
|
|
442
573
|
|
|
443
|
-
//console.log( this.vertexShader );
|
|
444
|
-
//console.log( this.fragmentShader );
|
|
445
|
-
|
|
446
574
|
} else {
|
|
447
575
|
|
|
448
576
|
console.warn( 'GLSLNodeBuilder: compute shaders are not supported.' );
|
|
@@ -455,7 +583,7 @@ void main() {
|
|
|
455
583
|
getUniformFromNode( node, type, shaderStage, name = null ) {
|
|
456
584
|
|
|
457
585
|
const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );
|
|
458
|
-
const nodeData = this.getDataFromNode( node, shaderStage );
|
|
586
|
+
const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache );
|
|
459
587
|
|
|
460
588
|
let uniformGPU = nodeData.uniformGPU;
|
|
461
589
|
|
|
@@ -473,16 +601,33 @@ void main() {
|
|
|
473
601
|
|
|
474
602
|
this.bindings[ shaderStage ].push( uniformGPU );
|
|
475
603
|
|
|
604
|
+
} else if ( type === 'buffer' ) {
|
|
605
|
+
|
|
606
|
+
node.name = `NodeBuffer_${node.id}`;
|
|
607
|
+
|
|
608
|
+
const buffer = new UniformBuffer( node.name, node.value );
|
|
609
|
+
|
|
610
|
+
uniformNode.name = `buffer${node.id}`;
|
|
611
|
+
|
|
612
|
+
this.bindings[ shaderStage ].push( buffer );
|
|
613
|
+
|
|
614
|
+
uniformGPU = buffer;
|
|
615
|
+
|
|
476
616
|
} else {
|
|
477
617
|
|
|
478
|
-
|
|
618
|
+
const group = node.groupNode;
|
|
619
|
+
const groupName = group.name;
|
|
620
|
+
|
|
621
|
+
const uniformsStage = this.uniformGroups[ shaderStage ] || ( this.uniformGroups[ shaderStage ] = {} );
|
|
622
|
+
|
|
623
|
+
let uniformsGroup = uniformsStage[ groupName ];
|
|
479
624
|
|
|
480
625
|
if ( uniformsGroup === undefined ) {
|
|
481
626
|
|
|
482
|
-
uniformsGroup = new
|
|
627
|
+
uniformsGroup = new NodeUniformsGroup( shaderStage + '_' + groupName, group );
|
|
483
628
|
//uniformsGroup.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
484
629
|
|
|
485
|
-
|
|
630
|
+
uniformsStage[ groupName ] = uniformsGroup;
|
|
486
631
|
|
|
487
632
|
this.bindings[ shaderStage ].push( uniformsGroup );
|
|
488
633
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { IntType } from 'three';
|
|
2
|
+
|
|
1
3
|
class WebGLAttributeUtils {
|
|
2
4
|
|
|
3
5
|
constructor( backend ) {
|
|
@@ -14,11 +16,24 @@ class WebGLAttributeUtils {
|
|
|
14
16
|
const array = attribute.array;
|
|
15
17
|
const usage = attribute.usage || gl.STATIC_DRAW;
|
|
16
18
|
|
|
17
|
-
const
|
|
19
|
+
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
20
|
+
const bufferData = backend.get( bufferAttribute );
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
let bufferGPU = bufferData.bufferGPU;
|
|
23
|
+
|
|
24
|
+
if ( bufferGPU === undefined ) {
|
|
25
|
+
|
|
26
|
+
bufferGPU = gl.createBuffer();
|
|
27
|
+
|
|
28
|
+
gl.bindBuffer( bufferType, bufferGPU );
|
|
29
|
+
gl.bufferData( bufferType, array, usage );
|
|
30
|
+
gl.bindBuffer( bufferType, null );
|
|
31
|
+
|
|
32
|
+
bufferData.bufferGPU = bufferGPU;
|
|
33
|
+
bufferData.bufferType = bufferType;
|
|
34
|
+
bufferData.version = bufferAttribute.version;
|
|
35
|
+
|
|
36
|
+
}
|
|
22
37
|
|
|
23
38
|
//attribute.onUploadCallback();
|
|
24
39
|
|
|
@@ -74,11 +89,83 @@ class WebGLAttributeUtils {
|
|
|
74
89
|
bufferGPU,
|
|
75
90
|
type,
|
|
76
91
|
bytesPerElement: array.BYTES_PER_ELEMENT,
|
|
77
|
-
version: attribute.version
|
|
92
|
+
version: attribute.version,
|
|
93
|
+
isInteger: type === gl.INT || type === gl.UNSIGNED_INT || attribute.gpuType === IntType
|
|
78
94
|
} );
|
|
79
95
|
|
|
80
96
|
}
|
|
81
97
|
|
|
98
|
+
updateAttribute( attribute ) {
|
|
99
|
+
|
|
100
|
+
const backend = this.backend;
|
|
101
|
+
const { gl } = backend;
|
|
102
|
+
|
|
103
|
+
const array = attribute.array;
|
|
104
|
+
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
105
|
+
const bufferData = backend.get( bufferAttribute );
|
|
106
|
+
const bufferType = bufferData.bufferType;
|
|
107
|
+
const updateRanges = attribute.isInterleavedBufferAttribute ? attribute.data.updateRanges : attribute.updateRanges;
|
|
108
|
+
|
|
109
|
+
gl.bindBuffer( bufferType, bufferData.bufferGPU );
|
|
110
|
+
|
|
111
|
+
if ( updateRanges.length === 0 ) {
|
|
112
|
+
|
|
113
|
+
// Not using update ranges
|
|
114
|
+
|
|
115
|
+
gl.bufferSubData( bufferType, 0, array );
|
|
116
|
+
|
|
117
|
+
} else {
|
|
118
|
+
|
|
119
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
120
|
+
|
|
121
|
+
const range = updateRanges[ i ];
|
|
122
|
+
gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
|
|
123
|
+
array, range.start, range.count );
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
bufferAttribute.clearUpdateRanges();
|
|
128
|
+
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
gl.bindBuffer( bufferType, null );
|
|
132
|
+
|
|
133
|
+
bufferData.version = bufferAttribute.version;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
async getArrayBufferAsync( attribute ) {
|
|
138
|
+
|
|
139
|
+
const backend = this.backend;
|
|
140
|
+
const { gl } = backend;
|
|
141
|
+
|
|
142
|
+
const bufferAttribute = attribute.isInterleavedBufferAttribute ? attribute.data : attribute;
|
|
143
|
+
const { bufferGPU } = backend.get( bufferAttribute );
|
|
144
|
+
|
|
145
|
+
const array = attribute.array;
|
|
146
|
+
const byteLength = array.byteLength;
|
|
147
|
+
|
|
148
|
+
gl.bindBuffer( gl.COPY_READ_BUFFER, bufferGPU );
|
|
149
|
+
|
|
150
|
+
const writeBuffer = gl.createBuffer();
|
|
151
|
+
|
|
152
|
+
gl.bindBuffer( gl.COPY_WRITE_BUFFER, writeBuffer );
|
|
153
|
+
gl.bufferData( gl.COPY_WRITE_BUFFER, byteLength, gl.STREAM_READ );
|
|
154
|
+
|
|
155
|
+
gl.copyBufferSubData( gl.COPY_READ_BUFFER, gl.COPY_WRITE_BUFFER, 0, 0, byteLength );
|
|
156
|
+
|
|
157
|
+
await backend.utils._clientWaitAsync();
|
|
158
|
+
|
|
159
|
+
const dstBuffer = new attribute.array.constructor( array.length );
|
|
160
|
+
|
|
161
|
+
gl.getBufferSubData( gl.COPY_WRITE_BUFFER, 0, dstBuffer );
|
|
162
|
+
|
|
163
|
+
gl.deleteBuffer( writeBuffer );
|
|
164
|
+
|
|
165
|
+
return dstBuffer.buffer;
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
82
169
|
}
|
|
83
170
|
|
|
84
171
|
export default WebGLAttributeUtils;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class WebGLCapabilities {
|
|
2
|
+
|
|
3
|
+
constructor( backend ) {
|
|
4
|
+
|
|
5
|
+
this.backend = backend;
|
|
6
|
+
|
|
7
|
+
this.maxAnisotropy = null;
|
|
8
|
+
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
getMaxAnisotropy() {
|
|
12
|
+
|
|
13
|
+
if ( this.maxAnisotropy !== null ) return this.maxAnisotropy;
|
|
14
|
+
|
|
15
|
+
const gl = this.backend.gl;
|
|
16
|
+
const extensions = this.backend.extensions;
|
|
17
|
+
|
|
18
|
+
if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {
|
|
19
|
+
|
|
20
|
+
const extension = extensions.get( 'EXT_texture_filter_anisotropic' );
|
|
21
|
+
|
|
22
|
+
this.maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );
|
|
23
|
+
|
|
24
|
+
} else {
|
|
25
|
+
|
|
26
|
+
this.maxAnisotropy = 0;
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return this.maxAnisotropy;
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default WebGLCapabilities;
|
|
@@ -7,11 +7,21 @@ class WebGLExtensions {
|
|
|
7
7
|
this.gl = this.backend.gl;
|
|
8
8
|
this.availableExtensions = this.gl.getSupportedExtensions();
|
|
9
9
|
|
|
10
|
+
this.extensions = {};
|
|
11
|
+
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
get( name ) {
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
let extension = this.extensions[ name ];
|
|
17
|
+
|
|
18
|
+
if ( extension === undefined ) {
|
|
19
|
+
|
|
20
|
+
extension = this.gl.getExtension( name );
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return extension;
|
|
15
25
|
|
|
16
26
|
}
|
|
17
27
|
|
|
@@ -21,7 +21,7 @@ class WebGLState {
|
|
|
21
21
|
this.currentFlipSided = null;
|
|
22
22
|
this.currentCullFace = null;
|
|
23
23
|
this.currentProgram = null;
|
|
24
|
-
this.currentBlendingEnabled =
|
|
24
|
+
this.currentBlendingEnabled = false;
|
|
25
25
|
this.currentBlending = null;
|
|
26
26
|
this.currentBlendSrc = null;
|
|
27
27
|
this.currentBlendDst = null;
|
|
@@ -30,6 +30,7 @@ class WebGLState {
|
|
|
30
30
|
this.currentPremultipledAlpha = null;
|
|
31
31
|
this.currentPolygonOffsetFactor = null;
|
|
32
32
|
this.currentPolygonOffsetUnits = null;
|
|
33
|
+
this.currentColorMask = null;
|
|
33
34
|
this.currentDepthFunc = null;
|
|
34
35
|
this.currentDepthMask = null;
|
|
35
36
|
this.currentStencilFunc = null;
|
|
@@ -296,6 +297,17 @@ class WebGLState {
|
|
|
296
297
|
|
|
297
298
|
}
|
|
298
299
|
|
|
300
|
+
setColorMask( colorMask ) {
|
|
301
|
+
|
|
302
|
+
if ( this.currentColorMask !== colorMask ) {
|
|
303
|
+
|
|
304
|
+
this.gl.colorMask( colorMask, colorMask, colorMask, colorMask );
|
|
305
|
+
this.currentColorMask = colorMask;
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
}
|
|
310
|
+
|
|
299
311
|
setDepthTest( depthTest ) {
|
|
300
312
|
|
|
301
313
|
const { gl } = this;
|
|
@@ -462,7 +474,7 @@ class WebGLState {
|
|
|
462
474
|
this.setDepthFunc( material.depthFunc );
|
|
463
475
|
this.setDepthTest( material.depthTest );
|
|
464
476
|
this.setDepthMask( material.depthWrite );
|
|
465
|
-
this.
|
|
477
|
+
this.setColorMask( material.colorWrite );
|
|
466
478
|
|
|
467
479
|
const stencilWrite = material.stencilWrite;
|
|
468
480
|
this.setStencilTest( stencilWrite );
|