浏览代码

Examples: More usage of `setAnimationLoop()`. (#28257)

Michael Herzog 1 年之前
父节点
当前提交
641d57f427
共有 93 个文件被更改,包括 176 次插入517 次删除
  1. 1 3
      examples/webgl2_buffergeometry_attributes_integer.html
  2. 1 3
      examples/webgl2_buffergeometry_attributes_none.html
  3. 1 3
      examples/webgl2_clipculldistance.html
  4. 1 3
      examples/webgl2_materials_texture2darray.html
  5. 1 3
      examples/webgl2_materials_texture3d_partialupdate.html
  6. 0 1
      examples/webgl2_multiple_rendertargets.html
  7. 1 3
      examples/webgl2_multisampled_renderbuffers.html
  8. 3 3
      examples/webgl2_rendertarget_texture2darray.html
  9. 1 3
      examples/webgl2_texture2darray_compressed.html
  10. 1 3
      examples/webgl2_ubo.html
  11. 3 5
      examples/webgl2_ubo_arrays.html
  12. 1 3
      examples/webgl2_volume_cloud.html
  13. 1 3
      examples/webgl2_volume_instancing.html
  14. 1 3
      examples/webgl2_volume_perlin.html
  15. 1 3
      examples/webgl_postprocessing.html
  16. 2 7
      examples/webgl_postprocessing_3dlut.html
  17. 1 3
      examples/webgl_postprocessing_advanced.html
  18. 2 26
      examples/webgl_postprocessing_afterimage.html
  19. 1 3
      examples/webgl_postprocessing_backgrounds.html
  20. 1 3
      examples/webgl_postprocessing_dof.html
  21. 1 3
      examples/webgl_postprocessing_dof2.html
  22. 1 3
      examples/webgl_postprocessing_fxaa.html
  23. 1 3
      examples/webgl_postprocessing_glitch.html
  24. 1 3
      examples/webgl_postprocessing_godrays.html
  25. 1 3
      examples/webgl_postprocessing_gtao.html
  26. 1 3
      examples/webgl_postprocessing_masking.html
  27. 1 3
      examples/webgl_postprocessing_material_ao.html
  28. 1 3
      examples/webgl_postprocessing_outline.html
  29. 1 3
      examples/webgl_postprocessing_pixel.html
  30. 6 12
      examples/webgl_postprocessing_procedural.html
  31. 1 3
      examples/webgl_postprocessing_rgb_halftone.html
  32. 2 4
      examples/webgl_postprocessing_sao.html
  33. 1 3
      examples/webgl_postprocessing_smaa.html
  34. 1 3
      examples/webgl_postprocessing_sobel.html
  35. 1 3
      examples/webgl_postprocessing_ssaa.html
  36. 1 3
      examples/webgl_postprocessing_ssao.html
  37. 1 3
      examples/webgl_postprocessing_ssr.html
  38. 1 3
      examples/webgl_postprocessing_taa.html
  39. 4 5
      examples/webgl_postprocessing_transition.html
  40. 31 26
      examples/webgl_postprocessing_unreal_bloom.html
  41. 1 3
      examples/webgl_raycaster_bvh.html
  42. 1 2
      examples/webgl_raycaster_sprite.html
  43. 2 4
      examples/webgl_raycaster_texture.html
  44. 2 3
      examples/webgl_raymarching_reflect.html
  45. 1 3
      examples/webgl_read_float_buffer.html
  46. 17 20
      examples/webgl_refraction.html
  47. 3 4
      examples/webgl_renderer_pathtracer.html
  48. 1 3
      examples/webgl_rtt.html
  49. 1 3
      examples/webgl_shader.html
  50. 3 12
      examples/webgl_shader_lava.html
  51. 1 2
      examples/webgl_shaders_ocean.html
  52. 1 5
      examples/webgl_shadow_contact.html
  53. 1 4
      examples/webgl_shadowmap.html
  54. 1 3
      examples/webgl_shadowmap_csm.html
  55. 1 3
      examples/webgl_shadowmap_pcss.html
  56. 1 4
      examples/webgl_shadowmap_performance.html
  57. 1 8
      examples/webgl_shadowmap_pointlight.html
  58. 3 18
      examples/webgl_shadowmap_progressive.html
  59. 1 3
      examples/webgl_shadowmap_viewer.html
  60. 1 3
      examples/webgl_shadowmap_vsm.html
  61. 2 3
      examples/webgl_shadowmesh.html
  62. 1 3
      examples/webgl_simple_gi.html
  63. 1 8
      examples/webgl_sprites.html
  64. 1 9
      examples/webgl_test_memory.html
  65. 3 3
      examples/webgl_test_wide_gamut.html
  66. 1 9
      examples/webgl_video_kinect.html
  67. 1 8
      examples/webgl_video_panorama_equirectangular.html
  68. 1 9
      examples/webgl_water.html
  69. 1 9
      examples/webgl_water_flowmap.html
  70. 1 7
      examples/webxr_ar_cones.html
  71. 2 8
      examples/webxr_ar_hittest.html
  72. 1 7
      examples/webxr_ar_lighting.html
  73. 2 2
      examples/webxr_ar_plane_detection.html
  74. 1 7
      examples/webxr_vr_handinput.html
  75. 1 7
      examples/webxr_vr_handinput_cubes.html
  76. 1 7
      examples/webxr_vr_handinput_pointerclick.html
  77. 1 7
      examples/webxr_vr_handinput_pointerdrag.html
  78. 1 7
      examples/webxr_vr_handinput_pressbutton.html
  79. 1 8
      examples/webxr_vr_handinput_profiles.html
  80. 3 9
      examples/webxr_vr_layers.html
  81. 1 7
      examples/webxr_vr_panorama.html
  82. 1 7
      examples/webxr_vr_panorama_depth.html
  83. 2 3
      examples/webxr_vr_rollercoaster.html
  84. 1 7
      examples/webxr_vr_sandbox.html
  85. 1 7
      examples/webxr_vr_teleport.html
  86. 1 7
      examples/webxr_vr_video.html
  87. 4 4
      examples/webxr_xr_ballshooter.html
  88. 1 7
      examples/webxr_xr_controls_transform.html
  89. 2 8
      examples/webxr_xr_cubes.html
  90. 2 8
      examples/webxr_xr_dragging.html
  91. 2 8
      examples/webxr_xr_haptics.html
  92. 1 7
      examples/webxr_xr_paint.html
  93. 2 8
      examples/webxr_xr_sculpt.html

+ 1 - 3
examples/webgl2_buffergeometry_attributes_integer.html

@@ -60,7 +60,6 @@
 			let camera, scene, renderer, mesh;
 			let camera, scene, renderer, mesh;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -158,14 +157,13 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 			}
 			}
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const time = Date.now() * 0.001;
 				const time = Date.now() * 0.001;
 
 
 				mesh.rotation.x = time * 0.25;
 				mesh.rotation.x = time * 0.25;

+ 1 - 3
examples/webgl2_buffergeometry_attributes_none.html

