فهرست منبع

WebGLRenderer: Remove WebGL 1 support. (#27836)

Michael Herzog 1 سال پیش
والد
کامیت
07ec4e8e1f
81فایلهای تغییر یافته به همراه333 افزوده شده و 1449 حذف شده
  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 />
 		 
 			[page:constant RedFormat] يتجاهل المكونات الخضراء والزرقاء ويقرأ
-			فقط المكون الأحمر. (يمكن استخدامه فقط مع سياق WebGL 2).
+			فقط المكون الأحمر.
 			<br /> <br />
 		 
 			[page:constant RedIntegerFormat] يتجاهل المكونات الخضراء والزرقاء
 			ويقرأ فقط المكون الأحمر. يتم قراءة `texels` كأعداد صحيحة بدلاً من
-			نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2).
+			نقطة عائمة.
 			<br /> <br />
 		 
 			[page:constant RGFormat] يتجاهل المكونات الألفا والزرقاء ويقرأ
-			المكونات الحمراء والخضراء. (يمكن استخدامه فقط مع سياق WebGL 2).
+			المكونات الحمراء والخضراء.
 			<br /> <br />
 		 
 			[page:constant RGIntegerFormat] يتجاهل المكونات الألفا والزرقاء
 			ويقرأ المكونات الحمراء والخضراء. يتم قراءة `texels` كأعداد صحيحة بدلاً من
