super-three 0.133.2 → 0.135.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 +619 -538
- package/build/three.min.js +1 -1
- package/build/three.module.js +763 -616
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +9 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
- package/examples/js/controls/ArcballControls.js +68 -27
- package/examples/js/controls/DragControls.js +7 -0
- package/examples/js/controls/OrbitControls.js +5 -36
- package/examples/js/controls/TrackballControls.js +3 -2
- package/examples/js/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/exporters/GLTFExporter.js +147 -63
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/lines/LineMaterial.js +58 -20
- package/examples/js/lines/LineSegments2.js +29 -24
- package/examples/js/loaders/3DMLoader.js +24 -11
- package/examples/js/loaders/3MFLoader.js +2 -2
- package/examples/js/loaders/ColladaLoader.js +61 -3
- package/examples/js/loaders/FBXLoader.js +1 -1
- package/examples/js/loaders/GLTFLoader.js +94 -31
- package/examples/js/loaders/KTX2Loader.js +12 -0
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/PLYLoader.js +32 -7
- package/examples/js/loaders/RGBELoader.js +2 -1
- package/examples/js/loaders/SVGLoader.js +7 -3
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/utils/RoughnessMipmapper.js +1 -0
- package/examples/jsm/controls/ArcballControls.js +61 -29
- package/examples/jsm/controls/DragControls.js +7 -0
- package/examples/jsm/controls/OrbitControls.js +9 -51
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +160 -74
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/libs/flow.module.js +3218 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lines/LineMaterial.js +59 -23
- package/examples/jsm/lines/LineSegments2.js +22 -18
- package/examples/jsm/loaders/3DMLoader.js +18 -12
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +61 -3
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +99 -35
- package/examples/jsm/loaders/KTX2Loader.js +19 -0
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/PLYLoader.js +33 -7
- package/examples/jsm/loaders/SVGLoader.js +7 -4
- package/examples/jsm/loaders/TDSLoader.js +225 -285
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/node-editor/NodeEditor.js +455 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +69 -0
- package/examples/jsm/node-editor/math/DotEditor.js +36 -0
- package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
- package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
- package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
- package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
- package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +6 -6
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -49
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
- package/examples/jsm/postprocessing/BloomPass.js +1 -1
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -1
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +3 -3
- package/examples/jsm/postprocessing/FilmPass.js +1 -1
- package/examples/jsm/postprocessing/GlitchPass.js +1 -1
- package/examples/jsm/postprocessing/HalftonePass.js +1 -1
- package/examples/jsm/postprocessing/MaskPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SMAAPass.js +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/TexturePass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
- package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
- package/examples/jsm/renderers/nodes/Nodes.js +14 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +193 -41
- package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
- package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
- package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
- package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
- package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
- package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
- package/examples/jsm/renderers/nodes/core/Node.js +32 -10
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
- package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
- package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
- package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
- package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
- package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
- package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
- package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
- package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
- package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
- package/examples/jsm/renderers/nodes/core/constants.js +2 -0
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +47 -25
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
- package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
- package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
- package/examples/jsm/renderers/nodes/math/MathNode.js +87 -36
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
- package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
- package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +191 -94
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +3 -3
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +3 -5
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +11 -27
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +62 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +430 -98
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +10 -10
- package/src/Three.Legacy.js +6 -0
- package/src/Three.js +0 -1
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -2
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +2 -0
- package/src/extras/PMREMGenerator.js +11 -6
- package/src/loaders/FileLoader.js +89 -152
- package/src/loaders/ImageLoader.js +9 -4
- package/src/loaders/LoaderUtils.js +26 -0
- package/src/loaders/MaterialLoader.js +7 -4
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +4 -4
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/MathUtils.js +5 -16
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +83 -117
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -27
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +13 -5
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib.js +6 -4
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLProgram.js +10 -6
- package/src/renderers/webgl/WebGLPrograms.js +17 -12
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +31 -17
- package/src/renderers/webgl/WebGLTextures.js +188 -51
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webxr/WebXRManager.js +71 -110
- package/src/textures/Texture.js +6 -0
- package/src/utils.js +37 -1
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
- package/examples/jsm/libs/dat.gui.module.js +0 -3575
- package/examples/jsm/libs/glslang.js +0 -78
- package/examples/jsm/libs/glslang.wasm +0 -0
- package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
- package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
- package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
- package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
- package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
- package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
- package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBFormat, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBFormat, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping } from '../../constants.js';
|
|
2
2
|
import * as MathUtils from '../../math/MathUtils.js';
|
|
3
3
|
import { createElementNS } from '../../utils.js';
|
|
4
4
|
|
|
@@ -9,6 +9,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
9
9
|
const maxCubemapSize = capabilities.maxCubemapSize;
|
|
10
10
|
const maxTextureSize = capabilities.maxTextureSize;
|
|
11
11
|
const maxSamples = capabilities.maxSamples;
|
|
12
|
+
const hasMultisampledRenderToTexture = extensions.has( 'WEBGL_multisampled_render_to_texture' );
|
|
13
|
+
const MultisampledRenderToTextureExtension = hasMultisampledRenderToTexture ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : undefined;
|
|
12
14
|
|
|
13
15
|
const _videoTextures = new WeakMap();
|
|
14
16
|
let _canvas;
|
|
@@ -122,17 +124,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
122
124
|
|
|
123
125
|
}
|
|
124
126
|
|
|
125
|
-
function generateMipmap( target
|
|
127
|
+
function generateMipmap( target ) {
|
|
126
128
|
|
|
127
129
|
_gl.generateMipmap( target );
|
|
128
130
|
|
|
129
|
-
const textureProperties = properties.get( texture );
|
|
130
|
-
|
|
131
|
-
textureProperties.__maxMipLevel = Math.log2( Math.max( width, height, depth ) );
|
|
132
|
-
|
|
133
131
|
}
|
|
134
132
|
|
|
135
|
-
function getInternalFormat( internalFormatName, glFormat, glType
|
|
133
|
+
function getInternalFormat( internalFormatName, glFormat, glType/*, encoding*/ ) {
|
|
136
134
|
|
|
137
135
|
if ( isWebGL2 === false ) return glFormat;
|
|
138
136
|
|
|
@@ -166,7 +164,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
166
164
|
|
|
167
165
|
if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
|
|
168
166
|
if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
|
|
169
|
-
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
167
|
+
//if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
|
|
168
|
+
if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RGBA8;
|
|
169
|
+
|
|
170
170
|
|
|
171
171
|
}
|
|
172
172
|
|
|
@@ -181,6 +181,30 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
181
181
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
+
function getMipLevels( texture, image, supportsMips ) {
|
|
185
|
+
|
|
186
|
+
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true ) {
|
|
187
|
+
|
|
188
|
+
// generated mipmaps via gl.generateMipmap()
|
|
189
|
+
|
|
190
|
+
return Math.log2( Math.max( image.width, image.height ) ) + 1;
|
|
191
|
+
|
|
192
|
+
} else if ( texture.mipmaps.length > 0 ) {
|
|
193
|
+
|
|
194
|
+
// user-defined mipmaps
|
|
195
|
+
|
|
196
|
+
return texture.mipmaps.length;
|
|
197
|
+
|
|
198
|
+
} else {
|
|
199
|
+
|
|
200
|
+
// texture without mipmaps (only base level)
|
|
201
|
+
|
|
202
|
+
return 1;
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
184
208
|
// Fallback filters for non-power-of-2 textures
|
|
185
209
|
|
|
186
210
|
function filterFallback( f ) {
|
|
@@ -633,12 +657,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
633
657
|
}
|
|
634
658
|
|
|
635
659
|
texture.generateMipmaps = false;
|
|
636
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
637
660
|
|
|
638
661
|
} else {
|
|
639
662
|
|
|
640
663
|
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
|
|
641
|
-
textureProperties.__maxMipLevel = 0;
|
|
642
664
|
|
|
643
665
|
}
|
|
644
666
|
|
|
@@ -668,17 +690,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
668
690
|
|
|
669
691
|
}
|
|
670
692
|
|
|
671
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
672
|
-
|
|
673
693
|
} else if ( texture.isDataTexture2DArray ) {
|
|
674
694
|
|
|
675
695
|
state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
676
|
-
textureProperties.__maxMipLevel = 0;
|
|
677
696
|
|
|
678
697
|
} else if ( texture.isDataTexture3D ) {
|
|
679
698
|
|
|
680
699
|
state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
|
|
681
|
-
textureProperties.__maxMipLevel = 0;
|
|
682
700
|
|
|
683
701
|
} else {
|
|
684
702
|
|
|
@@ -688,22 +706,53 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
688
706
|
// if there are no manual mipmaps
|
|
689
707
|
// set 0 level mipmap and then use GL to generate other mipmap levels
|
|
690
708
|
|
|
709
|
+
const levels = getMipLevels( texture, image, supportsMips );
|
|
710
|
+
const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
|
|
711
|
+
const allocateMemory = ( textureProperties.__version === undefined );
|
|
712
|
+
|
|
691
713
|
if ( mipmaps.length > 0 && supportsMips ) {
|
|
692
714
|
|
|
715
|
+
if ( useTexStorage && allocateMemory ) {
|
|
716
|
+
|
|
717
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
|
|
718
|
+
|
|
719
|
+
}
|
|
720
|
+
|
|
693
721
|
for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
|
|
694
722
|
|
|
695
723
|
mipmap = mipmaps[ i ];
|
|
696
|
-
|
|
724
|
+
|
|
725
|
+
if ( useTexStorage ) {
|
|
726
|
+
|
|
727
|
+
state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );
|
|
728
|
+
|
|
729
|
+
} else {
|
|
730
|
+
|
|
731
|
+
state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );
|
|
732
|
+
|
|
733
|
+
}
|
|
697
734
|
|
|
698
735
|
}
|
|
699
736
|
|
|
700
737
|
texture.generateMipmaps = false;
|
|
701
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
702
738
|
|
|
703
739
|
} else {
|
|
704
740
|
|
|
705
|
-
|
|
706
|
-
|
|
741
|
+
if ( useTexStorage ) {
|
|
742
|
+
|
|
743
|
+
if ( allocateMemory ) {
|
|
744
|
+
|
|
745
|
+
state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
|
|
746
|
+
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );
|
|
750
|
+
|
|
751
|
+
} else {
|
|
752
|
+
|
|
753
|
+
state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );
|
|
754
|
+
|
|
755
|
+
}
|
|
707
756
|
|
|
708
757
|
}
|
|
709
758
|
|
|
@@ -711,7 +760,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
711
760
|
|
|
712
761
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
713
762
|
|
|
714
|
-
generateMipmap( textureType
|
|
763
|
+
generateMipmap( textureType );
|
|
715
764
|
|
|
716
765
|
}
|
|
717
766
|
|
|
@@ -796,8 +845,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
796
845
|
|
|
797
846
|
}
|
|
798
847
|
|
|
799
|
-
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
800
|
-
|
|
801
848
|
} else {
|
|
802
849
|
|
|
803
850
|
mipmaps = texture.mipmaps;
|
|
@@ -833,14 +880,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
833
880
|
|
|
834
881
|
}
|
|
835
882
|
|
|
836
|
-
textureProperties.__maxMipLevel = mipmaps.length;
|
|
837
|
-
|
|
838
883
|
}
|
|
839
884
|
|
|
840
885
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
841
886
|
|
|
842
887
|
// We assume images for cube map have the same size.
|
|
843
|
-
generateMipmap( _gl.TEXTURE_CUBE_MAP
|
|
888
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
844
889
|
|
|
845
890
|
}
|
|
846
891
|
|
|
@@ -858,23 +903,38 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
858
903
|
const glFormat = utils.convert( texture.format );
|
|
859
904
|
const glType = utils.convert( texture.type );
|
|
860
905
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
906
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
861
907
|
|
|
862
|
-
if (
|
|
908
|
+
if ( ! renderTargetProperties.__hasExternalTextures ) {
|
|
863
909
|
|
|
864
|
-
|
|
910
|
+
if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
|
|
865
911
|
|
|
866
|
-
|
|
912
|
+
state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
|
|
913
|
+
|
|
914
|
+
} else {
|
|
867
915
|
|
|
868
|
-
|
|
916
|
+
state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
|
|
917
|
+
|
|
918
|
+
}
|
|
869
919
|
|
|
870
920
|
}
|
|
871
921
|
|
|
872
922
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
873
|
-
|
|
923
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
924
|
+
|
|
925
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
|
|
926
|
+
|
|
927
|
+
} else {
|
|
928
|
+
|
|
929
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
|
|
930
|
+
|
|
931
|
+
}
|
|
932
|
+
|
|
874
933
|
state.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
875
934
|
|
|
876
935
|
}
|
|
877
936
|
|
|
937
|
+
|
|
878
938
|
// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
|
|
879
939
|
function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
|
|
880
940
|
|
|
@@ -884,7 +944,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
884
944
|
|
|
885
945
|
let glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
886
946
|
|
|
887
|
-
if ( isMultisample ) {
|
|
947
|
+
if ( isMultisample || renderTarget.useRenderToTexture ) {
|
|
888
948
|
|
|
889
949
|
const depthTexture = renderTarget.depthTexture;
|
|
890
950
|
|
|
@@ -904,7 +964,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
904
964
|
|
|
905
965
|
const samples = getRenderTargetSamples( renderTarget );
|
|
906
966
|
|
|
907
|
-
|
|
967
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
968
|
+
|
|
969
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
970
|
+
|
|
971
|
+
} else {
|
|
972
|
+
|
|
973
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
974
|
+
|
|
975
|
+
}
|
|
908
976
|
|
|
909
977
|
} else {
|
|
910
978
|
|
|
@@ -916,12 +984,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
916
984
|
|
|
917
985
|
} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {
|
|
918
986
|
|
|
919
|
-
|
|
987
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
920
988
|
|
|
921
|
-
|
|
989
|
+
if ( isMultisample && renderTarget.useRenderbuffer ) {
|
|
922
990
|
|
|
923
991
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
924
992
|
|
|
993
|
+
} else if ( renderTarget.useRenderToTexture ) {
|
|
994
|
+
|
|
995
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
996
|
+
|
|
925
997
|
} else {
|
|
926
998
|
|
|
927
999
|
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );
|
|
@@ -939,13 +1011,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
939
1011
|
const glFormat = utils.convert( texture.format );
|
|
940
1012
|
const glType = utils.convert( texture.type );
|
|
941
1013
|
const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );
|
|
1014
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
942
1015
|
|
|
943
|
-
if ( isMultisample ) {
|
|
944
|
-
|
|
945
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1016
|
+
if ( isMultisample && renderTarget.useRenderbuffer ) {
|
|
946
1017
|
|
|
947
1018
|
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
948
1019
|
|
|
1020
|
+
} else if ( renderTarget.useRenderToTexture ) {
|
|
1021
|
+
|
|
1022
|
+
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1023
|
+
|
|
949
1024
|
} else {
|
|
950
1025
|
|
|
951
1026
|
_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
@@ -986,14 +1061,31 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
986
1061
|
setTexture2D( renderTarget.depthTexture, 0 );
|
|
987
1062
|
|
|
988
1063
|
const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
|
|
1064
|
+
const samples = getRenderTargetSamples( renderTarget );
|
|
989
1065
|
|
|
990
1066
|
if ( renderTarget.depthTexture.format === DepthFormat ) {
|
|
991
1067
|
|
|
992
|
-
|
|
1068
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1069
|
+
|
|
1070
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1071
|
+
|
|
1072
|
+
} else {
|
|
1073
|
+
|
|
1074
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1075
|
+
|
|
1076
|
+
}
|
|
993
1077
|
|
|
994
1078
|
} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
|
|
995
1079
|
|
|
996
|
-
|
|
1080
|
+
if ( renderTarget.useRenderToTexture ) {
|
|
1081
|
+
|
|
1082
|
+
MultisampledRenderToTextureExtension.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
|
|
1083
|
+
|
|
1084
|
+
} else {
|
|
1085
|
+
|
|
1086
|
+
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
|
|
1087
|
+
|
|
1088
|
+
}
|
|
997
1089
|
|
|
998
1090
|
} else {
|
|
999
1091
|
|
|
@@ -1007,10 +1099,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1007
1099
|
function setupDepthRenderbuffer( renderTarget ) {
|
|
1008
1100
|
|
|
1009
1101
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1010
|
-
|
|
1011
1102
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1012
1103
|
|
|
1013
|
-
if ( renderTarget.depthTexture ) {
|
|
1104
|
+
if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
1014
1105
|
|
|
1015
1106
|
if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
|
|
1016
1107
|
|
|
@@ -1044,6 +1135,25 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1044
1135
|
|
|
1045
1136
|
}
|
|
1046
1137
|
|
|
1138
|
+
// rebind framebuffer with external textures
|
|
1139
|
+
function rebindTextures( renderTarget, colorTexture, depthTexture ) {
|
|
1140
|
+
|
|
1141
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
1142
|
+
|
|
1143
|
+
if ( colorTexture !== undefined ) {
|
|
1144
|
+
|
|
1145
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
|
|
1146
|
+
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
if ( depthTexture !== undefined ) {
|
|
1150
|
+
|
|
1151
|
+
setupDepthRenderbuffer( renderTarget );
|
|
1152
|
+
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1047
1157
|
// Set up GL resources for the render target
|
|
1048
1158
|
function setupRenderTarget( renderTarget ) {
|
|
1049
1159
|
|
|
@@ -1056,7 +1166,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1056
1166
|
|
|
1057
1167
|
if ( renderTarget.isWebGLMultipleRenderTargets !== true ) {
|
|
1058
1168
|
|
|
1059
|
-
textureProperties.__webglTexture
|
|
1169
|
+
if ( textureProperties.__webglTexture === undefined ) {
|
|
1170
|
+
|
|
1171
|
+
textureProperties.__webglTexture = _gl.createTexture();
|
|
1172
|
+
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1060
1175
|
textureProperties.__version = texture.version;
|
|
1061
1176
|
info.memory.textures ++;
|
|
1062
1177
|
|
|
@@ -1064,7 +1179,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1064
1179
|
|
|
1065
1180
|
const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
|
|
1066
1181
|
const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
|
|
1067
|
-
const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );
|
|
1068
1182
|
const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;
|
|
1069
1183
|
const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
|
|
1070
1184
|
|
|
@@ -1120,7 +1234,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1120
1234
|
|
|
1121
1235
|
}
|
|
1122
1236
|
|
|
1123
|
-
} else if (
|
|
1237
|
+
} else if ( renderTarget.useRenderbuffer ) {
|
|
1124
1238
|
|
|
1125
1239
|
if ( isWebGL2 ) {
|
|
1126
1240
|
|
|
@@ -1174,7 +1288,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1174
1288
|
|
|
1175
1289
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1176
1290
|
|
|
1177
|
-
generateMipmap( _gl.TEXTURE_CUBE_MAP
|
|
1291
|
+
generateMipmap( _gl.TEXTURE_CUBE_MAP );
|
|
1178
1292
|
|
|
1179
1293
|
}
|
|
1180
1294
|
|
|
@@ -1195,7 +1309,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1195
1309
|
|
|
1196
1310
|
if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
|
|
1197
1311
|
|
|
1198
|
-
generateMipmap( _gl.TEXTURE_2D
|
|
1312
|
+
generateMipmap( _gl.TEXTURE_2D );
|
|
1199
1313
|
|
|
1200
1314
|
}
|
|
1201
1315
|
|
|
@@ -1230,7 +1344,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1230
1344
|
|
|
1231
1345
|
if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
|
|
1232
1346
|
|
|
1233
|
-
generateMipmap( glTextureType
|
|
1347
|
+
generateMipmap( glTextureType );
|
|
1234
1348
|
|
|
1235
1349
|
}
|
|
1236
1350
|
|
|
@@ -1264,7 +1378,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1264
1378
|
const webglTexture = properties.get( texture ).__webglTexture;
|
|
1265
1379
|
|
|
1266
1380
|
state.bindTexture( target, webglTexture );
|
|
1267
|
-
generateMipmap( target
|
|
1381
|
+
generateMipmap( target );
|
|
1268
1382
|
state.unbindTexture();
|
|
1269
1383
|
|
|
1270
1384
|
}
|
|
@@ -1275,23 +1389,43 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1275
1389
|
|
|
1276
1390
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
1277
1391
|
|
|
1278
|
-
if ( renderTarget.
|
|
1392
|
+
if ( renderTarget.useRenderbuffer ) {
|
|
1279
1393
|
|
|
1280
1394
|
if ( isWebGL2 ) {
|
|
1281
1395
|
|
|
1282
1396
|
const width = renderTarget.width;
|
|
1283
1397
|
const height = renderTarget.height;
|
|
1284
1398
|
let mask = _gl.COLOR_BUFFER_BIT;
|
|
1399
|
+
const invalidationArray = [ _gl.COLOR_ATTACHMENT0 ];
|
|
1400
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1401
|
+
|
|
1402
|
+
if ( renderTarget.depthBuffer ) {
|
|
1403
|
+
|
|
1404
|
+
invalidationArray.push( depthStyle );
|
|
1405
|
+
|
|
1406
|
+
}
|
|
1285
1407
|
|
|
1286
|
-
if ( renderTarget.
|
|
1287
|
-
|
|
1408
|
+
if ( ! renderTarget.ignoreDepthForMultisampleCopy ) {
|
|
1409
|
+
|
|
1410
|
+
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
1411
|
+
if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
1412
|
+
|
|
1413
|
+
}
|
|
1288
1414
|
|
|
1289
1415
|
const renderTargetProperties = properties.get( renderTarget );
|
|
1290
1416
|
|
|
1291
1417
|
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
1292
1418
|
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
1293
1419
|
|
|
1420
|
+
if ( renderTarget.ignoreDepthForMultisampleCopy ) {
|
|
1421
|
+
|
|
1422
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
|
|
1423
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
1424
|
+
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1294
1427
|
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
1428
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
|
|
1295
1429
|
|
|
1296
1430
|
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
1297
1431
|
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
@@ -1308,7 +1442,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1308
1442
|
|
|
1309
1443
|
function getRenderTargetSamples( renderTarget ) {
|
|
1310
1444
|
|
|
1311
|
-
return ( isWebGL2 && renderTarget.
|
|
1445
|
+
return ( isWebGL2 && ( renderTarget.useRenderbuffer || renderTarget.useRenderToTexture ) ) ?
|
|
1312
1446
|
Math.min( maxSamples, renderTarget.samples ) : 0;
|
|
1313
1447
|
|
|
1314
1448
|
}
|
|
@@ -1381,9 +1515,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1381
1515
|
this.setTexture2DArray = setTexture2DArray;
|
|
1382
1516
|
this.setTexture3D = setTexture3D;
|
|
1383
1517
|
this.setTextureCube = setTextureCube;
|
|
1518
|
+
this.rebindTextures = rebindTextures;
|
|
1384
1519
|
this.setupRenderTarget = setupRenderTarget;
|
|
1385
1520
|
this.updateRenderTargetMipmap = updateRenderTargetMipmap;
|
|
1386
1521
|
this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
|
|
1522
|
+
this.setupDepthRenderbuffer = setupDepthRenderbuffer;
|
|
1523
|
+
this.setupFrameBufferTexture = setupFrameBufferTexture;
|
|
1387
1524
|
|
|
1388
1525
|
this.safeSetTexture2D = safeSetTexture2D;
|
|
1389
1526
|
this.safeSetTextureCube = safeSetTextureCube;
|
|
@@ -690,7 +690,7 @@ function setValueV4uiArray( gl, v ) {
|
|
|
690
690
|
}
|
|
691
691
|
|
|
692
692
|
|
|
693
|
-
// Array of textures (2D / Cube)
|
|
693
|
+
// Array of textures (2D / 3D / Cube / 2DArray)
|
|
694
694
|
|
|
695
695
|
function setValueT1Array( gl, v, textures ) {
|
|
696
696
|
|
|
@@ -708,6 +708,22 @@ function setValueT1Array( gl, v, textures ) {
|
|
|
708
708
|
|
|
709
709
|
}
|
|
710
710
|
|
|
711
|
+
function setValueT3DArray( gl, v, textures ) {
|
|
712
|
+
|
|
713
|
+
const n = v.length;
|
|
714
|
+
|
|
715
|
+
const units = allocTexUnits( textures, n );
|
|
716
|
+
|
|
717
|
+
gl.uniform1iv( this.addr, units );
|
|
718
|
+
|
|
719
|
+
for ( let i = 0; i !== n; ++ i ) {
|
|
720
|
+
|
|
721
|
+
textures.setTexture3D( v[ i ] || emptyTexture3d, units[ i ] );
|
|
722
|
+
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
}
|
|
726
|
+
|
|
711
727
|
function setValueT6Array( gl, v, textures ) {
|
|
712
728
|
|
|
713
729
|
const n = v.length;
|
|
@@ -724,6 +740,23 @@ function setValueT6Array( gl, v, textures ) {
|
|
|
724
740
|
|
|
725
741
|
}
|
|
726
742
|
|
|
743
|
+
function setValueT2DArrayArray( gl, v, textures ) {
|
|
744
|
+
|
|
745
|
+
const n = v.length;
|
|
746
|
+
|
|
747
|
+
const units = allocTexUnits( textures, n );
|
|
748
|
+
|
|
749
|
+
gl.uniform1iv( this.addr, units );
|
|
750
|
+
|
|
751
|
+
for ( let i = 0; i !== n; ++ i ) {
|
|
752
|
+
|
|
753
|
+
textures.setTexture2DArray( v[ i ] || emptyTexture2dArray, units[ i ] );
|
|
754
|
+
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
|
|
727
760
|
// Helper to pick the right setter for a pure (bottom-level) array
|
|
728
761
|
|
|
729
762
|
function getPureArraySetter( type ) {
|
|
@@ -756,12 +789,23 @@ function getPureArraySetter( type ) {
|
|
|
756
789
|
case 0x8b62: // SAMPLER_2D_SHADOW
|
|
757
790
|
return setValueT1Array;
|
|
758
791
|
|
|
792
|
+
case 0x8b5f: // SAMPLER_3D
|
|
793
|
+
case 0x8dcb: // INT_SAMPLER_3D
|
|
794
|
+
case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D
|
|
795
|
+
return setValueT3DArray;
|
|
796
|
+
|
|
759
797
|
case 0x8b60: // SAMPLER_CUBE
|
|
760
798
|
case 0x8dcc: // INT_SAMPLER_CUBE
|
|
761
799
|
case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE
|
|
762
800
|
case 0x8dc5: // SAMPLER_CUBE_SHADOW
|
|
763
801
|
return setValueT6Array;
|
|
764
802
|
|
|
803
|
+
case 0x8dc1: // SAMPLER_2D_ARRAY
|
|
804
|
+
case 0x8dcf: // INT_SAMPLER_2D_ARRAY
|
|
805
|
+
case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY
|
|
806
|
+
case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW
|
|
807
|
+
return setValueT2DArrayArray;
|
|
808
|
+
|
|
765
809
|
}
|
|
766
810
|
|
|
767
811
|
}
|