@@ -96,7 +96,6 @@
 			let camera, scene, renderer, mesh;
 			let camera, scene, renderer, mesh;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -139,14 +138,13 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 			}
 			}
 
 
 			function animate( time ) {
 			function animate( time ) {
 
 
-				requestAnimationFrame( animate );
-
 				mesh.rotation.x = time / 1000.0 * 0.25;
 				mesh.rotation.x = time / 1000.0 * 0.25;
 				mesh.rotation.y = time / 1000.0 * 0.50;
 				mesh.rotation.y = time / 1000.0 * 0.50;
 
 

+ 1 - 3
examples/webgl2_clipculldistance.html

@@ -67,7 +67,6 @@
 			let material;
 			let material;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -83,6 +82,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				if ( renderer.extensions.has( 'WEBGL_clip_cull_distance' ) === false ) {
 				if ( renderer.extensions.has( 'WEBGL_clip_cull_distance' ) === false ) {
@@ -174,8 +174,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				controls.update();
 				controls.update();
 				stats.update();
 				stats.update();
 
 

+ 1 - 3
examples/webgl2_materials_texture2darray.html

@@ -75,7 +75,6 @@
 			let depthStep = 0.4;
 			let depthStep = 0.4;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -124,6 +123,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -144,8 +144,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				if ( mesh ) {
 				if ( mesh ) {
 
 
 					let value = mesh.material.uniforms[ 'depth' ].value;
 					let value = mesh.material.uniforms[ 'depth' ].value;

+ 1 - 3
examples/webgl2_materials_texture3d_partialupdate.html

@@ -36,7 +36,6 @@
 			let cloudTexture = null;
 			let cloudTexture = null;
 
 
 			init();
 			init();
-			animate();
 
 
 			function generateCloudTexture( size, scaleFactor = 1.0 ) {
 			function generateCloudTexture( size, scaleFactor = 1.0 ) {
 
 
@@ -74,6 +73,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				scene = new THREE.Scene();
 				scene = new THREE.Scene();
@@ -329,8 +329,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const time = performance.now();
 				const time = performance.now();
 				if ( time - prevTime > 1500.0 && curr < totalCount ) {
 				if ( time - prevTime > 1500.0 && curr < totalCount ) {
 
 

+ 0 - 1
examples/webgl2_multiple_rendertargets.html

@@ -216,7 +216,6 @@
 
 
 				controls = new OrbitControls( camera, renderer.domElement );
 				controls = new OrbitControls( camera, renderer.domElement );
 				controls.addEventListener( 'change', render );
 				controls.addEventListener( 'change', render );
-				//controls.enableZoom = false;
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 

+ 1 - 3
examples/webgl2_multisampled_renderbuffers.html

@@ -120,6 +120,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( container.offsetWidth, container.offsetHeight );
 				renderer.setSize( container.offsetWidth, container.offsetHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -152,7 +153,6 @@
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
-				animate();
 
 
 			}
 			}
 
 
@@ -169,8 +169,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const halfWidth = container.offsetWidth / 2;
 				const halfWidth = container.offsetWidth / 2;
 
 
 				if ( params.animate ) {
 				if ( params.animate ) {

+ 3 - 3
examples/webgl2_rendertarget_texture2darray.html

@@ -213,7 +213,7 @@
 
 
 						postProcessMaterial.uniforms.uTexture.value = texture;
 						postProcessMaterial.uniforms.uTexture.value = texture;
 
 
-						animate();
+						renderer.setAnimationLoop( animate );
 
 
 					} );
 					} );
 
 
@@ -230,8 +230,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				let value = mesh.material.uniforms[ 'depth' ].value;
 				let value = mesh.material.uniforms[ 'depth' ].value;
 
 
 				value += depthStep;
 				value += depthStep;
@@ -249,6 +247,8 @@
 
 
 				render();
 				render();
 
 
+				stats.update();
+
 			}
 			}
 
 
 			/**
 			/**

+ 1 - 3
examples/webgl2_texture2darray_compressed.html

@@ -73,7 +73,6 @@
 			let depthStep = 1;
 			let depthStep = 1;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -91,6 +90,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -139,8 +139,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				if ( mesh ) {
 				if ( mesh ) {
 
 
 					const delta = clock.getDelta() * 10;
 					const delta = clock.getDelta() * 10;

+ 1 - 3
examples/webgl2_ubo.html

@@ -191,7 +191,6 @@
 			let camera, scene, renderer, clock;
 			let camera, scene, renderer, clock;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -304,6 +303,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				window.addEventListener( 'resize', onWindowResize, false );
 				window.addEventListener( 'resize', onWindowResize, false );
@@ -323,8 +323,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 
 
 				scene.traverse( function ( child ) {
 				scene.traverse( function ( child ) {

+ 3 - 5
examples/webgl2_ubo_arrays.html

@@ -128,7 +128,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -230,6 +229,7 @@
 
 
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				window.addEventListener( 'resize', onWindowResize, false );
 				window.addEventListener( 'resize', onWindowResize, false );
@@ -267,10 +267,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
-				stats.update();
-
 				const elapsedTime = clock.getElapsedTime();
 				const elapsedTime = clock.getElapsedTime();
 
 
 				const lights = lightingUniformsGroup.uniforms[ 0 ];
 				const lights = lightingUniformsGroup.uniforms[ 0 ];
@@ -297,6 +293,8 @@
 
 
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
+				stats.update();
+
 			}
 			}
 
 
 		</script>
 		</script>

+ 1 - 3
examples/webgl2_volume_cloud.html

@@ -32,13 +32,13 @@
 			let mesh;
 			let mesh;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				scene = new THREE.Scene();
 				scene = new THREE.Scene();
@@ -301,8 +301,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				mesh.material.uniforms.cameraPos.value.copy( camera.position );
 				mesh.material.uniforms.cameraPos.value.copy( camera.position );
 				mesh.rotation.y = - performance.now() / 7500;
 				mesh.rotation.y = - performance.now() / 7500;
 
 

+ 1 - 3
examples/webgl2_volume_instancing.html

@@ -29,13 +29,13 @@
 			let renderer, scene, camera, controls, clock;
 			let renderer, scene, camera, controls, clock;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				scene = new THREE.Scene();
 				scene = new THREE.Scene();
@@ -222,8 +222,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 				controls.update( delta );
 				controls.update( delta );
 
 

+ 1 - 3
examples/webgl2_volume_perlin.html

@@ -32,13 +32,13 @@
 			let mesh;
 			let mesh;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				scene = new THREE.Scene();
 				scene = new THREE.Scene();
@@ -239,8 +239,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				mesh.material.uniforms.cameraPos.value.copy( camera.position );
 				mesh.material.uniforms.cameraPos.value.copy( camera.position );
 
 
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );

+ 1 - 3
examples/webgl_postprocessing.html

@@ -32,13 +32,13 @@
 			let object;
 			let object;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -106,8 +106,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				object.rotation.x += 0.005;
 				object.rotation.x += 0.005;
 				object.rotation.y += 0.01;
 				object.rotation.y += 0.01;
 
 

+ 2 - 7
examples/webgl_postprocessing_3dlut.html

@@ -63,7 +63,6 @@
 			let composer, lutPass;
 			let composer, lutPass;
 
 
 			init();
 			init();
-			render();
 
 
 			function init() {
 			function init() {
 
 
@@ -131,6 +130,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.toneMapping = THREE.ACESFilmicToneMapping;
 				renderer.toneMapping = THREE.ACESFilmicToneMapping;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -154,7 +154,6 @@
 				gui.add( params, 'enabled' );
 				gui.add( params, 'enabled' );
 				gui.add( params, 'lut', Object.keys( lutMap ) );
 				gui.add( params, 'lut', Object.keys( lutMap ) );
 				gui.add( params, 'intensity' ).min( 0 ).max( 1 );
 				gui.add( params, 'intensity' ).min( 0 ).max( 1 );
-				gui.add( params, 'use2DLut' );
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
@@ -168,15 +167,11 @@
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				composer.setSize( window.innerWidth, window.innerHeight );
 				composer.setSize( window.innerWidth, window.innerHeight );
 
 
-				render();
-
 			}
 			}
 
 
 			//
 			//
 
 
-			function render() {
-
-				requestAnimationFrame( render );
+			function animate() {
 
 
 				lutPass.enabled = params.enabled && Boolean( lutMap[ params.lut ] );
 				lutPass.enabled = params.enabled && Boolean( lutMap[ params.lut ] );
 				lutPass.intensity = params.intensity;
 				lutPass.intensity = params.intensity;

+ 1 - 3
examples/webgl_postprocessing_advanced.html

@@ -66,7 +66,6 @@
 			const delta = 0.01;
 			const delta = 0.01;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -127,6 +126,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 
 
 				//
 				//
@@ -316,8 +316,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 				render();
 				render();
 				stats.end();
 				stats.end();

+ 2 - 26
examples/webgl_postprocessing_afterimage.html

@@ -39,14 +39,13 @@
 			};
 			};
 
 
 			init();
 			init();
-			createGUI();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
 				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
@@ -73,22 +72,6 @@
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
-				if ( typeof TESTING !== 'undefined' ) {
-
-					for ( let i = 0; i < 45; i ++ ) {
-
-						render();
-
-					}
-
-
-
-				}
-
-			}
-
-			function createGUI() {
-
 				const gui = new GUI( { title: 'Damp setting' } );
 				const gui = new GUI( { title: 'Damp setting' } );
 				gui.add( afterimagePass.uniforms[ 'damp' ], 'value', 0, 1 ).step( 0.001 );
 				gui.add( afterimagePass.uniforms[ 'damp' ], 'value', 0, 1 ).step( 0.001 );
 				gui.add( params, 'enable' );
 				gui.add( params, 'enable' );
@@ -105,7 +88,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				mesh.rotation.x += 0.005;
 				mesh.rotation.x += 0.005;
 				mesh.rotation.y += 0.01;
 				mesh.rotation.y += 0.01;
@@ -117,13 +100,6 @@
 
 
 			}
 			}
 
 
-			function animate() {
-
-				requestAnimationFrame( animate );
-				render();
-
-			}
-
 		</script>
 		</script>
 	</body>
 	</body>
 </html>
 </html>

+ 1 - 3
examples/webgl_postprocessing_backgrounds.html

@@ -59,7 +59,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			clearGui();
 			clearGui();
 
 
@@ -97,6 +96,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( devicePixelRatio );
 				renderer.setPixelRatio( devicePixelRatio );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -208,8 +208,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 
 
 				cameraP.updateMatrixWorld( true );
 				cameraP.updateMatrixWorld( true );

+ 1 - 3
examples/webgl_postprocessing_dof.html

@@ -51,7 +51,6 @@
 			const postprocessing = {};
 			const postprocessing = {};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -66,6 +65,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				const path = 'textures/cube/SwedishRoyalCastle/';
 				const path = 'textures/cube/SwedishRoyalCastle/';
@@ -222,8 +222,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate, renderer.domElement );
-
 				stats.begin();
 				stats.begin();
 				render();
 				render();
 				stats.end();
 				stats.end();

+ 1 - 3
examples/webgl_postprocessing_dof2.html

@@ -53,7 +53,6 @@
 			const leaves = 100;
 			const leaves = 100;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -71,6 +70,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -367,8 +367,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate, renderer.domElement );
-
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 

+ 1 - 3
examples/webgl_postprocessing_fxaa.html

@@ -57,7 +57,6 @@
 			let composer1, composer2, fxaaPass;
 			let composer1, composer2, fxaaPass;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -112,6 +111,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( container.offsetWidth, container.offsetHeight );
 				renderer.setSize( container.offsetWidth, container.offsetHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -169,8 +169,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const halfWidth = container.offsetWidth / 2;
 				const halfWidth = container.offsetWidth / 2;
 
 
 				group.rotation.y += clock.getDelta() * 0.1;
 				group.rotation.y += clock.getDelta() * 0.1;

+ 1 - 3
examples/webgl_postprocessing_glitch.html

@@ -50,7 +50,6 @@
 				overlay.remove();
 				overlay.remove();
 
 
 				init();
 				init();
-				animate();
 
 
 			} );
 			} );
 
 
@@ -66,6 +65,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -136,8 +136,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				object.rotation.x += 0.005;
 				object.rotation.x += 0.005;
 				object.rotation.y += 0.01;
 				object.rotation.y += 0.01;
 
 

+ 1 - 3
examples/webgl_postprocessing_godrays.html

@@ -51,7 +51,6 @@
 			const godrayRenderTargetResolutionMultiplier = 1.0 / 4.0;
 			const godrayRenderTargetResolutionMultiplier = 1.0 / 4.0;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -93,6 +92,7 @@
 				renderer.setClearColor( 0xffffff );
 				renderer.setClearColor( 0xffffff );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				renderer.autoClear = false;
 				renderer.autoClear = false;
@@ -224,8 +224,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 				render();
 				render();
 				stats.end();
 				stats.end();

+ 1 - 3
examples/webgl_postprocessing_gtao.html

@@ -46,7 +46,6 @@
 			let camera, scene, renderer, composer, controls, clock, stats, mixer;
 			let camera, scene, renderer, composer, controls, clock, stats, mixer;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -66,6 +65,7 @@
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				const pmremGenerator = new THREE.PMREMGenerator( renderer );
 				const pmremGenerator = new THREE.PMREMGenerator( renderer );
@@ -186,8 +186,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 
 
 				if ( mixer ) {
 				if ( mixer ) {

+ 1 - 3
examples/webgl_postprocessing_masking.html

@@ -33,7 +33,6 @@
 			let box, torus;
 			let box, torus;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -53,6 +52,7 @@
 				renderer.setClearColor( 0xe0e0e0 );
 				renderer.setClearColor( 0xe0e0e0 );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
@@ -111,8 +111,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const time = performance.now() * 0.001 + 6000;
 				const time = performance.now() * 0.001 + 6000;
 
 
 				box.position.x = Math.cos( time / 1.5 ) * 2;
 				box.position.x = Math.cos( time / 1.5 ) * 2;

+ 1 - 3
examples/webgl_postprocessing_material_ao.html

@@ -62,7 +62,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -74,6 +73,7 @@
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 				renderer.shadowMap.enabled = sceneParameters.shadow;
 				renderer.shadowMap.enabled = sceneParameters.shadow;
 
 
@@ -264,8 +264,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				controls.update();
 				controls.update();
 				stats.begin();
 				stats.begin();
 				composer.render();
 				composer.render();

+ 1 - 3
examples/webgl_postprocessing_outline.html

@@ -115,7 +115,6 @@
 			} );
 			} );
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -129,6 +128,7 @@
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				// todo - support pixelRatio in this demo
 				// todo - support pixelRatio in this demo
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				scene = new THREE.Scene();
 				scene = new THREE.Scene();
@@ -327,8 +327,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 
 
 				const timer = performance.now();
 				const timer = performance.now();

+ 1 - 3
examples/webgl_postprocessing_pixel.html

@@ -39,7 +39,6 @@
 		let gui, params;
 		let gui, params;
 
 
 		init();
 		init();
-		animate();
 
 
 		function init() {
 		function init() {
 
 
@@ -58,6 +57,7 @@
 			renderer.shadowMap.enabled = true;
 			renderer.shadowMap.enabled = true;
 			//renderer.setPixelRatio( window.devicePixelRatio );
 			//renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			document.body.appendChild( renderer.domElement );
 			document.body.appendChild( renderer.domElement );
 
 
 			composer = new EffectComposer( renderer );
 			composer = new EffectComposer( renderer );
@@ -172,8 +172,6 @@
 
 
 		function animate() {
 		function animate() {
 
 
-			requestAnimationFrame( animate );
-
 			const t = clock.getElapsedTime();
 			const t = clock.getElapsedTime();
 
 
 			crystalMesh.material.emissiveIntensity = Math.sin( t * 3 ) * .5 + .5;
 			crystalMesh.material.emissiveIntensity = Math.sin( t * 3 ) * .5 + .5;

+ 6 - 12
examples/webgl_postprocessing_procedural.html

@@ -77,16 +77,6 @@
 			const params = { procedure: 'noiseRandom3D' };
 			const params = { procedure: 'noiseRandom3D' };
 
 
 			init();
 			init();
-			animate();
-			initGui();
-
-			// Init gui
-			function initGui() {
-
-				const gui = new GUI();
-				gui.add( params, 'procedure', [ 'noiseRandom1D', 'noiseRandom2D', 'noiseRandom3D' ] );
-
-			}
 
 
 			function init() {
 			function init() {
 
 
@@ -95,6 +85,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -122,6 +113,11 @@
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
+				//
+
+				const gui = new GUI();
+				gui.add( params, 'procedure', [ 'noiseRandom1D', 'noiseRandom2D', 'noiseRandom3D' ] );
+
 			}
 			}
 
 
 			function onWindowResize() {
 			function onWindowResize() {
@@ -132,8 +128,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				switch ( params.procedure ) {
 				switch ( params.procedure ) {
 
 
 					case 'noiseRandom1D': postMaterial = noiseRandom1DMaterial; break;
 					case 'noiseRandom1D': postMaterial = noiseRandom1DMaterial; break;

+ 1 - 3
examples/webgl_postprocessing_rgb_halftone.html

@@ -40,13 +40,13 @@
 			let composer, group;
 			let composer, group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 
 
 				clock = new THREE.Clock();
 				clock = new THREE.Clock();
 
 
@@ -193,8 +193,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 				stats.update();
 				stats.update();
 				group.rotation.y += delta * rotationSpeed;
 				group.rotation.y += delta * rotationSpeed;

+ 2 - 4
examples/webgl_postprocessing_sao.html

@@ -39,7 +39,6 @@
 			let group;
 			let group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -49,9 +48,10 @@
 				const width = window.innerWidth;
 				const width = window.innerWidth;
 				const height = window.innerHeight;
 				const height = window.innerHeight;
 
 
-				renderer = new THREE.WebGLRenderer( { antialias: true } );
+				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				camera = new THREE.PerspectiveCamera( 65, width / height, 3, 10 );
 				camera = new THREE.PerspectiveCamera( 65, width / height, 3, 10 );
@@ -158,8 +158,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 				render();
 				render();
 				stats.end();
 				stats.end();

+ 1 - 3
examples/webgl_postprocessing_smaa.html

@@ -43,7 +43,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -52,6 +51,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -119,8 +119,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 
 
 				if ( params.autoRotate === true ) {
 				if ( params.autoRotate === true ) {

+ 1 - 3
examples/webgl_postprocessing_sobel.html

@@ -46,7 +46,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -80,6 +79,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				// postprocessing
 				// postprocessing
@@ -134,8 +134,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				if ( params.enable === true ) {
 				if ( params.enable === true ) {
 
 
 					composer.render();
 					composer.render();

+ 1 - 3
examples/webgl_postprocessing_ssaa.html

@@ -52,7 +52,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			clearGui();
 			clearGui();
 
 
@@ -93,6 +92,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( devicePixelRatio );
 				renderer.setPixelRatio( devicePixelRatio );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -197,8 +197,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 
 
 				if ( params.autoRotate ) {
 				if ( params.autoRotate ) {

+ 1 - 3
examples/webgl_postprocessing_ssao.html

@@ -43,7 +43,6 @@
 			let group;
 			let group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -52,6 +51,7 @@
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				camera = new THREE.PerspectiveCamera( 65, window.innerWidth / window.innerHeight, 100, 700 );
 				camera = new THREE.PerspectiveCamera( 65, window.innerWidth / window.innerHeight, 100, 700 );
@@ -142,8 +142,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 				render();
 				render();
 				stats.end();
 				stats.end();

+ 1 - 3
examples/webgl_postprocessing_ssr.html

@@ -65,7 +65,6 @@
 		dracoLoader.setDecoderConfig( { type: 'js' } );
 		dracoLoader.setDecoderConfig( { type: 'js' } );
 
 
 		init();
 		init();
-		animate();
 
 
 		function init() {
 		function init() {
 
 
@@ -155,6 +154,7 @@
 			// renderer
 			// renderer
 			renderer = new THREE.WebGLRenderer( { antialias: false } );
 			renderer = new THREE.WebGLRenderer( { antialias: false } );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			container.appendChild( renderer.domElement );
 			container.appendChild( renderer.domElement );
 
 
 			//
 			//
@@ -289,8 +289,6 @@
 
 
 		function animate() {
 		function animate() {
 
 
-			requestAnimationFrame( animate );
-
 			stats.begin();
 			stats.begin();
 			render();
 			render();
 			stats.end();
 			stats.end();

+ 1 - 3
examples/webgl_postprocessing_taa.html

@@ -44,7 +44,6 @@
 			const param = { TAAEnabled: '1', TAASampleLevel: 0 };
 			const param = { TAAEnabled: '1', TAASampleLevel: 0 };
 
 
 			init();
 			init();
-			animate();
 
 
 			clearGui();
 			clearGui();
 
 
@@ -96,6 +95,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -162,8 +162,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				index ++;
 				index ++;
 
 
 				if ( Math.round( index / 200 ) % 2 === 0 ) {
 				if ( Math.round( index / 200 ) % 2 === 0 ) {

+ 4 - 5
examples/webgl_postprocessing_transition.html

@@ -62,6 +62,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				composer = new EffectComposer( renderer );
 				composer = new EffectComposer( renderer );
@@ -76,8 +77,6 @@
 				const outputPass = new OutputPass();
 				const outputPass = new OutputPass();
 				composer.addPass( outputPass );
 				composer.addPass( outputPass );
 
 
-				renderer.setAnimationLoop( animate );
-
 			}
 			}
 
 
 			window.addEventListener( 'resize', onWindowResize );
 			window.addEventListener( 'resize', onWindowResize );
@@ -117,6 +116,9 @@
 
 
 			function animate() {
 			function animate() {
 
 
+				// Transition animation
+				if ( params.transitionAnimate ) TWEEN.update();
+
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 				fxSceneA.render( delta );
 				fxSceneA.render( delta );
 				fxSceneB.render( delta );
 				fxSceneB.render( delta );
@@ -124,9 +126,6 @@
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 
-				// Transition animation
-				if ( params.transitionAnimate ) TWEEN.update();
-
 			}
 			}
 
 
 			function initTextures() {
 			function initTextures() {

+ 31 - 26
examples/webgl_postprocessing_unreal_bloom.html

@@ -59,37 +59,44 @@
 
 
 			init();
 			init();
 
 
-			function init() {
+			async function init() {
 
 
 				const container = document.getElementById( 'container' );
 				const container = document.getElementById( 'container' );
 
 
-				stats = new Stats();
-				container.appendChild( stats.dom );
-
 				clock = new THREE.Clock();
 				clock = new THREE.Clock();
 
 
-				renderer = new THREE.WebGLRenderer( { antialias: true } );
-				renderer.setPixelRatio( window.devicePixelRatio );
-				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.toneMapping = THREE.ReinhardToneMapping;
-				container.appendChild( renderer.domElement );
-
 				const scene = new THREE.Scene();
 				const scene = new THREE.Scene();
 
 
 				camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 );
 				camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 );
 				camera.position.set( - 5, 2.5, - 3.5 );
 				camera.position.set( - 5, 2.5, - 3.5 );
 				scene.add( camera );
 				scene.add( camera );
 
 
-				const controls = new OrbitControls( camera, renderer.domElement );
-				controls.maxPolarAngle = Math.PI * 0.5;
-				controls.minDistance = 3;
-				controls.maxDistance = 8;
-
 				scene.add( new THREE.AmbientLight( 0xcccccc ) );
 				scene.add( new THREE.AmbientLight( 0xcccccc ) );
 
 
 				const pointLight = new THREE.PointLight( 0xffffff, 100 );
 				const pointLight = new THREE.PointLight( 0xffffff, 100 );
 				camera.add( pointLight );
 				camera.add( pointLight );
 
 
+				const loader = new GLTFLoader();
+				const gltf = await loader.loadAsync( 'models/gltf/PrimaryIonDrive.glb' );
+
+				const model = gltf.scene;
+				scene.add( model );
+
+				mixer = new THREE.AnimationMixer( model );
+				const clip = gltf.animations[ 0 ];
+				mixer.clipAction( clip.optimize() ).play();
+
+				//
+
+				renderer = new THREE.WebGLRenderer( { antialias: true } );
+				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
+				renderer.toneMapping = THREE.ReinhardToneMapping;
+				container.appendChild( renderer.domElement );
+
+				//
+
 				const renderScene = new RenderPass( scene, camera );
 				const renderScene = new RenderPass( scene, camera );
 
 
 				const bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
 				const bloomPass = new UnrealBloomPass( new THREE.Vector2( window.innerWidth, window.innerHeight ), 1.5, 0.4, 0.85 );
@@ -104,19 +111,19 @@
 				composer.addPass( bloomPass );
 				composer.addPass( bloomPass );
 				composer.addPass( outputPass );
 				composer.addPass( outputPass );
 
 
-				new GLTFLoader().load( 'models/gltf/PrimaryIonDrive.glb', function ( gltf ) {
-
-					const model = gltf.scene;
+				//
 
 
-					scene.add( model );
+				stats = new Stats();
+				container.appendChild( stats.dom );
 
 
-					mixer = new THREE.AnimationMixer( model );
-					const clip = gltf.animations[ 0 ];
-					mixer.clipAction( clip.optimize() ).play();
+				//
 
 
-					animate();
+				const controls = new OrbitControls( camera, renderer.domElement );
+				controls.maxPolarAngle = Math.PI * 0.5;
+				controls.minDistance = 3;
+				controls.maxDistance = 8;
 
 
-				} );
+				//
 
 
 				const gui = new GUI();
 				const gui = new GUI();
 
 
@@ -167,8 +174,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 
 
 				mixer.update( delta );
 				mixer.update( delta );

+ 1 - 3
examples/webgl_raycaster_bvh.html

@@ -75,7 +75,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -93,6 +92,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				stats = new Stats();
 				stats = new Stats();
@@ -266,8 +266,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 

+ 1 - 2
examples/webgl_raycaster_sprite.html

@@ -41,7 +41,6 @@
 		const pointer = new THREE.Vector2();
 		const pointer = new THREE.Vector2();
 
 
 		init();
 		init();
-		animate();
 
 
 		function init() {
 		function init() {
 
 
@@ -49,6 +48,7 @@
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			document.body.appendChild( renderer.domElement );
 			document.body.appendChild( renderer.domElement );
 
 
 			// init scene
 			// init scene
@@ -102,7 +102,6 @@
 		function animate() {
 		function animate() {
 
 
 			renderer.render( scene, camera );
 			renderer.render( scene, camera );
-			requestAnimationFrame( animate );
 
 
 		}
 		}
 
 

+ 2 - 4
examples/webgl_raycaster_texture.html

@@ -179,7 +179,6 @@
 			const onClickPosition = new THREE.Vector2();
 			const onClickPosition = new THREE.Vector2();
 
 
 			init();
 			init();
-			render();
 
 
 			function init() {
 			function init() {
 
 
@@ -197,6 +196,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( width, height );
 				renderer.setSize( width, height );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				// A cube, in the middle.
 				// A cube, in the middle.
@@ -329,9 +329,7 @@
 
 
 			}
 			}
 
 
-			function render() {
-
-				requestAnimationFrame( render );
+			function animate() {
 
 
 				// update texture parameters
 				// update texture parameters
 
 

+ 2 - 3
examples/webgl_raymarching_reflect.html

@@ -271,13 +271,13 @@
 			};
 			};
 
 
 			init();
 			init();
-			render();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer( { canvas: canvas } );
 				renderer = new THREE.WebGLRenderer( { canvas: canvas } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( parseInt( config.resolution ), parseInt( config.resolution ) );
 				renderer.setSize( parseInt( config.resolution ), parseInt( config.resolution ) );
+				renderer.setAnimationLoop( animate );
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
@@ -341,7 +341,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				stats.begin();
 				stats.begin();
 
 
@@ -352,7 +352,6 @@
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 				stats.end();
 				stats.end();
-				requestAnimationFrame( render );
 
 
 			}
 			}
 
 

+ 1 - 3
examples/webgl_read_float_buffer.html

@@ -89,7 +89,6 @@
 			let valueNode;
 			let valueNode;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -159,6 +158,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 
 
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -183,8 +183,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 

+ 17 - 20
examples/webgl_refraction.html

@@ -44,18 +44,12 @@
 
 
 			init();
 			init();
 
 
-			function init() {
+			async function init() {
 
 
 				const container = document.getElementById( 'container' );
 				const container = document.getElementById( 'container' );
 
 
 				clock = new THREE.Clock();
 				clock = new THREE.Clock();
 
 
-				// renderer
-				renderer = new THREE.WebGLRenderer( { antialias: true } );
-				renderer.setPixelRatio( window.devicePixelRatio );
-				renderer.setSize( window.innerWidth, window.innerHeight );
-				container.appendChild( renderer.domElement );
-
 				// scene
 				// scene
 				scene = new THREE.Scene();
 				scene = new THREE.Scene();
 
 
@@ -63,12 +57,6 @@
 				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 500 );
 				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 500 );
 				camera.position.set( 0, 75, 160 );
 				camera.position.set( 0, 75, 160 );
 
 
-				const controls = new OrbitControls( camera, renderer.domElement );
-				controls.target.set( 0, 40, 0 );
-				controls.maxDistance = 400;
-				controls.minDistance = 10;
-				controls.update();
-
 				// refractor
 				// refractor
 
 
 				const refractorGeometry = new THREE.PlaneGeometry( 90, 90 );
 				const refractorGeometry = new THREE.PlaneGeometry( 90, 90 );
@@ -86,11 +74,8 @@
 
 
 				// load dudv map for distortion effect
 				// load dudv map for distortion effect
 
 
-				const dudvMap = new THREE.TextureLoader().load( 'textures/waterdudv.jpg', function () {
-
-					animate();
-
-				} );
+				const loader = new THREE.TextureLoader();
+				const dudvMap = await loader.loadAsync( 'textures/waterdudv.jpg' );
 
 
 				dudvMap.wrapS = dudvMap.wrapT = THREE.RepeatWrapping;
 				dudvMap.wrapS = dudvMap.wrapT = THREE.RepeatWrapping;
 				refractor.material.uniforms.tDudv.value = dudvMap;
 				refractor.material.uniforms.tDudv.value = dudvMap;
@@ -148,6 +133,20 @@
 				blueLight.position.set( 0, 50, 550 );
 				blueLight.position.set( 0, 50, 550 );
 				scene.add( blueLight );
 				scene.add( blueLight );
 
 
+				// renderer
+				renderer = new THREE.WebGLRenderer( { antialias: true } );
+				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
+				container.appendChild( renderer.domElement );
+
+				// controls
+				const controls = new OrbitControls( camera, renderer.domElement );
+				controls.target.set( 0, 40, 0 );
+				controls.maxDistance = 400;
+				controls.minDistance = 10;
+				controls.update();
+
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
 			}
 			}
@@ -163,8 +162,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				const time = clock.getElapsedTime();
 				const time = clock.getElapsedTime();
 
 
 				refractor.material.uniforms.time.value = time;
 				refractor.material.uniforms.time.value = time;

+ 3 - 4
examples/webgl_renderer_pathtracer.html

@@ -263,7 +263,8 @@
 				updateProgressBar( 0 );
 				updateProgressBar( 0 );
 
 
 				pathTracer.setScene( scene, camera );
 				pathTracer.setScene( scene, camera );
-				render();
+			
+				renderer.setAnimationLoop( animate );
 
 
 			}
 			}
 
 
@@ -340,9 +341,7 @@
 
 
 			//
 			//
 
 
-			function render() {
-
-				requestAnimationFrame( render );
+			function animate() {
 
 
 				renderer.toneMapping = params.toneMapping ? THREE.ACESFilmicToneMapping : THREE.NoToneMapping;
 				renderer.toneMapping = params.toneMapping ? THREE.ACESFilmicToneMapping : THREE.NoToneMapping;
 
 

+ 1 - 3
examples/webgl_rtt.html

@@ -85,7 +85,6 @@
 			let delta = 0.01;
 			let delta = 0.01;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -181,6 +180,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 
 
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -203,8 +203,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 

+ 1 - 3
examples/webgl_shader.html

@@ -81,7 +81,6 @@
 			let uniforms;
 			let uniforms;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -111,6 +110,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
@@ -127,8 +127,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				uniforms[ 'time' ].value = performance.now() / 1000;
 				uniforms[ 'time' ].value = performance.now() / 1000;
 
 
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );

+ 3 - 12
examples/webgl_shader_lava.html

@@ -97,7 +97,6 @@
 			let uniforms, mesh;
 			let uniforms, mesh;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -147,8 +146,10 @@
 
 
 				//
 				//
 
 
-				renderer = new THREE.WebGLRenderer( { antialias: true } );
+				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -166,8 +167,6 @@
 
 
 				//
 				//
 
 
-				onWindowResize();
-
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
 			}
 			}
@@ -186,14 +185,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
-				render();
-
-			}
-
-			function render() {
-
 				const delta = 5 * clock.getDelta();
 				const delta = 5 * clock.getDelta();
 
 
 				uniforms[ 'time' ].value += 0.2 * delta;
 				uniforms[ 'time' ].value += 0.2 * delta;

+ 1 - 2
examples/webgl_shaders_ocean.html

@@ -38,7 +38,6 @@
 			let controls, water, sun, mesh;
 			let controls, water, sun, mesh;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -49,6 +48,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.toneMapping = THREE.ACESFilmicToneMapping;
 				renderer.toneMapping = THREE.ACESFilmicToneMapping;
 				renderer.toneMappingExposure = 0.5;
 				renderer.toneMappingExposure = 0.5;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -190,7 +190,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 

+ 1 - 5
examples/webgl_shadow_contact.html

@@ -64,7 +64,6 @@
 			let plane, blurPlane, fillPlane;
 			let plane, blurPlane, fillPlane;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -233,6 +232,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -277,10 +277,6 @@
 
 
 			function animate( ) {
 			function animate( ) {
 
 
-				requestAnimationFrame( animate );
-
-				//
-
 				meshes.forEach( mesh => {
 				meshes.forEach( mesh => {
 
 
 					mesh.rotation.x += 0.01;
 					mesh.rotation.x += 0.01;

+ 1 - 4
examples/webgl_shadowmap.html

@@ -59,8 +59,6 @@
 			let showHUD = false;
 			let showHUD = false;
 
 
 			init();
 			init();
-			animate();
-
 
 
 			function init() {
 			function init() {
 
 
@@ -107,6 +105,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
 				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				renderer.autoClear = false;
 				renderer.autoClear = false;
@@ -334,8 +333,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				render();
 				render();
 				stats.update();
 				stats.update();
 
 

+ 1 - 3
examples/webgl_shadowmap_csm.html

@@ -55,7 +55,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function updateOrthoCamera() {
 			function updateOrthoCamera() {
 
 
@@ -82,6 +81,7 @@
 
 
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 				renderer.shadowMap.enabled = params.shadows;
 				renderer.shadowMap.enabled = params.shadows;
 				renderer.shadowMap.type = THREE.PCFSoftShadowMap;
 				renderer.shadowMap.type = THREE.PCFSoftShadowMap;
@@ -284,8 +284,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				camera.updateMatrixWorld();
 				camera.updateMatrixWorld();
 				csm.update();
 				csm.update();
 				controls.update();
 				controls.update();

+ 1 - 3
examples/webgl_shadowmap_pcss.html

@@ -141,7 +141,6 @@
 			let group;
 			let group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -247,6 +246,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.setClearColor( scene.fog.color );
 				renderer.setClearColor( scene.fog.color );
 
 
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -303,8 +303,6 @@
 
 
 				stats.update();
 				stats.update();
 
 
-				requestAnimationFrame( animate );
-
 			}
 			}
 
 
 		</script>
 		</script>

+ 1 - 4
examples/webgl_shadowmap_performance.html

@@ -54,8 +54,6 @@
 			const clock = new THREE.Clock();
 			const clock = new THREE.Clock();
 
 
 			init();
 			init();
-			animate();
-
 
 
 			function init() {
 			function init() {
 
 
@@ -101,6 +99,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
 				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				renderer.autoClear = false;
 				renderer.autoClear = false;
@@ -304,8 +303,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				stats.begin();
 				stats.begin();
 				render();
 				render();
 				stats.end();
 				stats.end();

+ 1 - 8
examples/webgl_shadowmap_pointlight.html

@@ -32,7 +32,6 @@
 			let pointLight, pointLight2;
 			let pointLight, pointLight2;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -106,6 +105,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.type = THREE.BasicShadowMap;
 				renderer.shadowMap.type = THREE.BasicShadowMap;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
@@ -148,13 +148,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-				render();
-
-			}
-
-			function render() {
-
 				let time = performance.now() * 0.001;
 				let time = performance.now() * 0.001;
 
 
 				pointLight.position.x = Math.sin( time * 0.6 ) * 9;
 				pointLight.position.x = Math.sin( time * 0.6 ) * 9;

+ 3 - 18
examples/webgl_shadowmap_progressive.html

@@ -39,7 +39,6 @@
 							 'Light Radius': 50, 'Ambient Weight': 0.5, 'Debug Lightmap': false };
 							 'Light Radius': 50, 'Ambient Weight': 0.5, 'Debug Lightmap': false };
 			init();
 			init();
 			createGUI();
 			createGUI();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -47,6 +46,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
@@ -153,16 +153,6 @@
 
 
 					object.add( lightTarget );
 					object.add( lightTarget );
 
 
-					if ( typeof TESTING !== 'undefined' ) {
-
-						for ( let i = 0; i < 300; i ++ ) {
-
-							render();
-
-						}
-
-					}
-
 				}
 				}
 
 
 				const manager = new THREE.LoadingManager( loadModel );
 				const manager = new THREE.LoadingManager( loadModel );
@@ -182,6 +172,7 @@
 				controls.maxDistance = 500;
 				controls.maxDistance = 500;
 				controls.maxPolarAngle = Math.PI / 1.5;
 				controls.maxPolarAngle = Math.PI / 1.5;
 				controls.target.set( 0, 100, 0 );
 				controls.target.set( 0, 100, 0 );
+			
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
 			}
 			}
@@ -206,7 +197,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				// Update the inertia on the orbit controls
 				// Update the inertia on the orbit controls
 				controls.update();
 				controls.update();
@@ -256,12 +247,6 @@
 
 
 			}
 			}
 
 
-			function animate() {
-
-				requestAnimationFrame( animate );
-				render();
-
-			}
 		</script>
 		</script>
 	</body>
 	</body>
 </html>
 </html>

+ 1 - 3
examples/webgl_shadowmap_viewer.html

@@ -35,8 +35,6 @@
 			let dirLightShadowMapViewer, spotLightShadowMapViewer;
 			let dirLightShadowMapViewer, spotLightShadowMapViewer;
 
 
 			init();
 			init();
-			animate();
-
 
 
 			function init() {
 			function init() {
 
 
@@ -140,6 +138,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.type = THREE.BasicShadowMap;
 				renderer.shadowMap.type = THREE.BasicShadowMap;
 
 
@@ -186,7 +185,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
 				render();
 				render();
 
 
 				stats.update();
 				stats.update();

+ 1 - 3
examples/webgl_shadowmap_vsm.html

@@ -34,7 +34,6 @@
 			let torusKnot, dirGroup;
 			let torusKnot, dirGroup;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -185,6 +184,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.type = THREE.VSMShadowMap;
 				renderer.shadowMap.type = THREE.VSMShadowMap;
 
 
@@ -211,8 +211,6 @@
 
 
 			function animate( time ) {
 			function animate( time ) {
 
 
-				requestAnimationFrame( animate );
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 
 
 				torusKnot.rotation.x += 0.25 * delta;
 				torusKnot.rotation.x += 0.25 * delta;

+ 2 - 3
examples/webgl_shadowmesh.html

@@ -61,7 +61,6 @@
 			const TWO_PI = Math.PI * 2;
 			const TWO_PI = Math.PI * 2;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -69,7 +68,9 @@
 
 
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
 				renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
+				renderer.setAnimationLoop( animate );
 				document.getElementById( 'container' ).appendChild( renderer.domElement );
 				document.getElementById( 'container' ).appendChild( renderer.domElement );
+			
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 
 				camera.position.set( 0, 2.5, 10 );
 				camera.position.set( 0, 2.5, 10 );
@@ -178,8 +179,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				frameTime = clock.getDelta();
 				frameTime = clock.getDelta();
 
 
 				cube.rotation.x += 1.0 * frameTime;
 				cube.rotation.x += 1.0 * frameTime;

+ 1 - 3
examples/webgl_simple_gi.html

@@ -154,7 +154,6 @@
 			let camera, scene, renderer;
 			let camera, scene, renderer;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -191,6 +190,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				new SimpleGI( renderer, scene );
 				new SimpleGI( renderer, scene );
@@ -214,8 +214,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
 				renderer.setRenderTarget( null );
 				renderer.setRenderTarget( null );
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 

+ 1 - 8
examples/webgl_sprites.html

@@ -35,7 +35,6 @@
 			let group;
 			let group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -110,6 +109,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.autoClear = false; // To allow render overlay on top of sprited sphere
 				renderer.autoClear = false; // To allow render overlay on top of sprited sphere
 
 
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
@@ -193,13 +193,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-				render();
-
-			}
-
-			function render() {
-
 				const time = Date.now() / 1000;
 				const time = Date.now() / 1000;
 
 
 				for ( let i = 0, l = group.children.length; i < l; i ++ ) {
 				for ( let i = 0, l = group.children.length; i < l; i ++ ) {

+ 1 - 9
examples/webgl_test_memory.html

@@ -37,7 +37,6 @@
 			let camera, scene, renderer;
 			let camera, scene, renderer;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -53,6 +52,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 			}
 			}
@@ -75,14 +75,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
-				render();
-
-			}
-
-			function render() {
-
 				const geometry = new THREE.SphereGeometry( 50, Math.random() * 64, Math.random() * 32 );
 				const geometry = new THREE.SphereGeometry( 50, Math.random() * 64, Math.random() * 32 );
 
 
 				const texture = new THREE.CanvasTexture( createImage() );
 				const texture = new THREE.CanvasTexture( createImage() );

+ 3 - 3
examples/webgl_test_wide_gamut.html

@@ -103,8 +103,8 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.setScissorTest( true );
 				renderer.setScissorTest( true );
-				renderer.setAnimationLoop( render );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				if ( isP3Context && window.matchMedia( '( color-gamut: p3 )' ).matches ) {
 				if ( isP3Context && window.matchMedia( '( color-gamut: p3 )' ).matches ) {
@@ -189,7 +189,7 @@
 
 
 			}
 			}
 
 
-			function containTexture ( aspect, target ) {
+			function containTexture( aspect, target ) {
 
 
 				// Sets the matrix uv transform so the texture image is contained in a region having the specified aspect ratio,
 				// Sets the matrix uv transform so the texture image is contained in a region having the specified aspect ratio,
 				// and does so without distortion. Akin to CSS object-fit: contain.
 				// and does so without distortion. Akin to CSS object-fit: contain.
@@ -213,7 +213,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				renderer.setScissor( 0, 0, sliderPos, window.innerHeight );
 				renderer.setScissor( 0, 0, sliderPos, window.innerHeight );
 				renderer.render( sceneL, camera );
 				renderer.render( sceneL, camera );

+ 1 - 9
examples/webgl_video_kinect.html

@@ -88,7 +88,6 @@
 			let mouse, center;
 			let mouse, center;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -166,6 +165,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				mouse = new THREE.Vector3( 0, 0, 1 );
 				mouse = new THREE.Vector3( 0, 0, 1 );
@@ -196,14 +196,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
-				render();
-
-			}
-
-			function render() {
-
 				camera.position.x += ( mouse.x - camera.position.x ) * 0.05;
 				camera.position.x += ( mouse.x - camera.position.x ) * 0.05;
 				camera.position.y += ( - mouse.y - camera.position.y ) * 0.05;
 				camera.position.y += ( - mouse.y - camera.position.y ) * 0.05;
 				camera.lookAt( center );
 				camera.lookAt( center );

+ 1 - 8
examples/webgl_video_panorama_equirectangular.html

@@ -49,7 +49,6 @@
 			const distance = .5;
 			const distance = .5;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -76,6 +75,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
 				document.addEventListener( 'pointerdown', onPointerDown );
 				document.addEventListener( 'pointerdown', onPointerDown );
@@ -128,13 +128,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-				update();
-
-			}
-
-			function update() {
-
 				lat = Math.max( - 85, Math.min( 85, lat ) );
 				lat = Math.max( - 85, Math.min( 85, lat ) );
 				phi = THREE.MathUtils.degToRad( 90 - lat );
 				phi = THREE.MathUtils.degToRad( 90 - lat );
 				theta = THREE.MathUtils.degToRad( lon );
 				theta = THREE.MathUtils.degToRad( lon );

+ 1 - 9
examples/webgl_water.html

@@ -42,7 +42,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -134,6 +133,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				// gui
 				// gui
@@ -187,14 +187,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
-				render();
-
-			}
-
-			function render() {
-
 				const delta = clock.getDelta();
 				const delta = clock.getDelta();
 
 
 				torusKnot.rotation.x += delta;
 				torusKnot.rotation.x += delta;

+ 1 - 9
examples/webgl_water_flowmap.html

@@ -33,7 +33,6 @@
 			let scene, camera, renderer, water;
 			let scene, camera, renderer, water;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -99,6 +98,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setAnimationLoop( animate );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
 				//
 				//
@@ -129,14 +129,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				requestAnimationFrame( animate );
-
-				render();
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 1 - 7
examples/webxr_ar_cones.html

@@ -30,7 +30,6 @@
 			let controller;
 			let controller;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -50,6 +49,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -94,12 +94,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 2 - 8
examples/webxr_ar_hittest.html

@@ -36,7 +36,6 @@
 			let hitTestSourceRequested = false;
 			let hitTestSourceRequested = false;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -56,6 +55,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -110,13 +110,7 @@
 
 
 			//
 			//
 
 
-			function animate() {
-
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render( timestamp, frame ) {
+			function animate( timestamp, frame ) {
 
 
 				if ( frame ) {
 				if ( frame ) {
 
 

+ 1 - 7
examples/webxr_ar_lighting.html

@@ -34,7 +34,6 @@
 			let defaultEnvironment;
 			let defaultEnvironment;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -54,6 +53,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -167,12 +167,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 2 - 2
examples/webxr_ar_plane_detection.html

@@ -32,7 +32,7 @@
 			const renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 			const renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
-			renderer.setAnimationLoop( render );
+			renderer.setAnimationLoop( animate );
 			renderer.xr.enabled = true;
 			renderer.xr.enabled = true;
 			document.body.appendChild( renderer.domElement );
 			document.body.appendChild( renderer.domElement );
 
 
@@ -66,7 +66,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 

+ 1 - 7
examples/webxr_vr_handinput.html

@@ -39,7 +39,6 @@
 			let controls;
 			let controls;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -80,6 +79,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 
 
@@ -150,12 +150,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 1 - 7
examples/webxr_vr_handinput_cubes.html

@@ -52,7 +52,6 @@
 			const spheres = [];
 			const spheres = [];
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -93,6 +92,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 
 
@@ -273,12 +273,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				if ( scaling.active ) {
 				if ( scaling.active ) {
 
 
 					const indexTip1Pos = hand1.joints[ 'index-finger-tip' ].position;
 					const indexTip1Pos = hand1.joints[ 'index-finger-tip' ].position;

+ 1 - 7
examples/webxr_vr_handinput_pointerclick.html

@@ -275,7 +275,6 @@
 		let camera, scene, renderer;
 		let camera, scene, renderer;
 
 
 		init();
 		init();
-		animate();
 
 
 		function makeButtonMesh( x, y, z, color ) {
 		function makeButtonMesh( x, y, z, color ) {
 
 
@@ -314,6 +313,7 @@
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			renderer.shadowMap.enabled = true;
 			renderer.shadowMap.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.cameraAutoUpdate = false;
 			renderer.xr.cameraAutoUpdate = false;
@@ -508,12 +508,6 @@
 
 
 		function animate() {
 		function animate() {
 
 
-			renderer.setAnimationLoop( render );
-
-		}
-
-		function render() {
-
 			const delta = clock.getDelta();
 			const delta = clock.getDelta();
 			const elapsedTime = clock.elapsedTime;
 			const elapsedTime = clock.elapsedTime;
 			renderer.xr.updateCamera( camera );
 			renderer.xr.updateCamera( camera );

+ 1 - 7
examples/webxr_vr_handinput_pointerdrag.html

@@ -380,7 +380,6 @@
 		let camera, scene, renderer;
 		let camera, scene, renderer;
 
 
 		init();
 		init();
-		animate();
 
 
 		function makeButtonMesh( x, y, z, color ) {
 		function makeButtonMesh( x, y, z, color ) {
 
 
@@ -417,6 +416,7 @@
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			renderer.shadowMap.enabled = true;
 			renderer.shadowMap.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.cameraAutoUpdate = false;
 			renderer.xr.cameraAutoUpdate = false;
@@ -586,12 +586,6 @@
 
 
 		function animate() {
 		function animate() {
 
 
-			renderer.setAnimationLoop( render );
-
-		}
-
-		function render() {
-
 			const delta = clock.getDelta();
 			const delta = clock.getDelta();
 			const elapsedTime = clock.elapsedTime;
 			const elapsedTime = clock.elapsedTime;
 			renderer.xr.updateCamera( camera );
 			renderer.xr.updateCamera( camera );

+ 1 - 7
examples/webxr_vr_handinput_pressbutton.html

@@ -335,7 +335,6 @@
 		let camera, scene, renderer;
 		let camera, scene, renderer;
 
 
 		init();
 		init();
-		animate();
 
 
 		function makeButtonMesh( x, y, z, color ) {
 		function makeButtonMesh( x, y, z, color ) {
 
 
@@ -374,6 +373,7 @@
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			renderer.shadowMap.enabled = true;
 			renderer.shadowMap.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.cameraAutoUpdate = false;
 			renderer.xr.cameraAutoUpdate = false;
@@ -565,12 +565,6 @@
 
 
 		function animate() {
 		function animate() {
 
 
-			renderer.setAnimationLoop( render );
-
-		}
-
-		function render() {
-
 			const delta = clock.getDelta();
 			const delta = clock.getDelta();
 			const elapsedTime = clock.elapsedTime;
 			const elapsedTime = clock.elapsedTime;
 			renderer.xr.updateCamera( camera );
 			renderer.xr.updateCamera( camera );

+ 1 - 8
examples/webxr_vr_handinput_profiles.html

@@ -44,8 +44,6 @@
 			let controls;
 			let controls;
 
 
 			init();
 			init();
-			animate();
-
 
 
 			function init() {
 			function init() {
 
 
@@ -87,6 +85,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 
 
@@ -202,12 +201,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 3 - 9
examples/webxr_vr_layers.html

@@ -106,7 +106,6 @@
 			snellenConfig.quadHeight = .5 * snellenConfig.heightMeters / snellenConfig.cropY;
 			snellenConfig.quadHeight = .5 * snellenConfig.heightMeters / snellenConfig.cropY;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -123,9 +122,10 @@
 
 
 				renderer = new THREE.WebGLRenderer( { antialias: false } );
 				renderer = new THREE.WebGLRenderer( { antialias: false } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.setClearAlpha( 1 );
 				renderer.setClearAlpha( 1 );
 				renderer.setClearColor( new THREE.Color( 0 ), 0 );
 				renderer.setClearColor( new THREE.Color( 0 ), 0 );
-				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 
 
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
@@ -298,13 +298,7 @@
 			}
 			}
 			//
 			//
 
 
-			function animate() {
-
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render( t, frame ) {
+			function animate( t, frame ) {
 
 
 				const xr = renderer.xr;
 				const xr = renderer.xr;
 				const session = xr.getSession();
 				const session = xr.getSession();

+ 1 - 7
examples/webxr_vr_panorama.html

@@ -26,13 +26,13 @@
 			let scene;
 			let scene;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.setReferenceSpaceType( 'local' );
 				renderer.xr.setReferenceSpaceType( 'local' );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
@@ -126,12 +126,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 1 - 7
examples/webxr_vr_panorama_depth.html

@@ -31,7 +31,6 @@
 			let camera, scene, renderer, sphere, clock;
 			let camera, scene, renderer, sphere, clock;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -91,6 +90,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.setReferenceSpaceType( 'local' );
 				renderer.xr.setReferenceSpaceType( 'local' );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -114,12 +114,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				// If we are not presenting move the camera a little so the effect is visible
 				// If we are not presenting move the camera a little so the effect is visible
 
 
 				if ( renderer.xr.isPresenting === false ) {
 				if ( renderer.xr.isPresenting === false ) {

+ 2 - 3
examples/webxr_vr_rollercoaster.html

@@ -34,6 +34,7 @@
 			const renderer = new THREE.WebGLRenderer( { antialias: true } );
 			const renderer = new THREE.WebGLRenderer( { antialias: true } );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
+			renderer.setAnimationLoop( animate );
 			renderer.xr.enabled = true;
 			renderer.xr.enabled = true;
 			renderer.xr.setReferenceSpaceType( 'local' );
 			renderer.xr.setReferenceSpaceType( 'local' );
 			document.body.appendChild( renderer.domElement );
 			document.body.appendChild( renderer.domElement );
@@ -207,7 +208,7 @@
 
 
 			let prevTime = performance.now();
 			let prevTime = performance.now();
 
 
-			function render() {
+			function animate() {
 
 
 				const time = performance.now();
 				const time = performance.now();
 				const delta = time - prevTime;
 				const delta = time - prevTime;
@@ -243,8 +244,6 @@
 
 
 			}
 			}
 
 
-			renderer.setAnimationLoop( render );
-
 		</script>
 		</script>
 
 
 	</body>
 	</body>

+ 1 - 7
examples/webxr_vr_sandbox.html

@@ -46,7 +46,6 @@
 			};
 			};
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -108,6 +107,7 @@
 				renderer.autoClear = false;
 				renderer.autoClear = false;
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.toneMapping = THREE.ACESFilmicToneMapping;
 				renderer.toneMapping = THREE.ACESFilmicToneMapping;
 				renderer.toneMappingExposure = 1;
 				renderer.toneMappingExposure = 1;
@@ -209,12 +209,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				const time = performance.now() * 0.0002;
 				const time = performance.now() * 0.0002;
 				const torus = scene.getObjectByName( 'torus' );
 				const torus = scene.getObjectByName( 'torus' );
 				torus.rotation.x = time * 0.4;
 				torus.rotation.x = time * 0.4;

+ 1 - 7
examples/webxr_vr_teleport.html

@@ -39,7 +39,6 @@
 			const tempMatrix = new THREE.Matrix4();
 			const tempMatrix = new THREE.Matrix4();
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -78,6 +77,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 
 
 				renderer.xr.addEventListener( 'sessionstart', () => baseReferenceSpace = renderer.xr.getReferenceSpace() );
 				renderer.xr.addEventListener( 'sessionstart', () => baseReferenceSpace = renderer.xr.getReferenceSpace() );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
@@ -200,12 +200,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				INTERSECTION = undefined;
 				INTERSECTION = undefined;
 
 
 				if ( controller1.userData.isSelecting === true ) {
 				if ( controller1.userData.isSelecting === true ) {

+ 1 - 7
examples/webxr_vr_video.html

@@ -36,7 +36,6 @@
 			let camera, scene, renderer;
 			let camera, scene, renderer;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -108,6 +107,7 @@
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.setReferenceSpaceType( 'local' );
 				renderer.xr.setReferenceSpaceType( 'local' );
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -131,12 +131,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 4 - 4
examples/webxr_xr_ballshooter.html

@@ -36,8 +36,8 @@
 			let controller1, controller2;
 			let controller1, controller2;
 			let controllerGrip1, controllerGrip2;
 			let controllerGrip1, controllerGrip2;
 
 
-			let room, spheres;
-			let physics, velocity = new THREE.Vector3();
+			let room, spheres, physics;
+			const velocity = new THREE.Vector3();
 
 
 			let count = 0;
 			let count = 0;
 
 
@@ -70,7 +70,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.setAnimationLoop( render );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );
 
 
@@ -277,7 +277,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				handleController( controller1 );
 				handleController( controller1 );
 				handleController( controller2 );
 				handleController( controller2 );

+ 1 - 7
examples/webxr_xr_controls_transform.html

@@ -38,7 +38,6 @@
 			let controls, group;
 			let controls, group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -114,6 +113,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -243,12 +243,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				renderer.render( scene, camera );
 				renderer.render( scene, camera );
 
 
 			}
 			}

+ 2 - 8
examples/webxr_xr_cubes.html

@@ -40,7 +40,6 @@
 			let INTERSECTED;
 			let INTERSECTED;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -98,6 +97,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -140,7 +140,7 @@
 
 
 				//
 				//
 
 
-				document.body.appendChild( XRButton.createButton( renderer, { 'optionalFeatures': [ 'depth-sensing'] } ) );
+				document.body.appendChild( XRButton.createButton( renderer, { 'optionalFeatures': [ 'depth-sensing' ] } ) );
 
 
 			}
 			}
 
 
@@ -183,12 +183,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				const delta = clock.getDelta() * 60;
 				const delta = clock.getDelta() * 60;
 
 
 				if ( controller.userData.isSelecting === true ) {
 				if ( controller.userData.isSelecting === true ) {

+ 2 - 8
examples/webxr_xr_dragging.html

@@ -40,7 +40,6 @@
 			let controls, group;
 			let controls, group;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -120,11 +119,12 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
-				document.body.appendChild( XRButton.createButton( renderer, { 'optionalFeatures': [ 'depth-sensing'] } ) );
+				document.body.appendChild( XRButton.createButton( renderer, { 'optionalFeatures': [ 'depth-sensing' ] } ) );
 
 
 				// controllers
 				// controllers
 
 
@@ -270,12 +270,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				cleanIntersected();
 				cleanIntersected();
 
 
 				intersectObjects( controller1 );
 				intersectObjects( controller1 );

+ 2 - 8
examples/webxr_xr_haptics.html

@@ -43,7 +43,6 @@
 			const musicScale = [ 0, 3, 5, 7, 10 ];
 			const musicScale = [ 0, 3, 5, 7, 10 ];
 
 
 			init();
 			init();
-			animate();
 
 
 			function initAudio() {
 			function initAudio() {
 
 
@@ -140,6 +139,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.shadowMap.enabled = true;
 				renderer.shadowMap.enabled = true;
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
@@ -209,12 +209,6 @@
 
 
 			//
 			//
 
 
-			function animate() {
-
-				renderer.setAnimationLoop( render );
-
-			}
-
 			function handleCollisions() {
 			function handleCollisions() {
 
 
 				for ( let i = 0; i < group.children.length; i ++ ) {
 				for ( let i = 0; i < group.children.length; i ++ ) {
@@ -300,7 +294,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				handleCollisions();
 				handleCollisions();
 
 

+ 1 - 7
examples/webxr_xr_paint.html

@@ -36,7 +36,6 @@
 			let controls;
 			let controls;
 
 
 			init();
 			init();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -75,6 +74,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -193,12 +193,6 @@
 
 
 			function animate() {
 			function animate() {
 
 
-				renderer.setAnimationLoop( render );
-
-			}
-
-			function render() {
-
 				handleController( controller1 );
 				handleController( controller1 );
 				handleController( controller2 );
 				handleController( controller2 );
 
 

+ 2 - 8
examples/webxr_xr_sculpt.html

@@ -38,7 +38,6 @@
 
 
 			init();
 			init();
 			initBlob();
 			initBlob();
-			animate();
 
 
 			function init() {
 			function init() {
 
 
@@ -69,6 +68,7 @@
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
+				renderer.setAnimationLoop( animate );
 				renderer.xr.enabled = true;
 				renderer.xr.enabled = true;
 				container.appendChild( renderer.domElement );
 				container.appendChild( renderer.domElement );
 
 
@@ -168,12 +168,6 @@
 
 
 			//
 			//
 
 
-			function animate() {
-
-				renderer.setAnimationLoop( render );
-
-			}
-
 			function transformPoint( vector ) {
 			function transformPoint( vector ) {
 
 
 				vector.x = ( vector.x + 1.0 ) / 2.0;
 				vector.x = ( vector.x + 1.0 ) / 2.0;
@@ -227,7 +221,7 @@
 
 
 			}
 			}
 
 
-			function render() {
+			function animate() {
 
 
 				handleController( controller1 );
 				handleController( controller1 );
 				handleController( controller2 );
 				handleController( controller2 );