Quellcode durchsuchen

WebGLRenderer: Remove WebGL 1 support. (#27836)

Michael Herzog vor 1 Jahr
Ursprung
Commit
07ec4e8e1f
81 geänderte Dateien mit 333 neuen und 1449 gelöschten Zeilen
  1. 5 8
      docs/api/ar/constants/Textures.html
  2. 1 1
      docs/api/ar/core/Uniform.html
  3. 0 4
      docs/api/ar/materials/ShaderMaterial.html
  4. 1 3
      docs/api/ar/objects/SkinnedMesh.html
  5. 0 47
      docs/api/ar/renderers/WebGL1Renderer.html
  6. 5 11
      docs/api/en/constants/Textures.html
  7. 1 1
      docs/api/en/core/Uniform.html
  8. 1 6
      docs/api/en/materials/ShaderMaterial.html
  9. 1 3
      docs/api/en/objects/SkinnedMesh.html
  10. 0 48
      docs/api/en/renderers/WebGL1Renderer.html
  11. 1 2
      docs/api/en/renderers/WebGLRenderTarget.html
  12. 1 2
      docs/api/en/textures/Data3DTexture.html
  13. 1 2
      docs/api/en/textures/DataArrayTexture.html
  14. 1 3
      docs/api/en/textures/DepthTexture.html
  15. 0 8
      docs/api/fr/constants/Textures.html
  16. 2 6
      docs/api/fr/materials/ShaderMaterial.html
  17. 4 11
      docs/api/it/constants/Textures.html
  18. 1 1
      docs/api/it/core/Uniform.html
  19. 2 6
      docs/api/it/materials/ShaderMaterial.html
  20. 1 3
      docs/api/it/objects/SkinnedMesh.html
  21. 0 52
      docs/api/it/renderers/WebGL1Renderer.html
  22. 1 1
      docs/api/it/textures/Data3DTexture.html
  23. 0 1
      docs/api/it/textures/DataArrayTexture.html
  24. 0 2
      docs/api/it/textures/DepthTexture.html
  25. 0 7
      docs/api/ko/constants/Textures.html
  26. 1 1
      docs/api/ko/core/Uniform.html
  27. 0 8
      docs/api/pt-br/constants/Textures.html
  28. 0 8
      docs/api/zh/constants/Textures.html
  29. 1 1
      docs/api/zh/core/Uniform.html
  30. 1 6
      docs/api/zh/materials/ShaderMaterial.html
  31. 1 3
      docs/api/zh/objects/SkinnedMesh.html
  32. 0 52
      docs/api/zh/renderers/WebGL1Renderer.html
  33. 1 1
      docs/api/zh/renderers/WebGLRenderTarget.html
  34. 1 1
      docs/api/zh/textures/Data3DTexture.html
  35. 1 1
      docs/api/zh/textures/DataArrayTexture.html
  36. 0 1
      docs/api/zh/textures/DepthTexture.html
  37. 0 5
      docs/list.json
  38. 2 6
      examples/jsm/loaders/KTX2Loader.js
  39. 0 6
      examples/jsm/misc/GPUComputationRenderer.js
  40. 0 3
      examples/jsm/postprocessing/GlitchPass.js
  41. 0 3
      examples/jsm/postprocessing/SSAOPass.js
  42. 1 1
      examples/jsm/renderers/webgl/utils/WebGLUtils.js
  43. 1 3
      examples/webaudio_visualizer.html
  44. 0 7
      examples/webgl_buffergeometry_instancing.html
  45. 1 9
      examples/webgl_buffergeometry_instancing_billboards.html
  46. 0 7
      examples/webgl_buffergeometry_instancing_interleaved.html
  47. 1 10
      examples/webgl_depth_texture.html
  48. 0 6
      examples/webgl_gpgpu_birds.html
  49. 0 6
      examples/webgl_gpgpu_birds_gltf.html
  50. 0 6
      examples/webgl_gpgpu_protoplanet.html
  51. 0 6
      examples/webgl_gpgpu_water.html
  52. 1 2
      examples/webgl_materials_toon.html
  53. 4 13
      examples/webgl_postprocessing_3dlut.html
  54. 0 1
      src/Three.js
  55. 0 2
      src/constants.js
  56. 0 4
      src/materials/ShaderMaterial.js
  57. 0 7
      src/renderers/WebGL1Renderer.js
  58. 33 93
      src/renderers/WebGLRenderer.js
  59. 1 1
      src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js
  60. 1 1
      src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js
  61. 2 10
      src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js
  62. 2 16
      src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js
  63. 6 33
      src/renderers/webgl/WebGLAttributes.js
  64. 14 51
      src/renderers/webgl/WebGLBindingStates.js
  65. 3 25
      src/renderers/webgl/WebGLBufferRenderer.js
  66. 2 12
      src/renderers/webgl/WebGLCapabilities.js
  67. 3 19
      src/renderers/webgl/WebGLExtensions.js
  68. 3 25
      src/renderers/webgl/WebGLIndexedBufferRenderer.js
  69. 6 32
      src/renderers/webgl/WebGLLights.js
  70. 79 217
      src/renderers/webgl/WebGLMorphtargets.js
  71. 18 45
      src/renderers/webgl/WebGLProgram.js
  72. 20 32
      src/renderers/webgl/WebGLPrograms.js
  73. 5 5
      src/renderers/webgl/WebGLRenderStates.js
  74. 15 59
      src/renderers/webgl/WebGLState.js
  75. 65 236
      src/renderers/webgl/WebGLTextures.js
  76. 1 1
      src/renderers/webgl/WebGLUniformsGroups.js
  77. 4 57
      src/renderers/webgl/WebGLUtils.js
  78. 2 2
      src/renderers/webxr/WebXRManager.js
  79. 0 2
      test/unit/src/constants.tests.js
  80. 0 39
      test/unit/src/renderers/WebGL1Renderer.tests.js
  81. 0 1
      test/unit/three.source.unit.js

+ 5 - 8
docs/api/ar/constants/Textures.html

@@ -154,21 +154,21 @@
 			ويقرأ فقط المكون الألفا. <br /> <br />
 			ويقرأ فقط المكون الألفا. <br /> <br />
 		 
 		 
 			[page:constant RedFormat] يتجاهل المكونات الخضراء والزرقاء ويقرأ
 			[page:constant RedFormat] يتجاهل المكونات الخضراء والزرقاء ويقرأ
-			فقط المكون الأحمر. (يمكن استخدامه فقط مع سياق WebGL 2).
+			فقط المكون الأحمر.
 			<br /> <br />
 			<br /> <br />
 		 
 		 
 			[page:constant RedIntegerFormat] يتجاهل المكونات الخضراء والزرقاء
 			[page:constant RedIntegerFormat] يتجاهل المكونات الخضراء والزرقاء
 			ويقرأ فقط المكون الأحمر. يتم قراءة `texels` كأعداد صحيحة بدلاً من
 			ويقرأ فقط المكون الأحمر. يتم قراءة `texels` كأعداد صحيحة بدلاً من
-			نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2).
+			نقطة عائمة.
 			<br /> <br />
 			<br /> <br />
 		 
 		 
 			[page:constant RGFormat] يتجاهل المكونات الألفا والزرقاء ويقرأ
 			[page:constant RGFormat] يتجاهل المكونات الألفا والزرقاء ويقرأ
-			المكونات الحمراء والخضراء. (يمكن استخدامه فقط مع سياق WebGL 2).
+			المكونات الحمراء والخضراء.
 			<br /> <br />
 			<br /> <br />
 		 
 		 
 			[page:constant RGIntegerFormat] يتجاهل المكونات الألفا والزرقاء
 			[page:constant RGIntegerFormat] يتجاهل المكونات الألفا والزرقاء
 			ويقرأ المكونات الحمراء والخضراء. يتم قراءة `texels` كأعداد صحيحة بدلاً من
 			ويقرأ المكونات الحمراء والخضراء. يتم قراءة `texels` كأعداد صحيحة بدلاً من
