super-three 0.163.0 → 0.165.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 +3 -3
- package/build/three.cjs +1127 -452
- package/build/three.module.js +1127 -452
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -5
- package/examples/jsm/exporters/GLTFExporter.js +45 -1
- package/examples/jsm/exporters/USDZExporter.js +13 -5
- package/examples/jsm/helpers/ViewHelper.js +32 -67
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/tween.module.js +75 -64
- package/examples/jsm/lines/LineMaterial.js +1 -15
- package/examples/jsm/lines/LineSegments2.js +15 -0
- package/examples/jsm/lines/Wireframe.js +16 -1
- package/examples/jsm/loaders/DRACOLoader.js +1 -1
- package/examples/jsm/loaders/EXRLoader.js +283 -99
- package/examples/jsm/loaders/FBXLoader.js +24 -13
- package/examples/jsm/loaders/GLTFLoader.js +55 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -6
- package/examples/jsm/loaders/LDrawLoader.js +3 -2
- package/examples/jsm/loaders/MMDLoader.js +31 -12
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/modifiers/CurveModifier.js +11 -9
- package/examples/jsm/nodes/Nodes.js +15 -13
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +7 -83
- package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +12 -119
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +109 -3
- package/examples/jsm/nodes/accessors/ModelNode.js +3 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +9 -101
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -100
- package/examples/jsm/nodes/accessors/ReferenceNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -31
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/{TextureStoreNode.js → StorageTextureNode.js} +19 -6
- package/examples/jsm/nodes/accessors/TangentNode.js +11 -97
- package/examples/jsm/nodes/accessors/Texture3DNode.js +100 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +21 -3
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/accessors/UVNode.js +2 -46
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/AttributeNode.js +15 -3
- package/examples/jsm/nodes/core/ContextNode.js +6 -0
- package/examples/jsm/nodes/core/Node.js +23 -2
- package/examples/jsm/nodes/core/NodeBuilder.js +25 -18
- package/examples/jsm/nodes/core/NodeKeywords.js +1 -1
- package/examples/jsm/nodes/core/OutputStructNode.js +3 -6
- package/examples/jsm/nodes/core/PropertyNode.js +11 -0
- package/examples/jsm/nodes/core/VaryingNode.js +40 -9
- package/examples/jsm/nodes/display/AfterImageNode.js +14 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/PassNode.js +3 -1
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +5 -3
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +210 -12
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/functions/ToonLightingModel.js +49 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +20 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +11 -2
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +28 -1
- package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +11 -7
- package/examples/jsm/nodes/materials/Materials.js +4 -0
- package/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.js +52 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +94 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/MeshToonNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/NodeMaterial.js +43 -45
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/VolumeNodeMaterial.js +106 -0
- package/examples/jsm/nodes/math/HashNode.js +2 -2
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +1 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +57 -41
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/MatcapUVNode.js +1 -1
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/objects/Lensflare.js +2 -2
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
- package/examples/jsm/renderers/common/Attributes.js +2 -0
- package/examples/jsm/renderers/common/Background.js +3 -3
- package/examples/jsm/renderers/common/Bindings.js +17 -0
- package/examples/jsm/renderers/common/ChainMap.js +18 -48
- package/examples/jsm/renderers/common/ClippingContext.js +5 -5
- package/examples/jsm/renderers/common/Pipelines.js +2 -2
- package/examples/jsm/renderers/common/RenderBundle.js +18 -0
- package/examples/jsm/renderers/common/RenderBundles.js +38 -0
- package/examples/jsm/renderers/common/RenderList.js +10 -1
- package/examples/jsm/renderers/common/RenderObject.js +49 -1
- package/examples/jsm/renderers/common/Renderer.js +268 -25
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/Uniform.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +13 -17
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +18 -4
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +6 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +31 -47
- package/examples/jsm/renderers/webgl/WebGLBackend.js +7 -21
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +5 -1
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +23 -5
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +114 -13
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -21
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +80 -46
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +85 -12
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +10 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +6 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +62 -19
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -3
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
- package/examples/jsm/utils/GPUStatsPanel.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/SortUtils.js +8 -5
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +3 -2
- package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
- package/src/animation/tracks/StringKeyframeTrack.js +10 -1
- package/src/constants.js +1 -1
- package/src/core/Object3D.js +2 -0
- package/src/core/Raycaster.js +6 -2
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +12 -11
- package/src/loaders/FileLoader.js +5 -1
- package/src/loaders/LoaderUtils.js +3 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +1 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/objects/BatchedMesh.js +114 -1
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +371 -109
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +15 -0
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
- package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/webgl/WebGLBackground.js +24 -3
- package/src/renderers/webgl/WebGLBufferRenderer.js +36 -0
- package/src/renderers/webgl/WebGLCapabilities.js +33 -1
- package/src/renderers/webgl/WebGLExtensions.js +3 -1
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +36 -0
- package/src/renderers/webgl/WebGLLights.js +9 -12
- package/src/renderers/webgl/WebGLMaterials.js +7 -5
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
- package/src/renderers/webgl/WebGLProgram.js +5 -36
- package/src/renderers/webgl/WebGLPrograms.js +19 -14
- package/src/renderers/webgl/WebGLRenderStates.js +8 -4
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLTextures.js +206 -129
- package/src/renderers/webgl/WebGLUtils.js +3 -21
- package/src/renderers/webxr/WebXRDepthSensing.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +8 -6
- package/src/textures/CompressedArrayTexture.js +14 -0
- package/src/textures/DataArrayTexture.js +14 -0
- package/src/textures/DepthTexture.js +1 -3
- package/src/utils.js +30 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -318
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -792
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat,
|
|
1
|
+
import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, DepthFormat, DepthStencilFormat, UnsignedIntType, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer, UnsignedShortType, UnsignedInt248Type } from '../../constants.js';
|
|
2
2
|
import { createElementNS } from '../../utils.js';
|
|
3
3
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
4
4
|
import { Vector2 } from '../../math/Vector2.js';
|
|
@@ -200,6 +200,48 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
200
200
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
+
function getInternalDepthFormat( useStencil, depthType ) {
|
|
204
|
+
|
|
205
|
+
let glInternalFormat;
|
|
206
|
+
if ( useStencil ) {
|
|
207
|
+
|
|
208
|
+
if ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {
|
|
209
|
+
|
|
210
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
211
|
+
|
|
212
|
+
} else if ( depthType === FloatType ) {
|
|
213
|
+
|
|
214
|
+
glInternalFormat = _gl.DEPTH32F_STENCIL8;
|
|
215
|
+
|
|
216
|
+
} else if ( depthType === UnsignedShortType ) {
|
|
217
|
+
|
|
218
|
+
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
219
|
+
console.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
} else {
|
|
224
|
+
|
|
225
|
+
if ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {
|
|
226
|
+
|
|
227
|
+
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
228
|
+
|
|
229
|
+
} else if ( depthType === FloatType ) {
|
|
230
|
+
|
|
231
|
+
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
232
|
+
|
|
233
|
+
} else if ( depthType === UnsignedShortType ) {
|
|
234
|
+
|
|
235
|
+
glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return glInternalFormat;
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
|
|
203
245
|
function getMipLevels( texture, image ) {
|
|
204
246
|
|
|
205
247
|
if ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
|
|
@@ -747,30 +789,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
747
789
|
let mipmap;
|
|
748
790
|
const mipmaps = texture.mipmaps;
|
|
749
791
|
|
|
750
|
-
const useTexStorage = ( texture.isVideoTexture !== true
|
|
792
|
+
const useTexStorage = ( texture.isVideoTexture !== true );
|
|
751
793
|
const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
|
|
752
794
|
const dataReady = source.dataReady;
|
|
753
795
|
const levels = getMipLevels( texture, image );
|
|
754
796
|
|
|
755
797
|
if ( texture.isDepthTexture ) {
|
|
756
798
|
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
glInternalFormat = _gl.DEPTH_COMPONENT16;
|
|
760
|
-
|
|
761
|
-
if ( texture.type === FloatType ) {
|
|
762
|
-
|
|
763
|
-
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
764
|
-
|
|
765
|
-
} else if ( texture.type === UnsignedIntType ) {
|
|
766
|
-
|
|
767
|
-
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
768
|
-
|
|
769
|
-
} else if ( texture.type === UnsignedInt248Type ) {
|
|
770
|
-
|
|
771
|
-
glInternalFormat = _gl.DEPTH24_STENCIL8;
|
|
772
|
-
|
|
773
|
-
}
|
|
799
|
+
glInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );
|
|
774
800
|
|
|
775
801
|
//
|
|
776
802
|
|
|
@@ -870,7 +896,22 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
870
896
|
|
|
871
897
|
if ( dataReady ) {
|
|
872
898
|
|
|
873
|
-
|
|
899
|
+
if ( texture.layerUpdates.size > 0 ) {
|
|
900
|
+
|
|
901
|
+
for ( const layerIndex of texture.layerUpdates ) {
|
|
902
|
+
|
|
903
|
+
const layerSize = mipmap.width * mipmap.height;
|
|
904
|
+
state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, mipmap.data.slice( layerSize * layerIndex, layerSize * ( layerIndex + 1 ) ), 0, 0 );
|
|
905
|
+
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
texture.clearLayerUpdates();
|
|
909
|
+
|
|
910
|
+
} else {
|
|
911
|
+
|
|
912
|
+
state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );
|
|
913
|
+
|
|
914
|
+
}
|
|
874
915
|
|
|
875
916
|
}
|
|
876
917
|
|
|
@@ -976,7 +1017,72 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
976
1017
|
|
|
977
1018
|
if ( dataReady ) {
|
|
978
1019
|
|
|
979
|
-
|
|
1020
|
+
if ( texture.layerUpdates.size > 0 ) {
|
|
1021
|
+
|
|
1022
|
+
// When type is GL_UNSIGNED_BYTE, each of these bytes is
|
|
1023
|
+
// interpreted as one color component, depending on format. When
|
|
1024
|
+
// type is one of GL_UNSIGNED_SHORT_5_6_5,
|
|
1025
|
+
// GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, each
|
|
1026
|
+
// unsigned value is interpreted as containing all the components
|
|
1027
|
+
// for a single pixel, with the color components arranged
|
|
1028
|
+
// according to format.
|
|
1029
|
+
//
|
|
1030
|
+
// See https://registry.khronos.org/OpenGL-Refpages/es1.1/xhtml/glTexImage2D.xml
|
|
1031
|
+
let texelSize;
|
|
1032
|
+
switch ( glType ) {
|
|
1033
|
+
|
|
1034
|
+
case _gl.UNSIGNED_BYTE:
|
|
1035
|
+
switch ( glFormat ) {
|
|
1036
|
+
|
|
1037
|
+
case _gl.ALPHA:
|
|
1038
|
+
texelSize = 1;
|
|
1039
|
+
break;
|
|
1040
|
+
case _gl.LUMINANCE:
|
|
1041
|
+
texelSize = 1;
|
|
1042
|
+
break;
|
|
1043
|
+
case _gl.LUMINANCE_ALPHA:
|
|
1044
|
+
texelSize = 2;
|
|
1045
|
+
break;
|
|
1046
|
+
case _gl.RGB:
|
|
1047
|
+
texelSize = 3;
|
|
1048
|
+
break;
|
|
1049
|
+
case _gl.RGBA:
|
|
1050
|
+
texelSize = 4;
|
|
1051
|
+
break;
|
|
1052
|
+
|
|
1053
|
+
default:
|
|
1054
|
+
throw new Error( `Unknown texel size for format ${glFormat}.` );
|
|
1055
|
+
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
break;
|
|
1059
|
+
|
|
1060
|
+
case _gl.UNSIGNED_SHORT_4_4_4_4:
|
|
1061
|
+
case _gl.UNSIGNED_SHORT_5_5_5_1:
|
|
1062
|
+
case _gl.UNSIGNED_SHORT_5_6_5:
|
|
1063
|
+
texelSize = 1;
|
|
1064
|
+
break;
|
|
1065
|
+
|
|
1066
|
+
default:
|
|
1067
|
+
throw new Error( `Unknown texel size for type ${glType}.` );
|
|
1068
|
+
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
const layerSize = image.width * image.height * texelSize;
|
|
1072
|
+
|
|
1073
|
+
for ( const layerIndex of texture.layerUpdates ) {
|
|
1074
|
+
|
|
1075
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, image.data.slice( layerSize * layerIndex, layerSize * ( layerIndex + 1 ) ) );
|
|
1076
|
+
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
texture.clearLayerUpdates();
|
|
1080
|
+
|
|
1081
|
+
} else {
|
|
1082
|
+
|
|
1083
|
+
state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
|
|
1084
|
+
|
|
1085
|
+
}
|
|
980
1086
|
|
|
981
1087
|
}
|
|
982
1088
|
|
|
@@ -1420,7 +1526,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1420
1526
|
|
|
1421
1527
|
}
|
|
1422
1528
|
|
|
1423
|
-
|
|
1424
1529
|
// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
|
|
1425
1530
|
function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
|
|
1426
1531
|
|
|
@@ -1480,66 +1585,30 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
1480
1585
|
|
|
1481
1586
|
} else if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
|
|
1482
1587
|
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
if ( depthTexture && depthTexture.isDepthTexture ) {
|
|
1490
|
-
|
|
1491
|
-
if ( depthTexture.type === FloatType ) {
|
|
1492
|
-
|
|
1493
|
-
glInternalFormat = _gl.DEPTH_COMPONENT32F;
|
|
1494
|
-
|
|
1495
|
-
} else if ( depthTexture.type === UnsignedIntType ) {
|
|
1496
|
-
|
|
1497
|
-
glInternalFormat = _gl.DEPTH_COMPONENT24;
|
|
1498
|
-
|
|
1499
|
-
}
|
|
1500
|
-
|
|
1501
|
-
}
|
|
1502
|
-
|
|
1503
|
-
const samples = getRenderTargetSamples( renderTarget );
|
|
1504
|
-
|
|
1505
|
-
if ( useMultisampledRTT( renderTarget ) ) {
|
|
1506
|
-
|
|
1507
|
-
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1508
|
-
|
|
1509
|
-
} else {
|
|
1510
|
-
|
|
1511
|
-
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1512
|
-
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
|
-
} else {
|
|
1516
|
-
|
|
1517
|
-
_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1518
|
-
|
|
1519
|
-
}
|
|
1520
|
-
|
|
1521
|
-
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );
|
|
1522
|
-
|
|
1523
|
-
} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {
|
|
1588
|
+
// retrieve the depth attachment types
|
|
1589
|
+
const depthTexture = renderTarget.depthTexture;
|
|
1590
|
+
const depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;
|
|
1591
|
+
const glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );
|
|
1592
|
+
const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
1524
1593
|
|
|
1594
|
+
// set up the attachment
|
|
1525
1595
|
const samples = getRenderTargetSamples( renderTarget );
|
|
1596
|
+
const isUseMultisampledRTT = useMultisampledRTT( renderTarget );
|
|
1597
|
+
if ( isUseMultisampledRTT ) {
|
|
1526
1598
|
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
|
|
1599
|
+
multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1530
1600
|
|
|
1531
|
-
} else if (
|
|
1601
|
+
} else if ( isMultisample ) {
|
|
1532
1602
|
|
|
1533
|
-
|
|
1603
|
+
_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1534
1604
|
|
|
1535
1605
|
} else {
|
|
1536
1606
|
|
|
1537
|
-
_gl.renderbufferStorage( _gl.RENDERBUFFER,
|
|
1607
|
+
_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
1538
1608
|
|
|
1539
1609
|
}
|
|
1540
1610
|
|
|
1541
|
-
|
|
1542
|
-
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );
|
|
1611
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );
|
|
1543
1612
|
|
|
1544
1613
|
} else {
|
|
1545
1614
|
|
|
@@ -2004,112 +2073,120 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2004
2073
|
|
|
2005
2074
|
}
|
|
2006
2075
|
|
|
2076
|
+
const invalidationArrayRead = [];
|
|
2077
|
+
const invalidationArrayDraw = [];
|
|
2078
|
+
|
|
2007
2079
|
function updateMultisampleRenderTarget( renderTarget ) {
|
|
2008
2080
|
|
|
2009
|
-
if (
|
|
2081
|
+
if ( renderTarget.samples > 0 ) {
|
|
2010
2082
|
|
|
2011
|
-
|
|
2012
|
-
const width = renderTarget.width;
|
|
2013
|
-
const height = renderTarget.height;
|
|
2014
|
-
let mask = _gl.COLOR_BUFFER_BIT;
|
|
2015
|
-
const invalidationArray = [];
|
|
2016
|
-
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
2017
|
-
const renderTargetProperties = properties.get( renderTarget );
|
|
2018
|
-
const isMultipleRenderTargets = ( textures.length > 1 );
|
|
2019
|
-
|
|
2020
|
-
// If MRT we need to remove FBO attachments
|
|
2021
|
-
if ( isMultipleRenderTargets ) {
|
|
2083
|
+
if ( useMultisampledRTT( renderTarget ) === false ) {
|
|
2022
2084
|
|
|
2023
|
-
|
|
2085
|
+
const textures = renderTarget.textures;
|
|
2086
|
+
const width = renderTarget.width;
|
|
2087
|
+
const height = renderTarget.height;
|
|
2088
|
+
let mask = _gl.COLOR_BUFFER_BIT;
|
|
2089
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
2090
|
+
const renderTargetProperties = properties.get( renderTarget );
|
|
2091
|
+
const isMultipleRenderTargets = ( textures.length > 1 );
|
|
2092
|
+
|
|
2093
|
+
// If MRT we need to remove FBO attachments
|
|
2094
|
+
if ( isMultipleRenderTargets ) {
|
|
2095
|
+
|
|
2096
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2024
2097
|
|
|
2025
|
-
|
|
2026
|
-
|
|
2098
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2099
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
|
|
2027
2100
|
|
|
2028
|
-
|
|
2029
|
-
|
|
2101
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2102
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
|
|
2103
|
+
|
|
2104
|
+
}
|
|
2030
2105
|
|
|
2031
2106
|
}
|
|
2032
2107
|
|
|
2033
|
-
|
|
2108
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2109
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2034
2110
|
|
|
2035
|
-
|
|
2036
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2111
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2037
2112
|
|
|
2038
|
-
|
|
2113
|
+
if ( renderTarget.resolveDepthBuffer ) {
|
|
2039
2114
|
|
|
2040
|
-
|
|
2115
|
+
if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
2041
2116
|
|
|
2042
|
-
|
|
2117
|
+
// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)
|
|
2043
2118
|
|
|
2044
|
-
|
|
2119
|
+
if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
2045
2120
|
|
|
2046
|
-
|
|
2121
|
+
}
|
|
2047
2122
|
|
|
2048
|
-
|
|
2123
|
+
if ( isMultipleRenderTargets ) {
|
|
2049
2124
|
|
|
2050
|
-
|
|
2125
|
+
_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
2051
2126
|
|
|
2052
|
-
|
|
2127
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
2128
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2053
2129
|
|
|
2054
|
-
|
|
2130
|
+
}
|
|
2055
2131
|
|
|
2056
|
-
|
|
2132
|
+
_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
2057
2133
|
|
|
2058
|
-
|
|
2134
|
+
if ( supportsInvalidateFramebuffer === true ) {
|
|
2059
2135
|
|
|
2060
|
-
|
|
2136
|
+
invalidationArrayRead.length = 0;
|
|
2137
|
+
invalidationArrayDraw.length = 0;
|
|
2061
2138
|
|
|
2062
|
-
|
|
2139
|
+
invalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );
|
|
2063
2140
|
|
|
2064
|
-
|
|
2141
|
+
if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {
|
|
2065
2142
|
|
|
2066
|
-
|
|
2143
|
+
invalidationArrayRead.push( depthStyle );
|
|
2144
|
+
invalidationArrayDraw.push( depthStyle );
|
|
2067
2145
|
|
|
2068
|
-
|
|
2069
|
-
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
2146
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );
|
|
2070
2147
|
|
|
2071
|
-
|
|
2148
|
+
}
|
|
2072
2149
|
|
|
2073
|
-
|
|
2150
|
+
_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );
|
|
2074
2151
|
|
|
2075
|
-
|
|
2076
|
-
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2152
|
+
}
|
|
2077
2153
|
|
|
2078
2154
|
}
|
|
2079
2155
|
|
|
2080
|
-
|
|
2156
|
+
state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
|
|
2157
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2081
2158
|
|
|
2082
|
-
|
|
2159
|
+
// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
|
|
2160
|
+
if ( isMultipleRenderTargets ) {
|
|
2083
2161
|
|
|
2084
|
-
|
|
2162
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
2085
2163
|
|
|
2086
|
-
|
|
2164
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2165
|
+
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
|
|
2087
2166
|
|
|
2167
|
+
const webglTexture = properties.get( textures[ i ] ).__webglTexture;
|
|
2088
2168
|
|
|
2089
|
-
|
|
2169
|
+
state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
2170
|
+
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2090
2171
|
|
|
2091
|
-
|
|
2092
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
|
|
2172
|
+
}
|
|
2093
2173
|
|
|
2094
|
-
|
|
2095
|
-
if ( isMultipleRenderTargets ) {
|
|
2174
|
+
}
|
|
2096
2175
|
|
|
2097
|
-
|
|
2176
|
+
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2098
2177
|
|
|
2099
|
-
|
|
2100
|
-
|
|
2178
|
+
} else {
|
|
2179
|
+
|
|
2180
|
+
if ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {
|
|
2101
2181
|
|
|
2102
|
-
const
|
|
2182
|
+
const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
|
|
2103
2183
|
|
|
2104
|
-
|
|
2105
|
-
_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
|
|
2184
|
+
_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
|
|
2106
2185
|
|
|
2107
2186
|
}
|
|
2108
2187
|
|
|
2109
2188
|
}
|
|
2110
2189
|
|
|
2111
|
-
state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
2112
|
-
|
|
2113
2190
|
}
|
|
2114
2191
|
|
|
2115
2192
|
}
|
|
@@ -101,33 +101,15 @@ function WebGLUtils( gl, extensions ) {
|
|
|
101
101
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
//
|
|
104
|
+
// ETC
|
|
105
105
|
|
|
106
|
-
if ( p === RGB_ETC1_Format ) {
|
|
107
|
-
|
|
108
|
-
extension = extensions.get( 'WEBGL_compressed_texture_etc1' );
|
|
109
|
-
|
|
110
|
-
if ( extension !== null ) {
|
|
111
|
-
|
|
112
|
-
return extension.COMPRESSED_RGB_ETC1_WEBGL;
|
|
113
|
-
|
|
114
|
-
} else {
|
|
115
|
-
|
|
116
|
-
return null;
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ETC2
|
|
123
|
-
|
|
124
|
-
if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
|
|
106
|
+
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
|
|
125
107
|
|
|
126
108
|
extension = extensions.get( 'WEBGL_compressed_texture_etc' );
|
|
127
109
|
|
|
128
110
|
if ( extension !== null ) {
|
|
129
111
|
|
|
130
|
-
if ( p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
|
|
112
|
+
if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
|
|
131
113
|
if ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
|
|
132
114
|
|
|
133
115
|
} else {
|
|
@@ -65,7 +65,7 @@ class WebXRDepthSensing {
|
|
|
65
65
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
getMesh( cameraXR ) {
|
|
69
69
|
|
|
70
70
|
if ( this.texture !== null ) {
|
|
71
71
|
|
|
@@ -86,10 +86,10 @@ class WebXRDepthSensing {
|
|
|
86
86
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
renderer.render( this.mesh, cameraXR );
|
|
90
|
-
|
|
91
89
|
}
|
|
92
90
|
|
|
91
|
+
return this.mesh;
|
|
92
|
+
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
reset() {
|
|
@@ -361,7 +361,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
361
361
|
depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
|
|
362
362
|
stencilBuffer: attributes.stencil,
|
|
363
363
|
colorSpace: renderer.outputColorSpace,
|
|
364
|
-
samples: attributes.antialias ? 4 : 0
|
|
364
|
+
samples: attributes.antialias ? 4 : 0,
|
|
365
|
+
resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )
|
|
365
366
|
};
|
|
366
367
|
|
|
367
368
|
if ( scope.isMultiview ) {
|
|
@@ -381,9 +382,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
381
382
|
|
|
382
383
|
}
|
|
383
384
|
|
|
384
|
-
const renderTargetProperties = renderer.properties.get( newRenderTarget );
|
|
385
|
-
renderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;
|
|
386
|
-
|
|
387
385
|
}
|
|
388
386
|
|
|
389
387
|
newRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278
|
|
@@ -727,6 +725,12 @@ class WebXRManager extends EventDispatcher {
|
|
|
727
725
|
|
|
728
726
|
};
|
|
729
727
|
|
|
728
|
+
this.getDepthSensingMesh = function () {
|
|
729
|
+
|
|
730
|
+
return depthSensing.getMesh( cameraXR );
|
|
731
|
+
|
|
732
|
+
};
|
|
733
|
+
|
|
730
734
|
// Animation Loop
|
|
731
735
|
|
|
732
736
|
let onAnimationFrameCallback = null;
|
|
@@ -852,8 +856,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
852
856
|
|
|
853
857
|
}
|
|
854
858
|
|
|
855
|
-
depthSensing.render( renderer, cameraXR );
|
|
856
|
-
|
|
857
859
|
if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );
|
|
858
860
|
|
|
859
861
|
if ( frame.detectedPlanes ) {
|
|
@@ -11,6 +11,20 @@ class CompressedArrayTexture extends CompressedTexture {
|
|
|
11
11
|
this.image.depth = depth;
|
|
12
12
|
this.wrapR = ClampToEdgeWrapping;
|
|
13
13
|
|
|
14
|
+
this.layerUpdates = new Set();
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
addLayerUpdates( layerIndex ) {
|
|
19
|
+
|
|
20
|
+
this.layerUpdates.add( layerIndex );
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
clearLayerUpdates() {
|
|
25
|
+
|
|
26
|
+
this.layerUpdates.clear();
|
|
27
|
+
|
|
14
28
|
}
|
|
15
29
|
|
|
16
30
|
}
|
|
@@ -20,6 +20,20 @@ class DataArrayTexture extends Texture {
|
|
|
20
20
|
this.flipY = false;
|
|
21
21
|
this.unpackAlignment = 1;
|
|
22
22
|
|
|
23
|
+
this.layerUpdates = new Set();
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
addLayerUpdate( layerIndex ) {
|
|
28
|
+
|
|
29
|
+
this.layerUpdates.add( layerIndex );
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
clearLayerUpdates() {
|
|
34
|
+
|
|
35
|
+
this.layerUpdates.clear();
|
|
36
|
+
|
|
23
37
|
}
|
|
24
38
|
|
|
25
39
|
}
|
|
@@ -3,9 +3,7 @@ import { NearestFilter, UnsignedIntType, UnsignedInt248Type, DepthFormat, DepthS
|
|
|
3
3
|
|
|
4
4
|
class DepthTexture extends Texture {
|
|
5
5
|
|
|
6
|
-
constructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {
|
|
7
|
-
|
|
8
|
-
format = format !== undefined ? format : DepthFormat;
|
|
6
|
+
constructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {
|
|
9
7
|
|
|
10
8
|
if ( format !== DepthFormat && format !== DepthStencilFormat ) {
|
|
11
9
|
|
package/src/utils.js
CHANGED
|
@@ -88,4 +88,33 @@ function warnOnce( message ) {
|
|
|
88
88
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
function probeAsync( gl, sync, interval ) {
|
|
92
|
+
|
|
93
|
+
return new Promise( function ( resolve, reject ) {
|
|
94
|
+
|
|
95
|
+
function probe() {
|
|
96
|
+
|
|
97
|
+
switch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {
|
|
98
|
+
|
|
99
|
+
case gl.WAIT_FAILED:
|
|
100
|
+
reject();
|
|
101
|
+
break;
|
|
102
|
+
|
|
103
|
+
case gl.TIMEOUT_EXPIRED:
|
|
104
|
+
setTimeout( probe, interval );
|
|
105
|
+
break;
|
|
106
|
+
|
|
107
|
+
default:
|
|
108
|
+
resolve();
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
setTimeout( probe, interval );
|
|
115
|
+
|
|
116
|
+
} );
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, warnOnce, probeAsync };
|