super-three 0.162.0 → 0.164.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.cjs +847 -1226
- package/build/three.module.js +846 -1225
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +66 -5
- package/examples/jsm/exporters/USDZExporter.js +22 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +59 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -10
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- 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/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +10 -4
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/Node.js +63 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- 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 +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- 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 +164 -10
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +11 -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 +10 -6
- package/examples/jsm/nodes/materials/Materials.js +1 -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 +76 -5
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +8 -8
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +47 -5
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +153 -21
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
- package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +21 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +27 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +130 -158
- 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/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- 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 +2 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLCapabilities.js +35 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +8 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +21 -52
- package/src/renderers/webgl/WebGLPrograms.js +24 -31
- package/src/renderers/webgl/WebGLRenderStates.js +13 -7
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +138 -292
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +4 -6
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -3,9 +3,7 @@ import {
|
|
|
3
3
|
BackSide,
|
|
4
4
|
FrontSide,
|
|
5
5
|
DoubleSide,
|
|
6
|
-
RGBAFormat,
|
|
7
6
|
HalfFloatType,
|
|
8
|
-
FloatType,
|
|
9
7
|
UnsignedByteType,
|
|
10
8
|
NoToneMapping,
|
|
11
9
|
LinearMipmapLinearFilter,
|
|
@@ -26,10 +24,8 @@ import {
|
|
|
26
24
|
import { Color } from '../math/Color.js';
|
|
27
25
|
import { Frustum } from '../math/Frustum.js';
|
|
28
26
|
import { Matrix4 } from '../math/Matrix4.js';
|
|
29
|
-
import { Vector2 } from '../math/Vector2.js';
|
|
30
27
|
import { Vector3 } from '../math/Vector3.js';
|
|
31
28
|
import { Vector4 } from '../math/Vector4.js';
|
|
32
|
-
import { floorPowerOfTwo } from '../math/MathUtils.js';
|
|
33
29
|
import { WebGLAnimation } from './webgl/WebGLAnimation.js';
|
|
34
30
|
import { WebGLAttributes } from './webgl/WebGLAttributes.js';
|
|
35
31
|
import { WebGLBackground } from './webgl/WebGLBackground.js';
|
|
@@ -71,7 +67,7 @@ class WebGLRenderer {
|
|
|
71
67
|
canvas = createCanvasElement(),
|
|
72
68
|
context = null,
|
|
73
69
|
depth = true,
|
|
74
|
-
stencil =
|
|
70
|
+
stencil = false,
|
|
75
71
|
alpha = false,
|
|
76
72
|
antialias = false,
|
|
77
73
|
premultipliedAlpha = true,
|
|
@@ -87,6 +83,12 @@ class WebGLRenderer {
|
|
|
87
83
|
|
|
88
84
|
if ( context !== null ) {
|
|
89
85
|
|
|
86
|
+
if ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {
|
|
87
|
+
|
|
88
|
+
throw new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
90
92
|
_alpha = context.getContextAttributes().alpha;
|
|
91
93
|
|
|
92
94
|
} else {
|
|
@@ -199,15 +201,10 @@ class WebGLRenderer {
|
|
|
199
201
|
let _clippingEnabled = false;
|
|
200
202
|
let _localClippingEnabled = false;
|
|
201
203
|
|
|
202
|
-
// transmission
|
|
203
|
-
|
|
204
|
-
let _transmissionRenderTarget = null;
|
|
205
|
-
|
|
206
204
|
// camera matrices cache
|
|
207
205
|
|
|
208
206
|
const _projScreenMatrix = new Matrix4();
|
|
209
207
|
|
|
210
|
-
const _vector2 = new Vector2();
|
|
211
208
|
const _vector3 = new Vector3();
|
|
212
209
|
|
|
213
210
|
const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };
|
|
@@ -222,17 +219,9 @@ class WebGLRenderer {
|
|
|
222
219
|
|
|
223
220
|
let _gl = context;
|
|
224
221
|
|
|
225
|
-
function getContext(
|
|
226
|
-
|
|
227
|
-
for ( let i = 0; i < contextNames.length; i ++ ) {
|
|
222
|
+
function getContext( contextName, contextAttributes ) {
|
|
228
223
|
|
|
229
|
-
|
|
230
|
-
const context = canvas.getContext( contextName, contextAttributes );
|
|
231
|
-
if ( context !== null ) return context;
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
return null;
|
|
224
|
+
return canvas.getContext( contextName, contextAttributes );
|
|
236
225
|
|
|
237
226
|
}
|
|
238
227
|
|
|
@@ -259,19 +248,13 @@ class WebGLRenderer {
|
|
|
259
248
|
|
|
260
249
|
if ( _gl === null ) {
|
|
261
250
|
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
if ( _this.isWebGL1Renderer === true ) {
|
|
265
|
-
|
|
266
|
-
contextNames.shift();
|
|
267
|
-
|
|
268
|
-
}
|
|
251
|
+
const contextName = 'webgl2';
|
|
269
252
|
|
|
270
|
-
_gl = getContext(
|
|
253
|
+
_gl = getContext( contextName, contextAttributes );
|
|
271
254
|
|
|
272
255
|
if ( _gl === null ) {
|
|
273
256
|
|
|
274
|
-
if ( getContext(
|
|
257
|
+
if ( getContext( contextName ) ) {
|
|
275
258
|
|
|
276
259
|
throw new Error( 'Error creating WebGL context with your selected attributes.' );
|
|
277
260
|
|
|
@@ -285,24 +268,6 @@ class WebGLRenderer {
|
|
|
285
268
|
|
|
286
269
|
}
|
|
287
270
|
|
|
288
|
-
if ( typeof WebGLRenderingContext !== 'undefined' && _gl instanceof WebGLRenderingContext ) { // @deprecated, r153
|
|
289
|
-
|
|
290
|
-
console.warn( 'THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163.' );
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Some experimental-webgl implementations do not have getShaderPrecisionFormat
|
|
295
|
-
|
|
296
|
-
if ( _gl.getShaderPrecisionFormat === undefined ) {
|
|
297
|
-
|
|
298
|
-
_gl.getShaderPrecisionFormat = function () {
|
|
299
|
-
|
|
300
|
-
return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };
|
|
301
|
-
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
|
|
306
271
|
} catch ( error ) {
|
|
307
272
|
|
|
308
273
|
console.error( 'THREE.WebGLRenderer: ' + error.message );
|
|
@@ -322,22 +287,21 @@ class WebGLRenderer {
|
|
|
322
287
|
function initGLContext() {
|
|
323
288
|
|
|
324
289
|
extensions = new WebGLExtensions( _gl );
|
|
290
|
+
extensions.init();
|
|
325
291
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
extensions.init( capabilities );
|
|
292
|
+
utils = new WebGLUtils( _gl, extensions );
|
|
329
293
|
|
|
330
|
-
|
|
294
|
+
capabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );
|
|
331
295
|
|
|
332
|
-
state = new WebGLState( _gl
|
|
296
|
+
state = new WebGLState( _gl );
|
|
333
297
|
|
|
334
298
|
info = new WebGLInfo( _gl );
|
|
335
299
|
properties = new WebGLProperties();
|
|
336
300
|
textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
|
|
337
301
|
cubemaps = new WebGLCubeMaps( _this );
|
|
338
302
|
cubeuvmaps = new WebGLCubeUVMaps( _this );
|
|
339
|
-
attributes = new WebGLAttributes( _gl
|
|
340
|
-
bindingStates = new WebGLBindingStates( _gl,
|
|
303
|
+
attributes = new WebGLAttributes( _gl );
|
|
304
|
+
bindingStates = new WebGLBindingStates( _gl, attributes );
|
|
341
305
|
geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
|
|
342
306
|
objects = new WebGLObjects( _gl, geometries, attributes, info );
|
|
343
307
|
morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
|
|
@@ -345,14 +309,14 @@ class WebGLRenderer {
|
|
|
345
309
|
programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
|
|
346
310
|
materials = new WebGLMaterials( _this, properties );
|
|
347
311
|
renderLists = new WebGLRenderLists();
|
|
348
|
-
renderStates = new WebGLRenderStates( extensions
|
|
312
|
+
renderStates = new WebGLRenderStates( extensions );
|
|
349
313
|
background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
|
|
350
314
|
multiview = new WebGLMultiview( _this, extensions, _gl );
|
|
351
315
|
shadowMap = new WebGLShadowMap( _this, objects, capabilities );
|
|
352
316
|
uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
|
|
353
317
|
|
|
354
|
-
bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info
|
|
355
|
-
indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info
|
|
318
|
+
bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );
|
|
319
|
+
indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );
|
|
356
320
|
|
|
357
321
|
info.programs = programCache.programs;
|
|
358
322
|
|
|
@@ -684,13 +648,6 @@ class WebGLRenderer {
|
|
|
684
648
|
xr.removeEventListener( 'sessionstart', onXRSessionStart );
|
|
685
649
|
xr.removeEventListener( 'sessionend', onXRSessionEnd );
|
|
686
650
|
|
|
687
|
-
if ( _transmissionRenderTarget ) {
|
|
688
|
-
|
|
689
|
-
_transmissionRenderTarget.dispose();
|
|
690
|
-
_transmissionRenderTarget = null;
|
|
691
|
-
|
|
692
|
-
}
|
|
693
|
-
|
|
694
651
|
animation.stop();
|
|
695
652
|
|
|
696
653
|
};
|
|
@@ -901,7 +858,15 @@ class WebGLRenderer {
|
|
|
901
858
|
|
|
902
859
|
if ( object.isBatchedMesh ) {
|
|
903
860
|
|
|
904
|
-
|
|
861
|
+
if ( object._multiDrawInstances !== null ) {
|
|
862
|
+
|
|
863
|
+
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
864
|
+
|
|
865
|
+
} else {
|
|
866
|
+
|
|
867
|
+
renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
|
|
868
|
+
|
|
869
|
+
}
|
|
905
870
|
|
|
906
871
|
} else if ( object.isInstancedMesh ) {
|
|
907
872
|
|
|
@@ -951,7 +916,7 @@ class WebGLRenderer {
|
|
|
951
916
|
if ( targetScene === null ) targetScene = scene;
|
|
952
917
|
|
|
953
918
|
currentRenderState = renderStates.get( targetScene );
|
|
954
|
-
currentRenderState.init();
|
|
919
|
+
currentRenderState.init( camera );
|
|
955
920
|
|
|
956
921
|
renderStateStack.push( currentRenderState );
|
|
957
922
|
|
|
@@ -1168,7 +1133,7 @@ class WebGLRenderer {
|
|
|
1168
1133
|
if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );
|
|
1169
1134
|
|
|
1170
1135
|
currentRenderState = renderStates.get( scene, renderStateStack.length );
|
|
1171
|
-
currentRenderState.init();
|
|
1136
|
+
currentRenderState.init( camera );
|
|
1172
1137
|
|
|
1173
1138
|
renderStateStack.push( currentRenderState );
|
|
1174
1139
|
|
|
@@ -1193,6 +1158,13 @@ class WebGLRenderer {
|
|
|
1193
1158
|
|
|
1194
1159
|
}
|
|
1195
1160
|
|
|
1161
|
+
const renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;
|
|
1162
|
+
if ( renderBackground ) {
|
|
1163
|
+
|
|
1164
|
+
background.addToRenderList( currentRenderList, scene );
|
|
1165
|
+
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1196
1168
|
//
|
|
1197
1169
|
|
|
1198
1170
|
this.info.render.frame ++;
|
|
@@ -1209,20 +1181,30 @@ class WebGLRenderer {
|
|
|
1209
1181
|
|
|
1210
1182
|
if ( this.info.autoReset === true ) this.info.reset();
|
|
1211
1183
|
|
|
1184
|
+
// render scene
|
|
1212
1185
|
|
|
1213
|
-
|
|
1186
|
+
const opaqueObjects = currentRenderList.opaque;
|
|
1187
|
+
const transmissiveObjects = currentRenderList.transmissive;
|
|
1214
1188
|
|
|
1215
|
-
|
|
1189
|
+
currentRenderState.setupLights( _this._useLegacyLights );
|
|
1216
1190
|
|
|
1217
|
-
|
|
1191
|
+
if ( camera.isArrayCamera ) {
|
|
1218
1192
|
|
|
1219
|
-
|
|
1193
|
+
const cameras = camera.cameras;
|
|
1220
1194
|
|
|
1221
|
-
|
|
1195
|
+
if ( transmissiveObjects.length > 0 ) {
|
|
1222
1196
|
|
|
1223
|
-
|
|
1197
|
+
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
1224
1198
|
|
|
1225
|
-
|
|
1199
|
+
const camera2 = cameras[ i ];
|
|
1200
|
+
|
|
1201
|
+
renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );
|
|
1202
|
+
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
if ( renderBackground ) background.render( scene );
|
|
1226
1208
|
|
|
1227
1209
|
if ( xr.enabled && xr.isMultiview ) {
|
|
1228
1210
|
|
|
@@ -1232,8 +1214,6 @@ class WebGLRenderer {
|
|
|
1232
1214
|
|
|
1233
1215
|
} else {
|
|
1234
1216
|
|
|
1235
|
-
const cameras = camera.cameras;
|
|
1236
|
-
|
|
1237
1217
|
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
1238
1218
|
|
|
1239
1219
|
const camera2 = cameras[ i ];
|
|
@@ -1246,6 +1226,10 @@ class WebGLRenderer {
|
|
|
1246
1226
|
|
|
1247
1227
|
} else {
|
|
1248
1228
|
|
|
1229
|
+
if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
|
|
1230
|
+
|
|
1231
|
+
if ( renderBackground ) background.render( scene );
|
|
1232
|
+
|
|
1249
1233
|
renderScene( currentRenderList, scene, camera );
|
|
1250
1234
|
|
|
1251
1235
|
}
|
|
@@ -1287,6 +1271,8 @@ class WebGLRenderer {
|
|
|
1287
1271
|
|
|
1288
1272
|
currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
|
|
1289
1273
|
|
|
1274
|
+
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );
|
|
1275
|
+
|
|
1290
1276
|
} else {
|
|
1291
1277
|
|
|
1292
1278
|
currentRenderState = null;
|
|
@@ -1431,8 +1417,6 @@ class WebGLRenderer {
|
|
|
1431
1417
|
|
|
1432
1418
|
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
|
|
1433
1419
|
|
|
1434
|
-
if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
|
|
1435
|
-
|
|
1436
1420
|
if ( viewport ) state.viewport( _currentViewport.copy( viewport ) );
|
|
1437
1421
|
|
|
1438
1422
|
if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );
|
|
@@ -1459,15 +1443,16 @@ class WebGLRenderer {
|
|
|
1459
1443
|
|
|
1460
1444
|
}
|
|
1461
1445
|
|
|
1462
|
-
|
|
1446
|
+
if ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {
|
|
1463
1447
|
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
|
|
1448
|
+
currentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {
|
|
1467
1449
|
generateMipmaps: true,
|
|
1468
|
-
type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
|
|
1450
|
+
type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
|
|
1469
1451
|
minFilter: LinearMipmapLinearFilter,
|
|
1470
|
-
samples:
|
|
1452
|
+
samples: 4,
|
|
1453
|
+
stencilBuffer: stencil,
|
|
1454
|
+
resolveDepthBuffer: false,
|
|
1455
|
+
resolveStencilBuffer: false
|
|
1471
1456
|
} );
|
|
1472
1457
|
|
|
1473
1458
|
// debug
|
|
@@ -1482,22 +1467,15 @@ class WebGLRenderer {
|
|
|
1482
1467
|
|
|
1483
1468
|
}
|
|
1484
1469
|
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
if ( isWebGL2 ) {
|
|
1488
|
-
|
|
1489
|
-
_transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
|
|
1490
|
-
|
|
1491
|
-
} else {
|
|
1470
|
+
const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];
|
|
1492
1471
|
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
}
|
|
1472
|
+
const activeViewport = camera.viewport || _currentViewport;
|
|
1473
|
+
transmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );
|
|
1496
1474
|
|
|
1497
1475
|
//
|
|
1498
1476
|
|
|
1499
1477
|
const currentRenderTarget = _this.getRenderTarget();
|
|
1500
|
-
_this.setRenderTarget(
|
|
1478
|
+
_this.setRenderTarget( transmissionRenderTarget );
|
|
1501
1479
|
|
|
1502
1480
|
_this.getClearColor( _currentClearColor );
|
|
1503
1481
|
_currentClearAlpha = _this.getClearAlpha();
|
|
@@ -1510,44 +1488,57 @@ class WebGLRenderer {
|
|
|
1510
1488
|
const currentToneMapping = _this.toneMapping;
|
|
1511
1489
|
_this.toneMapping = NoToneMapping;
|
|
1512
1490
|
|
|
1491
|
+
// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).
|
|
1492
|
+
// Transmission render pass requires viewport to match the transmissionRenderTarget.
|
|
1493
|
+
const currentCameraViewport = camera.viewport;
|
|
1494
|
+
if ( camera.viewport !== undefined ) camera.viewport = undefined;
|
|
1495
|
+
|
|
1496
|
+
currentRenderState.setupLightsView( camera );
|
|
1497
|
+
|
|
1498
|
+
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
|
|
1499
|
+
|
|
1513
1500
|
renderObjects( opaqueObjects, scene, camera );
|
|
1514
1501
|
|
|
1515
|
-
textures.updateMultisampleRenderTarget(
|
|
1516
|
-
textures.updateRenderTargetMipmap(
|
|
1502
|
+
textures.updateMultisampleRenderTarget( transmissionRenderTarget );
|
|
1503
|
+
textures.updateRenderTargetMipmap( transmissionRenderTarget );
|
|
1517
1504
|
|
|
1518
|
-
|
|
1505
|
+
if ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131
|
|
1519
1506
|
|
|
1520
|
-
|
|
1507
|
+
let renderTargetNeedsUpdate = false;
|
|
1521
1508
|
|
|
1522
|
-
|
|
1509
|
+
for ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {
|
|
1523
1510
|
|
|
1524
|
-
|
|
1525
|
-
const geometry = renderItem.geometry;
|
|
1526
|
-
const material = renderItem.material;
|
|
1527
|
-
const group = renderItem.group;
|
|
1511
|
+
const renderItem = transmissiveObjects[ i ];
|
|
1528
1512
|
|
|
1529
|
-
|
|
1513
|
+
const object = renderItem.object;
|
|
1514
|
+
const geometry = renderItem.geometry;
|
|
1515
|
+
const material = renderItem.material;
|
|
1516
|
+
const group = renderItem.group;
|
|
1530
1517
|
|
|
1531
|
-
|
|
1518
|
+
if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
|
|
1532
1519
|
|
|
1533
|
-
|
|
1534
|
-
material.needsUpdate = true;
|
|
1520
|
+
const currentSide = material.side;
|
|
1535
1521
|
|
|
1536
|
-
|
|
1522
|
+
material.side = BackSide;
|
|
1523
|
+
material.needsUpdate = true;
|
|
1524
|
+
|
|
1525
|
+
renderObject( object, scene, camera, geometry, material, group );
|
|
1537
1526
|
|
|
1538
|
-
|
|
1539
|
-
|
|
1527
|
+
material.side = currentSide;
|
|
1528
|
+
material.needsUpdate = true;
|
|
1540
1529
|
|
|
1541
|
-
|
|
1530
|
+
renderTargetNeedsUpdate = true;
|
|
1531
|
+
|
|
1532
|
+
}
|
|
1542
1533
|
|
|
1543
1534
|
}
|
|
1544
1535
|
|
|
1545
|
-
|
|
1536
|
+
if ( renderTargetNeedsUpdate === true ) {
|
|
1546
1537
|
|
|
1547
|
-
|
|
1538
|
+
textures.updateMultisampleRenderTarget( transmissionRenderTarget );
|
|
1539
|
+
textures.updateRenderTargetMipmap( transmissionRenderTarget );
|
|
1548
1540
|
|
|
1549
|
-
|
|
1550
|
-
textures.updateRenderTargetMipmap( _transmissionRenderTarget );
|
|
1541
|
+
}
|
|
1551
1542
|
|
|
1552
1543
|
}
|
|
1553
1544
|
|
|
@@ -1555,6 +1546,8 @@ class WebGLRenderer {
|
|
|
1555
1546
|
|
|
1556
1547
|
_this.setClearColor( _currentClearColor, _currentClearAlpha );
|
|
1557
1548
|
|
|
1549
|
+
if ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;
|
|
1550
|
+
|
|
1558
1551
|
_this.toneMapping = currentToneMapping;
|
|
1559
1552
|
|
|
1560
1553
|
}
|
|
@@ -1907,7 +1900,7 @@ class WebGLRenderer {
|
|
|
1907
1900
|
|
|
1908
1901
|
needsProgramChange = true;
|
|
1909
1902
|
|
|
1910
|
-
} else if (
|
|
1903
|
+
} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
|
|
1911
1904
|
|
|
1912
1905
|
needsProgramChange = true;
|
|
1913
1906
|
|
|
@@ -2029,17 +2022,9 @@ class WebGLRenderer {
|
|
|
2029
2022
|
|
|
2030
2023
|
if ( skeleton ) {
|
|
2031
2024
|
|
|
2032
|
-
if (
|
|
2025
|
+
if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
|
|
2033
2026
|
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
|
|
2037
|
-
|
|
2038
|
-
} else {
|
|
2039
|
-
|
|
2040
|
-
console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );
|
|
2041
|
-
|
|
2042
|
-
}
|
|
2027
|
+
p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
|
|
2043
2028
|
|
|
2044
2029
|
}
|
|
2045
2030
|
|
|
@@ -2054,7 +2039,7 @@ class WebGLRenderer {
|
|
|
2054
2039
|
|
|
2055
2040
|
const morphAttributes = geometry.morphAttributes;
|
|
2056
2041
|
|
|
2057
|
-
if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined
|
|
2042
|
+
if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {
|
|
2058
2043
|
|
|
2059
2044
|
morphtargets.update( object, geometry, program );
|
|
2060
2045
|
|
|
@@ -2077,6 +2062,12 @@ class WebGLRenderer {
|
|
|
2077
2062
|
|
|
2078
2063
|
}
|
|
2079
2064
|
|
|
2065
|
+
if ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {
|
|
2066
|
+
|
|
2067
|
+
m_uniforms.envMapIntensity.value = scene.environmentIntensity;
|
|
2068
|
+
|
|
2069
|
+
}
|
|
2070
|
+
|
|
2080
2071
|
if ( refreshMaterial ) {
|
|
2081
2072
|
|
|
2082
2073
|
p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
|
|
@@ -2104,7 +2095,7 @@ class WebGLRenderer {
|
|
|
2104
2095
|
|
|
2105
2096
|
}
|
|
2106
2097
|
|
|
2107
|
-
materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height,
|
|
2098
|
+
materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );
|
|
2108
2099
|
|
|
2109
2100
|
WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
|
|
2110
2101
|
|
|
@@ -2146,18 +2137,10 @@ class WebGLRenderer {
|
|
|
2146
2137
|
|
|
2147
2138
|
for ( let i = 0, l = groups.length; i < l; i ++ ) {
|
|
2148
2139
|
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
const group = groups[ i ];
|
|
2140
|
+
const group = groups[ i ];
|
|
2152
2141
|
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
} else {
|
|
2157
|
-
|
|
2158
|
-
console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );
|
|
2159
|
-
|
|
2160
|
-
}
|
|
2142
|
+
uniformsGroups.update( group, program );
|
|
2143
|
+
uniformsGroups.bind( group, program );
|
|
2161
2144
|
|
|
2162
2145
|
}
|
|
2163
2146
|
|
|
@@ -2326,7 +2309,7 @@ class WebGLRenderer {
|
|
|
2326
2309
|
|
|
2327
2310
|
isCube = true;
|
|
2328
2311
|
|
|
2329
|
-
} else if ( (
|
|
2312
|
+
} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
|
|
2330
2313
|
|
|
2331
2314
|
framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
|
|
2332
2315
|
|
|
@@ -2358,7 +2341,7 @@ class WebGLRenderer {
|
|
|
2358
2341
|
|
|
2359
2342
|
const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2360
2343
|
|
|
2361
|
-
if ( framebufferBound &&
|
|
2344
|
+
if ( framebufferBound && useDefaultFramebuffer ) {
|
|
2362
2345
|
|
|
2363
2346
|
state.drawBuffers( renderTarget, framebuffer );
|
|
2364
2347
|
|
|
@@ -2412,18 +2395,14 @@ class WebGLRenderer {
|
|
|
2412
2395
|
const textureFormat = texture.format;
|
|
2413
2396
|
const textureType = texture.type;
|
|
2414
2397
|
|
|
2415
|
-
if (
|
|
2398
|
+
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2416
2399
|
|
|
2417
2400
|
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
2418
2401
|
return;
|
|
2419
2402
|
|
|
2420
2403
|
}
|
|
2421
2404
|
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
|
|
2425
|
-
! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox
|
|
2426
|
-
! halfFloatSupportedByExt ) {
|
|
2405
|
+
if ( ! capabilities.textureTypeReadable( textureType ) ) {
|
|
2427
2406
|
|
|
2428
2407
|
console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
2429
2408
|
return;
|
|
@@ -2507,16 +2486,9 @@ class WebGLRenderer {
|
|
|
2507
2486
|
|
|
2508
2487
|
this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {
|
|
2509
2488
|
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
return;
|
|
2514
|
-
|
|
2515
|
-
}
|
|
2516
|
-
|
|
2517
|
-
const width = Math.round( sourceBox.max.x - sourceBox.min.x );
|
|
2518
|
-
const height = Math.round( sourceBox.max.y - sourceBox.min.y );
|
|
2519
|
-
const depth = sourceBox.max.z - sourceBox.min.z + 1;
|
|
2489
|
+
const width = sourceBox.max.x - sourceBox.min.x;
|
|
2490
|
+
const height = sourceBox.max.y - sourceBox.min.y;
|
|
2491
|
+
const depth = sourceBox.max.z - sourceBox.min.z;
|
|
2520
2492
|
const glFormat = utils.convert( dstTexture.format );
|
|
2521
2493
|
const glType = utils.convert( dstTexture.type );
|
|
2522
2494
|
let glTarget;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
|
-
#if defined( USE_LOGDEPTHBUF )
|
|
2
|
+
#if defined( USE_LOGDEPTHBUF )
|
|
3
3
|
|
|
4
4
|
// Doing a strict comparison with == 1.0 can cause noise artifacts
|
|
5
5
|
// on some platforms. See issue #17623.
|
|
6
|
-
|
|
6
|
+
gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;
|
|
7
7
|
|
|
8
8
|
#endif
|
|
9
9
|
`;
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
2
|
#ifdef USE_LOGDEPTHBUF
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
varying float vFragDepth;
|
|
7
|
-
varying float vIsPerspective;
|
|
8
|
-
|
|
9
|
-
#else
|
|
10
|
-
|
|
11
|
-
uniform float logDepthBufFC;
|
|
12
|
-
|
|
13
|
-
#endif
|
|
4
|
+
varying float vFragDepth;
|
|
5
|
+
varying float vIsPerspective;
|
|
14
6
|
|
|
15
7
|
#endif
|
|
16
8
|
`;
|
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
2
|
#ifdef USE_LOGDEPTHBUF
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
vFragDepth = 1.0 + gl_Position.w;
|
|
7
|
-
vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
|
|
8
|
-
|
|
9
|
-
#else
|
|
10
|
-
|
|
11
|
-
if ( isPerspectiveMatrix( projectionMatrix ) ) {
|
|
12
|
-
|
|
13
|
-
gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
|
|
14
|
-
|
|
15
|
-
gl_Position.z *= gl_Position.w;
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
#endif
|
|
4
|
+
vFragDepth = 1.0 + gl_Position.w;
|
|
5
|
+
vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
|
|
20
6
|
|
|
21
7
|
#endif
|
|
22
8
|
`;
|