-			نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2).
+			نقطة عائمة.
 			<br /> <br />
 		 
 			[page:constant RGBAFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء والزرقاء
@@ -176,7 +176,7 @@
 		 
 			[page:constant RGBAIntegerFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء ،
 			الزرقاء والألفا. يتم قراءة `texels` كأعداد صحيحة بدلاً من
-			نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2).
+			نقطة عائمة.
 			<br /> <br />
 		 
 			[page:constant LuminanceFormat] يقرأ كل عنصر كمكون إضاءة واحد
@@ -378,9 +378,6 @@
 		</code>
 
 		<p>
-			تنبيه: تغيير التنسيق الداخلي للقوام سيؤثر فقط على
-			القوام عند استخدام سياق WebGL 2. <br /> <br />
-		 
 			للاستخدام مع خاصية [page:Texture.internalFormat internalFormat] للقوام ،
 			هذه تحدد كيفية تخزين عناصر قوام ، أو `texels` ،
 			على وحدة معالجة الرسومات. <br /> <br />

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

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

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

@@ -324,10 +324,6 @@ this.defaultAttributeValues = {
 			كائن يحتوي على الخصائص التالية:
 			<code>
 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
 	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">
 		شبكة لديها [page:Skeleton] مع [page:Bone bones] يمكن استخدامها بعد ذلك
-		لتحريك رؤوس الهندسة.<br /> <br />
-			
-		يمكن استخدام [name] فقط مع WebGL 2.
+		لتحريك رؤوس الهندسة.
 		</p>
 			
 		<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 />
 
 			[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 />
 
 			[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. (can only be used with a WebGL 2 rendering context).
+			of floating point.
 			<br /><br />
 
 			[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 />
 
 			[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. (can only be used with a WebGL 2 rendering
-			context).
+			instead of floating point.
 			<br /><br />
 
 			[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,
 			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 />
 
 			[page:constant LuminanceFormat] reads each element as a single luminance
@@ -393,9 +390,6 @@
 		</code>
 
 		<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, these define how elements of a texture, or `texels`, are stored
 			on the GPU.<br /><br />

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

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

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

@@ -342,10 +342,6 @@ this.defaultAttributeValues = {
 			An object with the following properties:
 			<code>
 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
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
@@ -368,8 +364,7 @@ this.extensions = {
 
 		<h3>[property:String glslVersion]</h3>
 		<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`.
 		</p>
 

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

@@ -13,9 +13,7 @@
 
 		<p class="desc">
 			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>
 
 		<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>
 		<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>
 
 		<h2>Methods</h2>

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

@@ -13,8 +13,7 @@
 
 		<p class="desc">
 			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>
 
 		<h2>Constructor</h2>

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

@@ -13,8 +13,7 @@
 
 		<p class="desc">
 			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>
 
 		<h2>Constructor</h2>

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

@@ -13,9 +13,7 @@
 
 		<p class="desc">
 			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>
 
 		<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.
 		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 />
 
 		[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 />
 
 		[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.
-		(ne peut être utilisé qu'avec un contexte de rendu WebGL 2).
 		<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.
 		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 />
 
 		[page:constant LuminanceFormat] lit chaque élément comme une seule composante de luminance.
@@ -346,10 +342,6 @@
 		</code>
 
 		<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],
 		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 :
 		<code>
 			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
 				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>
 		<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>
 
 		<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 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.
-      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 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.
       Questo viene quindi convertito in floating point, fissato all'intervallo [0,1], e quindi assemblato
@@ -346,9 +342,6 @@
 		</code>
 
 		<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,
       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>
 				</tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 				</tr>
 				<tr>

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

@@ -318,10 +318,6 @@ this.defaultAttributeValues = {
 			Un oggetto con le seguenti proprietà:
 		<code>
 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
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
@@ -345,8 +341,8 @@ this.extensions = {
 
 		<h3>[property:String glslVersion]</h3>
 		<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>
 
 		<h3>[property:String index0AttributeName]</h3>

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

@@ -13,9 +13,7 @@
 
 		<p class="desc">
 			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>
 
 		<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>
 
-		<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>
 

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

@@ -13,7 +13,6 @@
 
 		<p class="desc">
 			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>
 
 		<h2>Costruttore</h2>

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

@@ -13,8 +13,6 @@
 
 		<p class="desc">
 			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>
 
 		<h2>Esempi</h2>

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

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

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

@@ -46,7 +46,7 @@
 					<td>[page:Number]</td>
 				</tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 				</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.
 		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 />
 
 		[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 />
 
 		[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.
-		(só pode ser usado com um contexto de renderização WebGL 2).
 		<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.
 		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 />
 
 		[page:constant LuminanceFormat] lê cada elemento como um único componente de luminância.
@@ -346,10 +342,6 @@
 		</code>
 
 		<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,
 		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.
 		The texels are read as integers instead of floating point.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 
 		[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 />
 
 		[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.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 
 		[page:constant RGBAFormat] 是默认值,它将读取红、绿、蓝和Alpha分量。<br /><br />
 
 		[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.
-		(can only be used with a WebGL 2 rendering context).
 		<br /><br />
 
 		[page:constant LuminanceFormat] 将每个元素作为单独的亮度分量来读取。
@@ -329,10 +325,6 @@
 	</code>
 
 	<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,
 	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>
 				</tr>
 				<tr>
-					<td>uint (WebGL 2)</td>
+					<td>uint</td>
 					<td>[page:Number]</td>
 				</tr>
 				<tr>

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

@@ -280,10 +280,6 @@ this.defaultAttributeValues = {
 		<p> 一个有如下属性的对象:
 		<code>
 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
 	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
@@ -305,8 +301,7 @@ this.extensions = {
 
 		<h3>[property:String glslVersion]</h3>
 		<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>
 
 		<h3>[property:String index0AttributeName]</h3>

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

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

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

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

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

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

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

@@ -13,7 +13,6 @@
 
 		<p class="desc">
 		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>
 
 		<h2>例子</h2>

+ 0 - 5
docs/list.json

@@ -279,7 +279,6 @@
 
 			"Renderers": {
 				"WebGLRenderer": "api/en/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/en/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/en/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/en/renderers/WebGLArrayRenderTarget",
@@ -720,7 +719,6 @@
 
 			"Renderers": {
 				"WebGLRenderer": "api/ar/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/ar/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/ar/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/ar/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/ar/renderers/WebGLArrayRenderTarget",
@@ -1027,7 +1025,6 @@
 
 			"渲染器": {
 				"WebGLRenderer": "api/zh/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/zh/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/zh/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/zh/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/zh/renderers/WebGLArrayRenderTarget",
@@ -1663,7 +1660,6 @@
 
 			"Renderers": {
 				"WebGLRenderer": "api/it/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/it/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/it/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/it/renderers/WebGL3DRenderTarget",
 				"WebGLArrayRenderTarget": "api/it/renderers/WebGLArrayRenderTarget",
@@ -2190,7 +2186,6 @@
 
 			"Renderers": {
 				"WebGLRenderer": "api/en/renderers/WebGLRenderer",
-				"WebGL1Renderer": "api/en/renderers/WebGL1Renderer",
 				"WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget",
 				"WebGL3DRenderTarget": "api/en/renderers/WebGL3DRenderTarget",
 				"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' )
 			};
 
-			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 () {
 
-			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 ) {
 
 				return 'No support for vertex shader textures.';

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

@@ -3,7 +3,6 @@ import {
 	FloatType,
 	MathUtils,
 	RedFormat,
-	LuminanceFormat,
 	ShaderMaterial,
 	UniformsUtils
 } from 'three';
@@ -40,8 +39,6 @@ class GlitchPass extends Pass {
 
 	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[ 'seed' ].value = Math.random();//default seeding
 		this.uniforms[ 'byp' ].value = 0;

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

@@ -13,7 +13,6 @@ import {
 	NearestFilter,
 	NoBlending,
 	RedFormat,
-	LuminanceFormat,
 	DepthStencilFormat,
 	UnsignedInt248Type,
 	RepeatWrapping,
@@ -177,8 +176,6 @@ class SSAOPass extends Pass {
 
 	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)
 
 		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 {
 

+ 1 - 3
examples/webaudio_visualizer.html

@@ -121,11 +121,9 @@
 
 				//
 
-				const format = ( renderer.capabilities.isWebGL2 ) ? THREE.RedFormat : THREE.LuminanceFormat;
-
 				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 );
 			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 } );

+ 1 - 9
examples/webgl_buffergeometry_instancing_billboards.html

@@ -91,15 +91,6 @@
 
 		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' );
 			document.body.appendChild( container );
 
@@ -143,6 +134,7 @@
 			mesh.scale.set( 500, 500, 500 );
 			scene.add( mesh );
 
+			renderer = new THREE.WebGLRenderer();
 			renderer.setPixelRatio( window.devicePixelRatio );
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			container.appendChild( renderer.domElement );

+ 0 - 7
examples/webgl_buffergeometry_instancing_interleaved.html

@@ -165,13 +165,6 @@
 			renderer.setSize( window.innerWidth, window.innerHeight );
 			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();
 			container.appendChild( stats.dom );
 

+ 1 - 10
examples/webgl_depth_texture.html

@@ -83,7 +83,7 @@
 			let camera, scene, renderer, controls, stats;
 			let target;
 			let postScene, postCamera, postMaterial;
-			let supportsExtension = true;
+			const supportsExtension = true;
 
 			const params = {
 				format: THREE.DepthFormat,
@@ -99,15 +99,6 @@
 			function init() {
 
 				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.setSize( window.innerWidth, window.innerHeight );
 				document.body.appendChild( renderer.domElement );

+ 0 - 6
examples/webgl_gpgpu_birds.html

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

+ 0 - 6
examples/webgl_gpgpu_birds_gltf.html

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

+ 0 - 6
examples/webgl_gpgpu_protoplanet.html

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

+ 0 - 6
examples/webgl_gpgpu_water.html

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

+ 1 - 2
examples/webgl_materials_toon.html

@@ -70,7 +70,6 @@
 				const numberOfSphersPerSide = 5;
 				const sphereRadius = ( cubeWidth / numberOfSphersPerSide ) * 0.8 * 0.5;
 				const stepSize = 1.0 / numberOfSphersPerSide;
-				const format = ( renderer.capabilities.isWebGL2 ) ? THREE.RedFormat : THREE.LuminanceFormat;
 
 				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;
 
 					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()
 							.load( `luts/${name}.png`, function ( result ) {
 
 								lutMap[ name ] = result;
 
 							} );
-					
+			
 					} else {
 
 						new LUT3dlLoader()
@@ -155,16 +155,7 @@
 				gui.add( params, 'enabled' );
 				gui.add( params, 'lut', Object.keys( lutMap ) );
 				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 );
 

+ 0 - 1
src/Three.js

@@ -5,7 +5,6 @@ export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js';
 export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js';
 export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js';
 export { WebGLRenderer } from './renderers/WebGLRenderer.js';
-export { WebGL1Renderer } from './renderers/WebGL1Renderer.js';
 export { ShaderLib } from './renderers/shaders/ShaderLib.js';
 export { UniformsLib } from './renderers/shaders/UniformsLib.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 GLSL3 = '300 es';
 
-export const _SRGBAFormat = 1035; // fallback for WebGL 1
-
 export const WebGLCoordinateSystem = 2000;
 export const WebGPUCoordinateSystem = 2001;

+ 0 - 4
src/materials/ShaderMaterial.js

@@ -33,10 +33,6 @@ class ShaderMaterial extends Material {
 		this.forceSinglePass = true;
 
 		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
 			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 { Vector3 } from '../math/Vector3.js';
 import { Vector4 } from '../math/Vector4.js';
-import { floorPowerOfTwo } from '../math/MathUtils.js';
 import { WebGLAnimation } from './webgl/WebGLAnimation.js';
 import { WebGLAttributes } from './webgl/WebGLAttributes.js';
 import { WebGLBackground } from './webgl/WebGLBackground.js';
@@ -84,6 +83,12 @@ class WebGLRenderer {
 
 		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;
 
 		} else {
@@ -219,15 +224,10 @@ class WebGLRenderer {
 
 		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;
 
@@ -256,19 +256,13 @@ class WebGLRenderer {
 
 			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 ( getContext( contextNames ) ) {
+					if ( getContext( contextName ) ) {
 
 						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 ) {
 
 			console.error( 'THREE.WebGLRenderer: ' + error.message );
@@ -318,22 +294,21 @@ class WebGLRenderer {
 		function initGLContext() {
 
 			extensions = new WebGLExtensions( _gl );
+			extensions.init();
 
 			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 );
 			properties = new WebGLProperties();
 			textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
 			cubemaps = new WebGLCubeMaps( _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 );
 			objects = new WebGLObjects( _gl, geometries, attributes, info );
 			morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
@@ -341,13 +316,13 @@ class WebGLRenderer {
 			programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
 			materials = new WebGLMaterials( _this, properties );
 			renderLists = new WebGLRenderLists();
-			renderStates = new WebGLRenderStates( extensions, capabilities );
+			renderStates = new WebGLRenderStates( extensions );
 			background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
 			shadowMap = new WebGLShadowMap( _this, objects, capabilities );
 			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;
 
@@ -1437,15 +1412,13 @@ class WebGLRenderer {
 
 			}
 
-			const isWebGL2 = capabilities.isWebGL2;
-
 			if ( _transmissionRenderTarget === null ) {
 
 				_transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
 					generateMipmaps: true,
 					type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
 					minFilter: LinearMipmapLinearFilter,
-					samples: ( isWebGL2 ) ? 4 : 0
+					samples: 4
 				} );
 
 				// debug
@@ -1461,16 +1434,7 @@ class WebGLRenderer {
 			}
 
 			_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;
 
-				} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {
+				} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
 
 					needsProgramChange = true;
 
@@ -1991,17 +1955,9 @@ class WebGLRenderer {
 
 				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;
 
-			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 );
 
@@ -2099,18 +2055,10 @@ class WebGLRenderer {
 
 				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;
 
-				} 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;
 
@@ -2285,7 +2233,7 @@ class WebGLRenderer {
 
 			const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
 
-			if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {
+			if ( framebufferBound && useDefaultFramebuffer ) {
 
 				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)
-						! ( 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.' );
 						return;
@@ -2434,13 +2381,6 @@ class WebGLRenderer {
 
 		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 height = Math.round( sourceBox.max.y - sourceBox.min.y );
 			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 */`
-#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )
+#if defined( USE_LOGDEPTHBUF )
 
 	// Doing a strict comparison with == 1.0 can cause noise artifacts
 	// on some platforms. See issue #17623.

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

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

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

@@ -1,16 +1,8 @@
 export default /* glsl */`
 #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
 `;

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

@@ -1,22 +1,8 @@
 export default /* glsl */`
 #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
 `;

+ 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();
 
@@ -27,15 +25,7 @@ function WebGLAttributes( gl, capabilities ) {
 
 			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 {
 
@@ -103,17 +93,9 @@ function WebGLAttributes( gl, capabilities ) {
 			for ( let i = 0, l = updateRanges.length; i < l; 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
 		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
 

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

@@ -1,12 +1,9 @@
 import { IntType } from '../../constants.js';
 
-function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
+function WebGLBindingStates( gl, attributes ) {
 
 	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 defaultState = createBindingState( null );
@@ -17,38 +14,18 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 		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 ) {
 
@@ -74,25 +51,19 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 	function createVertexArrayObject() {
 
-		if ( capabilities.isWebGL2 ) return gl.createVertexArray();
-
-		return extension.createVertexArrayOES();
+		return gl.createVertexArray();
 
 	}
 
 	function bindVertexArrayObject( vao ) {
 
-		if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );
-
-		return extension.bindVertexArrayOES( vao );
+		return gl.bindVertexArray( 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 ) {
 
-			const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );
-
-			extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
+			gl.vertexAttribDivisor( attribute, meshPerAttribute );
 			attributeDivisors[ attribute ] = meshPerAttribute;
 
 		}
@@ -333,12 +302,6 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 
 	function setupVertexAttributes( object, material, program, geometry ) {
 
-		if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {
-
-			if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;
-
-		}
-
 		initAttributes();
 
 		const geometryAttributes = geometry.attributes;
@@ -377,9 +340,9 @@ function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
 					const type = attribute.type;
 					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 ) {
 

+ 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;
 
@@ -22,28 +20,7 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
 
 		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 );
 
@@ -54,6 +31,7 @@ function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
 		if ( drawCount === 0 ) return;
 
 		const extension = extensions.get( 'WEBGL_multi_draw' );
+
 		if ( extension === null ) {
 
 			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';
 	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 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 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 {
 
-		isWebGL2: isWebGL2,
-
-		drawBuffers: drawBuffers,
+		isWebGL2: true, // keeping this for backwards compatibility
 
 		getMaxAnisotropy: getMaxAnisotropy,
 		getMaxPrecision: getMaxPrecision,
@@ -107,8 +99,6 @@ function WebGLCapabilities( gl, extensions, parameters ) {
 		maxFragmentUniforms: maxFragmentUniforms,
 
 		vertexTextures: vertexTextures,
-		floatFragmentTextures: floatFragmentTextures,
-		floatVertexTextures: floatVertexTextures,
 
 		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( 'EXT_color_buffer_half_float' );
 			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;
 
@@ -31,28 +29,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
 
 		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 );
 
@@ -63,6 +40,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
 		if ( drawCount === 0 ) return;
 
 		const extension = extensions.get( 'WEBGL_multi_draw' );
+
 		if ( extension === null ) {
 
 			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();
 
@@ -399,41 +399,15 @@ function WebGLLights( extensions, capabilities ) {
 
 		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 {
 
-				// 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 { 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 ) {
 
-	const influencesList = {};
-	const morphInfluences = new Float32Array( 8 );
 	const morphTextures = new WeakMap();
 	const morph = new Vector4();
 
-	const workInfluences = [];
-
-	for ( let i = 0; i < 8; i ++ ) {
-
-		workInfluences[ i ] = [ i, 0 ];
-
-	}
-
 	function update( object, geometry, program ) {
 
 		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;
 
-			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;
 
+
 			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 {

+ 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 ) {
 
 	const chunks = [
@@ -322,27 +309,21 @@ function generatePrecision( parameters ) {
 	precision ${parameters.precision} int;
 	precision ${parameters.precision} sampler2D;
 	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' ) {
 
 		precisionstring += '\n#define HIGH_PRECISION';
@@ -491,8 +472,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
 	const envMapCubeUVSize = generateCubeUVSize( parameters );
 
-	const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
-
 	const customVertexExtensions = generateVertexExtensions( parameters );
 
 	const customDefines = generateDefines( defines );
@@ -521,8 +500,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 		prefixFragment = [
 
-			customExtensions,
-
 			'#define SHADER_TYPE ' + parameters.shaderType,
 			'#define SHADER_NAME ' + parameters.shaderName,
 
@@ -644,10 +621,10 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 			parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
 			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.flipSided ? '#define FLIP_SIDED' : '',
 
@@ -661,7 +638,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 			parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
 
 			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
-			( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
 
 			'uniform mat4 modelMatrix;',
 			'uniform mat4 modelViewMatrix;',
@@ -765,8 +741,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 		prefixFragment = [
 
-			customExtensions,
-
 			generatePrecision( parameters ),
 
 			'#define SHADER_TYPE ' + parameters.shaderType,
@@ -854,7 +828,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 			parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
 
 			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
-			( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
 
 			'uniform mat4 viewMatrix;',
 			'uniform vec3 cameraPosition;',
@@ -889,7 +862,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	vertexShader = unrollLoops( vertexShader );
 	fragmentShader = unrollLoops( fragmentShader );
 
-	if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {
+	if ( parameters.isRawShaderMaterial !== true ) {
 
 		// 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 programs = [];
 
-	const IS_WEBGL2 = capabilities.isWebGL2;
 	const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
 	const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
 
@@ -175,8 +174,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 
 		const parameters = {
 
-			isWebGL2: IS_WEBGL2,
-
 			shaderID: shaderID,
 			shaderType: material.type,
 			shaderName: material.name,
@@ -350,16 +347,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 
 			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' ),
 			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' ),
 
 			customProgramCacheKey: material.customProgramCacheKey()
@@ -475,48 +465,46 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 
 		_programLayers.disableAll();
 
-		if ( parameters.isWebGL2 )
-			_programLayers.enable( 0 );
 		if ( parameters.supportsVertexTextures )
-			_programLayers.enable( 1 );
+			_programLayers.enable( 0 );
 		if ( parameters.instancing )
-			_programLayers.enable( 2 );
+			_programLayers.enable( 1 );
 		if ( parameters.instancingColor )
-			_programLayers.enable( 3 );
+			_programLayers.enable( 2 );
 		if ( parameters.instancingMorph )
-			_programLayers.enable( 4 );
+			_programLayers.enable( 3 );
 		if ( parameters.matcap )
-			_programLayers.enable( 5 );
+			_programLayers.enable( 4 );
 		if ( parameters.envMap )
-			_programLayers.enable( 6 );
+			_programLayers.enable( 5 );
 		if ( parameters.normalMapObjectSpace )
-			_programLayers.enable( 7 );
+			_programLayers.enable( 6 );
 		if ( parameters.normalMapTangentSpace )
-			_programLayers.enable( 8 );
+			_programLayers.enable( 7 );
 		if ( parameters.clearcoat )
-			_programLayers.enable( 9 );
+			_programLayers.enable( 8 );
 		if ( parameters.iridescence )
-			_programLayers.enable( 10 );
+			_programLayers.enable( 9 );
 		if ( parameters.alphaTest )
-			_programLayers.enable( 11 );
+			_programLayers.enable( 10 );
 		if ( parameters.vertexColors )
-			_programLayers.enable( 12 );
+			_programLayers.enable( 11 );
 		if ( parameters.vertexAlphas )
-			_programLayers.enable( 13 );
+			_programLayers.enable( 12 );
 		if ( parameters.vertexUv1s )
-			_programLayers.enable( 14 );
+			_programLayers.enable( 13 );
 		if ( parameters.vertexUv2s )
-			_programLayers.enable( 15 );
+			_programLayers.enable( 14 );
 		if ( parameters.vertexUv3s )
-			_programLayers.enable( 16 );
+			_programLayers.enable( 15 );
 		if ( parameters.vertexTangents )
-			_programLayers.enable( 17 );
+			_programLayers.enable( 16 );
 		if ( parameters.anisotropy )
-			_programLayers.enable( 18 );
+			_programLayers.enable( 17 );
 		if ( parameters.alphaHash )
-			_programLayers.enable( 19 );
+			_programLayers.enable( 18 );
 		if ( parameters.batching )
-			_programLayers.enable( 20 );
+			_programLayers.enable( 19 );
 
 		array.push( _programLayers.mask );
 		_programLayers.disableAll();

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

@@ -1,8 +1,8 @@
 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 shadowsArray = [];
@@ -57,7 +57,7 @@ function WebGLRenderState( extensions, capabilities ) {
 
 }
 
-function WebGLRenderStates( extensions, capabilities ) {
+function WebGLRenderStates( extensions ) {
 
 	let renderStates = new WeakMap();
 
@@ -68,14 +68,14 @@ function WebGLRenderStates( extensions, capabilities ) {
 
 		if ( renderStateArray === undefined ) {
 
-			renderState = new WebGLRenderState( extensions, capabilities );
+			renderState = new WebGLRenderState( extensions );
 			renderStates.set( scene, [ renderState ] );
 
 		} else {
 
 			if ( renderCallDepth >= renderStateArray.length ) {
 
-				renderState = new WebGLRenderState( extensions, capabilities );
+				renderState = new WebGLRenderState( extensions );
 				renderStateArray.push( renderState );
 
 			} 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 { Vector4 } from '../../math/Vector4.js';
 
-function WebGLState( gl, extensions, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLState( gl ) {
 
 	function ColorBuffer() {
 
@@ -376,7 +374,7 @@ function WebGLState( gl, extensions, capabilities ) {
 
 		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 );
 
@@ -395,13 +393,8 @@ function WebGLState( gl, extensions, capabilities ) {
 	const emptyTextures = {};
 	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 );
-
-	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
 
@@ -450,21 +443,17 @@ function WebGLState( gl, extensions, capabilities ) {
 
 			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 ( 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 ) {
@@ -564,23 +540,8 @@ function WebGLState( gl, extensions, capabilities ) {
 		[ 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 = {
 		[ ZeroFactor ]: gl.ZERO,
@@ -1204,13 +1165,8 @@ function WebGLState( gl, extensions, capabilities ) {
 		gl.activeTexture( gl.TEXTURE0 );
 
 		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 );
 

+ 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 { ColorManagement } from '../../math/ColorManagement.js';
 import { Vector2 } from '../../math/Vector2.js';
 
 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 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;
 
@@ -61,7 +58,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 		// only perform resize if necessary
 
-		if ( scale < 1 || needsPowerOfTwo === true ) {
+		if ( scale < 1 ) {
 
 			// 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 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 );
 
@@ -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 ) {
 
-		if ( isWebGL2 === false ) return glFormat;
-
 		if ( internalFormatName !== null ) {
 
 			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;
 
@@ -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 ) {
@@ -569,7 +530,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 		[ NotEqualCompare ]: _gl.NOTEQUAL
 	};
 
-	function setTextureParameters( textureType, texture, supportsMips ) {
+	function setTextureParameters( textureType, texture ) {
 
 		if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&
 			( 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 ) {
 
 			_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.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 ) {
 
@@ -754,97 +684,41 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
 			_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 );
 
-			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;
 			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 dataReady = source.dataReady;
-			const levels = getMipLevels( texture, image, supportsMips );
+			const levels = getMipLevels( texture, image );
 
 			if ( texture.isDepthTexture ) {
 
 				// 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
 				// 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 ) {
 
@@ -1117,7 +991,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				// if there are no manual mipmaps
 				// 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 ) {
 
@@ -1177,7 +1051,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 			}
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 				generateMipmap( textureType );
 
@@ -1226,7 +1100,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 				if ( ! isCompressed && ! isDataTexture ) {
 
-					cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, capabilities.maxCubemapSize );
+					cubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );
 
 				} else {
 
@@ -1239,17 +1113,16 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 			}
 
 			const image = cubeImage[ 0 ],
-				supportsMips = isPowerOfTwo( image ) || isWebGL2,
 				glFormat = utils.convert( texture.format, texture.colorSpace ),
 				glType = utils.convert( texture.type ),
 				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 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;
 
@@ -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.
 				generateMipmap( _gl.TEXTURE_CUBE_MAP );
@@ -1482,7 +1355,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 		if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
 
-			let glInternalFormat = ( isWebGL2 === true ) ? _gl.DEPTH_COMPONENT24 : _gl.DEPTH_COMPONENT16;
+			let glInternalFormat = _gl.DEPTH_COMPONENT24;
 
 			if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
 
@@ -1713,7 +1586,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 		const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
 		const isMultipleRenderTargets = ( textures.length > 1 );
-		const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
 
 		if ( ! isMultipleRenderTargets ) {
 
@@ -1736,7 +1608,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 			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 ] = [];
 
@@ -1756,7 +1628,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 		} else {
 
-			if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+			if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
 
 				renderTargetProperties.__webglFramebuffer = [];
 
@@ -1774,31 +1646,23 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 			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.__webglColorRenderbuffer = [];
@@ -1842,11 +1706,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 		if ( isCube ) {
 
 			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 ++ ) {
 
-				if ( isWebGL2 && texture.mipmaps && texture.mipmaps.length > 0 ) {
+				if ( texture.mipmaps && texture.mipmaps.length > 0 ) {
 
 					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 );
 
@@ -1878,10 +1742,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 				const attachmentProperties = properties.get( attachment );
 
 				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 );
 
-				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
+				if ( textureNeedsGenerateMipmaps( attachment ) ) {
 
 					generateMipmap( _gl.TEXTURE_2D );
 
@@ -1897,22 +1761,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 			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 );
-			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 ++ ) {
 
@@ -1926,7 +1782,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 			}
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 				generateMipmap( glTextureType );
 
@@ -1948,15 +1804,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 	function updateRenderTargetMipmap( renderTarget ) {
 
-		const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;
-
 		const textures = renderTarget.textures;
 
 		for ( let i = 0, il = textures.length; i < il; i ++ ) {
 
 			const texture = textures[ i ];
 
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
+			if ( textureNeedsGenerateMipmaps( texture ) ) {
 
 				const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;
 				const webglTexture = properties.get( texture ).__webglTexture;
@@ -1973,7 +1827,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 	function updateMultisampleRenderTarget( renderTarget ) {
 
-		if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
+		if ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
 
 			const textures = renderTarget.textures;
 			const width = renderTarget.width;
@@ -2088,7 +1942,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 		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 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 ) {
 
@@ -2121,36 +1975,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 			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 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 ) {
 

+ 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';
 
-function WebGLUtils( gl, extensions, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
+function WebGLUtils( gl, extensions ) {
 
 	function convert( p, colorSpace = NoColorSpace ) {
 
@@ -21,24 +19,7 @@ function WebGLUtils( gl, extensions, capabilities ) {
 		if ( p === IntType ) return gl.INT;
 		if ( p === UnsignedIntType ) return gl.UNSIGNED_INT;
 		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 === RGBAFormat ) return gl.RGBA;
@@ -47,24 +28,6 @@ function WebGLUtils( gl, extensions, capabilities ) {
 		if ( p === DepthFormat ) return gl.DEPTH_COMPONENT;
 		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.
 
 		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)
 

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

@@ -279,10 +279,10 @@ class WebXRManager extends EventDispatcher {
 				currentPixelRatio = renderer.getPixelRatio();
 				renderer.getSize( currentSize );
 
-				if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
+				if ( session.renderState.layers === undefined ) {
 
 					const layerInit = {
-						antialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,
+						antialias: attributes.antialias,
 						alpha: true,
 						depth: attributes.depth,
 						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.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
-import './src/renderers/WebGL1Renderer.tests.js';
 import './src/renderers/WebGL3DRenderTarget.tests.js';
 import './src/renderers/WebGLArrayRenderTarget.tests.js';
 import './src/renderers/WebGLCubeRenderTarget.tests.js';