super-three 0.135.0 → 0.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.js +527 -332
- package/build/three.min.js +1 -1
- package/build/three.module.js +752 -370
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +1 -3
- package/examples/js/controls/ArcballControls.js +38 -52
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +1 -1
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/ColladaLoader.js +1 -2
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +3 -4
- package/examples/js/loaders/GLTFLoader.js +2 -2
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +11 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +1 -1
- package/examples/js/loaders/RGBELoader.js +0 -15
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +2 -2
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/js/utils/RoughnessMipmapper.js +18 -29
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- package/examples/jsm/controls/ArcballControls.js +27 -56
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +256 -136
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/ColladaLoader.js +1 -2
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +3 -4
- package/examples/jsm/loaders/GLTFLoader.js +2 -2
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +13 -4
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +30 -9
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +23 -22
- package/examples/jsm/node-editor/examples/rim.json +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +48 -9
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +1 -0
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -116
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/GlitchPass.js +3 -1
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -0
- package/examples/jsm/renderers/nodes/Nodes.js +1 -0
- package/examples/jsm/renderers/nodes/ShaderNode.js +7 -6
- package/examples/jsm/renderers/nodes/core/InputNode.js +1 -1
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +1 -1
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +26 -31
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +2 -2
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +1 -1
- package/examples/jsm/renderers/nodes/math/MathNode.js +5 -3
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +2 -2
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +7 -6
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +42 -61
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +0 -1
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +30 -4
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +19 -32
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/package.json +15 -9
- package/src/Three.Legacy.js +12 -0
- package/src/Three.js +1 -2
- package/src/constants.js +1 -7
- package/src/core/Object3D.js +1 -1
- package/src/extras/PMREMGenerator.js +19 -110
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +23 -6
- package/src/math/Color.js +0 -38
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLRenderer.js +23 -16
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -47
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +27 -1
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +2 -19
- package/src/renderers/webgl/WebGLPrograms.js +191 -35
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLState.js +45 -0
- package/src/renderers/webgl/WebGLTextures.js +195 -26
- package/src/renderers/webxr/WebXRManager.js +10 -3
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/utils.js +1 -37
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WebGLUniforms } from './WebGLUniforms.js';
|
|
2
2
|
import { WebGLShader } from './WebGLShader.js';
|
|
3
3
|
import { ShaderChunk } from '../shaders/ShaderChunk.js';
|
|
4
|
-
import { RGBFormat, NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping,
|
|
4
|
+
import { RGBFormat, NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, sRGBEncoding, LinearEncoding, GLSL3 } from '../../constants.js';
|
|
5
5
|
|
|
6
6
|
let programIdCount = 0;
|
|
7
7
|
|
|
@@ -27,16 +27,6 @@ function getEncodingComponents( encoding ) {
|
|
|
27
27
|
return [ 'Linear', '( value )' ];
|
|
28
28
|
case sRGBEncoding:
|
|
29
29
|
return [ 'sRGB', '( value )' ];
|
|
30
|
-
case RGBEEncoding:
|
|
31
|
-
return [ 'RGBE', '( value )' ];
|
|
32
|
-
case RGBM7Encoding:
|
|
33
|
-
return [ 'RGBM', '( value, 7.0 )' ];
|
|
34
|
-
case RGBM16Encoding:
|
|
35
|
-
return [ 'RGBM', '( value, 16.0 )' ];
|
|
36
|
-
case RGBDEncoding:
|
|
37
|
-
return [ 'RGBD', '( value, 256.0 )' ];
|
|
38
|
-
case GammaEncoding:
|
|
39
|
-
return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];
|
|
40
30
|
default:
|
|
41
31
|
console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );
|
|
42
32
|
return [ 'Linear', '( value )' ];
|
|
@@ -397,9 +387,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
397
387
|
const envMapModeDefine = generateEnvMapModeDefine( parameters );
|
|
398
388
|
const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
|
|
399
389
|
|
|
400
|
-
|
|
401
|
-
const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
|
|
402
|
-
|
|
403
390
|
const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
|
|
404
391
|
|
|
405
392
|
const customDefines = generateDefines( defines );
|
|
@@ -451,8 +438,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
451
438
|
|
|
452
439
|
parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',
|
|
453
440
|
|
|
454
|
-
'#define GAMMA_FACTOR ' + gammaFactorDefine,
|
|
455
|
-
|
|
456
441
|
'#define MAX_BONES ' + parameters.maxBones,
|
|
457
442
|
( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
|
|
458
443
|
( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
|
|
@@ -601,8 +586,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
601
586
|
|
|
602
587
|
customDefines,
|
|
603
588
|
|
|
604
|
-
'#define GAMMA_FACTOR ' + gammaFactorDefine,
|
|
605
|
-
|
|
606
589
|
( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',
|
|
607
590
|
( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',
|
|
608
591
|
|
|
@@ -722,7 +705,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
722
705
|
|
|
723
706
|
prefixFragment = [
|
|
724
707
|
'#define varying in',
|
|
725
|
-
( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',
|
|
708
|
+
( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
|
|
726
709
|
( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
|
|
727
710
|
'#define gl_FragDepthEXT gl_FragDepth',
|
|
728
711
|
'#define texture2D texture',
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { BackSide, DoubleSide, CubeUVRefractionMapping, CubeUVReflectionMapping, LinearEncoding, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping } from '../../constants.js';
|
|
1
|
+
import { BackSide, DoubleSide, CubeUVRefractionMapping, CubeUVReflectionMapping, LinearEncoding, sRGBEncoding, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, RGBAFormat, UnsignedByteType } from '../../constants.js';
|
|
2
|
+
import { Layers } from '../../core/Layers.js';
|
|
2
3
|
import { WebGLProgram } from './WebGLProgram.js';
|
|
4
|
+
import { WebGLShaderCache } from './WebGLShaderCache.js';
|
|
3
5
|
import { ShaderLib } from '../shaders/ShaderLib.js';
|
|
4
6
|
import { UniformsUtils } from '../shaders/UniformsUtils.js';
|
|
5
|
-
import { hashString } from '../../utils.js';
|
|
6
7
|
|
|
7
8
|
function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {
|
|
8
9
|
|
|
10
|
+
const _programLayers = new Layers();
|
|
11
|
+
const _customShaders = new WebGLShaderCache();
|
|
9
12
|
const programs = [];
|
|
10
13
|
|
|
11
14
|
const isWebGL2 = capabilities.isWebGL2;
|
|
@@ -13,7 +16,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
13
16
|
const floatVertexTextures = capabilities.floatVertexTextures;
|
|
14
17
|
const maxVertexUniforms = capabilities.maxVertexUniforms;
|
|
15
18
|
const vertexTextures = capabilities.vertexTextures;
|
|
16
|
-
|
|
17
19
|
let precision = capabilities.precision;
|
|
18
20
|
|
|
19
21
|
const shaderIDs = {
|
|
@@ -34,25 +36,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
34
36
|
SpriteMaterial: 'sprite'
|
|
35
37
|
};
|
|
36
38
|
|
|
37
|
-
const parameterNames = [
|
|
38
|
-
'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',
|
|
39
|
-
'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',
|
|
40
|
-
'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap',
|
|
41
|
-
'objectSpaceNormalMap', 'tangentSpaceNormalMap',
|
|
42
|
-
'clearcoat', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap',
|
|
43
|
-
'displacementMap', 'specularMap', , 'roughnessMap', 'metalnessMap', 'gradientMap',
|
|
44
|
-
'alphaMap', 'alphaTest', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',
|
|
45
|
-
'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',
|
|
46
|
-
'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'morphTargetsCount', 'premultipliedAlpha',
|
|
47
|
-
'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',
|
|
48
|
-
'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',
|
|
49
|
-
'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',
|
|
50
|
-
'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', 'format',
|
|
51
|
-
'specularIntensityMap', 'specularColorMap', 'specularColorMapEncoding',
|
|
52
|
-
'transmission', 'transmissionMap', 'thicknessMap',
|
|
53
|
-
'sheen', 'sheenColorMap', 'sheenColorMapEncoding', 'sheenRoughnessMap'
|
|
54
|
-
];
|
|
55
|
-
|
|
56
39
|
function getMaxBones( object ) {
|
|
57
40
|
|
|
58
41
|
const skeleton = object.skeleton;
|
|
@@ -108,11 +91,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
108
91
|
|
|
109
92
|
}
|
|
110
93
|
|
|
111
|
-
|
|
94
|
+
if ( isWebGL2 && map && map.isTexture && map.format === RGBAFormat && map.type === UnsignedByteType && map.encoding === sRGBEncoding ) {
|
|
112
95
|
|
|
113
96
|
encoding = LinearEncoding; // disable inline decode for sRGB textures in WebGL 2
|
|
114
97
|
|
|
115
|
-
}
|
|
98
|
+
}
|
|
116
99
|
|
|
117
100
|
return encoding;
|
|
118
101
|
|
|
@@ -145,6 +128,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
145
128
|
}
|
|
146
129
|
|
|
147
130
|
let vertexShader, fragmentShader;
|
|
131
|
+
let customVertexShaderID, customFragmentShaderID;
|
|
148
132
|
|
|
149
133
|
if ( shaderID ) {
|
|
150
134
|
|
|
@@ -158,6 +142,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
158
142
|
vertexShader = material.vertexShader;
|
|
159
143
|
fragmentShader = material.fragmentShader;
|
|
160
144
|
|
|
145
|
+
_customShaders.update( material );
|
|
146
|
+
|
|
147
|
+
customVertexShaderID = _customShaders.getVertexShaderID( material );
|
|
148
|
+
customFragmentShaderID = _customShaders.getFragmentShaderID( material );
|
|
149
|
+
|
|
161
150
|
}
|
|
162
151
|
|
|
163
152
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
@@ -176,6 +165,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
176
165
|
fragmentShader: fragmentShader,
|
|
177
166
|
defines: material.defines,
|
|
178
167
|
|
|
168
|
+
customVertexShaderID: customVertexShaderID,
|
|
169
|
+
customFragmentShaderID: customFragmentShaderID,
|
|
170
|
+
|
|
179
171
|
isRawShaderMaterial: material.isRawShaderMaterial === true,
|
|
180
172
|
glslVersion: material.glslVersion,
|
|
181
173
|
|
|
@@ -236,7 +228,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
236
228
|
vertexTangents: ( !! material.normalMap && !! object.geometry && !! object.geometry.attributes.tangent ),
|
|
237
229
|
vertexColors: material.vertexColors,
|
|
238
230
|
vertexAlphas: material.vertexColors === true && !! object.geometry && !! object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,
|
|
239
|
-
vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || material.sheenRoughnessMap,
|
|
231
|
+
vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,
|
|
240
232
|
uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,
|
|
241
233
|
|
|
242
234
|
fog: !! fog,
|
|
@@ -314,8 +306,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
314
306
|
|
|
315
307
|
} else {
|
|
316
308
|
|
|
317
|
-
array.push(
|
|
318
|
-
array.push(
|
|
309
|
+
array.push( parameters.customVertexShaderID );
|
|
310
|
+
array.push( parameters.customFragmentShaderID );
|
|
319
311
|
|
|
320
312
|
}
|
|
321
313
|
|
|
@@ -332,14 +324,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
332
324
|
|
|
333
325
|
if ( parameters.isRawShaderMaterial === false ) {
|
|
334
326
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
array.push( parameters[ parameterNames[ i ] ] );
|
|
338
|
-
|
|
339
|
-
}
|
|
340
|
-
|
|
327
|
+
getProgramCacheKeyParameters( array, parameters );
|
|
328
|
+
getProgramCacheKeyBooleans( array, parameters );
|
|
341
329
|
array.push( renderer.outputEncoding );
|
|
342
|
-
array.push( renderer.gammaFactor );
|
|
343
330
|
|
|
344
331
|
}
|
|
345
332
|
|
|
@@ -349,6 +336,161 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
349
336
|
|
|
350
337
|
}
|
|
351
338
|
|
|
339
|
+
function getProgramCacheKeyParameters( array, parameters ) {
|
|
340
|
+
|
|
341
|
+
array.push( parameters.precision );
|
|
342
|
+
array.push( parameters.outputEncoding );
|
|
343
|
+
array.push( parameters.mapEncoding );
|
|
344
|
+
array.push( parameters.matcapEncoding );
|
|
345
|
+
array.push( parameters.envMapMode );
|
|
346
|
+
array.push( parameters.envMapEncoding );
|
|
347
|
+
array.push( parameters.lightMapEncoding );
|
|
348
|
+
array.push( parameters.emissiveMapEncoding );
|
|
349
|
+
array.push( parameters.combine );
|
|
350
|
+
array.push( parameters.vertexUvs );
|
|
351
|
+
array.push( parameters.fogExp2 );
|
|
352
|
+
array.push( parameters.sizeAttenuation );
|
|
353
|
+
array.push( parameters.maxBones );
|
|
354
|
+
array.push( parameters.morphTargetsCount );
|
|
355
|
+
array.push( parameters.numDirLights );
|
|
356
|
+
array.push( parameters.numPointLights );
|
|
357
|
+
array.push( parameters.numSpotLights );
|
|
358
|
+
array.push( parameters.numHemiLights );
|
|
359
|
+
array.push( parameters.numRectAreaLights );
|
|
360
|
+
array.push( parameters.numDirLightShadows );
|
|
361
|
+
array.push( parameters.numPointLightShadows );
|
|
362
|
+
array.push( parameters.numSpotLightShadows );
|
|
363
|
+
array.push( parameters.shadowMapType );
|
|
364
|
+
array.push( parameters.toneMapping );
|
|
365
|
+
array.push( parameters.numClippingPlanes );
|
|
366
|
+
array.push( parameters.numClipIntersection );
|
|
367
|
+
array.push( parameters.format );
|
|
368
|
+
array.push( parameters.specularColorMapEncoding );
|
|
369
|
+
array.push( parameters.sheenColorMapEncoding );
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function getProgramCacheKeyBooleans( array, parameters ) {
|
|
374
|
+
|
|
375
|
+
_programLayers.disableAll();
|
|
376
|
+
|
|
377
|
+
if ( parameters.isWebGL2 )
|
|
378
|
+
_programLayers.enable( 0 );
|
|
379
|
+
if ( parameters.supportsVertexTextures )
|
|
380
|
+
_programLayers.enable( 1 );
|
|
381
|
+
if ( parameters.instancing )
|
|
382
|
+
_programLayers.enable( 2 );
|
|
383
|
+
if ( parameters.instancingColor )
|
|
384
|
+
_programLayers.enable( 3 );
|
|
385
|
+
if ( parameters.map )
|
|
386
|
+
_programLayers.enable( 4 );
|
|
387
|
+
if ( parameters.matcap )
|
|
388
|
+
_programLayers.enable( 5 );
|
|
389
|
+
if ( parameters.envMap )
|
|
390
|
+
_programLayers.enable( 6 );
|
|
391
|
+
if ( parameters.envMapCubeUV )
|
|
392
|
+
_programLayers.enable( 7 );
|
|
393
|
+
if ( parameters.lightMap )
|
|
394
|
+
_programLayers.enable( 8 );
|
|
395
|
+
if ( parameters.aoMap )
|
|
396
|
+
_programLayers.enable( 9 );
|
|
397
|
+
if ( parameters.emissiveMap )
|
|
398
|
+
_programLayers.enable( 10 );
|
|
399
|
+
if ( parameters.bumpMap )
|
|
400
|
+
_programLayers.enable( 11 );
|
|
401
|
+
if ( parameters.normalMap )
|
|
402
|
+
_programLayers.enable( 12 );
|
|
403
|
+
if ( parameters.objectSpaceNormalMap )
|
|
404
|
+
_programLayers.enable( 13 );
|
|
405
|
+
if ( parameters.tangentSpaceNormalMap )
|
|
406
|
+
_programLayers.enable( 14 );
|
|
407
|
+
if ( parameters.clearcoat )
|
|
408
|
+
_programLayers.enable( 15 );
|
|
409
|
+
if ( parameters.clearcoatMap )
|
|
410
|
+
_programLayers.enable( 16 );
|
|
411
|
+
if ( parameters.clearcoatRoughnessMap )
|
|
412
|
+
_programLayers.enable( 17 );
|
|
413
|
+
if ( parameters.clearcoatNormalMap )
|
|
414
|
+
_programLayers.enable( 18 );
|
|
415
|
+
if ( parameters.displacementMap )
|
|
416
|
+
_programLayers.enable( 19 );
|
|
417
|
+
if ( parameters.specularMap )
|
|
418
|
+
_programLayers.enable( 20 );
|
|
419
|
+
if ( parameters.roughnessMap )
|
|
420
|
+
_programLayers.enable( 21 );
|
|
421
|
+
if ( parameters.metalnessMap )
|
|
422
|
+
_programLayers.enable( 22 );
|
|
423
|
+
if ( parameters.gradientMap )
|
|
424
|
+
_programLayers.enable( 23 );
|
|
425
|
+
if ( parameters.alphaMap )
|
|
426
|
+
_programLayers.enable( 24 );
|
|
427
|
+
if ( parameters.alphaTest )
|
|
428
|
+
_programLayers.enable( 25 );
|
|
429
|
+
if ( parameters.vertexColors )
|
|
430
|
+
_programLayers.enable( 26 );
|
|
431
|
+
if ( parameters.vertexAlphas )
|
|
432
|
+
_programLayers.enable( 27 );
|
|
433
|
+
if ( parameters.vertexUvs )
|
|
434
|
+
_programLayers.enable( 28 );
|
|
435
|
+
if ( parameters.vertexTangents )
|
|
436
|
+
_programLayers.enable( 29 );
|
|
437
|
+
if ( parameters.uvsVertexOnly )
|
|
438
|
+
_programLayers.enable( 30 );
|
|
439
|
+
if ( parameters.fog )
|
|
440
|
+
_programLayers.enable( 31 );
|
|
441
|
+
|
|
442
|
+
array.push( _programLayers.mask );
|
|
443
|
+
_programLayers.disableAll();
|
|
444
|
+
|
|
445
|
+
if ( parameters.useFog )
|
|
446
|
+
_programLayers.enable( 0 );
|
|
447
|
+
if ( parameters.flatShading )
|
|
448
|
+
_programLayers.enable( 1 );
|
|
449
|
+
if ( parameters.logarithmicDepthBuffer )
|
|
450
|
+
_programLayers.enable( 2 );
|
|
451
|
+
if ( parameters.skinning )
|
|
452
|
+
_programLayers.enable( 3 );
|
|
453
|
+
if ( parameters.useVertexTexture )
|
|
454
|
+
_programLayers.enable( 4 );
|
|
455
|
+
if ( parameters.morphTargets )
|
|
456
|
+
_programLayers.enable( 5 );
|
|
457
|
+
if ( parameters.morphNormals )
|
|
458
|
+
_programLayers.enable( 6 );
|
|
459
|
+
if ( parameters.premultipliedAlpha )
|
|
460
|
+
_programLayers.enable( 7 );
|
|
461
|
+
if ( parameters.shadowMapEnabled )
|
|
462
|
+
_programLayers.enable( 8 );
|
|
463
|
+
if ( parameters.physicallyCorrectLights )
|
|
464
|
+
_programLayers.enable( 9 );
|
|
465
|
+
if ( parameters.doubleSided )
|
|
466
|
+
_programLayers.enable( 10 );
|
|
467
|
+
if ( parameters.flipSided )
|
|
468
|
+
_programLayers.enable( 11 );
|
|
469
|
+
if ( parameters.depthPacking )
|
|
470
|
+
_programLayers.enable( 12 );
|
|
471
|
+
if ( parameters.dithering )
|
|
472
|
+
_programLayers.enable( 13 );
|
|
473
|
+
if ( parameters.specularIntensityMap )
|
|
474
|
+
_programLayers.enable( 14 );
|
|
475
|
+
if ( parameters.specularColorMap )
|
|
476
|
+
_programLayers.enable( 15 );
|
|
477
|
+
if ( parameters.transmission )
|
|
478
|
+
_programLayers.enable( 16 );
|
|
479
|
+
if ( parameters.transmissionMap )
|
|
480
|
+
_programLayers.enable( 17 );
|
|
481
|
+
if ( parameters.thicknessMap )
|
|
482
|
+
_programLayers.enable( 18 );
|
|
483
|
+
if ( parameters.sheen )
|
|
484
|
+
_programLayers.enable( 19 );
|
|
485
|
+
if ( parameters.sheenColorMap )
|
|
486
|
+
_programLayers.enable( 20 );
|
|
487
|
+
if ( parameters.sheenRoughnessMap )
|
|
488
|
+
_programLayers.enable( 21 );
|
|
489
|
+
|
|
490
|
+
array.push( _programLayers.mask );
|
|
491
|
+
|
|
492
|
+
}
|
|
493
|
+
|
|
352
494
|
function getUniforms( material ) {
|
|
353
495
|
|
|
354
496
|
const shaderID = shaderIDs[ material.type ];
|
|
@@ -416,14 +558,28 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
416
558
|
|
|
417
559
|
}
|
|
418
560
|
|
|
561
|
+
function releaseShaderCache( material ) {
|
|
562
|
+
|
|
563
|
+
_customShaders.remove( material );
|
|
564
|
+
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
function dispose() {
|
|
568
|
+
|
|
569
|
+
_customShaders.dispose();
|
|
570
|
+
|
|
571
|
+
}
|
|
572
|
+
|
|
419
573
|
return {
|
|
420
574
|
getParameters: getParameters,
|
|
421
575
|
getProgramCacheKey: getProgramCacheKey,
|
|
422
576
|
getUniforms: getUniforms,
|
|
423
577
|
acquireProgram: acquireProgram,
|
|
424
578
|
releaseProgram: releaseProgram,
|
|
579
|
+
releaseShaderCache: releaseShaderCache,
|
|
425
580
|
// Exposed for resource monitoring & error feedback via renderer.info:
|
|
426
|
-
programs: programs
|
|
581
|
+
programs: programs,
|
|
582
|
+
dispose: dispose
|
|
427
583
|
};
|
|
428
584
|
|
|
429
585
|
}
|
|
@@ -8,10 +8,6 @@ function painterSortStable( a, b ) {
|
|
|
8
8
|
|
|
9
9
|
return a.renderOrder - b.renderOrder;
|
|
10
10
|
|
|
11
|
-
} else if ( a.program !== b.program ) {
|
|
12
|
-
|
|
13
|
-
return a.program.id - b.program.id;
|
|
14
|
-
|
|
15
11
|
} else if ( a.material.id !== b.material.id ) {
|
|
16
12
|
|
|
17
13
|
return a.material.id - b.material.id;
|
|
@@ -51,7 +47,7 @@ function reversePainterSortStable( a, b ) {
|
|
|
51
47
|
}
|
|
52
48
|
|
|
53
49
|
|
|
54
|
-
function WebGLRenderList(
|
|
50
|
+
function WebGLRenderList() {
|
|
55
51
|
|
|
56
52
|
const renderItems = [];
|
|
57
53
|
let renderItemsIndex = 0;
|
|
@@ -60,8 +56,6 @@ function WebGLRenderList( properties ) {
|
|
|
60
56
|
const transmissive = [];
|
|
61
57
|
const transparent = [];
|
|
62
58
|
|
|
63
|
-
const defaultProgram = { id: - 1 };
|
|
64
|
-
|
|
65
59
|
function init() {
|
|
66
60
|
|
|
67
61
|
renderItemsIndex = 0;
|
|
@@ -75,7 +69,6 @@ function WebGLRenderList( properties ) {
|
|
|
75
69
|
function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
|
|
76
70
|
|
|
77
71
|
let renderItem = renderItems[ renderItemsIndex ];
|
|
78
|
-
const materialProperties = properties.get( material );
|
|
79
72
|
|
|
80
73
|
if ( renderItem === undefined ) {
|
|
81
74
|
|
|
@@ -84,7 +77,6 @@ function WebGLRenderList( properties ) {
|
|
|
84
77
|
object: object,
|
|
85
78
|
geometry: geometry,
|
|
86
79
|
material: material,
|
|
87
|
-
program: materialProperties.program || defaultProgram,
|
|
88
80
|
groupOrder: groupOrder,
|
|
89
81
|
renderOrder: object.renderOrder,
|
|
90
82
|
z: z,
|
|
@@ -99,7 +91,6 @@ function WebGLRenderList( properties ) {
|
|
|
99
91
|
renderItem.object = object;
|
|
100
92
|
renderItem.geometry = geometry;
|
|
101
93
|
renderItem.material = material;
|
|
102
|
-
renderItem.program = materialProperties.program || defaultProgram;
|
|
103
94
|
renderItem.groupOrder = groupOrder;
|
|
104
95
|
renderItem.renderOrder = object.renderOrder;
|
|
105
96
|
renderItem.z = z;
|
|
@@ -175,7 +166,6 @@ function WebGLRenderList( properties ) {
|
|
|
175
166
|
renderItem.object = null;
|
|
176
167
|
renderItem.geometry = null;
|
|
177
168
|
renderItem.material = null;
|
|
178
|
-
renderItem.program = null;
|
|
179
169
|
renderItem.group = null;
|
|
180
170
|
|
|
181
171
|
}
|
|
@@ -198,7 +188,7 @@ function WebGLRenderList( properties ) {
|
|
|
198
188
|
|
|
199
189
|
}
|
|
200
190
|
|
|
201
|
-
function WebGLRenderLists(
|
|
191
|
+
function WebGLRenderLists() {
|
|
202
192
|
|
|
203
193
|
let lists = new WeakMap();
|
|
204
194
|
|
|
@@ -208,14 +198,14 @@ function WebGLRenderLists( properties ) {
|
|
|
208
198
|
|
|
209
199
|
if ( lists.has( scene ) === false ) {
|
|
210
200
|
|
|
211
|
-
list = new WebGLRenderList(
|
|
201
|
+
list = new WebGLRenderList();
|
|
212
202
|
lists.set( scene, [ list ] );
|
|
213
203
|
|
|
214
204
|
} else {
|
|
215
205
|
|
|
216
206
|
if ( renderCallDepth >= lists.get( scene ).length ) {
|
|
217
207
|
|
|
218
|
-
list = new WebGLRenderList(
|
|
208
|
+
list = new WebGLRenderList();
|
|
219
209
|
lists.get( scene ).push( list );
|
|
220
210
|
|
|
221
211
|
} else {
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
let _id = 0;
|
|
2
|
+
|
|
3
|
+
class WebGLShaderCache {
|
|
4
|
+
|
|
5
|
+
constructor() {
|
|
6
|
+
|
|
7
|
+
this.shaderCache = new Map();
|
|
8
|
+
this.materialCache = new Map();
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
update( material ) {
|
|
13
|
+
|
|
14
|
+
const vertexShader = material.vertexShader;
|
|
15
|
+
const fragmentShader = material.fragmentShader;
|
|
16
|
+
|
|
17
|
+
const vertexShaderStage = this._getShaderStage( vertexShader );
|
|
18
|
+
const fragmentShaderStage = this._getShaderStage( fragmentShader );
|
|
19
|
+
|
|
20
|
+
const materialShaders = this._getShaderCacheForMaterial( material );
|
|
21
|
+
|
|
22
|
+
if ( materialShaders.has( vertexShaderStage ) === false ) {
|
|
23
|
+
|
|
24
|
+
materialShaders.add( vertexShaderStage );
|
|
25
|
+
vertexShaderStage.usedTimes ++;
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if ( materialShaders.has( fragmentShaderStage ) === false ) {
|
|
30
|
+
|
|
31
|
+
materialShaders.add( fragmentShaderStage );
|
|
32
|
+
fragmentShaderStage.usedTimes ++;
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return this;
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
remove( material ) {
|
|
41
|
+
|
|
42
|
+
const materialShaders = this.materialCache.get( material );
|
|
43
|
+
|
|
44
|
+
for ( const shaderStage of materialShaders ) {
|
|
45
|
+
|
|
46
|
+
shaderStage.usedTimes --;
|
|
47
|
+
|
|
48
|
+
if ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage );
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.materialCache.delete( material );
|
|
53
|
+
|
|
54
|
+
return this;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
getVertexShaderID( material ) {
|
|
59
|
+
|
|
60
|
+
return this._getShaderStage( material.vertexShader ).id;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
getFragmentShaderID( material ) {
|
|
65
|
+
|
|
66
|
+
return this._getShaderStage( material.fragmentShader ).id;
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
dispose() {
|
|
71
|
+
|
|
72
|
+
this.shaderCache.clear();
|
|
73
|
+
this.materialCache.clear();
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
_getShaderCacheForMaterial( material ) {
|
|
78
|
+
|
|
79
|
+
const cache = this.materialCache;
|
|
80
|
+
|
|
81
|
+
if ( cache.has( material ) === false ) {
|
|
82
|
+
|
|
83
|
+
cache.set( material, new Set() );
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return cache.get( material );
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
_getShaderStage( code ) {
|
|
92
|
+
|
|
93
|
+
const cache = this.shaderCache;
|
|
94
|
+
|
|
95
|
+
if ( cache.has( code ) === false ) {
|
|
96
|
+
|
|
97
|
+
const stage = new WebGLShaderStage();
|
|
98
|
+
cache.set( code, stage );
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return cache.get( code );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
class WebGLShaderStage {
|
|
109
|
+
|
|
110
|
+
constructor() {
|
|
111
|
+
|
|
112
|
+
this.id = _id ++;
|
|
113
|
+
|
|
114
|
+
this.usedTimes = 0;
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { WebGLShaderCache };
|
|
@@ -878,6 +878,34 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
878
878
|
|
|
879
879
|
}
|
|
880
880
|
|
|
881
|
+
function texSubImage3D() {
|
|
882
|
+
|
|
883
|
+
try {
|
|
884
|
+
|
|
885
|
+
gl.texSubImage3D.apply( gl, arguments );
|
|
886
|
+
|
|
887
|
+
} catch ( error ) {
|
|
888
|
+
|
|
889
|
+
console.error( 'THREE.WebGLState:', error );
|
|
890
|
+
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
function compressedTexSubImage2D() {
|
|
896
|
+
|
|
897
|
+
try {
|
|
898
|
+
|
|
899
|
+
gl.compressedTexSubImage2D.apply( gl, arguments );
|
|
900
|
+
|
|
901
|
+
} catch ( error ) {
|
|
902
|
+
|
|
903
|
+
console.error( 'THREE.WebGLState:', error );
|
|
904
|
+
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
}
|
|
908
|
+
|
|
881
909
|
function texStorage2D() {
|
|
882
910
|
|
|
883
911
|
try {
|
|
@@ -892,6 +920,20 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
892
920
|
|
|
893
921
|
}
|
|
894
922
|
|
|
923
|
+
function texStorage3D() {
|
|
924
|
+
|
|
925
|
+
try {
|
|
926
|
+
|
|
927
|
+
gl.texStorage3D.apply( gl, arguments );
|
|
928
|
+
|
|
929
|
+
} catch ( error ) {
|
|
930
|
+
|
|
931
|
+
console.error( 'THREE.WebGLState:', error );
|
|
932
|
+
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
}
|
|
936
|
+
|
|
895
937
|
function texImage2D() {
|
|
896
938
|
|
|
897
939
|
try {
|
|
@@ -1069,7 +1111,10 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
1069
1111
|
texImage3D: texImage3D,
|
|
1070
1112
|
|
|
1071
1113
|
texStorage2D: texStorage2D,
|
|
1114
|
+
texStorage3D: texStorage3D,
|
|
1072
1115
|
texSubImage2D: texSubImage2D,
|
|
1116
|
+
texSubImage3D: texSubImage3D,
|
|
1117
|
+
compressedTexSubImage2D: compressedTexSubImage2D,
|
|
1073
1118
|
|
|
1074
1119
|
scissor: scissor,
|
|
1075
1120
|
viewport: viewport,
|