-			نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2).
+			نقطة عائمة.
 			<br /> <br />
 			<br /> <br />
 		 
 		 
 			[page:constant RGBAFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء والزرقاء
 			[page:constant RGBAFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء والزرقاء
@@ -176,7 +176,7 @@
 		 
 		 
 			[page:constant RGBAIntegerFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء ،
 			[page:constant RGBAIntegerFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء ،
 			الزرقاء والألفا. يتم قراءة `texels` كأعداد صحيحة بدلاً من
 			الزرقاء والألفا. يتم قراءة `texels` كأعداد صحيحة بدلاً من
-			نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2).
+			نقطة عائمة.
 			<br /> <br />
 			<br /> <br />
 		 
 		 
 			[page:constant LuminanceFormat] يقرأ كل عنصر كمكون إضاءة واحد
 			[page:constant LuminanceFormat] يقرأ كل عنصر كمكون إضاءة واحد
@@ -378,9 +378,6 @@
 		</code>
 		</code>
 
 
 		<p>
 		<p>
-			تنبيه: تغيير التنسيق الداخلي للقوام سيؤثر فقط على
-			القوام عند استخدام سياق WebGL 2. <br /> <br />
-		 
 			للاستخدام مع خاصية [page:Texture.internalFormat internalFormat] للقوام ،
 			للاستخدام مع خاصية [page:Texture.internalFormat internalFormat] للقوام ،
 			هذه تحدد كيفية تخزين عناصر قوام ، أو `texels` ،
 			هذه تحدد كيفية تخزين عناصر قوام ، أو `texels` ،
 			على وحدة معالجة الرسومات. <br /> <br />
 			على وحدة معالجة الرسومات. <br /> <br />

+ 1 - 1
docs/api/ar/core/Uniform.html

@@ -55,7 +55,7 @@
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>

+ 0 - 4
docs/api/ar/materials/ShaderMaterial.html

@@ -324,10 +324,6 @@ this.defaultAttributeValues = {
 			كائن يحتوي على الخصائص التالية:
 			كائن يحتوي على الخصائص التالية:
 			<code>
 			<code>
 this.extensions = { 
 this.extensions = { 
-	derivatives: false, // set to use derivatives
-	fragDepth: false, // set to use fragment depth values 
-	drawBuffers: false, // set to use draw buffers 
-	shaderTextureLOD: false, // set to use shader texture LOD
 	clipCullDistance: false, // set to use vertex shader clipping
 	clipCullDistance: false, // set to use vertex shader clipping
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
 };

+ 1 - 3
docs/api/ar/objects/SkinnedMesh.html

@@ -13,9 +13,7 @@
 
 
 		<p class="desc">
 		<p class="desc">
 		شبكة لديها [page:Skeleton] مع [page:Bone bones] يمكن استخدامها بعد ذلك
 		شبكة لديها [page:Skeleton] مع [page:Bone bones] يمكن استخدامها بعد ذلك
-		لتحريك رؤوس الهندسة.<br /> <br />
-			
-		يمكن استخدام [name] فقط مع WebGL 2.
+		لتحريك رؤوس الهندسة.
 		</p>
 		</p>
 			
 			
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>

+ 0 - 47
docs/api/ar/renderers/WebGL1Renderer.html

@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html lang="ar">
-	<head>
-		<meta charset="utf-8" />
-		<base href="../../../" />
-		<script src="page.js"></script>
-		<link type="text/css" rel="stylesheet" href="page.css" />
-	</head>
-	<body class="rtl">
-		[page:WebGLRenderer] &rarr;
-
-		<h1>[name]</h1>
-
-		<p class="desc">
-		منذ r118 [page:WebGLRenderer] يستخدم تلقائيًا سياق عرض WebGL 2. عند الترقية
-		مشروع موجود إلى => r118 ، قد تتعطل التطبيقات لسببين:
-		</p>
-		<ul>
-			<li>يجب أن يكون كود الشادر المخصص مطابقًا لـ GLSL 3.0.</li>
-			<li>يجب تغيير فحوصات ملحقات WebGL 1.</li>
-		</ul>
-		<p>
-		إذا لم تتمكن من تحمل الوقت لترقية الكود الخاص بك ولكنك ما زلت ترغب في استخدام
-		أحدث إصدار ، يمكنك استخدام [name]. هذه الإصدارة من المُعالج ستفرض
-		سياق عرض WebGL 1.
-		</p>
-		 
-		<h2>المنشئ (Constructor)</h2>
-		 
-		<h3>[name]( [param:Object parameters] )</h3>
-		<p>ينشئ [name] جديدًا.</p>
-		 
-		<h2>الخصائص (Properties)</h2>
-		<p>انظر فئة [page:WebGLRenderer] الأساسية للحصول على خصائص شائعة.</p>
-		 
-		<h3>[property:Boolean isWebGL1Renderer]</h3>
-		<p>علامة للقراءة فقط للتحقق مما إذا كان كائنًا معينًا من نوع [name].</p>
-		 
-		<h2>الطرق (Methods)</h2>
-		<p>انظر فئة [page:WebGLRenderer] الأساسية للحصول على طرق شائعة.</p>
-		 
-		<h2>المصدر (Source)</h2>
-		<p>
-			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-		</p>
-	</body>
-</html>

+ 5 - 11
docs/api/en/constants/Textures.html

@@ -166,24 +166,21 @@
 			and reads just the alpha component.<br /><br />
 			and reads just the alpha component.<br /><br />
 
 
 			[page:constant RedFormat] discards the green and blue components and reads
 			[page:constant RedFormat] discards the green and blue components and reads
-			just the red component. (can only be used with a WebGL 2 rendering
-			context).
+			just the red component.
 			<br /><br />
 			<br /><br />
 
 
 			[page:constant RedIntegerFormat] discards the green and blue components
 			[page:constant RedIntegerFormat] discards the green and blue components
 			and reads just the red component. The texels are read as integers instead
 			and reads just the red component. The texels are read as integers instead
-			of floating point. (can only be used with a WebGL 2 rendering context).
+			of floating point.
 			<br /><br />
 			<br /><br />
 
 
 			[page:constant RGFormat] discards the alpha, and blue components and reads
 			[page:constant RGFormat] discards the alpha, and blue components and reads
-			the red, and green components. (can only be used with a WebGL 2 rendering
-			context).
+			the red, and green components.
 			<br /><br />
 			<br /><br />
 
 
 			[page:constant RGIntegerFormat] discards the alpha, and blue components
 			[page:constant RGIntegerFormat] discards the alpha, and blue components
 			and reads the red, and green components. The texels are read as integers
 			and reads the red, and green components. The texels are read as integers
-			instead of floating point. (can only be used with a WebGL 2 rendering
-			context).
+			instead of floating point.
 			<br /><br />
 			<br /><br />
 
 
 			[page:constant RGBAFormat] is the default and reads the red, green, blue
 			[page:constant RGBAFormat] is the default and reads the red, green, blue
@@ -191,7 +188,7 @@
 
 
 			[page:constant RGBAIntegerFormat] is the default and reads the red, green,
 			[page:constant RGBAIntegerFormat] is the default and reads the red, green,
 			blue and alpha components. The texels are read as integers instead of
 			blue and alpha components. The texels are read as integers instead of
-			floating point. (can only be used with a WebGL 2 rendering context).
+			floating point.
 			<br /><br />
 			<br /><br />
 
 
 			[page:constant LuminanceFormat] reads each element as a single luminance
 			[page:constant LuminanceFormat] reads each element as a single luminance
@@ -393,9 +390,6 @@
 		</code>
 		</code>
 
 
 		<p>
 		<p>
-			Heads up: changing the internal format of a texture will only affect the
-			texture when using a WebGL 2 rendering context.<br /><br />
-
 			For use with a texture's [page:Texture.internalFormat internalFormat]
 			For use with a texture's [page:Texture.internalFormat internalFormat]
 			property, these define how elements of a texture, or `texels`, are stored
 			property, these define how elements of a texture, or `texels`, are stored
 			on the GPU.<br /><br />
 			on the GPU.<br /><br />

+ 1 - 1
docs/api/en/core/Uniform.html

@@ -55,7 +55,7 @@
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>

+ 1 - 6
docs/api/en/materials/ShaderMaterial.html

@@ -342,10 +342,6 @@ this.defaultAttributeValues = {
 			An object with the following properties:
 			An object with the following properties:
 			<code>
 			<code>
 this.extensions = { 
 this.extensions = { 
-	derivatives: false, // set to use derivatives
-	fragDepth: false, // set to use fragment depth values 
-	drawBuffers: false, // set to use draw buffers 
-	shaderTextureLOD: false, // set to use shader texture LOD
 	clipCullDistance: false, // set to use vertex shader clipping
 	clipCullDistance: false, // set to use vertex shader clipping
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
 };
@@ -368,8 +364,7 @@ this.extensions = {
 
 
 		<h3>[property:String glslVersion]</h3>
 		<h3>[property:String glslVersion]</h3>
 		<p>
 		<p>
-			Defines the GLSL version of custom shader code. Only relevant for WebGL 2
-			in order to define whether to specify GLSL 3.0 or not. Valid values are
+			Defines the GLSL version of custom shader code. Valid values are
 			`THREE.GLSL1` or `THREE.GLSL3`. Default is `null`.
 			`THREE.GLSL1` or `THREE.GLSL3`. Default is `null`.
 		</p>
 		</p>
 
 

+ 1 - 3
docs/api/en/objects/SkinnedMesh.html

@@ -13,9 +13,7 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			A mesh that has a [page:Skeleton] with [page:Bone bones] that can then be
 			A mesh that has a [page:Skeleton] with [page:Bone bones] that can then be
-			used to animate the vertices of the geometry.<br /><br />
-
-			[name] can only be used with WebGL 2.
+			used to animate the vertices of the geometry.
 		</p>
 		</p>
 
 
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>

+ 0 - 48
docs/api/en/renderers/WebGL1Renderer.html

@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-	<head>
-		<meta charset="utf-8" />
-		<base href="../../../" />
-		<script src="page.js"></script>
-		<link type="text/css" rel="stylesheet" href="page.css" />
-	</head>
-	<body>
-		[page:WebGLRenderer] &rarr;
-
-		<h1>[name]</h1>
-
-		<p class="desc">
-			Since r118 [page:WebGLRenderer] automatically uses a WebGL 2 rendering
-			context. When upgrading an existing project to => r118, applications might
-			break because of two reasons:
-		</p>
-		<ul>
-			<li>Custom shader code needs to be GLSL 3.0 conform.</li>
-			<li>WebGL 1 extension checks have to be changed.</li>
-		</ul>
-		<p>
-			If you can't afford the time to upgrade your code but still want to use
-			the latest version, you can use [name]. This version of the renderer will
-			enforce a WebGL 1 rendering context.
-		</p>
-
-		<h2>Constructor</h2>
-
-		<h3>[name]( [param:Object parameters] )</h3>
-		<p>Creates a new [name].</p>
-
-		<h2>Properties</h2>
-		<p>See the base [page:WebGLRenderer] class for common properties.</p>
-
-		<h3>[property:Boolean isWebGL1Renderer]</h3>
-		<p>Read-only flag to check if a given object is of type [name].</p>
-
-		<h2>Methods</h2>
-		<p>See the base [page:WebGLRenderer] class for common methods.</p>
-
-		<h2>Source</h2>
-		<p>
-			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-		</p>
-	</body>
-</html>

+ 1 - 2
docs/api/en/renderers/WebGLRenderTarget.html

@@ -103,8 +103,7 @@
 
 
 		<h3>[property:Number samples]</h3>
 		<h3>[property:Number samples]</h3>
 		<p>
 		<p>
-			Defines the count of MSAA samples. Can only be used with WebGL 2. Default
-			is `0`.
+			Defines the count of MSAA samples. Default is `0`.
 		</p>
 		</p>
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>

+ 1 - 2
docs/api/en/textures/Data3DTexture.html

@@ -13,8 +13,7 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			Creates a three-dimensional texture from raw data, with parameters to
 			Creates a three-dimensional texture from raw data, with parameters to
-			divide it into width, height, and depth. This type of texture can only be
-			used with a WebGL 2 rendering context.
+			divide it into width, height, and depth.
 		</p>
 		</p>
 
 
 		<h2>Constructor</h2>
 		<h2>Constructor</h2>

+ 1 - 2
docs/api/en/textures/DataArrayTexture.html

@@ -13,8 +13,7 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			Creates an array of textures directly from raw data, width and height and
 			Creates an array of textures directly from raw data, width and height and
-			depth. This type of texture can only be used with a WebGL 2 rendering
-			context.
+			depth.
 		</p>
 		</p>
 
 
 		<h2>Constructor</h2>
 		<h2>Constructor</h2>

+ 1 - 3
docs/api/en/textures/DepthTexture.html

@@ -13,9 +13,7 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			This class can be used to automatically save the depth information of a
 			This class can be used to automatically save the depth information of a
-			rendering into a texture. When using a WebGL 1 rendering context, [name]
-			requires support for the
-			[link:https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/ WEBGL_depth_texture] extension.
+			rendering into a texture.
 		</p>
 		</p>
 
 
 		<h2>Examples</h2>
 		<h2>Examples</h2>

+ 0 - 8
docs/api/fr/constants/Textures.html

@@ -160,23 +160,19 @@
 
 
 		[page:constant RedIntegerFormat] supprime les composants vert et bleu et lit uniquement le composant rouge.
 		[page:constant RedIntegerFormat] supprime les composants vert et bleu et lit uniquement le composant rouge.
 		Les texels sont lus comme des entiers au lieu de points flottants.
 		Les texels sont lus comme des entiers au lieu de points flottants.
-		(ne peut être utilisé qu'avec un contexte de rendu WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGFormat] supprime les composants alpha et bleu et lit les composants rouge et vert.
 		[page:constant RGFormat] supprime les composants alpha et bleu et lit les composants rouge et vert.
-		(ne peut être utilisé qu'avec un contexte de rendu WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGIntegerFormat] supprime les composants alpha et bleu et lit les composants rouge et vert.
 		[page:constant RGIntegerFormat] supprime les composants alpha et bleu et lit les composants rouge et vert.
 		Les texels sont lus comme des entiers au lieu de points flottants.
 		Les texels sont lus comme des entiers au lieu de points flottants.
-		(ne peut être utilisé qu'avec un contexte de rendu WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGBAFormat] est la valeur par défaut et lit les composants rouge, vert, bleu et alpha.<br /><br />
 		[page:constant RGBAFormat] est la valeur par défaut et lit les composants rouge, vert, bleu et alpha.<br /><br />
 
 
 		[page:constant RGBAIntegerFormat] est la valeur par défaut et lit les composants rouge, vert, bleu et alpha.
 		[page:constant RGBAIntegerFormat] est la valeur par défaut et lit les composants rouge, vert, bleu et alpha.
 		Les texels sont lus comme des entiers au lieu de points flottants.
 		Les texels sont lus comme des entiers au lieu de points flottants.
-		(ne peut être utilisé qu'avec un contexte de rendu WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant LuminanceFormat] lit chaque élément comme une seule composante de luminance.
 		[page:constant LuminanceFormat] lit chaque élément comme une seule composante de luminance.
@@ -346,10 +342,6 @@
 		</code>
 		</code>
 
 
 		<p>
 		<p>
-
-		Attention : changer le format interne d'une texture n'affectera que le
-		texture lors de l'utilisation d'un contexte de rendu WebGL 2.<br /><br />
-
 		À utiliser avec la propriété de texture [page:Texture.internalFormat internalFormat],
 		À utiliser avec la propriété de texture [page:Texture.internalFormat internalFormat],
 		ceux-ci définissent comment les éléments d'une texture, ou "texels", sont stockés sur le GPU.<br /><br />
 		ceux-ci définissent comment les éléments d'une texture, ou "texels", sont stockés sur le GPU.<br /><br />
 
 

+ 2 - 6
docs/api/fr/materials/ShaderMaterial.html

@@ -313,10 +313,6 @@ et la page [page:BufferAttribute] pour un aperçu détaillé de l'API `BufferAtt
 		Un objet avec les propriétés suivantes :
 		Un objet avec les propriétés suivantes :
 		<code>
 		<code>
 			this.extensions = {
 			this.extensions = {
-				derivatives: false, // set to use derivatives
-				fragDepth: false, // set to use fragment depth values
-				drawBuffers: false, // set to use draw buffers
-				shaderTextureLOD: false, // set to use shader texture LOD
 				clipCullDistance: false, // set to use vertex shader clipping
 				clipCullDistance: false, // set to use vertex shader clipping
 				multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 				multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 			};
 			};
@@ -340,8 +336,8 @@ et la page [page:BufferAttribute] pour un aperçu détaillé de l'API `BufferAtt
 
 
 		<h3>[property:String glslVersion]</h3>
 		<h3>[property:String glslVersion]</h3>
 		<p>
 		<p>
-			Définit la version GLSL du code de shader personnalisé. Pertinent uniquement pour WebGL 2 afin de définir s'il faut spécifier
-			GLSL 3.0 ou pas. Les valeurs valides sont `THREE.GLSL1` ou `THREE.GLSL3`. La valeur par défaut est `null`.
+			Définit la version GLSL du code de shader personnalisé. Les valeurs valides sont `THREE.GLSL1` ou `THREE.GLSL3`.
+			La valeur par défaut est `null`.
 		</p>
 		</p>
 
 
 		<h3>[property:String index0AttributeName]</h3>
 		<h3>[property:String index0AttributeName]</h3>

+ 4 - 11
docs/api/it/constants/Textures.html

@@ -155,21 +155,17 @@
       [page:constant RedFormat] elimina i componenti verde e blu e legge solo il componente rosso.<br /><br />
       [page:constant RedFormat] elimina i componenti verde e blu e legge solo il componente rosso.<br /><br />
 
 
       [page:constant RedIntegerFormat] elimina i componenti verde e blu e legge solo il componente rosso.
       [page:constant RedIntegerFormat] elimina i componenti verde e blu e legge solo il componente rosso.
-      I texel sono letti come interi invece che come floating point.
-      (può essere utilizzato solo in un contesto di rendering WebGL 2).<br /><br />
+      I texel sono letti come interi invece che come floating point.<br /><br />
 
 
-      [page:constant RGFormat] elimina i componenti alfa e blu e legge i componenti rosso e verde.
-      (può essere utilizzato solo in un contesto di rendering WebGL 2).<br /><br />
+      [page:constant RGFormat] elimina i componenti alfa e blu e legge i componenti rosso e verde.<br /><br />
 
 
       [page:constant RGIntegerFormat] elimina i componenti alfa e blu e legge i componenti rosso e verde.
       [page:constant RGIntegerFormat] elimina i componenti alfa e blu e legge i componenti rosso e verde.
-      I texel sono letti come numeri interi invece che come floating point.
-      (può essere utilizzato solo in un contesto di rendering WebGL 2).<br /><br />
+      I texel sono letti come numeri interi invece che come floating point.<br /><br />
 
 
       [page:constant RGBAFormat] è l'impostazione predefinita e legge i componenti rosso, verde, blu e alfa.<br /><br />
       [page:constant RGBAFormat] è l'impostazione predefinita e legge i componenti rosso, verde, blu e alfa.<br /><br />
 
 
       [page:constant RGBAIntegerFormat] è l'impostazione di default e legge i componenti rosso, verde, blu e alfa.
       [page:constant RGBAIntegerFormat] è l'impostazione di default e legge i componenti rosso, verde, blu e alfa.
-      I texel sono letti come numeri interi invece che come floating point.
-      (può essere utilizzato solo in un contesto di rendering WebGL 2).<br /><br />
+      I texel sono letti come numeri interi invece che come floating point.<br /><br />
 
 
       [page:constant LuminanceFormat] legge ogni elemento come un singolo componente di luminanza.
       [page:constant LuminanceFormat] legge ogni elemento come un singolo componente di luminanza.
       Questo viene quindi convertito in floating point, fissato all'intervallo [0,1], e quindi assemblato
       Questo viene quindi convertito in floating point, fissato all'intervallo [0,1], e quindi assemblato
@@ -346,9 +342,6 @@
 		</code>
 		</code>
 
 
 		<p>
 		<p>
-      Attenzione: la modifica di un formato interno di una texture avrà effetto solo 
-      quando si utilizza un contesto di rendering WebGL 2.<br /><br />
-
       Da usare con la proprietà [page:Texture.internalFormat internalFormat] della texture,
       Da usare con la proprietà [page:Texture.internalFormat internalFormat] della texture,
       definiscono come gli elementi della texture, o `toxel`, sono memorizzati nella GPU.<br /><br />
       definiscono come gli elementi della texture, o `toxel`, sono memorizzati nella GPU.<br /><br />
 
 

+ 1 - 1
docs/api/it/core/Uniform.html

@@ -50,7 +50,7 @@
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>

+ 2 - 6
docs/api/it/materials/ShaderMaterial.html

@@ -318,10 +318,6 @@ this.defaultAttributeValues = {
 			Un oggetto con le seguenti proprietà:
 			Un oggetto con le seguenti proprietà:
 		<code>
 		<code>
 this.extensions = {
 this.extensions = {
-	derivatives: false, // impostato per utilizzare le direttive
-	fragDepth: false, // impostato per utilizzare i valori di profondità del frammento
-	drawBuffers: false, // impostato per utilizzare i buffer di disegno
-	shaderTextureLOD: false, // impostato per utilizzare la texture dello shader LOD
 	clipCullDistance: false, // set to use vertex shader clipping
 	clipCullDistance: false, // set to use vertex shader clipping
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
 };
@@ -345,8 +341,8 @@ this.extensions = {
 
 
 		<h3>[property:String glslVersion]</h3>
 		<h3>[property:String glslVersion]</h3>
 		<p>
 		<p>
-			Definisce la versione GLSL del codice dello shader personalizzato. Rilevante solo per WebGL 2 per definire se 
-			specificare o meno GLSL 3.0. I valori validi sono `THREE.GLSL1` o `THREE.GLSL3`. Il valore predefinito è `null`.
+			Definisce la versione GLSL del codice dello shader personalizzato. I valori validi sono `THREE.GLSL1` o `THREE.GLSL3`. 
+			Il valore predefinito è `null`.
 		</p>
 		</p>
 
 
 		<h3>[property:String index0AttributeName]</h3>
 		<h3>[property:String index0AttributeName]</h3>

+ 1 - 3
docs/api/it/objects/SkinnedMesh.html

@@ -13,9 +13,7 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			Una mesh che ha uno [page:Skeleton scheletro] con [page:Bone ossa] che può essere 
 			Una mesh che ha uno [page:Skeleton scheletro] con [page:Bone ossa] che può essere 
-			utilizzata per animare i vertici della geometria.<br /><br />
-
-			[name] può essere utilizzata solo con WebGL 2.
+			utilizzata per animare i vertici della geometria.
 		</p>
 		</p>
 
 
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>

+ 0 - 52
docs/api/it/renderers/WebGL1Renderer.html

@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html lang="it">
-	<head>
-		<meta charset="utf-8" />
-		<base href="../../../" />
-		<script src="page.js"></script>
-		<link type="text/css" rel="stylesheet" href="page.css" />
-	</head>
-	<body>
-		[page:WebGLRenderer] &rarr;
-
-		<h1>[name]</h1>
-
-		<p class="desc">
-		Poiché la versione r118 [page:WebGLRenderer] utilizza automaticamente un contesto di rendering WebGL 2, quando viene aggiornato un progetto estistente a
-		=> r118, l'applicazione potrebbe rompersi per due ragioni:
-
-		<ul>
-			<li>Il codice dello shader personalizzato deve essere conforme a GLSL 3.0.</li>
-			<li>I controlli dell'estensione WebGL 1 devono essere cambiati.</li>
-		</ul>
-
-		Se non hai tempo di cambiare il tuo codice ma vuoi ancora utilizzare l'ultima versione, puoi usare [name]. 
-		Questa versione di renderer forzerà un contesto di rendering WebGL 1.
-		</p>
-
-		<h2>Costruttore</h2>
-
-		<h3>[name]( [param:Object parameters] )</h3>
-		<p>
-		Crea un nuovo [name].
-		</p>
-
-		<h2>Proprietà</h2>
-		<p>Vedi la classe base [page:WebGLRenderer] per le proprietà comuni.</p>
-
-		<h3>[property:Boolean isWebGL1Renderer]</h3>
-		<p>
-			Flag di sola lettura per verificare se l'oggetto dato è di tipo [name].
-		</p>
-
-
-		<h2>Metodi</h2>
-		<p>Vedi la classe base [page:WebGLRenderer] per i metodi comuni.</p>
-
-		<h2>Source</h2>
-
-		<p>
-			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-		</p>
-	</body>
-</html>

+ 1 - 1
docs/api/it/textures/Data3DTexture.html

@@ -11,7 +11,7 @@
 
 
 		<h1>[name]</h1>
 		<h1>[name]</h1>
 
 
-		<p class="desc">Crea una texture tridimensionale. Questo tipo di texture può solo essere utilizzata in un contesto di rendering WebGL 2.</p>
+		<p class="desc">Crea una texture tridimensionale.</p>
 
 
 		<h2>Costruttore</h2>
 		<h2>Costruttore</h2>
 
 

+ 0 - 1
docs/api/it/textures/DataArrayTexture.html

@@ -13,7 +13,6 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			Crea un array di texture direttamente da dati grezzi, dalla larghezza, dall'altezza e dalla profondità.
 			Crea un array di texture direttamente da dati grezzi, dalla larghezza, dall'altezza e dalla profondità.
-			Questo tipo di texture può solo essere utilizzata in un contesto di rendering WebGL 2.
 		</p>
 		</p>
 
 
 		<h2>Costruttore</h2>
 		<h2>Costruttore</h2>

+ 0 - 2
docs/api/it/textures/DepthTexture.html

@@ -13,8 +13,6 @@
 
 
 		<p class="desc">
 		<p class="desc">
 			Questa classe può essere utilizzata per salvare automaticamente le informazioni di profondità di un rendering in una texture.
 			Questa classe può essere utilizzata per salvare automaticamente le informazioni di profondità di un rendering in una texture.
-			Quando viene utilizzato un contesto di rendering WebGL 1, [name] richiede supporto per l'estensione
-			[link:https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/ WEBGL_depth_texture].
 		</p>
 		</p>
 
 
 		<h2>Esempi</h2>
 		<h2>Esempi</h2>

+ 0 - 7
docs/api/ko/constants/Textures.html

@@ -157,23 +157,19 @@
 
 
 		[page:constant RedIntegerFormat] green 및 blue 요소를 버리고 red 요소만 읽어들입니다.
 		[page:constant RedIntegerFormat] green 및 blue 요소를 버리고 red 요소만 읽어들입니다.
 		texel은 부동 소수점 대신 정수로 읽어들입니다.
 		texel은 부동 소수점 대신 정수로 읽어들입니다.
-		(WebGL 2 렌더링 시에만 사용 가능).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGFormat] alpha, blue 요소를 버리고 red, green 요소만 읽어들입니다.
 		[page:constant RGFormat] alpha, blue 요소를 버리고 red, green 요소만 읽어들입니다.
-		(WebGL 2 렌더링 시에만 사용 가능).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGIntegerFormat] alpha, blue 요소를 버리고 red, green 요소만 읽어들입니다.
 		[page:constant RGIntegerFormat] alpha, blue 요소를 버리고 red, green 요소만 읽어들입니다.
 		texel은 부동 소수점 대신 정수로 읽어들입니다.
 		texel은 부동 소수점 대신 정수로 읽어들입니다.
-		(WebGL 2 렌더링 시에만 사용 가능).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGBAFormat]는 기본값이며 red, green, blue 및 alpha 요소를 읽어들입니다.<br /><br />
 		[page:constant RGBAFormat]는 기본값이며 red, green, blue 및 alpha 요소를 읽어들입니다.<br /><br />
 
 
 		[page:constant RGBAIntegerFormat]는 기본값이며 red, green, blue 및 alpha 요소를 읽어들입니다.
 		[page:constant RGBAIntegerFormat]는 기본값이며 red, green, blue 및 alpha 요소를 읽어들입니다.
 		texel은 부동 소수점 대신 정수로 읽어들입니다.
 		texel은 부동 소수점 대신 정수로 읽어들입니다.
-		(WebGL 2 렌더링 시에만 사용 가능).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant LuminanceFormat]은 각 요소(element)를 단일 휘도 요소(component)로 읽어들입니다.
 		[page:constant LuminanceFormat]은 각 요소(element)를 단일 휘도 요소(component)로 읽어들입니다.
@@ -335,9 +331,6 @@
 		</code>
 		</code>
 
 
 		<p>
 		<p>
-
-		주의: WebGL 2 렌더링의 경우에만 텍스쳐 내부 포맷 변경이 텍스쳐에 영향을 줄 것입니다.<br /><br />
-
 		텍스쳐의 [page:Texture.internalFormat internalFormat] 프로퍼티와 함께 사용되며,
 		텍스쳐의 [page:Texture.internalFormat internalFormat] 프로퍼티와 함께 사용되며,
 		텍스쳐 혹은 *texels*의 요소들이 GPU에 어떻게 저장될지 정의합니다.<br /><br />
 		텍스쳐 혹은 *texels*의 요소들이 GPU에 어떻게 저장될지 정의합니다.<br /><br />
 
 

+ 1 - 1
docs/api/ko/core/Uniform.html

@@ -46,7 +46,7 @@
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>

+ 0 - 8
docs/api/pt-br/constants/Textures.html

@@ -160,23 +160,19 @@
 
 
 		[page:constant RedIntegerFormat] descarta os componentes verde e azul e lê apenas o componente vermelho.
 		[page:constant RedIntegerFormat] descarta os componentes verde e azul e lê apenas o componente vermelho.
 		Os texels são lidos como inteiros em vez de ponto flutuante.
 		Os texels são lidos como inteiros em vez de ponto flutuante.
-		(só pode ser usado com um contexto de renderização WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGFormat] descarta os componentes alfa e azul e lê os componentes vermelho e verde.
 		[page:constant RGFormat] descarta os componentes alfa e azul e lê os componentes vermelho e verde.
-		(só pode ser usado com um contexto de renderização WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGIntegerFormat] descarta os componentes alfa e azul e lê os componentes vermelho e verde.
 		[page:constant RGIntegerFormat] descarta os componentes alfa e azul e lê os componentes vermelho e verde.
 		Os texels são lidos como inteiros em vez de ponto flutuante.
 		Os texels são lidos como inteiros em vez de ponto flutuante.
-		(só pode ser usado com um contexto de renderização WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGBAFormat] é o padrão e lê os componentes vermelho, verde, azul e alfa.<br /><br />
 		[page:constant RGBAFormat] é o padrão e lê os componentes vermelho, verde, azul e alfa.<br /><br />
 
 
 		[page:constant RGBAIntegerFormat] é o padrão e lê os componentes vermelho, verde, azul e alfa.
 		[page:constant RGBAIntegerFormat] é o padrão e lê os componentes vermelho, verde, azul e alfa.
 		Os texels são lidos como inteiros em vez de ponto flutuante.
 		Os texels são lidos como inteiros em vez de ponto flutuante.
-		(só pode ser usado com um contexto de renderização WebGL 2).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant LuminanceFormat] lê cada elemento como um único componente de luminância.
 		[page:constant LuminanceFormat] lê cada elemento como um único componente de luminância.
@@ -346,10 +342,6 @@
 		</code>
 		</code>
 
 
 		<p>
 		<p>
-
-		Atenção: alterar o formato interno de uma textura afetará a
-		textura apenas quando for usado um contexto de renderização WebGL 2.<br /><br />
-
 		Para uso com a propriedade  [page:Texture.internalFormat internalFormat] de uma textura,
 		Para uso com a propriedade  [page:Texture.internalFormat internalFormat] de uma textura,
 		definem como os elementos de uma textura, ou `texels`, são armazenados na GPU.<br /><br />
 		definem como os elementos de uma textura, ou `texels`, são armazenados na GPU.<br /><br />
 
 

+ 0 - 8
docs/api/zh/constants/Textures.html

@@ -149,23 +149,19 @@
 
 
 		[page:constant RedIntegerFormat] discards the green and blue components and reads just the red component.
 		[page:constant RedIntegerFormat] discards the green and blue components and reads just the red component.
 		The texels are read as integers instead of floating point.
 		The texels are read as integers instead of floating point.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGFormat] discards the alpha, and blue components and reads the red, and green components.
 		[page:constant RGFormat] discards the alpha, and blue components and reads the red, and green components.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGIntegerFormat] discards the alpha, and blue components and reads the red, and green components.
 		[page:constant RGIntegerFormat] discards the alpha, and blue components and reads the red, and green components.
 		The texels are read as integers instead of floating point.
 		The texels are read as integers instead of floating point.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant RGBAFormat] 是默认值,它将读取红、绿、蓝和Alpha分量。<br /><br />
 		[page:constant RGBAFormat] 是默认值,它将读取红、绿、蓝和Alpha分量。<br /><br />
 
 
 		[page:constant RGBAIntegerFormat] is the default and reads the red, green, blue and alpha components.
 		[page:constant RGBAIntegerFormat] is the default and reads the red, green, blue and alpha components.
 		The texels are read as integers instead of floating point.
 		The texels are read as integers instead of floating point.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 		<br /><br />
 
 
 		[page:constant LuminanceFormat] 将每个元素作为单独的亮度分量来读取。
 		[page:constant LuminanceFormat] 将每个元素作为单独的亮度分量来读取。
@@ -329,10 +325,6 @@
 	</code>
 	</code>
 
 
 	<p>
 	<p>
-
-	Heads up: changing the internal format of a texture will only affect the
-	texture when using a WebGL 2 rendering context.<br /><br />
-
 	For use with a texture's [page:Texture.internalFormat internalFormat]	property,
 	For use with a texture's [page:Texture.internalFormat internalFormat]	property,
 	these define how elements of a texture, or *texels*, are stored on the GPU.<br /><br />
 	these define how elements of a texture, or *texels*, are stored on the GPU.<br /><br />
 
 

+ 1 - 1
docs/api/zh/core/Uniform.html

@@ -47,7 +47,7 @@
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 					<td>[page:Number]</td>
 				</tr>
 				</tr>
 				<tr>
 				<tr>

+ 1 - 6
docs/api/zh/materials/ShaderMaterial.html

@@ -280,10 +280,6 @@ this.defaultAttributeValues = {
 		<p> 一个有如下属性的对象:
 		<p> 一个有如下属性的对象:
 		<code>
 		<code>
 this.extensions = {
 this.extensions = {
-	derivatives: false, // set to use derivatives
-	fragDepth: false, // set to use fragment depth values
-	drawBuffers: false, // set to use draw buffers
-	shaderTextureLOD: false, // set to use shader texture LOD
 	clipCullDistance: false, // set to use vertex shader clipping
 	clipCullDistance: false, // set to use vertex shader clipping
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
 };
@@ -305,8 +301,7 @@ this.extensions = {
 
 
 		<h3>[property:String glslVersion]</h3>
 		<h3>[property:String glslVersion]</h3>
 		<p>
 		<p>
-		Defines the GLSL version of custom shader code. Only relevant for WebGL 2 in order to define whether to specify
-		GLSL 3.0 or not. Valid values are *THREE.GLSL1* or *THREE.GLSL3*. Default is *null*.
+		Defines the GLSL version of custom shader code. Valid values are *THREE.GLSL1* or *THREE.GLSL3*. Default is *null*.
 		</p>
 		</p>
 
 
 		<h3>[property:String index0AttributeName]</h3>
 		<h3>[property:String index0AttributeName]</h3>

+ 1 - 3
docs/api/zh/objects/SkinnedMesh.html

@@ -12,9 +12,7 @@
 		<h1>蒙皮网格([name])</h1>
 		<h1>蒙皮网格([name])</h1>
 
 
 		<p class="desc">
 		<p class="desc">
-			具有[page:Skeleton](骨架)和[page:Bone bones](骨骼)的网格,可用于给几何体上的顶点添加动画。<br /><br />
-
-			[name] can only be used with WebGL 2.
+			具有[page:Skeleton](骨架)和[page:Bone bones](骨骼)的网格,可用于给几何体上的顶点添加动画。
 		</p>
 		</p>
 
 
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>
 		<iframe id="scene" src="scenes/bones-browser.html"></iframe>

+ 0 - 52
docs/api/zh/renderers/WebGL1Renderer.html

@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-	<head>
-		<meta charset="utf-8" />
-		<base href="../../../" />
-		<script src="page.js"></script>
-		<link type="text/css" rel="stylesheet" href="page.css" />
-	</head>
-	<body>
-		[page:WebGLRenderer] &rarr;
-
-		<h1>[name]</h1>
-
-		<p class="desc">
-		自r118起,[page:WebGLRenderer]会自动使用 WebGL 2 渲染上下文。当升级一个已存在的项目到 => r118 ,
-		应用程序可能会因为下列两种原因而损坏:
-
-		<ul>
-			<li>自定义着色器代码必须符合GLSL 3.0。</li>
-			<li>WebGL 1扩展检查到被更改</li>
-		</ul>
-
-		如果你不能够花时间来升级你的代码,但仍然想要使用最新版本,那你就可以使用[name]。
-		这一版本的渲染器会强制使用 WebGL 1 渲染上下文。
-		</p>
-
-		<h2>构造函数</h2>
-
-		<h3>[name]( [param:Object parameters] )</h3>
-		<p>
-		Creates a new [name].
-		</p>
-
-		<h2>属性</h2>
-		<p>See the base [page:WebGLRenderer] class for common properties.</p>
-
-		<h3>[property:Boolean isWebGL1Renderer]</h3>
-		<p>
-			Read-only flag to check if a given object is of type [name].
-		</p>
-
-
-		<h2>方法</h2>
-		<p>See the base [page:WebGLRenderer] class for common methods.</p>
-
-		<h2>源码</h2>
-
-		<p>
-			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
-		</p>
-	</body>
-</html>

+ 1 - 1
docs/api/zh/renderers/WebGLRenderTarget.html

@@ -104,7 +104,7 @@
 
 
 		<h3>[property:Number samples]</h3>
 		<h3>[property:Number samples]</h3>
 		<p>
 		<p>
-		Defines the count of MSAA samples. Can only be used with WebGL 2. Default is *0*.
+		Defines the count of MSAA samples. Default is *0*.
 		</p>
 		</p>
 
 
 		<h2>方法</h2>
 		<h2>方法</h2>

+ 1 - 1
docs/api/zh/textures/Data3DTexture.html

@@ -11,7 +11,7 @@
 
 
 		<h1>[name]</h1>
 		<h1>[name]</h1>
 
 
-		<p class="desc">创建一个三维的纹理贴图。这种纹理贴图只能被用于WebGL 2渲染环境中。</p>
+		<p class="desc">创建一个三维的纹理贴图。</p>
 
 
 		<h2>构造函数</h2>
 		<h2>构造函数</h2>
 
 

+ 1 - 1
docs/api/zh/textures/DataArrayTexture.html

@@ -12,7 +12,7 @@
 		<h1>数据数组纹理([name])</h1>
 		<h1>数据数组纹理([name])</h1>
 
 
 		<p class="desc">
 		<p class="desc">
-			直接从原始数据、宽度、高度和深度创建纹理数组。这种类型的纹理只能与 WebGL 2 渲染上下文一起使用。
+			直接从原始数据、宽度、高度和深度创建纹理数组。
 		</p>
 		</p>
 
 
 
 

+ 0 - 1
docs/api/zh/textures/DepthTexture.html

@@ -13,7 +13,6 @@
 
 
 		<p class="desc">
 		<p class="desc">
 		This class can be used to automatically save the depth information of a rendering into a texture.
 		This class can be used to automatically save the depth information of a rendering into a texture.
-		When using a WebGL 1 rendering context, [name] requires support for the [link:https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/ WEBGL_depth_texture] extension.
 		</p>
 		</p>
 
 
 		<h2>例子</h2>
 		<h2>例子</h2>

+ 0 - 5
docs/list.json

@@ -279,7 +279,6 @@
 
 
 			"Renderers": {
 			"Renderers": {
 				"WebGLRenderer": "api/en/renderers/WebGLRenderer",
 				"WebGLRenderer": "api/en/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/en/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget",
 				"WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/en/renderers/WebGL3DRenderTarget",
 				"WebGL3DRenderTarget": "api/en/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/en/renderers/WebGLArrayRenderTarget",
 				"WebGLArrayRenderTarget": "api/en/renderers/WebGLArrayRenderTarget",
@@ -720,7 +719,6 @@
 
 
 			"Renderers": {
 			"Renderers": {
 				"WebGLRenderer": "api/ar/renderers/WebGLRenderer",
 				"WebGLRenderer": "api/ar/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/ar/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/ar/renderers/WebGLRenderTarget",
 				"WebGLRenderTarget": "api/ar/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/ar/renderers/WebGL3DRenderTarget",
 				"WebGL3DRenderTarget": "api/ar/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/ar/renderers/WebGLArrayRenderTarget",
 				"WebGLArrayRenderTarget": "api/ar/renderers/WebGLArrayRenderTarget",
@@ -1027,7 +1025,6 @@
 
 
 			"渲染器": {
 			"渲染器": {
 				"WebGLRenderer": "api/zh/renderers/WebGLRenderer",
 				"WebGLRenderer": "api/zh/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/zh/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/zh/renderers/WebGLRenderTarget",
 				"WebGLRenderTarget": "api/zh/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/zh/renderers/WebGL3DRenderTarget",
 				"WebGL3DRenderTarget": "api/zh/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/zh/renderers/WebGLArrayRenderTarget",
 				"WebGLArrayRenderTarget": "api/zh/renderers/WebGLArrayRenderTarget",
@@ -1663,7 +1660,6 @@
 
 
 			"Renderers": {
 			"Renderers": {
 				"WebGLRenderer": "api/it/renderers/WebGLRenderer",
 				"WebGLRenderer": "api/it/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/it/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/it/renderers/WebGLRenderTarget",
 				"WebGLRenderTarget": "api/it/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/it/renderers/WebGL3DRenderTarget",
 				"WebGL3DRenderTarget": "api/it/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/it/renderers/WebGLArrayRenderTarget",
 				"WebGLArrayRenderTarget": "api/it/renderers/WebGLArrayRenderTarget",
@@ -2190,7 +2186,6 @@
 
 
 			"Renderers": {
 			"Renderers": {
 				"WebGLRenderer": "api/en/renderers/WebGLRenderer",
 				"WebGLRenderer": "api/en/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/en/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget",
 				"WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/en/renderers/WebGL3DRenderTarget",
 				"WebGL3DRenderTarget": "api/en/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/en/renderers/WebGLArrayRenderTarget",
 				"WebGLArrayRenderTarget": "api/en/renderers/WebGLArrayRenderTarget",

+ 2 - 6
examples/jsm/loaders/KTX2Loader.js

@@ -160,12 +160,8 @@ class KTX2Loader extends Loader {
 					|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
 					|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )
 			};
 			};
 
 
-			if ( renderer.capabilities.isWebGL2 ) {
-
-				// https://github.com/mrdoob/three.js/pull/22928
-				this.workerConfig.etc1Supported = false;
-
-			}
+			// https://github.com/mrdoob/three.js/pull/22928
+			this.workerConfig.etc1Supported = false;
 
 
 		}
 		}
 
 

+ 0 - 6
examples/jsm/misc/GPUComputationRenderer.js

@@ -171,12 +171,6 @@ class GPUComputationRenderer {
 
 
 		this.init = function () {
 		this.init = function () {
 
 
-			if ( renderer.capabilities.isWebGL2 === false && renderer.extensions.has( 'OES_texture_float' ) === false ) {
-
-				return 'No OES_texture_float support for float textures.';
-
-			}
-
 			if ( renderer.capabilities.maxVertexTextures === 0 ) {
 			if ( renderer.capabilities.maxVertexTextures === 0 ) {
 
 
 				return 'No support for vertex shader textures.';
 				return 'No support for vertex shader textures.';

+ 0 - 3
examples/jsm/postprocessing/GlitchPass.js

@@ -3,7 +3,6 @@ import {
 	FloatType,
 	FloatType,
 	MathUtils,
 	MathUtils,
 	RedFormat,
 	RedFormat,
-	LuminanceFormat,
 	ShaderMaterial,
 	ShaderMaterial,
 	UniformsUtils
 	UniformsUtils
 } from 'three';
 } from 'three';
@@ -40,8 +39,6 @@ class GlitchPass extends Pass {
 
 
 	render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
 	render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
 
 
-		if ( renderer.capabilities.isWebGL2 === false ) this.uniforms[ 'tDisp' ].value.format = LuminanceFormat;
-
 		this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
 		this.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
 		this.uniforms[ 'seed' ].value = Math.random();//default seeding
 		this.uniforms[ 'seed' ].value = Math.random();//default seeding
 		this.uniforms[ 'byp' ].value = 0;
 		this.uniforms[ 'byp' ].value = 0;

+ 0 - 3
examples/jsm/postprocessing/SSAOPass.js

@@ -13,7 +13,6 @@ import {
 	NearestFilter,
 	NearestFilter,
 	NoBlending,
 	NoBlending,
 	RedFormat,
 	RedFormat,
-	LuminanceFormat,
 	DepthStencilFormat,
 	DepthStencilFormat,
 	UnsignedInt248Type,
 	UnsignedInt248Type,
 	RepeatWrapping,
 	RepeatWrapping,
@@ -177,8 +176,6 @@ class SSAOPass extends Pass {
 
 
 	render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
 	render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
 
 
-		if ( renderer.capabilities.isWebGL2 === false ) this.noiseTexture.format = LuminanceFormat;
-
 		// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
 		// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
 
 
 		this.overrideVisibility();
 		this.overrideVisibility();

+ 1 - 1
examples/jsm/renderers/webgl/utils/WebGLUtils.js

@@ -1,4 +1,4 @@
-import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, _SRGBAFormat, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBColorSpace, NoColorSpace } from 'three';
+import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBColorSpace, NoColorSpace } from 'three';
 
 
 class WebGLUtils {
 class WebGLUtils {
 
 

+ 1 - 3
examples/webaudio_visualizer.html

@@ -121,11 +121,9 @@
 
 
 				//
 				//
 
 
-				const format = ( renderer.capabilities.isWebGL2 ) ? THREE.RedFormat : THREE.LuminanceFormat;
-
 				uniforms = {
 				uniforms = {
 
 
-					tAudioData: { value: new THREE.DataTexture( analyser.data, fftSize / 2, 1, format ) }
+					tAudioData: { value: new THREE.DataTexture( analyser.data, fftSize / 2, 1, THREE.RedFormat ) }
 
 
 				};
 				};
 
 

+ 0 - 7
examples/webgl_buffergeometry_instancing.html

@@ -179,13 +179,6 @@
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			container.appendChild( renderer.domElement );
 			container.appendChild( renderer.domElement );
 
 
-			if ( renderer.capabilities.isWebGL2 === false && renderer.extensions.has( 'ANGLE_instanced_arrays' ) === false ) {
-
-				document.getElementById( 'notSupported' ).style.display = '';
-				return;
-
-			}
-
 			//
 			//
 
 
 			const gui = new GUI( { width: 350 } );
 			const gui = new GUI( { width: 350 } );

+ 1 - 9
examples/webgl_buffergeometry_instancing_billboards.html

@@ -91,15 +91,6 @@
 
 
 		function init() {
 		function init() {
 
 
-			renderer = new THREE.WebGLRenderer();
-
-			if ( renderer.capabilities.isWebGL2 === false && renderer.extensions.has( 'ANGLE_instanced_arrays' ) === false ) {
-
-				document.getElementById( 'notSupported' ).style.display = '';
-				return false;
-
-			}
-
 			container = document.createElement( 'div' );
 			container = document.createElement( 'div' );
 			document.body.appendChild( container );
 			document.body.appendChild( container );
 
 
@@ -143,6 +134,7 @@
 			mesh.scale.set( 500, 500, 500 );
 			mesh.scale.set( 500, 500, 500 );
 			scene.add( mesh );
 			scene.add( mesh );
 
 
+			renderer = new THREE.WebGLRenderer();
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			container.appendChild( renderer.domElement );
 			container.appendChild( renderer.domElement );

+ 0 - 7
examples/webgl_buffergeometry_instancing_interleaved.html

@@ -165,13 +165,6 @@
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			container.appendChild( renderer.domElement );
 			container.appendChild( renderer.domElement );
 
 
-			if ( renderer.capabilities.isWebGL2 === false && renderer.extensions.has( 'ANGLE_instanced_arrays' ) === false ) {
-
-				document.getElementById( 'notSupported' ).style.display = '';
-				return;
-
-			}
-
 			stats = new Stats();
 			stats = new Stats();
 			container.appendChild( stats.dom );
 			container.appendChild( stats.dom );
 
 

+ 1 - 10
examples/webgl_depth_texture.html

@@ -83,7 +83,7 @@
 			let camera, scene, renderer, controls, stats;
 			let camera, scene, renderer, controls, stats;
 			let target;
 			let target;
 			let postScene, postCamera, postMaterial;
 			let postScene, postCamera, postMaterial;
-			let supportsExtension = true;
+			const supportsExtension = true;
 
 
 			const params = {
 			const params = {
 				format: THREE.DepthFormat,
 				format: THREE.DepthFormat,
@@ -99,15 +99,6 @@
 			function init() {
 			function init() {
 
 
 				renderer = new THREE.WebGLRenderer();
 				renderer = new THREE.WebGLRenderer();
-
-				if ( renderer.capabilities.isWebGL2 === false && renderer.extensions.has( 'WEBGL_depth_texture' ) === false ) {
-
-					supportsExtension = false;
-					document.querySelector( '#error' ).style.display = 'block';
-					return;
-
-				}
-
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				document.body.appendChild( renderer.domElement );
 				document.body.appendChild( renderer.domElement );

+ 0 - 6
examples/webgl_gpgpu_birds.html

@@ -499,12 +499,6 @@
 
 
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 
 
-				if ( renderer.capabilities.isWebGL2 === false ) {
-
-					gpuCompute.setDataType( THREE.HalfFloatType );
-
-				}
-
 				const dtPosition = gpuCompute.createTexture();
 				const dtPosition = gpuCompute.createTexture();
 				const dtVelocity = gpuCompute.createTexture();
 				const dtVelocity = gpuCompute.createTexture();
 				fillPositionTexture( dtPosition );
 				fillPositionTexture( dtPosition );

+ 0 - 6
examples/webgl_gpgpu_birds_gltf.html

@@ -443,12 +443,6 @@
 
 
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 
 
-				if ( renderer.capabilities.isWebGL2 === false ) {
-
-					gpuCompute.setDataType( THREE.HalfFloatType );
-
-				}
-
 				const dtPosition = gpuCompute.createTexture();
 				const dtPosition = gpuCompute.createTexture();
 				const dtVelocity = gpuCompute.createTexture();
 				const dtVelocity = gpuCompute.createTexture();
 				fillPositionTexture( dtPosition );
 				fillPositionTexture( dtPosition );

+ 0 - 6
examples/webgl_gpgpu_protoplanet.html

@@ -319,12 +319,6 @@
 
 
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 
 
-				if ( renderer.capabilities.isWebGL2 === false ) {
-
-					gpuCompute.setDataType( THREE.HalfFloatType );
-
-				}
-
 				const dtPosition = gpuCompute.createTexture();
 				const dtPosition = gpuCompute.createTexture();
 				const dtVelocity = gpuCompute.createTexture();
 				const dtVelocity = gpuCompute.createTexture();
 
 

+ 0 - 6
examples/webgl_gpgpu_water.html

@@ -442,12 +442,6 @@
 
 
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 				gpuCompute = new GPUComputationRenderer( WIDTH, WIDTH, renderer );
 
 
-				if ( renderer.capabilities.isWebGL2 === false ) {
-
-					gpuCompute.setDataType( THREE.HalfFloatType );
-
-				}
-
 				const heightmap0 = gpuCompute.createTexture();
 				const heightmap0 = gpuCompute.createTexture();
 
 
 				fillTexture( heightmap0 );
 				fillTexture( heightmap0 );

+ 1 - 2
examples/webgl_materials_toon.html

@@ -70,7 +70,6 @@
 				const numberOfSphersPerSide = 5;
 				const numberOfSphersPerSide = 5;
 				const sphereRadius = ( cubeWidth / numberOfSphersPerSide ) * 0.8 * 0.5;
 				const sphereRadius = ( cubeWidth / numberOfSphersPerSide ) * 0.8 * 0.5;
 				const stepSize = 1.0 / numberOfSphersPerSide;
 				const stepSize = 1.0 / numberOfSphersPerSide;
-				const format = ( renderer.capabilities.isWebGL2 ) ? THREE.RedFormat : THREE.LuminanceFormat;
 
 
 				const geometry = new THREE.SphereGeometry( sphereRadius, 32, 16 );
 				const geometry = new THREE.SphereGeometry( sphereRadius, 32, 16 );
 
 
@@ -84,7 +83,7 @@
 
 
 					}
 					}
 
 
-					const gradientMap = new THREE.DataTexture( colors, colors.length, 1, format );
+					const gradientMap = new THREE.DataTexture( colors, colors.length, 1, THREE.RedFormat );
 					gradientMap.needsUpdate = true;
 					gradientMap.needsUpdate = true;
 
 
 					for ( let beta = 0; beta <= 1.0; beta += stepSize ) {
 					for ( let beta = 0; beta <= 1.0; beta += stepSize ) {

+ 4 - 13
examples/webgl_postprocessing_3dlut.html

@@ -107,15 +107,15 @@
 
 
 							} );
 							} );
 
 
-					} else if ( /\LUT$/i.test( name ) ){
-						
+					} else if ( /\LUT$/i.test( name ) ) {
+			
 						new LUTImageLoader()
 						new LUTImageLoader()
 							.load( `luts/${name}.png`, function ( result ) {
 							.load( `luts/${name}.png`, function ( result ) {
 
 
 								lutMap[ name ] = result;
 								lutMap[ name ] = result;
 
 
 							} );
 							} );
-					
+			
 					} else {
 					} else {
 
 
 						new LUT3dlLoader()
 						new LUT3dlLoader()
@@ -155,16 +155,7 @@
 				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 );
-
-				if ( renderer.capabilities.isWebGL2 ) {
-
-					gui.add( params, 'use2DLut' );
-
-				} else {
-
-					params.use2DLut = true;
-
-				}
+				gui.add( params, 'use2DLut' );
 
 
 				window.addEventListener( 'resize', onWindowResize );
 				window.addEventListener( 'resize', onWindowResize );
 
 

+ 0 - 1
src/Three.js

@@ -5,7 +5,6 @@ export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js';
 export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js';
 export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js';
 export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js';
 export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js';
 export { WebGLRenderer } from './renderers/WebGLRenderer.js';
 export { WebGLRenderer } from './renderers/WebGLRenderer.js';
-export { WebGL1Renderer } from './renderers/WebGL1Renderer.js';
 export { ShaderLib } from './renderers/shaders/ShaderLib.js';
 export { ShaderLib } from './renderers/shaders/ShaderLib.js';
 export { UniformsLib } from './renderers/shaders/UniformsLib.js';
 export { UniformsLib } from './renderers/shaders/UniformsLib.js';
 export { UniformsUtils } from './renderers/shaders/UniformsUtils.js';
 export { UniformsUtils } from './renderers/shaders/UniformsUtils.js';

+ 0 - 2
src/constants.js

@@ -207,7 +207,5 @@ export const StreamCopyUsage = 35042;
 export const GLSL1 = '100';
 export const GLSL1 = '100';
 export const GLSL3 = '300 es';
 export const GLSL3 = '300 es';
 
 
-export const _SRGBAFormat = 1035; // fallback for WebGL 1
-
 export const WebGLCoordinateSystem = 2000;
 export const WebGLCoordinateSystem = 2000;
 export const WebGPUCoordinateSystem = 2001;
 export const WebGPUCoordinateSystem = 2001;

+ 0 - 4
src/materials/ShaderMaterial.js

@@ -33,10 +33,6 @@ class ShaderMaterial extends Material {
 		this.forceSinglePass = true;
 		this.forceSinglePass = true;
 
 
 		this.extensions = {
 		this.extensions = {
-			derivatives: false, // set to use derivatives
-			fragDepth: false, // set to use fragment depth values
-			drawBuffers: false, // set to use draw buffers
-			shaderTextureLOD: false, // set to use shader texture LOD
 			clipCullDistance: false, // set to use vertex shader clipping
 			clipCullDistance: false, // set to use vertex shader clipping
 			multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 			multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 		};
 		};

+ 0 - 7
src/renderers/WebGL1Renderer.js

@@ -1,7 +0,0 @@
-import { WebGLRenderer } from './WebGLRenderer.js';
-
-class WebGL1Renderer extends WebGLRenderer {}
-
-WebGL1Renderer.prototype.isWebGL1Renderer = true;
-
-export { WebGL1Renderer };

+ 33 - 93
src/renderers/WebGLRenderer.js

@@ -29,7 +29,6 @@ import { Matrix4 } from '../math/Matrix4.js';
 import { Vector2 } from '../math/Vector2.js';
 import { Vector2 } from '../math/Vector2.js';
 import { Vector3 } from '../math/Vector3.js';
 import { Vector3 } from '../math/Vector3.js';
 import { Vector4 } from '../math/Vector4.js';
 import { Vector4 } from '../math/Vector4.js';
-import { floorPowerOfTwo } from '../math/MathUtils.js';
 import { WebGLAnimation } from './webgl/WebGLAnimation.js';
 import { WebGLAnimation } from './webgl/WebGLAnimation.js';
 import { WebGLAttributes } from './webgl/WebGLAttributes.js';
 import { WebGLAttributes } from './webgl/WebGLAttributes.js';
 import { WebGLBackground } from './webgl/WebGLBackground.js';
 import { WebGLBackground } from './webgl/WebGLBackground.js';
@@ -84,6 +83,12 @@ class WebGLRenderer {
 
 
 		if ( context !== null ) {
 		if ( context !== null ) {
 
 
+			if ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {
+
+				throw new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );
+
+			}
+
 			_alpha = context.getContextAttributes().alpha;
 			_alpha = context.getContextAttributes().alpha;
 
 
 		} else {
 		} else {
@@ -219,15 +224,10 @@ class WebGLRenderer {
 
 
 		let _gl = context;
 		let _gl = context;
 
 
-		function getContext( contextNames, contextAttributes ) {
-
-			for ( let i = 0; i < contextNames.length; i ++ ) {
-
-				const contextName = contextNames[ i ];
-				const context = canvas.getContext( contextName, contextAttributes );
-				if ( context !== null ) return context;
+		function getContext( contextName, contextAttributes ) {
 
 
-			}
+			const context = canvas.getContext( contextName, contextAttributes );
+			if ( context !== null ) return context;
 
 
 			return null;
 			return null;
 
 
@@ -256,19 +256,13 @@ class WebGLRenderer {
 
 
 			if ( _gl === null ) {
 			if ( _gl === null ) {
 
 
-				const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];
-
-				if ( _this.isWebGL1Renderer === true ) {
-
-					contextNames.shift();
+				const contextName = 'webgl2';
 
 
-				}
-
-				_gl = getContext( contextNames, contextAttributes );
+				_gl = getContext( contextName, contextAttributes );
 
 
 				if ( _gl === null ) {
 				if ( _gl === null ) {
 
 
-					if ( getContext( contextNames ) ) {
+					if ( getContext( contextName ) ) {
 
 
 						throw new Error( 'Error creating WebGL context with your selected attributes.' );
 						throw new Error( 'Error creating WebGL context with your selected attributes.' );
 
 
@@ -282,24 +276,6 @@ class WebGLRenderer {
 
 
 			}
 			}
 
 
-			if ( typeof WebGLRenderingContext !== 'undefined' && _gl instanceof WebGLRenderingContext ) { // @deprecated, r153
-
-				console.warn( 'THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163.' );
-
-			}
-
-			// Some experimental-webgl implementations do not have getShaderPrecisionFormat
-
-			if ( _gl.getShaderPrecisionFormat === undefined ) {
-
-				_gl.getShaderPrecisionFormat = function () {
-
-					return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };
-
-				};
-
-			}
-
 		} catch ( error ) {
 		} catch ( error ) {
 
 
 			console.error( 'THREE.WebGLRenderer: ' + error.message );
 			console.error( 'THREE.WebGLRenderer: ' + error.message );
@@ -318,22 +294,21 @@ class WebGLRenderer {
 		function initGLContext() {
 		function initGLContext() {
 
 
 			extensions = new WebGLExtensions( _gl );
 			extensions = new WebGLExtensions( _gl );
+			extensions.init();
 
 
 			capabilities = new WebGLCapabilities( _gl, extensions, parameters );
 			capabilities = new WebGLCapabilities( _gl, extensions, parameters );
 
 
-			extensions.init( capabilities );
-
-			utils = new WebGLUtils( _gl, extensions, capabilities );
+			utils = new WebGLUtils( _gl, extensions );
 
 
-			state = new WebGLState( _gl, extensions, capabilities );
+			state = new WebGLState( _gl );
 
 
 			info = new WebGLInfo( _gl );
 			info = new WebGLInfo( _gl );
 			properties = new WebGLProperties();
 			properties = new WebGLProperties();
 			textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
 			textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
 			cubemaps = new WebGLCubeMaps( _this );
 			cubemaps = new WebGLCubeMaps( _this );
 			cubeuvmaps = new WebGLCubeUVMaps( _this );
 			cubeuvmaps = new WebGLCubeUVMaps( _this );
-			attributes = new WebGLAttributes( _gl, capabilities );
-			bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );
+			attributes = new WebGLAttributes( _gl );
+			bindingStates = new WebGLBindingStates( _gl, attributes );
 			geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
 			geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
 			objects = new WebGLObjects( _gl, geometries, attributes, info );
 			objects = new WebGLObjects( _gl, geometries, attributes, info );
 			morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
 			morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
@@ -341,13 +316,13 @@ class WebGLRenderer {
 			programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
 			programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
 			materials = new WebGLMaterials( _this, properties );
 			materials = new WebGLMaterials( _this, properties );
 			renderLists = new WebGLRenderLists();
 			renderLists = new WebGLRenderLists();
-			renderStates = new WebGLRenderStates( extensions, capabilities );
+			renderStates = new WebGLRenderStates( extensions );
 			background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
 			background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
 			shadowMap = new WebGLShadowMap( _this, objects, capabilities );
 			shadowMap = new WebGLShadowMap( _this, objects, capabilities );
 			uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
 			uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
 
 
-			bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );
-			indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );
+			bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );
+			indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );
 
 
 			info.programs = programCache.programs;
 			info.programs = programCache.programs;
 
 
@@ -1437,15 +1412,13 @@ class WebGLRenderer {
 
 
 			}
 			}
 
 
-			const isWebGL2 = capabilities.isWebGL2;
-
 			if ( _transmissionRenderTarget === null ) {
 			if ( _transmissionRenderTarget === null ) {
 
 
 				_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
 				_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
 					generateMipmaps: true,
 					generateMipmaps: true,
 					type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
 					type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
 					minFilter: LinearMipmapLinearFilter,
 					minFilter: LinearMipmapLinearFilter,
-					samples: ( isWebGL2 ) ? 4 : 0
+					samples: 4
 				} );
 				} );
 
 
 				// debug
 				// debug
@@ -1461,16 +1434,7 @@ class WebGLRenderer {
 			}
 			}
 
 
 			_this.getDrawingBufferSize( _vector2 );
 			_this.getDrawingBufferSize( _vector2 );
-
-			if ( isWebGL2 ) {
-
-				_transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
-
-			} else {
-
-				_transmissionRenderTarget.setSize( floorPowerOfTwo( _vector2.x ), floorPowerOfTwo( _vector2.y ) );
-
-			}
+			_transmissionRenderTarget.setSize( _vector2.x, _vector2.y );
 
 
 			//
 			//
 
 
@@ -1882,7 +1846,7 @@ class WebGLRenderer {
 
 
 					needsProgramChange = true;
 					needsProgramChange = true;
 
 
-				} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {
+				} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
 
 
 					needsProgramChange = true;
 					needsProgramChange = true;
 
 
@@ -1991,17 +1955,9 @@ class WebGLRenderer {
 
 
 				if ( skeleton ) {
 				if ( skeleton ) {
 
 
-					if ( capabilities.floatVertexTextures ) {
-
-						if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
-
-						p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
-
-					} else {
-
-						console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );
+					if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
 
 
-					}
+					p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
 
 
 				}
 				}
 
 
@@ -2016,7 +1972,7 @@ class WebGLRenderer {
 
 
 			const morphAttributes = geometry.morphAttributes;
 			const morphAttributes = geometry.morphAttributes;
 
 
-			if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {
+			if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {
 
 
 				morphtargets.update( object, geometry, program );
 				morphtargets.update( object, geometry, program );
 
 
@@ -2099,18 +2055,10 @@ class WebGLRenderer {
 
 
 				for ( let i = 0, l = groups.length; i < l; i ++ ) {
 				for ( let i = 0, l = groups.length; i < l; i ++ ) {
 
 
-					if ( capabilities.isWebGL2 ) {
-
-						const group = groups[ i ];
-
-						uniformsGroups.update( group, program );
-						uniformsGroups.bind( group, program );
-
-					} else {
-
-						console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );
+					const group = groups[ i ];
 
 
-					}
+					uniformsGroups.update( group, program );
+					uniformsGroups.bind( group, program );
 
 
 				}
 				}
 
 
@@ -2253,7 +2201,7 @@ class WebGLRenderer {
 
 
 					isCube = true;
 					isCube = true;
 
 
-				} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
+				} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
 
 
 					framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
 					framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
 
 
@@ -2285,7 +2233,7 @@ class WebGLRenderer {
 
 
 			const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
 			const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
 
 
-			if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {
+			if ( framebufferBound && useDefaultFramebuffer ) {
 
 
 				state.drawBuffers( renderTarget, framebuffer );
 				state.drawBuffers( renderTarget, framebuffer );
 
 
@@ -2346,11 +2294,10 @@ class WebGLRenderer {
 
 
 					}
 					}
 
 
-					const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );
+					const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( extensions.has( 'EXT_color_buffer_float' ) ) );
 
 
 					if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
 					if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
-						! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox
-						! halfFloatSupportedByExt ) {
+						textureType !== FloatType && ! halfFloatSupportedByExt ) {
 
 
 						console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
 						console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
 						return;
 						return;
@@ -2434,13 +2381,6 @@ class WebGLRenderer {
 
 
 		this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {
 		this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {
 
 
-			if ( _this.isWebGL1Renderer ) {
-
-				console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );
-				return;
-
-			}
-
 			const width = Math.round( sourceBox.max.x - sourceBox.min.x );
 			const width = Math.round( sourceBox.max.x - sourceBox.min.x );
 			const height = Math.round( sourceBox.max.y - sourceBox.min.y );
 			const height = Math.round( sourceBox.max.y - sourceBox.min.y );
 			const depth = sourceBox.max.z - sourceBox.min.z + 1;
 			const depth = sourceBox.max.z - sourceBox.min.z + 1;

+ 1 - 1
src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js

@@ -1,5 +1,5 @@
 export default /* glsl */`
 export default /* glsl */`
-#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
+#if defined( USE_LOGDEPTHBUF )
 
 
 	// Doing a strict comparison with == 1.0 can cause noise artifacts
 	// Doing a strict comparison with == 1.0 can cause noise artifacts
 	// on some platforms. See issue #17623.
 	// on some platforms. See issue #17623.

+ 1 - 1
src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js

@@ -1,5 +1,5 @@
 export default /* glsl */`
 export default /* glsl */`
-#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
+#if defined( USE_LOGDEPTHBUF )
 
 
 	uniform float logDepthBufFC;
 	uniform float logDepthBufFC;
 	varying float vFragDepth;
 	varying float vFragDepth;

+ 2 - 10
src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js

@@ -1,16 +1,8 @@
 export default /* glsl */`
 export default /* glsl */`
 #ifdef USE_LOGDEPTHBUF
 #ifdef USE_LOGDEPTHBUF
 
 
-	#ifdef USE_LOGDEPTHBUF_EXT
-
-		varying float vFragDepth;
-		varying float vIsPerspective;
-
-	#else
-
-		uniform float logDepthBufFC;
-
-	#endif
+	varying float vFragDepth;
+	varying float vIsPerspective;
 
 
 #endif
 #endif
 `;
 `;

+ 2 - 16
src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js

@@ -1,22 +1,8 @@
 export default /* glsl */`
 export default /* glsl */`
 #ifdef USE_LOGDEPTHBUF
 #ifdef USE_LOGDEPTHBUF
 
 
-	#ifdef USE_LOGDEPTHBUF_EXT
-
-		vFragDepth = 1.0 + gl_Position.w;
-		vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
-
-	#else
-
-		if ( isPerspectiveMatrix( projectionMatrix ) ) {
-
-			gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;
-
-			gl_Position.z *= gl_Position.w;
-
-		}
-
-	#endif
+	vFragDepth = 1.0 + gl_Position.w;
+	vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
 
 
 #endif
 #endif
 `;
 `;

+ 6 - 33
src/renderers/webgl/WebGLAttributes.js

@@ -1,6 +1,4 @@
-function WebGLAttributes( gl, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLAttributes( gl ) {
 
 
 	const buffers = new WeakMap();
 	const buffers = new WeakMap();
 
 
@@ -27,15 +25,7 @@ function WebGLAttributes( gl, capabilities ) {
 
 
 			if ( attribute.isFloat16BufferAttribute ) {
 			if ( attribute.isFloat16BufferAttribute ) {
 
 
-				if ( isWebGL2 ) {
-
-					type = gl.HALF_FLOAT;
-
-				} else {
-
-					throw new Error( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );
-
-				}
+				type = gl.HALF_FLOAT;
 
 
 			} else {
 			} else {
 
 
@@ -103,17 +93,9 @@ function WebGLAttributes( gl, capabilities ) {
 			for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
 			for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
 
 
 				const range = updateRanges[ i ];
 				const range = updateRanges[ i ];
-				if ( isWebGL2 ) {
-
-					gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
-						array, range.start, range.count );
-
-				} else {
 
 
-					gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
-						array.subarray( range.start, range.start + range.count ) );
-
-				}
+				gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
+					array, range.start, range.count );
 
 
 			}
 			}
 
 
@@ -124,17 +106,8 @@ function WebGLAttributes( gl, capabilities ) {
 		// @deprecated, r159
 		// @deprecated, r159
 		if ( updateRange.count !== - 1 ) {
 		if ( updateRange.count !== - 1 ) {
 
 
-			if ( isWebGL2 ) {
-
-				gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,
-					array, updateRange.offset, updateRange.count );
-
-			} else {
-
-				gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,
-					array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );
-
-			}
+			gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,
+				array, updateRange.offset, updateRange.count );
 
 
 			updateRange.count = - 1; // reset range
 			updateRange.count = - 1; // reset range
 
 

+ 14 - 51
src/renderers/webgl/WebGLBindingStates.js

@@ -1,12 +1,9 @@
 import { IntType } from '../../constants.js';
 import { IntType } from '../../constants.js';
 
 
-function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
+function WebGLBindingStates( gl, attributes ) {
 
 
 	const maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );
 	const maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );
 
 
-	const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );
-	const vaoAvailable = capabilities.isWebGL2 || extension !== null;
-
 	const bindingStates = {};
 	const bindingStates = {};
 
 
 	const defaultState = createBindingState( null );
 	const defaultState = createBindingState( null );
@@ -17,38 +14,18 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 
 		let updateBuffers = false;
 		let updateBuffers = false;
 
 
-		if ( vaoAvailable ) {
-
-			const state = getBindingState( geometry, program, material );
-
-			if ( currentState !== state ) {
-
-				currentState = state;
-				bindVertexArrayObject( currentState.object );
-
-			}
-
-			updateBuffers = needsUpdate( object, geometry, program, index );
-
-			if ( updateBuffers ) saveCache( object, geometry, program, index );
-
-		} else {
-
-			const wireframe = ( material.wireframe === true );
+		const state = getBindingState( geometry, program, material );
 
 
-			if ( currentState.geometry !== geometry.id ||
-				currentState.program !== program.id ||
-				currentState.wireframe !== wireframe ) {
+		if ( currentState !== state ) {
 
 
-				currentState.geometry = geometry.id;
-				currentState.program = program.id;
-				currentState.wireframe = wireframe;
+			currentState = state;
+			bindVertexArrayObject( currentState.object );
 
 
-				updateBuffers = true;
+		}
 
 
-			}
+		updateBuffers = needsUpdate( object, geometry, program, index );
 
 
-		}
+		if ( updateBuffers ) saveCache( object, geometry, program, index );
 
 
 		if ( index !== null ) {
 		if ( index !== null ) {
 
 
@@ -74,25 +51,19 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 
 	function createVertexArrayObject() {
 	function createVertexArrayObject() {
 
 
-		if ( capabilities.isWebGL2 ) return gl.createVertexArray();
-
-		return extension.createVertexArrayOES();
+		return gl.createVertexArray();
 
 
 	}
 	}
 
 
 	function bindVertexArrayObject( vao ) {
 	function bindVertexArrayObject( vao ) {
 
 
-		if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );
-
-		return extension.bindVertexArrayOES( vao );
+		return gl.bindVertexArray( vao );
 
 
 	}
 	}
 
 
 	function deleteVertexArrayObject( vao ) {
 	function deleteVertexArrayObject( vao ) {
 
 
-		if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );
-
-		return extension.deleteVertexArrayOES( vao );
+		return gl.deleteVertexArray( vao );
 
 
 	}
 	}
 
 
@@ -290,9 +261,7 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 
 		if ( attributeDivisors[ attribute ] !== meshPerAttribute ) {
 		if ( attributeDivisors[ attribute ] !== meshPerAttribute ) {
 
 
-			const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );
-
-			extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
+			gl.vertexAttribDivisor( attribute, meshPerAttribute );
 			attributeDivisors[ attribute ] = meshPerAttribute;
 			attributeDivisors[ attribute ] = meshPerAttribute;
 
 
 		}
 		}
@@ -333,12 +302,6 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 
 	function setupVertexAttributes( object, material, program, geometry ) {
 	function setupVertexAttributes( object, material, program, geometry ) {
 
 
-		if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {
-
-			if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;
-
-		}
-
 		initAttributes();
 		initAttributes();
 
 
 		const geometryAttributes = geometry.attributes;
 		const geometryAttributes = geometry.attributes;
@@ -377,9 +340,9 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 					const type = attribute.type;
 					const type = attribute.type;
 					const bytesPerElement = attribute.bytesPerElement;
 					const bytesPerElement = attribute.bytesPerElement;
 
 
-					// check for integer attributes (WebGL 2 only)
+					// check for integer attributes
 
 
-					const integer = ( capabilities.isWebGL2 === true && ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType ) );
+					const integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );
 
 
 					if ( geometryAttribute.isInterleavedBufferAttribute ) {
 					if ( geometryAttribute.isInterleavedBufferAttribute ) {
 
 

+ 3 - 25
src/renderers/webgl/WebGLBufferRenderer.js

@@ -1,6 +1,4 @@
-function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLBufferRenderer( gl, extensions, info ) {
 
 
 	let mode;
 	let mode;
 
 
@@ -22,28 +20,7 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
 
 
 		if ( primcount === 0 ) return;
 		if ( primcount === 0 ) return;
 
 
-		let extension, methodName;
-
-		if ( isWebGL2 ) {
-
-			extension = gl;
-			methodName = 'drawArraysInstanced';
-
-		} else {
-
-			extension = extensions.get( 'ANGLE_instanced_arrays' );
-			methodName = 'drawArraysInstancedANGLE';
-
-			if ( extension === null ) {
-
-				console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
-				return;
-
-			}
-
-		}
-
-		extension[ methodName ]( mode, start, count, primcount );
+		gl.drawArraysInstanced( mode, start, count, primcount );
 
 
 		info.update( count, mode, primcount );
 		info.update( count, mode, primcount );
 
 
@@ -54,6 +31,7 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
 		if ( drawCount === 0 ) return;
 		if ( drawCount === 0 ) return;
 
 
 		const extension = extensions.get( 'WEBGL_multi_draw' );
 		const extension = extensions.get( 'WEBGL_multi_draw' );
+
 		if ( extension === null ) {
 		if ( extension === null ) {
 
 
 			for ( let i = 0; i < drawCount; i ++ ) {
 			for ( let i = 0; i < drawCount; i ++ ) {

+ 2 - 12
src/renderers/webgl/WebGLCapabilities.js

@@ -52,8 +52,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
 
 
 	}
 	}
 
 
-	const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl.constructor.name === 'WebGL2RenderingContext';
-
 	let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
 	let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
 	const maxPrecision = getMaxPrecision( precision );
 	const maxPrecision = getMaxPrecision( precision );
 
 
@@ -64,8 +62,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
 
 
 	}
 	}
 
 
-	const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );
-
 	const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
 	const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
 
 
 	const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
 	const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
@@ -79,16 +75,12 @@ function WebGLCapabilities( gl, extensions, parameters ) {
 	const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
 	const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
 
 
 	const vertexTextures = maxVertexTextures > 0;
 	const vertexTextures = maxVertexTextures > 0;
-	const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );
-	const floatVertexTextures = vertexTextures && floatFragmentTextures;
 
 
-	const maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0;
+	const maxSamples = gl.getParameter( gl.MAX_SAMPLES );
 
 
 	return {
 	return {
 
 
-		isWebGL2: isWebGL2,
-
-		drawBuffers: drawBuffers,
+		isWebGL2: true, // keeping this for backwards compatibility
 
 
 		getMaxAnisotropy: getMaxAnisotropy,
 		getMaxAnisotropy: getMaxAnisotropy,
 		getMaxPrecision: getMaxPrecision,
 		getMaxPrecision: getMaxPrecision,
@@ -107,8 +99,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
 		maxFragmentUniforms: maxFragmentUniforms,
 		maxFragmentUniforms: maxFragmentUniforms,
 
 
 		vertexTextures: vertexTextures,
 		vertexTextures: vertexTextures,
-		floatFragmentTextures: floatFragmentTextures,
-		floatVertexTextures: floatVertexTextures,
 
 
 		maxSamples: maxSamples
 		maxSamples: maxSamples
 
 

+ 3 - 19
src/renderers/webgl/WebGLExtensions.js

@@ -49,26 +49,10 @@ function WebGLExtensions( gl ) {
 
 
 		},
 		},
 
 
-		init: function ( capabilities ) {
-
-			if ( capabilities.isWebGL2 ) {
-
-				getExtension( 'EXT_color_buffer_float' );
-				getExtension( 'WEBGL_clip_cull_distance' );
-
-			} else {
-
-				getExtension( 'WEBGL_depth_texture' );
-				getExtension( 'OES_texture_float' );
-				getExtension( 'OES_texture_half_float' );
-				getExtension( 'OES_texture_half_float_linear' );
-				getExtension( 'OES_standard_derivatives' );
-				getExtension( 'OES_element_index_uint' );
-				getExtension( 'OES_vertex_array_object' );
-				getExtension( 'ANGLE_instanced_arrays' );
-
-			}
+		init: function () {
 
 
+			getExtension( 'EXT_color_buffer_float' );
+			getExtension( 'WEBGL_clip_cull_distance' );
 			getExtension( 'OES_texture_float_linear' );
 			getExtension( 'OES_texture_float_linear' );
 			getExtension( 'EXT_color_buffer_half_float' );
 			getExtension( 'EXT_color_buffer_half_float' );
 			getExtension( 'WEBGL_multisampled_render_to_texture' );
 			getExtension( 'WEBGL_multisampled_render_to_texture' );

+ 3 - 25
src/renderers/webgl/WebGLIndexedBufferRenderer.js

@@ -1,6 +1,4 @@
-function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLIndexedBufferRenderer( gl, extensions, info ) {
 
 
 	let mode;
 	let mode;
 
 
@@ -31,28 +29,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
 
 
 		if ( primcount === 0 ) return;
 		if ( primcount === 0 ) return;
 
 
-		let extension, methodName;
-
-		if ( isWebGL2 ) {
-
-			extension = gl;
-			methodName = 'drawElementsInstanced';
-
-		} else {
-
-			extension = extensions.get( 'ANGLE_instanced_arrays' );
-			methodName = 'drawElementsInstancedANGLE';
-
-			if ( extension === null ) {
-
-				console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
-				return;
-
-			}
-
-		}
-
-		extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );
+		gl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );
 
 
 		info.update( count, mode, primcount );
 		info.update( count, mode, primcount );
 
 
@@ -63,6 +40,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
 		if ( drawCount === 0 ) return;
 		if ( drawCount === 0 ) return;
 
 
 		const extension = extensions.get( 'WEBGL_multi_draw' );
 		const extension = extensions.get( 'WEBGL_multi_draw' );
+
 		if ( extension === null ) {
 		if ( extension === null ) {
 
 
 			for ( let i = 0; i < drawCount; i ++ ) {
 			for ( let i = 0; i < drawCount; i ++ ) {

+ 6 - 32
src/renderers/webgl/WebGLLights.js

@@ -150,7 +150,7 @@ function shadowCastingAndTexturingLightsFirst( lightA, lightB ) {
 
 
 }
 }
 
 
-function WebGLLights( extensions, capabilities ) {
+function WebGLLights( extensions ) {
 
 
 	const cache = new UniformsCache();
 	const cache = new UniformsCache();
 
 
@@ -399,41 +399,15 @@ function WebGLLights( extensions, capabilities ) {
 
 
 		if ( rectAreaLength > 0 ) {
 		if ( rectAreaLength > 0 ) {
 
 
-			if ( capabilities.isWebGL2 ) {
+			if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
 
 
-				// WebGL 2
-
-				if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
-
-					state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
-					state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
-
-				} else {
-
-					state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
-					state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
-
-				}
+				state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
+				state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
 
 
 			} else {
 			} else {
 
 
-				// WebGL 1
-
-				if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
-
-					state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
-					state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
-
-				} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {
-
-					state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
-					state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
-
-				} else {
-
-					console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );
-
-				}
+				state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
+				state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
 
 
 			}
 			}
 
 

+ 79 - 217
src/renderers/webgl/WebGLMorphtargets.js

@@ -3,296 +3,158 @@ import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
 import { Vector4 } from '../../math/Vector4.js';
 import { Vector4 } from '../../math/Vector4.js';
 import { Vector2 } from '../../math/Vector2.js';
 import { Vector2 } from '../../math/Vector2.js';
 
 
-function numericalSort( a, b ) {
-
-	return a[ 0 ] - b[ 0 ];
-
-}
-
-function absNumericalSort( a, b ) {
-
-	return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
-
-}
-
 function WebGLMorphtargets( gl, capabilities, textures ) {
 function WebGLMorphtargets( gl, capabilities, textures ) {
 
 
-	const influencesList = {};
-	const morphInfluences = new Float32Array( 8 );
 	const morphTextures = new WeakMap();
 	const morphTextures = new WeakMap();
 	const morph = new Vector4();
 	const morph = new Vector4();
 
 
-	const workInfluences = [];
-
-	for ( let i = 0; i < 8; i ++ ) {
-
-		workInfluences[ i ] = [ i, 0 ];
-
-	}
-
 	function update( object, geometry, program ) {
 	function update( object, geometry, program ) {
 
 
 		const objectInfluences = object.morphTargetInfluences;
 		const objectInfluences = object.morphTargetInfluences;
 
 
-		if ( capabilities.isWebGL2 === true ) {
-
-			// instead of using attributes, the WebGL 2 code path encodes morph targets
-			// into an array of data textures. Each layer represents a single morph target.
-
-			const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
-			const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
-
-			let entry = morphTextures.get( geometry );
-
-			if ( entry === undefined || entry.count !== morphTargetsCount ) {
-
-				if ( entry !== undefined ) entry.texture.dispose();
-
-				const hasMorphPosition = geometry.morphAttributes.position !== undefined;
-				const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
-				const hasMorphColors = geometry.morphAttributes.color !== undefined;
-
-				const morphTargets = geometry.morphAttributes.position || [];
-				const morphNormals = geometry.morphAttributes.normal || [];
-				const morphColors = geometry.morphAttributes.color || [];
-
-				let vertexDataCount = 0;
-
-				if ( hasMorphPosition === true ) vertexDataCount = 1;
-				if ( hasMorphNormals === true ) vertexDataCount = 2;
-				if ( hasMorphColors === true ) vertexDataCount = 3;
+		// instead of using attributes, the WebGL 2 code path encodes morph targets
+		// into an array of data textures. Each layer represents a single morph target.
 
 
-				let width = geometry.attributes.position.count * vertexDataCount;
-				let height = 1;
+		const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
+		const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
 
 
-				if ( width > capabilities.maxTextureSize ) {
+		let entry = morphTextures.get( geometry );
 
 
-					height = Math.ceil( width / capabilities.maxTextureSize );
-					width = capabilities.maxTextureSize;
+		if ( entry === undefined || entry.count !== morphTargetsCount ) {
 
 
-				}
-
-				const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
+			if ( entry !== undefined ) entry.texture.dispose();
 
 
-				const texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );
-				texture.type = FloatType;
-				texture.needsUpdate = true;
+			const hasMorphPosition = geometry.morphAttributes.position !== undefined;
+			const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
+			const hasMorphColors = geometry.morphAttributes.color !== undefined;
 
 
-				// fill buffer
+			const morphTargets = geometry.morphAttributes.position || [];
+			const morphNormals = geometry.morphAttributes.normal || [];
+			const morphColors = geometry.morphAttributes.color || [];
 
 
-				const vertexDataStride = vertexDataCount * 4;
+			let vertexDataCount = 0;
 
 
-				for ( let i = 0; i < morphTargetsCount; i ++ ) {
+			if ( hasMorphPosition === true ) vertexDataCount = 1;
+			if ( hasMorphNormals === true ) vertexDataCount = 2;
+			if ( hasMorphColors === true ) vertexDataCount = 3;
 
 
-					const morphTarget = morphTargets[ i ];
-					const morphNormal = morphNormals[ i ];
-					const morphColor = morphColors[ i ];
+			let width = geometry.attributes.position.count * vertexDataCount;
+			let height = 1;
 
 
-					const offset = width * height * 4 * i;
+			if ( width > capabilities.maxTextureSize ) {
 
 
-					for ( let j = 0; j < morphTarget.count; j ++ ) {
+				height = Math.ceil( width / capabilities.maxTextureSize );
+				width = capabilities.maxTextureSize;
 
 
-						const stride = j * vertexDataStride;
+			}
 
 
-						if ( hasMorphPosition === true ) {
+			const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
 
 
-							morph.fromBufferAttribute( morphTarget, j );
+			const texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );
+			texture.type = FloatType;
+			texture.needsUpdate = true;
 
 
-							buffer[ offset + stride + 0 ] = morph.x;
-							buffer[ offset + stride + 1 ] = morph.y;
-							buffer[ offset + stride + 2 ] = morph.z;
-							buffer[ offset + stride + 3 ] = 0;
+			// fill buffer
 
 
-						}
+			const vertexDataStride = vertexDataCount * 4;
 
 
-						if ( hasMorphNormals === true ) {
+			for ( let i = 0; i < morphTargetsCount; i ++ ) {
 
 
-							morph.fromBufferAttribute( morphNormal, j );
+				const morphTarget = morphTargets[ i ];
+				const morphNormal = morphNormals[ i ];
+				const morphColor = morphColors[ i ];
 
 
-							buffer[ offset + stride + 4 ] = morph.x;
-							buffer[ offset + stride + 5 ] = morph.y;
-							buffer[ offset + stride + 6 ] = morph.z;
-							buffer[ offset + stride + 7 ] = 0;
+				const offset = width * height * 4 * i;
 
 
-						}
+				for ( let j = 0; j < morphTarget.count; j ++ ) {
 
 
-						if ( hasMorphColors === true ) {
+					const stride = j * vertexDataStride;
 
 
-							morph.fromBufferAttribute( morphColor, j );
+					if ( hasMorphPosition === true ) {
 
 
-							buffer[ offset + stride + 8 ] = morph.x;
-							buffer[ offset + stride + 9 ] = morph.y;
-							buffer[ offset + stride + 10 ] = morph.z;
-							buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;
+						morph.fromBufferAttribute( morphTarget, j );
 
 
-						}
+						buffer[ offset + stride + 0 ] = morph.x;
+						buffer[ offset + stride + 1 ] = morph.y;
+						buffer[ offset + stride + 2 ] = morph.z;
+						buffer[ offset + stride + 3 ] = 0;
 
 
 					}
 					}
 
 
-				}
-
-				entry = {
-					count: morphTargetsCount,
-					texture: texture,
-					size: new Vector2( width, height )
-				};
-
-				morphTextures.set( geometry, entry );
-
-				function disposeTexture() {
-
-					texture.dispose();
-
-					morphTextures.delete( geometry );
-
-					geometry.removeEventListener( 'dispose', disposeTexture );
-
-				}
-
-				geometry.addEventListener( 'dispose', disposeTexture );
+					if ( hasMorphNormals === true ) {
 
 
-			}
+						morph.fromBufferAttribute( morphNormal, j );
 
 
-			//
-			if ( object.isInstancedMesh === true && object.morphTexture !== null ) {
+						buffer[ offset + stride + 4 ] = morph.x;
+						buffer[ offset + stride + 5 ] = morph.y;
+						buffer[ offset + stride + 6 ] = morph.z;
+						buffer[ offset + stride + 7 ] = 0;
 
 
-				program.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );
+					}
 
 
-			} else {
+					if ( hasMorphColors === true ) {
 
 
-				let morphInfluencesSum = 0;
+						morph.fromBufferAttribute( morphColor, j );
 
 
-				for ( let i = 0; i < objectInfluences.length; i ++ ) {
+						buffer[ offset + stride + 8 ] = morph.x;
+						buffer[ offset + stride + 9 ] = morph.y;
+						buffer[ offset + stride + 10 ] = morph.z;
+						buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;
 
 
-					morphInfluencesSum += objectInfluences[ i ];
+					}
 
 
 				}
 				}
 
 
-				const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
-
-
-				program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
-				program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
-
 			}
 			}
 
 
-			program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
-			program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
-
-		} else {
-
-			// When object doesn't have morph target influences defined, we treat it as a 0-length array
-			// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences
+			entry = {
+				count: morphTargetsCount,
+				texture: texture,
+				size: new Vector2( width, height )
+			};
 
 
-			const length = objectInfluences === undefined ? 0 : objectInfluences.length;
+			morphTextures.set( geometry, entry );
 
 
-			let influences = influencesList[ geometry.id ];
+			function disposeTexture() {
 
 
-			if ( influences === undefined || influences.length !== length ) {
+				texture.dispose();
 
 
-				// initialise list
+				morphTextures.delete( geometry );
 
 
-				influences = [];
-
-				for ( let i = 0; i < length; i ++ ) {
-
-					influences[ i ] = [ i, 0 ];
-
-				}
-
-				influencesList[ geometry.id ] = influences;
-
-			}
-
-			// Collect influences
-
-			for ( let i = 0; i < length; i ++ ) {
-
-				const influence = influences[ i ];
-
-				influence[ 0 ] = i;
-				influence[ 1 ] = objectInfluences[ i ];
+				geometry.removeEventListener( 'dispose', disposeTexture );
 
 
 			}
 			}
 
 
-			influences.sort( absNumericalSort );
+			geometry.addEventListener( 'dispose', disposeTexture );
 
 
-			for ( let i = 0; i < 8; i ++ ) {
-
-				if ( i < length && influences[ i ][ 1 ] ) {
-
-					workInfluences[ i ][ 0 ] = influences[ i ][ 0 ];
-					workInfluences[ i ][ 1 ] = influences[ i ][ 1 ];
-
-				} else {
-
-					workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;
-					workInfluences[ i ][ 1 ] = 0;
-
-				}
+		}
 
 
-			}
+		//
+		if ( object.isInstancedMesh === true && object.morphTexture !== null ) {
 
 
-			workInfluences.sort( numericalSort );
+			program.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );
 
 
-			const morphTargets = geometry.morphAttributes.position;
-			const morphNormals = geometry.morphAttributes.normal;
+		} else {
 
 
 			let morphInfluencesSum = 0;
 			let morphInfluencesSum = 0;
 
 
-			for ( let i = 0; i < 8; i ++ ) {
-
-				const influence = workInfluences[ i ];
-				const index = influence[ 0 ];
-				const value = influence[ 1 ];
-
-				if ( index !== Number.MAX_SAFE_INTEGER && value ) {
+			for ( let i = 0; i < objectInfluences.length; i ++ ) {
 
 
-					if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {
-
-						geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );
-
-					}
-
-					if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {
-
-						geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );
-
-					}
-
-					morphInfluences[ i ] = value;
-					morphInfluencesSum += value;
-
-				} else {
-
-					if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {
-
-						geometry.deleteAttribute( 'morphTarget' + i );
-
-					}
-
-					if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {
-
-						geometry.deleteAttribute( 'morphNormal' + i );
-
-					}
-
-					morphInfluences[ i ] = 0;
-
-				}
+				morphInfluencesSum += objectInfluences[ i ];
 
 
 			}
 			}
 
 
-			// GLSL shader uses formula baseinfluence * base + sum(target * influence)
-			// This allows us to switch between absolute morphs and relative morphs without changing shader code
-			// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)
 			const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
 			const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
 
 
+
 			program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
 			program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
-			program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );
+			program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
 
 
 		}
 		}
 
 
+		program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
+		program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
+
 	}
 	}
 
 
 	return {
 	return {

+ 18 - 45
src/renderers/webgl/WebGLProgram.js

@@ -142,19 +142,6 @@ function getToneMappingFunction( functionName, toneMapping ) {
 
 
 }
 }
 
 
-function generateExtensions( parameters ) {
-
-	const chunks = [
-		( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.alphaToCoverage || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
-		( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
-		( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
-		( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
-	];
-
-	return chunks.filter( filterEmptyLine ).join( '\n' );
-
-}
-
 function generateVertexExtensions( parameters ) {
 function generateVertexExtensions( parameters ) {
 
 
 	const chunks = [
 	const chunks = [
@@ -322,27 +309,21 @@ function generatePrecision( parameters ) {
 	precision ${parameters.precision} int;
 	precision ${parameters.precision} int;
 	precision ${parameters.precision} sampler2D;
 	precision ${parameters.precision} sampler2D;
 	precision ${parameters.precision} samplerCube;
 	precision ${parameters.precision} samplerCube;
+	precision ${parameters.precision} sampler3D;
+	precision ${parameters.precision} sampler2DArray;
+	precision ${parameters.precision} sampler2DShadow;
+	precision ${parameters.precision} samplerCubeShadow;
+	precision ${parameters.precision} sampler2DArrayShadow;
+	precision ${parameters.precision} isampler2D;
+	precision ${parameters.precision} isampler3D;
+	precision ${parameters.precision} isamplerCube;
+	precision ${parameters.precision} isampler2DArray;
+	precision ${parameters.precision} usampler2D;
+	precision ${parameters.precision} usampler3D;
+	precision ${parameters.precision} usamplerCube;
+	precision ${parameters.precision} usampler2DArray;
 	`;
 	`;
 
 
-	if ( parameters.isWebGL2 ) {
-
-		precisionstring += `precision ${parameters.precision} sampler3D;
-		precision ${parameters.precision} sampler2DArray;
-		precision ${parameters.precision} sampler2DShadow;
-		precision ${parameters.precision} samplerCubeShadow;
-		precision ${parameters.precision} sampler2DArrayShadow;
-		precision ${parameters.precision} isampler2D;
-		precision ${parameters.precision} isampler3D;
-		precision ${parameters.precision} isamplerCube;
-		precision ${parameters.precision} isampler2DArray;
-		precision ${parameters.precision} usampler2D;
-		precision ${parameters.precision} usampler3D;
-		precision ${parameters.precision} usamplerCube;
-		precision ${parameters.precision} usampler2DArray;
-		`;
-
-	}
-
 	if ( parameters.precision === 'highp' ) {
 	if ( parameters.precision === 'highp' ) {
 
 
 		precisionstring += '\n#define HIGH_PRECISION';
 		precisionstring += '\n#define HIGH_PRECISION';
@@ -491,8 +472,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
 	const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
 	const envMapCubeUVSize = generateCubeUVSize( parameters );
 	const envMapCubeUVSize = generateCubeUVSize( parameters );
 
 
-	const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
-
 	const customVertexExtensions = generateVertexExtensions( parameters );
 	const customVertexExtensions = generateVertexExtensions( parameters );
 
 
 	const customDefines = generateDefines( defines );
 	const customDefines = generateDefines( defines );
@@ -521,8 +500,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 
 		prefixFragment = [
 		prefixFragment = [
 
 
-			customExtensions,
-
 			'#define SHADER_TYPE ' + parameters.shaderType,
 			'#define SHADER_TYPE ' + parameters.shaderType,
 			'#define SHADER_NAME ' + parameters.shaderName,
 			'#define SHADER_NAME ' + parameters.shaderName,
 
 
@@ -644,10 +621,10 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 
 			parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
 			parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
 			parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
 			parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
-			( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',
-			( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',
-			( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
-			( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
+			( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',
+			( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE' : '',
+			( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
+			( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
 			parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
 			parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
 			parameters.flipSided ? '#define FLIP_SIDED' : '',
 			parameters.flipSided ? '#define FLIP_SIDED' : '',
 
 
@@ -661,7 +638,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 			parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
 			parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
 
 
 			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
 			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
-			( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
 
 
 			'uniform mat4 modelMatrix;',
 			'uniform mat4 modelMatrix;',
 			'uniform mat4 modelViewMatrix;',
 			'uniform mat4 modelViewMatrix;',
@@ -765,8 +741,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 
 		prefixFragment = [
 		prefixFragment = [
 
 
-			customExtensions,
-
 			generatePrecision( parameters ),
 			generatePrecision( parameters ),
 
 
 			'#define SHADER_TYPE ' + parameters.shaderType,
 			'#define SHADER_TYPE ' + parameters.shaderType,
@@ -854,7 +828,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 			parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
 			parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
 
 
 			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
 			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
-			( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
 
 
 			'uniform mat4 viewMatrix;',
 			'uniform mat4 viewMatrix;',
 			'uniform vec3 cameraPosition;',
 			'uniform vec3 cameraPosition;',
@@ -889,7 +862,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	vertexShader = unrollLoops( vertexShader );
 	vertexShader = unrollLoops( vertexShader );
 	fragmentShader = unrollLoops( fragmentShader );
 	fragmentShader = unrollLoops( fragmentShader );
 
 
-	if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {
+	if ( parameters.isRawShaderMaterial !== true ) {
 
 
 		// GLSL 3.0 conversion for built-in materials and ShaderMaterial
 		// GLSL 3.0 conversion for built-in materials and ShaderMaterial
 
 

+ 20 - 32
src/renderers/webgl/WebGLPrograms.js

@@ -13,7 +13,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 	const _activeChannels = new Set();
 	const _activeChannels = new Set();
 	const programs = [];
 	const programs = [];
 
 
-	const IS_WEBGL2 = capabilities.isWebGL2;
 	const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
 	const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
 	const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
 	const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
 
 
@@ -175,8 +174,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 
 
 		const parameters = {
 		const parameters = {
 
 
-			isWebGL2: IS_WEBGL2,
-
 			shaderID: shaderID,
 			shaderID: shaderID,
 			shaderType: material.type,
 			shaderType: material.type,
 			shaderName: material.name,
 			shaderName: material.name,
@@ -350,16 +347,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 
 
 			index0AttributeName: material.index0AttributeName,
 			index0AttributeName: material.index0AttributeName,
 
 
-			extensionDerivatives: HAS_EXTENSIONS && material.extensions.derivatives === true,
-			extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
-			extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
-			extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
 			extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
 			extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
 			extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
 			extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
 
 
-			rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
-			rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
-			rendererExtensionShaderTextureLod: IS_WEBGL2 || extensions.has( 'EXT_shader_texture_lod' ),
 			rendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),
 			rendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),
 
 
 			customProgramCacheKey: material.customProgramCacheKey()
 			customProgramCacheKey: material.customProgramCacheKey()
@@ -475,48 +465,46 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 
 
 		_programLayers.disableAll();
 		_programLayers.disableAll();
 
 
-		if ( parameters.isWebGL2 )
-			_programLayers.enable( 0 );
 		if ( parameters.supportsVertexTextures )
 		if ( parameters.supportsVertexTextures )
-			_programLayers.enable( 1 );
+			_programLayers.enable( 0 );
 		if ( parameters.instancing )
 		if ( parameters.instancing )
-			_programLayers.enable( 2 );
+			_programLayers.enable( 1 );
 		if ( parameters.instancingColor )
 		if ( parameters.instancingColor )
-			_programLayers.enable( 3 );
+			_programLayers.enable( 2 );
 		if ( parameters.instancingMorph )
 		if ( parameters.instancingMorph )
-			_programLayers.enable( 4 );
+			_programLayers.enable( 3 );
 		if ( parameters.matcap )
 		if ( parameters.matcap )
-			_programLayers.enable( 5 );
+			_programLayers.enable( 4 );
 		if ( parameters.envMap )
 		if ( parameters.envMap )
-			_programLayers.enable( 6 );
+			_programLayers.enable( 5 );
 		if ( parameters.normalMapObjectSpace )
 		if ( parameters.normalMapObjectSpace )
-			_programLayers.enable( 7 );
+			_programLayers.enable( 6 );
 		if ( parameters.normalMapTangentSpace )
 		if ( parameters.normalMapTangentSpace )
-			_programLayers.enable( 8 );
+			_programLayers.enable( 7 );
 		if ( parameters.clearcoat )
 		if ( parameters.clearcoat )
-			_programLayers.enable( 9 );
+			_programLayers.enable( 8 );
 		if ( parameters.iridescence )
 		if ( parameters.iridescence )
-			_programLayers.enable( 10 );
+			_programLayers.enable( 9 );
 		if ( parameters.alphaTest )
 		if ( parameters.alphaTest )
-			_programLayers.enable( 11 );
+			_programLayers.enable( 10 );
 		if ( parameters.vertexColors )
 		if ( parameters.vertexColors )
-			_programLayers.enable( 12 );
+			_programLayers.enable( 11 );
 		if ( parameters.vertexAlphas )
 		if ( parameters.vertexAlphas )
-			_programLayers.enable( 13 );
+			_programLayers.enable( 12 );
 		if ( parameters.vertexUv1s )
 		if ( parameters.vertexUv1s )
-			_programLayers.enable( 14 );
+			_programLayers.enable( 13 );
 		if ( parameters.vertexUv2s )
 		if ( parameters.vertexUv2s )
-			_programLayers.enable( 15 );
+			_programLayers.enable( 14 );
 		if ( parameters.vertexUv3s )
 		if ( parameters.vertexUv3s )
-			_programLayers.enable( 16 );
+			_programLayers.enable( 15 );
 		if ( parameters.vertexTangents )
 		if ( parameters.vertexTangents )
-			_programLayers.enable( 17 );
+			_programLayers.enable( 16 );
 		if ( parameters.anisotropy )
 		if ( parameters.anisotropy )
-			_programLayers.enable( 18 );
+			_programLayers.enable( 17 );
 		if ( parameters.alphaHash )
 		if ( parameters.alphaHash )
-			_programLayers.enable( 19 );
+			_programLayers.enable( 18 );
 		if ( parameters.batching )
 		if ( parameters.batching )
-			_programLayers.enable( 20 );
+			_programLayers.enable( 19 );
 
 
 		array.push( _programLayers.mask );
 		array.push( _programLayers.mask );
 		_programLayers.disableAll();
 		_programLayers.disableAll();

+ 5 - 5
src/renderers/webgl/WebGLRenderStates.js

@@ -1,8 +1,8 @@
 import { WebGLLights } from './WebGLLights.js';
 import { WebGLLights } from './WebGLLights.js';
 
 
-function WebGLRenderState( extensions, capabilities ) {
+function WebGLRenderState( extensions ) {
 
 
-	const lights = new WebGLLights( extensions, capabilities );
+	const lights = new WebGLLights( extensions );
 
 
 	const lightsArray = [];
 	const lightsArray = [];
 	const shadowsArray = [];
 	const shadowsArray = [];
@@ -57,7 +57,7 @@ function WebGLRenderState( extensions, capabilities ) {
 
 
 }
 }
 
 
-function WebGLRenderStates( extensions, capabilities ) {
+function WebGLRenderStates( extensions ) {
 
 
 	let renderStates = new WeakMap();
 	let renderStates = new WeakMap();
 
 
@@ -68,14 +68,14 @@ function WebGLRenderStates( extensions, capabilities ) {
 
 
 		if ( renderStateArray === undefined ) {
 		if ( renderStateArray === undefined ) {
 
 
-			renderState = new WebGLRenderState( extensions, capabilities );
+			renderState = new WebGLRenderState( extensions );
 			renderStates.set( scene, [ renderState ] );
 			renderStates.set( scene, [ renderState ] );
 
 
 		} else {
 		} else {
 
 
 			if ( renderCallDepth >= renderStateArray.length ) {
 			if ( renderCallDepth >= renderStateArray.length ) {
 
 
-				renderState = new WebGLRenderState( extensions, capabilities );
+				renderState = new WebGLRenderState( extensions );
 				renderStateArray.push( renderState );
 				renderStateArray.push( renderState );
 
 
 			} else {
 			} else {

+ 15 - 59
src/renderers/webgl/WebGLState.js

@@ -2,9 +2,7 @@ import { NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDe
 import { Color } from '../../math/Color.js';
 import { Color } from '../../math/Color.js';
 import { Vector4 } from '../../math/Vector4.js';
 import { Vector4 } from '../../math/Vector4.js';
 
 
-function WebGLState( gl, extensions, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLState( gl ) {
 
 
 	function ColorBuffer() {
 	function ColorBuffer() {
 
 
@@ -376,7 +374,7 @@ function WebGLState( gl, extensions, capabilities ) {
 
 
 		for ( let i = 0; i < count; i ++ ) {
 		for ( let i = 0; i < count; i ++ ) {
 
 
-			if ( isWebGL2 && ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) ) {
+			if ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {
 
 
 				gl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );
 				gl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );
 
 
@@ -395,13 +393,8 @@ function WebGLState( gl, extensions, capabilities ) {
 	const emptyTextures = {};
 	const emptyTextures = {};
 	emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );
 	emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );
 	emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );
 	emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );
-
-	if ( isWebGL2 ) {
-
-		emptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );
-		emptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );
-
-	}
+	emptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );
+	emptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );
 
 
 	// init
 	// init
 
 
@@ -450,21 +443,17 @@ function WebGLState( gl, extensions, capabilities ) {
 
 
 			currentBoundFramebuffers[ target ] = framebuffer;
 			currentBoundFramebuffers[ target ] = framebuffer;
 
 
-			if ( isWebGL2 ) {
-
-				// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER
+			// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER
 
 
-				if ( target === gl.DRAW_FRAMEBUFFER ) {
+			if ( target === gl.DRAW_FRAMEBUFFER ) {
 
 
-					currentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;
-
-				}
+				currentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;
 
 
-				if ( target === gl.FRAMEBUFFER ) {
+			}
 
 
-					currentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;
+			if ( target === gl.FRAMEBUFFER ) {
 
 
-				}
+				currentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;
 
 
 			}
 			}
 
 
@@ -523,23 +512,10 @@ function WebGLState( gl, extensions, capabilities ) {
 
 
 		if ( needsUpdate ) {
 		if ( needsUpdate ) {
 
 
-			if ( capabilities.isWebGL2 ) {
-
-				gl.drawBuffers( drawBuffers );
-
-			} else if ( extensions.has( 'WEBGL_draw_buffers' ) === true ) {
-
-				extensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );
-
-			} else {
-
-				throw new Error( 'THREE.WebGLState: Usage of gl.drawBuffers() require WebGL2 or WEBGL_draw_buffers extension' );
-
-			}
+			gl.drawBuffers( drawBuffers );
 
 
 		}
 		}
 
 
-
 	}
 	}
 
 
 	function useProgram( program ) {
 	function useProgram( program ) {
@@ -564,23 +540,8 @@ function WebGLState( gl, extensions, capabilities ) {
 		[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT
 		[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT
 	};
 	};
 
 
-	if ( isWebGL2 ) {
-
-		equationToGL[ MinEquation ] = gl.MIN;
-		equationToGL[ MaxEquation ] = gl.MAX;
-
-	} else {
-
-		const extension = extensions.get( 'EXT_blend_minmax' );
-
-		if ( extension !== null ) {
-
-			equationToGL[ MinEquation ] = extension.MIN_EXT;
-			equationToGL[ MaxEquation ] = extension.MAX_EXT;
-
-		}
-
-	}
+	equationToGL[ MinEquation ] = gl.MIN;
+	equationToGL[ MaxEquation ] = gl.MAX;
 
 
 	const factorToGL = {
 	const factorToGL = {
 		[ ZeroFactor ]: gl.ZERO,
 		[ ZeroFactor ]: gl.ZERO,
@@ -1204,13 +1165,8 @@ function WebGLState( gl, extensions, capabilities ) {
 		gl.activeTexture( gl.TEXTURE0 );
 		gl.activeTexture( gl.TEXTURE0 );
 
 
 		gl.bindFramebuffer( gl.FRAMEBUFFER, null );
 		gl.bindFramebuffer( gl.FRAMEBUFFER, null );
-
-		if ( isWebGL2 === true ) {
-
-			gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
-			gl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
-
-		}
+		gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
+		gl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
 
 
 		gl.useProgram( null );
 		gl.useProgram( null );
 
 

+ 65 - 236
src/renderers/webgl/WebGLTextures.js

@@ -1,13 +1,10 @@
-import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, RGB_ETC1_Format, DepthFormat, DepthStencilFormat, UnsignedShortType, UnsignedIntType, UnsignedInt248Type, FloatType, HalfFloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, _SRGBAFormat, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
-import * as MathUtils from '../../math/MathUtils.js';
-import { ImageUtils } from '../../extras/ImageUtils.js';
+import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, RGBAFormat, RGB_ETC1_Format, DepthFormat, DepthStencilFormat, UnsignedIntType, UnsignedInt248Type, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, UnsignedByteType, NoColorSpace, LinearSRGBColorSpace, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, SRGBTransfer, LinearTransfer } from '../../constants.js';
 import { createElementNS } from '../../utils.js';
 import { createElementNS } from '../../utils.js';
 import { ColorManagement } from '../../math/ColorManagement.js';
 import { ColorManagement } from '../../math/ColorManagement.js';
 import { Vector2 } from '../../math/Vector2.js';
 import { Vector2 } from '../../math/Vector2.js';
 
 
 function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
 function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
 
 
-	const isWebGL2 = capabilities.isWebGL2;
 	const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
 	const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
 	const supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
 	const supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
 
 
@@ -45,7 +42,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	}
 	}
 
 
-	function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {
+	function resizeImage( image, needsNewCanvas, maxSize ) {
 
 
 		let scale = 1;
 		let scale = 1;
 
 
@@ -61,7 +58,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		// only perform resize if necessary
 		// only perform resize if necessary
 
 
-		if ( scale < 1 || needsPowerOfTwo === true ) {
+		if ( scale < 1 ) {
 
 
 			// only perform resize for certain image types
 			// only perform resize for certain image types
 
 
@@ -70,10 +67,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||
 				( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||
 				( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {
 				( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {
 
 
-				const floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;
-
-				const width = floor( scale * dimensions.width );
-				const height = floor( scale * dimensions.height );
+				const width = Math.floor( scale * dimensions.width );
+				const height = Math.floor( scale * dimensions.height );
 
 
 				if ( _canvas === undefined ) _canvas = createCanvas( width, height );
 				if ( _canvas === undefined ) _canvas = createCanvas( width, height );
 
 
@@ -109,27 +104,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	}
 	}
 
 
-	function isPowerOfTwo( image ) {
-
-		const dimensions = getDimensions( image );
+	function textureNeedsGenerateMipmaps( texture ) {
 
 
-		return MathUtils.isPowerOfTwo( dimensions.width ) && MathUtils.isPowerOfTwo( dimensions.height );
-
-	}
-
-	function textureNeedsPowerOfTwo( texture ) {
-
-		if ( isWebGL2 ) return false;
-
-		return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||
-			( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );
-
-	}
-
-	function textureNeedsGenerateMipmaps( texture, supportsMips ) {
-
-		return texture.generateMipmaps && supportsMips &&
-			texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;
+		return texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;
 
 
 	}
 	}
 
 
@@ -141,8 +118,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	function getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
 	function getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
 
 
-		if ( isWebGL2 === false ) return glFormat;
-
 		if ( internalFormatName !== null ) {
 		if ( internalFormatName !== null ) {
 
 
 			if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];
 			if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];
@@ -215,9 +190,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	}
 	}
 
 
-	function getMipLevels( texture, image, supportsMips ) {
+	function getMipLevels( texture, image ) {
 
 
-		if ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
+		if ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
 
 
 			return Math.log2( Math.max( image.width, image.height ) ) + 1;
 			return Math.log2( Math.max( image.width, image.height ) ) + 1;
 
 
@@ -241,20 +216,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	}
 	}
 
 
-	// Fallback filters for non-power-of-2 textures
-
-	function filterFallback( f ) {
-
-		if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {
-
-			return _gl.NEAREST;
-
-		}
-
-		return _gl.LINEAR;
-
-	}
-
 	//
 	//
 
 
 	function onTextureDispose( event ) {
 	function onTextureDispose( event ) {
@@ -569,7 +530,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 		[ NotEqualCompare ]: _gl.NOTEQUAL
 		[ NotEqualCompare ]: _gl.NOTEQUAL
 	};
 	};
 
 
-	function setTextureParameters( textureType, texture, supportsMips ) {
+	function setTextureParameters( textureType, texture ) {
 
 
 		if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&
 		if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&
 			( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||
 			( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||
@@ -579,48 +540,18 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		}
 		}
 
 
-		if ( supportsMips ) {
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
-
-			if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {
-
-				_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );
-
-			}
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );
-			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );
-
-		} else {
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );
-
-			if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {
-
-				_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, _gl.CLAMP_TO_EDGE );
-
-			}
-
-			if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {
-
-				console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );
-
-			}
+		_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
+		_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
 
 
-			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );
-			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );
+		if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {
 
 
-			if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {
-
-				console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );
-
-			}
+			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );
 
 
 		}
 		}
 
 
+		_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );
+		_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );
+
 		if ( texture.compareFunction ) {
 		if ( texture.compareFunction ) {
 
 
 			_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );
 			_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );
@@ -632,8 +563,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			if ( texture.magFilter === NearestFilter ) return;
 			if ( texture.magFilter === NearestFilter ) return;
 			if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;
 			if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;
-			if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2
-			if ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only
+			if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension
 
 
 			if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {
 			if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {
 
 
@@ -754,97 +684,41 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
 			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
 			_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
 			_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
 
 
-			const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;
-			let image = resizeImage( texture.image, needsPowerOfTwo, false, capabilities.maxTextureSize );
+			let image = resizeImage( texture.image, false, capabilities.maxTextureSize );
 			image = verifyColorSpace( texture, image );
 			image = verifyColorSpace( texture, image );
 
 
-			const supportsMips = isPowerOfTwo( image ) || isWebGL2,
-				glFormat = utils.convert( texture.format, texture.colorSpace );
+			const glFormat = utils.convert( texture.format, texture.colorSpace );
 
 
-			let glType = utils.convert( texture.type ),
-				glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
+			const glType = utils.convert( texture.type );
+			let glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
 
 
-			setTextureParameters( textureType, texture, supportsMips );
+			setTextureParameters( textureType, texture );
 
 
 			let mipmap;
 			let mipmap;
 			const mipmaps = texture.mipmaps;
 			const mipmaps = texture.mipmaps;
 
 
-			const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true && glInternalFormat !== RGB_ETC1_Format );
+			const useTexStorage = ( texture.isVideoTexture !== true && glInternalFormat !== RGB_ETC1_Format );
 			const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
 			const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
 			const dataReady = source.dataReady;
 			const dataReady = source.dataReady;
-			const levels = getMipLevels( texture, image, supportsMips );
+			const levels = getMipLevels( texture, image );
 
 
 			if ( texture.isDepthTexture ) {
 			if ( texture.isDepthTexture ) {
 
 
 				// populate depth texture with dummy data
 				// populate depth texture with dummy data
 
 
-				glInternalFormat = _gl.DEPTH_COMPONENT;
-
-				if ( isWebGL2 ) {
-
-					if ( texture.type === FloatType ) {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT32F;
-
-					} else if ( texture.type === UnsignedIntType ) {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT24;
-
-					} else if ( texture.type === UnsignedInt248Type ) {
-
-						glInternalFormat = _gl.DEPTH24_STENCIL8;
+				glInternalFormat = _gl.DEPTH_COMPONENT16;
 
 
-					} else {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D
-
-					}
-
-				} else {
-
-					if ( texture.type === FloatType ) {
-
-						console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );
-
-					}
-
-				}
-
-				// validation checks for WebGL 1
+				if ( texture.type === FloatType ) {
 
 
-				if ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
+					glInternalFormat = _gl.DEPTH_COMPONENT32F;
 
 
-					// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are
-					// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT
-					// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
-					if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {
+				} else if ( texture.type === UnsignedIntType ) {
 
 
-						console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );
+					glInternalFormat = _gl.DEPTH_COMPONENT24;
 
 
-						texture.type = UnsignedIntType;
-						glType = utils.convert( texture.type );
+				} else if ( texture.type === UnsignedInt248Type ) {
 
 
-					}
-
-				}
-
-				if ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
-
-					// Depth stencil textures need the DEPTH_STENCIL internal format
-					// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
-					glInternalFormat = _gl.DEPTH_STENCIL;
-
-					// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are
-					// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.
-					// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
-					if ( texture.type !== UnsignedInt248Type ) {
-
-						console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );
-
-						texture.type = UnsignedInt248Type;
-						glType = utils.convert( texture.type );
-
-					}
+					glInternalFormat = _gl.DEPTH24_STENCIL8;
 
 
 				}
 				}
 
 
@@ -870,7 +744,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				// if there are no manual mipmaps
 				// if there are no manual mipmaps
 				// set 0 level mipmap and then use GL to generate other mipmap levels
 				// set 0 level mipmap and then use GL to generate other mipmap levels
 
 
-				if ( mipmaps.length > 0 && supportsMips ) {
+				if ( mipmaps.length > 0 ) {
 
 
 					if ( useTexStorage && allocateMemory ) {
 					if ( useTexStorage && allocateMemory ) {
 
 
@@ -1117,7 +991,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				// if there are no manual mipmaps
 				// if there are no manual mipmaps
 				// set 0 level mipmap and then use GL to generate other mipmap levels
 				// set 0 level mipmap and then use GL to generate other mipmap levels
 
 
-				if ( mipmaps.length > 0 && supportsMips ) {
+				if ( mipmaps.length > 0 ) {
 
 
 					if ( useTexStorage && allocateMemory ) {
 					if ( useTexStorage && allocateMemory ) {
 
 
@@ -1177,7 +1051,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			}
 			}
 
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 
 				generateMipmap( textureType );
 				generateMipmap( textureType );
 
 
@@ -1226,7 +1100,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 				if ( ! isCompressed && ! isDataTexture ) {
 				if ( ! isCompressed && ! isDataTexture ) {
 
 
-					cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, capabilities.maxCubemapSize );
+					cubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );
 
 
 				} else {
 				} else {
 
 
@@ -1239,17 +1113,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 			}
 			}
 
 
 			const image = cubeImage[ 0 ],
 			const image = cubeImage[ 0 ],
-				supportsMips = isPowerOfTwo( image ) || isWebGL2,
 				glFormat = utils.convert( texture.format, texture.colorSpace ),
 				glFormat = utils.convert( texture.format, texture.colorSpace ),
 				glType = utils.convert( texture.type ),
 				glType = utils.convert( texture.type ),
 				glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
 				glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
 
 
-			const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
+			const useTexStorage = ( texture.isVideoTexture !== true );
 			const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
 			const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
 			const dataReady = source.dataReady;
 			const dataReady = source.dataReady;
-			let levels = getMipLevels( texture, image, supportsMips );
+			let levels = getMipLevels( texture, image );
 
 
-			setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
+			setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );
 
 
 			let mipmaps;
 			let mipmaps;
 
 
@@ -1414,7 +1287,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			}
 			}
 
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 
 				// We assume images for cube map have the same size.
 				// We assume images for cube map have the same size.
 				generateMipmap( _gl.TEXTURE_CUBE_MAP );
 				generateMipmap( _gl.TEXTURE_CUBE_MAP );
@@ -1482,7 +1355,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
 		if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
 
 
-			let glInternalFormat = ( isWebGL2 === true ) ? _gl.DEPTH_COMPONENT24 : _gl.DEPTH_COMPONENT16;
+			let glInternalFormat = _gl.DEPTH_COMPONENT24;
 
 
 			if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
 			if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
 
 
@@ -1713,7 +1586,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
 		const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
 		const isMultipleRenderTargets = ( textures.length > 1 );
 		const isMultipleRenderTargets = ( textures.length > 1 );
-		const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
 
 
 		if ( ! isMultipleRenderTargets ) {
 		if ( ! isMultipleRenderTargets ) {
 
 
@@ -1736,7 +1608,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+				if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
 
 
 					renderTargetProperties.__webglFramebuffer[ i ] = [];
 					renderTargetProperties.__webglFramebuffer[ i ] = [];
 
 
@@ -1756,7 +1628,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		} else {
 		} else {
 
 
-			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+			if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
 
 
 				renderTargetProperties.__webglFramebuffer = [];
 				renderTargetProperties.__webglFramebuffer = [];
 
 
@@ -1774,31 +1646,23 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			if ( isMultipleRenderTargets ) {
 			if ( isMultipleRenderTargets ) {
 
 
-				if ( capabilities.drawBuffers ) {
+				for ( let i = 0, il = textures.length; i < il; i ++ ) {
 
 
-					for ( let i = 0, il = textures.length; i < il; i ++ ) {
+					const attachmentProperties = properties.get( textures[ i ] );
 
 
-						const attachmentProperties = properties.get( textures[ i ] );
+					if ( attachmentProperties.__webglTexture === undefined ) {
 
 
-						if ( attachmentProperties.__webglTexture === undefined ) {
+						attachmentProperties.__webglTexture = _gl.createTexture();
 
 
-							attachmentProperties.__webglTexture = _gl.createTexture();
-
-							info.memory.textures ++;
-
-						}
+						info.memory.textures ++;
 
 
 					}
 					}
 
 
-				} else {
-
-					console.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );
-
 				}
 				}
 
 
 			}
 			}
 
 
-			if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
+			if ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
 
 
 				renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
 				renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
 				renderTargetProperties.__webglColorRenderbuffer = [];
 				renderTargetProperties.__webglColorRenderbuffer = [];
@@ -1842,11 +1706,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 		if ( isCube ) {
 		if ( isCube ) {
 
 
 			state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
 			state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
-			setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
+			setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );
 
 
 			for ( let i = 0; i < 6; i ++ ) {
 			for ( let i = 0; i < 6; i ++ ) {
 
 
-				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+				if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
 
 
 					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
 					for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
 
 
@@ -1862,7 +1726,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			}
 			}
 
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 
 				generateMipmap( _gl.TEXTURE_CUBE_MAP );
 				generateMipmap( _gl.TEXTURE_CUBE_MAP );
 
 
@@ -1878,10 +1742,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				const attachmentProperties = properties.get( attachment );
 				const attachmentProperties = properties.get( attachment );
 
 
 				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
 				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
-				setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
+				setTextureParameters( _gl.TEXTURE_2D, attachment );
 				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
 				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );
 
 
-				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
+				if ( textureNeedsGenerateMipmaps( attachment ) ) {
 
 
 					generateMipmap( _gl.TEXTURE_2D );
 					generateMipmap( _gl.TEXTURE_2D );
 
 
@@ -1897,22 +1761,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
 			if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
 
 
-				if ( isWebGL2 ) {
-
-					glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
-
-				} else {
-
-					console.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );
-
-				}
+				glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
 
 
 			}
 			}
 
 
 			state.bindTexture( glTextureType, textureProperties.__webglTexture );
 			state.bindTexture( glTextureType, textureProperties.__webglTexture );
-			setTextureParameters( glTextureType, texture, supportsMips );
+			setTextureParameters( glTextureType, texture );
 
 
-			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+			if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
 
 
 				for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
 				for ( let level = 0; level < texture.mipmaps.length; level ++ ) {
 
 
@@ -1926,7 +1782,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			}
 			}
 
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 
 				generateMipmap( glTextureType );
 				generateMipmap( glTextureType );
 
 
@@ -1948,15 +1804,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	function updateRenderTargetMipmap( renderTarget ) {
 	function updateRenderTargetMipmap( renderTarget ) {
 
 
-		const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
-
 		const textures = renderTarget.textures;
 		const textures = renderTarget.textures;
 
 
 		for ( let i = 0, il = textures.length; i < il; i ++ ) {
 		for ( let i = 0, il = textures.length; i < il; i ++ ) {
 
 
 			const texture = textures[ i ];
 			const texture = textures[ i ];
 
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 
 				const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;
 				const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;
 				const webglTexture = properties.get( texture ).__webglTexture;
 				const webglTexture = properties.get( texture ).__webglTexture;
@@ -1973,7 +1827,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	function updateMultisampleRenderTarget( renderTarget ) {
 	function updateMultisampleRenderTarget( renderTarget ) {
 
 
-		if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
+		if ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
 
 
 			const textures = renderTarget.textures;
 			const textures = renderTarget.textures;
 			const width = renderTarget.width;
 			const width = renderTarget.width;
@@ -2088,7 +1942,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 		const renderTargetProperties = properties.get( renderTarget );
 		const renderTargetProperties = properties.get( renderTarget );
 
 
-		return isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;
+		return renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;
 
 
 	}
 	}
 
 
@@ -2113,7 +1967,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 		const format = texture.format;
 		const format = texture.format;
 		const type = texture.type;
 		const type = texture.type;
 
 
-		if ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;
+		if ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;
 
 
 		if ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {
 		if ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {
 
 
@@ -2121,36 +1975,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			if ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {
 			if ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {
 
 
-				if ( isWebGL2 === false ) {
-
-					// in WebGL 1, try to use EXT_sRGB extension and unsized formats
-
-					if ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {
-
-						texture.format = _SRGBAFormat;
+				// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format
 
 
-						// it's not possible to generate mips in WebGL 1 with this extension
+				if ( format !== RGBAFormat || type !== UnsignedByteType ) {
 
 
-						texture.minFilter = LinearFilter;
-						texture.generateMipmaps = false;
-
-					} else {
-
-						// slow fallback (CPU decode)
-
-						image = ImageUtils.sRGBToLinear( image );
-
-					}
-
-				} else {
-
-					// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format
-
-					if ( format !== RGBAFormat || type !== UnsignedByteType ) {
-
-						console.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );
-
-					}
+					console.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );
 
 
 				}
 				}
 
 

+ 1 - 1
src/renderers/webgl/WebGLUniformsGroups.js

@@ -4,7 +4,7 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
 	let updateList = {};
 	let updateList = {};
 	let allocatedBindingPoints = [];
 	let allocatedBindingPoints = [];
 
 
-	const maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ) : 0; // binding points are global whereas block indices are per shader program
+	const maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program
 
 
 	function bind( uniformsGroup, program ) {
 	function bind( uniformsGroup, program ) {
 
 

+ 4 - 57
src/renderers/webgl/WebGLUtils.js

@@ -1,9 +1,7 @@
-import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, _SRGBAFormat, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer } from '../../constants.js';
+import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer } from '../../constants.js';
 import { ColorManagement } from '../../math/ColorManagement.js';
 import { ColorManagement } from '../../math/ColorManagement.js';
 
 
-function WebGLUtils( gl, extensions, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLUtils( gl, extensions ) {
 
 
 	function convert( p, colorSpace = NoColorSpace ) {
 	function convert( p, colorSpace = NoColorSpace ) {
 
 
@@ -21,24 +19,7 @@ function WebGLUtils( gl, extensions, capabilities ) {
 		if ( p === IntType ) return gl.INT;
 		if ( p === IntType ) return gl.INT;
 		if ( p === UnsignedIntType ) return gl.UNSIGNED_INT;
 		if ( p === UnsignedIntType ) return gl.UNSIGNED_INT;
 		if ( p === FloatType ) return gl.FLOAT;
 		if ( p === FloatType ) return gl.FLOAT;
-
-		if ( p === HalfFloatType ) {
-
-			if ( isWebGL2 ) return gl.HALF_FLOAT;
-
-			extension = extensions.get( 'OES_texture_half_float' );
-
-			if ( extension !== null ) {
-
-				return extension.HALF_FLOAT_OES;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
+		if ( p === HalfFloatType ) return gl.HALF_FLOAT;
 
 
 		if ( p === AlphaFormat ) return gl.ALPHA;
 		if ( p === AlphaFormat ) return gl.ALPHA;
 		if ( p === RGBAFormat ) return gl.RGBA;
 		if ( p === RGBAFormat ) return gl.RGBA;
@@ -47,24 +28,6 @@ function WebGLUtils( gl, extensions, capabilities ) {
 		if ( p === DepthFormat ) return gl.DEPTH_COMPONENT;
 		if ( p === DepthFormat ) return gl.DEPTH_COMPONENT;
 		if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;
 		if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;
 
 
-		// WebGL 1 sRGB fallback
-
-		if ( p === _SRGBAFormat ) {
-
-			extension = extensions.get( 'EXT_sRGB' );
-
-			if ( extension !== null ) {
-
-				return extension.SRGB_ALPHA_EXT;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
 		// WebGL2 formats.
 		// WebGL2 formats.
 
 
 		if ( p === RedFormat ) return gl.RED;
 		if ( p === RedFormat ) return gl.RED;
@@ -251,23 +214,7 @@ function WebGLUtils( gl, extensions, capabilities ) {
 
 
 		//
 		//
 
 
-		if ( p === UnsignedInt248Type ) {
-
-			if ( isWebGL2 ) return gl.UNSIGNED_INT_24_8;
-
-			extension = extensions.get( 'WEBGL_depth_texture' );
-
-			if ( extension !== null ) {
-
-				return extension.UNSIGNED_INT_24_8_WEBGL;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
+		if ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;
 
 
 		// if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)
 		// if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)
 
 

+ 2 - 2
src/renderers/webxr/WebXRManager.js

@@ -279,10 +279,10 @@ class WebXRManager extends EventDispatcher {
 				currentPixelRatio = renderer.getPixelRatio();
 				currentPixelRatio = renderer.getPixelRatio();
 				renderer.getSize( currentSize );
 				renderer.getSize( currentSize );
 
 
-				if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
+				if ( session.renderState.layers === undefined ) {
 
 
 					const layerInit = {
 					const layerInit = {
-						antialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,
+						antialias: attributes.antialias,
 						alpha: true,
 						alpha: true,
 						depth: attributes.depth,
 						depth: attributes.depth,
 						stencil: attributes.stencil,
 						stencil: attributes.stencil,

+ 0 - 2
test/unit/src/constants.tests.js

@@ -212,8 +212,6 @@ export default QUnit.module( 'Constants', () => {
 		assert.equal( Constants.GLSL1, '100', 'GLSL1 is equal to 100' );
 		assert.equal( Constants.GLSL1, '100', 'GLSL1 is equal to 100' );
 		assert.equal( Constants.GLSL3, '300 es', 'GLSL3 is equal to 300 es' );
 		assert.equal( Constants.GLSL3, '300 es', 'GLSL3 is equal to 300 es' );
 
 
-		assert.equal( Constants._SRGBAFormat, 1035, '_SRGBAFormat is equal to 1035' );
-
 	} );
 	} );
 
 
 } );
 } );

+ 0 - 39
test/unit/src/renderers/WebGL1Renderer.tests.js

@@ -1,39 +0,0 @@
-/* global QUnit */
-
-import { WebGL1Renderer } from '../../../../src/renderers/WebGL1Renderer.js';
-
-import { WebGLRenderer } from '../../../../src/renderers/WebGLRenderer.js';
-
-export default QUnit.module( 'Renderers', () => {
-
-	QUnit.module( 'WebGL1Renderer-webonly', () => {
-
-		// INHERITANCE
-		QUnit.test( 'Extending', ( assert ) => {
-
-			const object = new WebGL1Renderer();
-			assert.strictEqual(
-				object instanceof WebGLRenderer, true,
-				'WebGL1Renderer extends from WebGLRenderer'
-			);
-
-		} );
-
-		// INSTANCING
-		QUnit.test( 'Instancing', ( assert ) => {
-
-			const renderer = new WebGL1Renderer();
-			assert.ok( renderer, 'Can instantiate a WebGL1Renderer.' );
-
-		} );
-
-		// PUBLIC
-		QUnit.todo( 'isWebGL1Renderer', ( assert ) => {
-
-			assert.ok( false, 'everything\'s gonna be alright' );
-
-		} );
-
-	} );
-
-} );

+ 0 - 1
test/unit/three.source.unit.js

@@ -229,7 +229,6 @@ import './src/objects/Sprite.tests.js';
 
 
 
 
 //src/renderers
 //src/renderers
-import './src/renderers/WebGL1Renderer.tests.js';
 import './src/renderers/WebGL3DRenderTarget.tests.js';
 import './src/renderers/WebGL3DRenderTarget.tests.js';
 import './src/renderers/WebGLArrayRenderTarget.tests.js';
 import './src/renderers/WebGLArrayRenderTarget.tests.js';
 import './src/renderers/WebGLCubeRenderTarget.tests.js';
 import './src/renderers/WebGLCubeRenderTarget.tests.js';