From 07ec4e8e1f8a5e7ec37c1accebc1ab534a094d08 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Thu, 29 Feb 2024 23:53:43 +0100 Subject: [PATCH] WebGLRenderer: Remove WebGL 1 support. (#27836) --- docs/api/ar/constants/Textures.html | 13 +- docs/api/ar/core/Uniform.html | 2 +- docs/api/ar/materials/ShaderMaterial.html | 4 - docs/api/ar/objects/SkinnedMesh.html | 4 +- docs/api/ar/renderers/WebGL1Renderer.html | 47 --- docs/api/en/constants/Textures.html | 16 +- docs/api/en/core/Uniform.html | 2 +- docs/api/en/materials/ShaderMaterial.html | 7 +- docs/api/en/objects/SkinnedMesh.html | 4 +- docs/api/en/renderers/WebGL1Renderer.html | 48 --- docs/api/en/renderers/WebGLRenderTarget.html | 3 +- docs/api/en/textures/Data3DTexture.html | 3 +- docs/api/en/textures/DataArrayTexture.html | 3 +- docs/api/en/textures/DepthTexture.html | 4 +- docs/api/fr/constants/Textures.html | 8 - docs/api/fr/materials/ShaderMaterial.html | 8 +- docs/api/it/constants/Textures.html | 15 +- docs/api/it/core/Uniform.html | 2 +- docs/api/it/materials/ShaderMaterial.html | 8 +- docs/api/it/objects/SkinnedMesh.html | 4 +- docs/api/it/renderers/WebGL1Renderer.html | 52 --- docs/api/it/textures/Data3DTexture.html | 2 +- docs/api/it/textures/DataArrayTexture.html | 1 - docs/api/it/textures/DepthTexture.html | 2 - docs/api/ko/constants/Textures.html | 7 - docs/api/ko/core/Uniform.html | 2 +- docs/api/pt-br/constants/Textures.html | 8 - docs/api/zh/constants/Textures.html | 8 - docs/api/zh/core/Uniform.html | 2 +- docs/api/zh/materials/ShaderMaterial.html | 7 +- docs/api/zh/objects/SkinnedMesh.html | 4 +- docs/api/zh/renderers/WebGL1Renderer.html | 52 --- docs/api/zh/renderers/WebGLRenderTarget.html | 2 +- docs/api/zh/textures/Data3DTexture.html | 2 +- docs/api/zh/textures/DataArrayTexture.html | 2 +- docs/api/zh/textures/DepthTexture.html | 1 - docs/list.json | 5 - examples/jsm/loaders/KTX2Loader.js | 8 +- examples/jsm/misc/GPUComputationRenderer.js | 6 - examples/jsm/postprocessing/GlitchPass.js | 3 - examples/jsm/postprocessing/SSAOPass.js | 3 - .../jsm/renderers/webgl/utils/WebGLUtils.js | 2 +- examples/webaudio_visualizer.html | 4 +- examples/webgl_buffergeometry_instancing.html | 7 - ..._buffergeometry_instancing_billboards.html | 10 +- ...buffergeometry_instancing_interleaved.html | 7 - examples/webgl_depth_texture.html | 11 +- examples/webgl_gpgpu_birds.html | 6 - examples/webgl_gpgpu_birds_gltf.html | 6 - examples/webgl_gpgpu_protoplanet.html | 6 - examples/webgl_gpgpu_water.html | 6 - examples/webgl_materials_toon.html | 3 +- examples/webgl_postprocessing_3dlut.html | 17 +- src/Three.js | 1 - src/constants.js | 2 - src/materials/ShaderMaterial.js | 4 - src/renderers/WebGL1Renderer.js | 7 - src/renderers/WebGLRenderer.js | 126 ++------ .../ShaderChunk/logdepthbuf_fragment.glsl.js | 2 +- .../logdepthbuf_pars_fragment.glsl.js | 2 +- .../logdepthbuf_pars_vertex.glsl.js | 12 +- .../ShaderChunk/logdepthbuf_vertex.glsl.js | 18 +- src/renderers/webgl/WebGLAttributes.js | 39 +-- src/renderers/webgl/WebGLBindingStates.js | 65 +--- src/renderers/webgl/WebGLBufferRenderer.js | 28 +- src/renderers/webgl/WebGLCapabilities.js | 14 +- src/renderers/webgl/WebGLExtensions.js | 22 +- .../webgl/WebGLIndexedBufferRenderer.js | 28 +- src/renderers/webgl/WebGLLights.js | 38 +-- src/renderers/webgl/WebGLMorphtargets.js | 296 +++++------------ src/renderers/webgl/WebGLProgram.js | 63 ++-- src/renderers/webgl/WebGLPrograms.js | 52 ++- src/renderers/webgl/WebGLRenderStates.js | 10 +- src/renderers/webgl/WebGLState.js | 74 +---- src/renderers/webgl/WebGLTextures.js | 301 ++++-------------- src/renderers/webgl/WebGLUniformsGroups.js | 2 +- src/renderers/webgl/WebGLUtils.js | 61 +--- src/renderers/webxr/WebXRManager.js | 4 +- test/unit/src/constants.tests.js | 2 - .../src/renderers/WebGL1Renderer.tests.js | 39 --- test/unit/three.source.unit.js | 1 - 81 files changed, 333 insertions(+), 1449 deletions(-) delete mode 100644 docs/api/ar/renderers/WebGL1Renderer.html delete mode 100644 docs/api/en/renderers/WebGL1Renderer.html delete mode 100644 docs/api/it/renderers/WebGL1Renderer.html delete mode 100644 docs/api/zh/renderers/WebGL1Renderer.html delete mode 100644 src/renderers/WebGL1Renderer.js delete mode 100644 test/unit/src/renderers/WebGL1Renderer.tests.js diff --git a/docs/api/ar/constants/Textures.html b/docs/api/ar/constants/Textures.html index 72545495fc89cb..7a07aa4b2e5a43 100644 --- a/docs/api/ar/constants/Textures.html +++ b/docs/api/ar/constants/Textures.html @@ -154,21 +154,21 @@

التنسيقات (Formats)

ويقرأ فقط المكون الألفا.

[page:constant RedFormat] يتجاهل المكونات الخضراء والزرقاء ويقرأ - فقط المكون الأحمر. (يمكن استخدامه فقط مع سياق WebGL 2). + فقط المكون الأحمر.

[page:constant RedIntegerFormat] يتجاهل المكونات الخضراء والزرقاء ويقرأ فقط المكون الأحمر. يتم قراءة `texels` كأعداد صحيحة بدلاً من - نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2). + نقطة عائمة.

[page:constant RGFormat] يتجاهل المكونات الألفا والزرقاء ويقرأ - المكونات الحمراء والخضراء. (يمكن استخدامه فقط مع سياق WebGL 2). + المكونات الحمراء والخضراء.

[page:constant RGIntegerFormat] يتجاهل المكونات الألفا والزرقاء ويقرأ المكونات الحمراء والخضراء. يتم قراءة `texels` كأعداد صحيحة بدلاً من - نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2). + نقطة عائمة.

[page:constant RGBAFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء والزرقاء @@ -176,7 +176,7 @@

التنسيقات (Formats)

[page:constant RGBAIntegerFormat] هو الافتراضي ويلتقط المكونات الحمراء والخضراء ، الزرقاء والألفا. يتم قراءة `texels` كأعداد صحيحة بدلاً من - نقطة عائمة. (يمكن استخدامه فقط مع سياق WebGL 2). + نقطة عائمة.

[page:constant LuminanceFormat] يقرأ كل عنصر كمكون إضاءة واحد @@ -378,9 +378,6 @@

التنسيقات الداخلية (Internal Formats)

- تنبيه: تغيير التنسيق الداخلي للقوام سيؤثر فقط على - القوام عند استخدام سياق WebGL 2.

- للاستخدام مع خاصية [page:Texture.internalFormat internalFormat] للقوام ، هذه تحدد كيفية تخزين عناصر قوام ، أو `texels` ، على وحدة معالجة الرسومات.

diff --git a/docs/api/ar/core/Uniform.html b/docs/api/ar/core/Uniform.html index 9fed55636e93a1..9b37fea1f10f65 100644 --- a/docs/api/ar/core/Uniform.html +++ b/docs/api/ar/core/Uniform.html @@ -55,7 +55,7 @@

أنواع الموحدات (Uniform types)

[page:Number] - uint (WebGL 2) + uint [page:Number] diff --git a/docs/api/ar/materials/ShaderMaterial.html b/docs/api/ar/materials/ShaderMaterial.html index 67737780790d69..b7ad25552b5075 100644 --- a/docs/api/ar/materials/ShaderMaterial.html +++ b/docs/api/ar/materials/ShaderMaterial.html @@ -324,10 +324,6 @@

[property:Object extensions]

كائن يحتوي على الخصائص التالية: this.extensions = { - derivatives: false, // set to use derivatives - fragDepth: false, // set to use fragment depth values - drawBuffers: false, // set to use draw buffers - shaderTextureLOD: false, // set to use shader texture LOD clipCullDistance: false, // set to use vertex shader clipping multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID }; diff --git a/docs/api/ar/objects/SkinnedMesh.html b/docs/api/ar/objects/SkinnedMesh.html index bdb6ed334317fa..4869dc07a4e509 100644 --- a/docs/api/ar/objects/SkinnedMesh.html +++ b/docs/api/ar/objects/SkinnedMesh.html @@ -13,9 +13,7 @@

[name]

شبكة لديها [page:Skeleton] مع [page:Bone bones] يمكن استخدامها بعد ذلك - لتحريك رؤوس الهندسة.

- - يمكن استخدام [name] فقط مع WebGL 2. + لتحريك رؤوس الهندسة.

diff --git a/docs/api/ar/renderers/WebGL1Renderer.html b/docs/api/ar/renderers/WebGL1Renderer.html deleted file mode 100644 index 0eaaa2e81f086e..00000000000000 --- a/docs/api/ar/renderers/WebGL1Renderer.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - [page:WebGLRenderer] → - -

[name]

- -

- منذ r118 [page:WebGLRenderer] يستخدم تلقائيًا سياق عرض WebGL 2. عند الترقية - مشروع موجود إلى => r118 ، قد تتعطل التطبيقات لسببين: -

- -

- إذا لم تتمكن من تحمل الوقت لترقية الكود الخاص بك ولكنك ما زلت ترغب في استخدام - أحدث إصدار ، يمكنك استخدام [name]. هذه الإصدارة من المُعالج ستفرض - سياق عرض WebGL 1. -

- -

المنشئ (Constructor)

- -

[name]( [param:Object parameters] )

-

ينشئ [name] جديدًا.

- -

الخصائص (Properties)

-

انظر فئة [page:WebGLRenderer] الأساسية للحصول على خصائص شائعة.

- -

[property:Boolean isWebGL1Renderer]

-

علامة للقراءة فقط للتحقق مما إذا كان كائنًا معينًا من نوع [name].

- -

الطرق (Methods)

-

انظر فئة [page:WebGLRenderer] الأساسية للحصول على طرق شائعة.

- -

المصدر (Source)

-

- [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] -

- - diff --git a/docs/api/en/constants/Textures.html b/docs/api/en/constants/Textures.html index 09a055425ca0a6..ac0656935040c1 100644 --- a/docs/api/en/constants/Textures.html +++ b/docs/api/en/constants/Textures.html @@ -166,24 +166,21 @@

Formats

and reads just the alpha component.

[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.

[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.

[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.

[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.

[page:constant RGBAFormat] is the default and reads the red, green, blue @@ -191,7 +188,7 @@

Formats

[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.

[page:constant LuminanceFormat] reads each element as a single luminance @@ -393,9 +390,6 @@

Internal Formats

- Heads up: changing the internal format of a texture will only affect the - texture when using a WebGL 2 rendering context.

- 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.

diff --git a/docs/api/en/core/Uniform.html b/docs/api/en/core/Uniform.html index fe572c866fbb7b..4a86e79f1c0033 100644 --- a/docs/api/en/core/Uniform.html +++ b/docs/api/en/core/Uniform.html @@ -55,7 +55,7 @@

Uniform types

[page:Number] - uint (WebGL 2) + uint [page:Number] diff --git a/docs/api/en/materials/ShaderMaterial.html b/docs/api/en/materials/ShaderMaterial.html index c2ad473127e293..77b2be19d57938 100644 --- a/docs/api/en/materials/ShaderMaterial.html +++ b/docs/api/en/materials/ShaderMaterial.html @@ -342,10 +342,6 @@

[property:Object extensions]

An object with the following properties: 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 @@

[property:String fragmentShader]

[property:String glslVersion]

- 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`.

diff --git a/docs/api/en/objects/SkinnedMesh.html b/docs/api/en/objects/SkinnedMesh.html index 02c5f2f9cec8f4..aaf27d36b2347d 100644 --- a/docs/api/en/objects/SkinnedMesh.html +++ b/docs/api/en/objects/SkinnedMesh.html @@ -13,9 +13,7 @@

[name]

A mesh that has a [page:Skeleton] with [page:Bone bones] that can then be - used to animate the vertices of the geometry.

- - [name] can only be used with WebGL 2. + used to animate the vertices of the geometry.

diff --git a/docs/api/en/renderers/WebGL1Renderer.html b/docs/api/en/renderers/WebGL1Renderer.html deleted file mode 100644 index 6a0bd163ff7674..00000000000000 --- a/docs/api/en/renderers/WebGL1Renderer.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - [page:WebGLRenderer] → - -

[name]

- -

- 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: -

- -

- 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. -

- -

Constructor

- -

[name]( [param:Object parameters] )

-

Creates a new [name].

- -

Properties

-

See the base [page:WebGLRenderer] class for common properties.

- -

[property:Boolean isWebGL1Renderer]

-

Read-only flag to check if a given object is of type [name].

- -

Methods

-

See the base [page:WebGLRenderer] class for common methods.

- -

Source

-

- [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] -

- - diff --git a/docs/api/en/renderers/WebGLRenderTarget.html b/docs/api/en/renderers/WebGLRenderTarget.html index 34eea3fd0fe9ec..6c3fc1a5d1e4ac 100644 --- a/docs/api/en/renderers/WebGLRenderTarget.html +++ b/docs/api/en/renderers/WebGLRenderTarget.html @@ -103,8 +103,7 @@

[property:DepthTexture depthTexture]

[property:Number samples]

- 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`.

Methods

diff --git a/docs/api/en/textures/Data3DTexture.html b/docs/api/en/textures/Data3DTexture.html index 3722cce5dead3e..8b947a2dc4da85 100644 --- a/docs/api/en/textures/Data3DTexture.html +++ b/docs/api/en/textures/Data3DTexture.html @@ -13,8 +13,7 @@

[name]

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.

Constructor

diff --git a/docs/api/en/textures/DataArrayTexture.html b/docs/api/en/textures/DataArrayTexture.html index aa6e07fb7bdaaa..2c4d4e94fff4a8 100644 --- a/docs/api/en/textures/DataArrayTexture.html +++ b/docs/api/en/textures/DataArrayTexture.html @@ -13,8 +13,7 @@

[name]

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.

Constructor

diff --git a/docs/api/en/textures/DepthTexture.html b/docs/api/en/textures/DepthTexture.html index 5a92ab2aaafc62..222ce61240a0ac 100644 --- a/docs/api/en/textures/DepthTexture.html +++ b/docs/api/en/textures/DepthTexture.html @@ -13,9 +13,7 @@

[name]

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.

Examples

diff --git a/docs/api/fr/constants/Textures.html b/docs/api/fr/constants/Textures.html index f42d8ec9eb119a..03b3d486298563 100644 --- a/docs/api/fr/constants/Textures.html +++ b/docs/api/fr/constants/Textures.html @@ -160,23 +160,19 @@

Formats

[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).

[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).

[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).

[page:constant RGBAFormat] est la valeur par défaut et lit les composants rouge, vert, bleu et alpha.

[page:constant RGBAIntegerFormat] est la valeur par défaut et lit les composants rouge, vert, bleu et alpha. Les texels sont lus comme des entiers au lieu de points flottants. - (ne peut être utilisé qu'avec un contexte de rendu WebGL 2).

[page:constant LuminanceFormat] lit chaque élément comme une seule composante de luminance. @@ -346,10 +342,6 @@

Formats Internes

- - Attention : changer le format interne d'une texture n'affectera que le - texture lors de l'utilisation d'un contexte de rendu WebGL 2.

- À 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.

diff --git a/docs/api/fr/materials/ShaderMaterial.html b/docs/api/fr/materials/ShaderMaterial.html index cd27d55db19730..dc303e0fe54a2d 100644 --- a/docs/api/fr/materials/ShaderMaterial.html +++ b/docs/api/fr/materials/ShaderMaterial.html @@ -313,10 +313,6 @@

[property:Object extensions]

Un objet avec les propriétés suivantes : 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 @@

[property:String fragmentShader]

[property:String glslVersion]

- 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`.

[property:String index0AttributeName]

diff --git a/docs/api/it/constants/Textures.html b/docs/api/it/constants/Textures.html index 7f9977c546ecdf..702558d29853b0 100644 --- a/docs/api/it/constants/Textures.html +++ b/docs/api/it/constants/Textures.html @@ -155,21 +155,17 @@

Formati

[page:constant RedFormat] elimina i componenti verde e blu e legge solo il componente rosso.

[page:constant RedIntegerFormat] elimina i componenti verde e blu e legge solo il componente rosso. - I texel sono letti come interi invece che come floating point. - (può essere utilizzato solo in un contesto di rendering WebGL 2).

+ I texel sono letti come interi invece che come floating point.

- [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).

+ [page:constant RGFormat] elimina i componenti alfa e blu e legge i componenti rosso e verde.

[page:constant RGIntegerFormat] elimina i componenti alfa e blu e legge i componenti rosso e verde. - I texel sono letti come numeri interi invece che come floating point. - (può essere utilizzato solo in un contesto di rendering WebGL 2).

+ I texel sono letti come numeri interi invece che come floating point.

[page:constant RGBAFormat] è l'impostazione predefinita e legge i componenti rosso, verde, blu e alfa.

[page:constant RGBAIntegerFormat] è l'impostazione di default e legge i componenti rosso, verde, blu e alfa. - I texel sono letti come numeri interi invece che come floating point. - (può essere utilizzato solo in un contesto di rendering WebGL 2).

+ I texel sono letti come numeri interi invece che come floating point.

[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 @@

Formati Interni

- Attenzione: la modifica di un formato interno di una texture avrà effetto solo - quando si utilizza un contesto di rendering WebGL 2.

- Da usare con la proprietà [page:Texture.internalFormat internalFormat] della texture, definiscono come gli elementi della texture, o `toxel`, sono memorizzati nella GPU.

diff --git a/docs/api/it/core/Uniform.html b/docs/api/it/core/Uniform.html index 997e0fd3f15412..60011c873f59d5 100644 --- a/docs/api/it/core/Uniform.html +++ b/docs/api/it/core/Uniform.html @@ -50,7 +50,7 @@

Tipi Uniform

[page:Number] - uint (WebGL 2) + uint [page:Number] diff --git a/docs/api/it/materials/ShaderMaterial.html b/docs/api/it/materials/ShaderMaterial.html index 725d3aa787edca..510b9ba58e70c3 100644 --- a/docs/api/it/materials/ShaderMaterial.html +++ b/docs/api/it/materials/ShaderMaterial.html @@ -318,10 +318,6 @@

[property:Object extensions]

Un oggetto con le seguenti proprietà: 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 @@

[property:String fragmentShader]

[property:String glslVersion]

- 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`.

[property:String index0AttributeName]

diff --git a/docs/api/it/objects/SkinnedMesh.html b/docs/api/it/objects/SkinnedMesh.html index c5a7a06604f140..43a8eceb126779 100644 --- a/docs/api/it/objects/SkinnedMesh.html +++ b/docs/api/it/objects/SkinnedMesh.html @@ -13,9 +13,7 @@

[name]

Una mesh che ha uno [page:Skeleton scheletro] con [page:Bone ossa] che può essere - utilizzata per animare i vertici della geometria.

- - [name] può essere utilizzata solo con WebGL 2. + utilizzata per animare i vertici della geometria.

diff --git a/docs/api/it/renderers/WebGL1Renderer.html b/docs/api/it/renderers/WebGL1Renderer.html deleted file mode 100644 index 91f5069b8b70a9..00000000000000 --- a/docs/api/it/renderers/WebGL1Renderer.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - [page:WebGLRenderer] → - -

[name]

- -

- 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: - -

- - 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. -

- -

Costruttore

- -

[name]( [param:Object parameters] )

-

- Crea un nuovo [name]. -

- -

Proprietà

-

Vedi la classe base [page:WebGLRenderer] per le proprietà comuni.

- -

[property:Boolean isWebGL1Renderer]

-

- Flag di sola lettura per verificare se l'oggetto dato è di tipo [name]. -

- - -

Metodi

-

Vedi la classe base [page:WebGLRenderer] per i metodi comuni.

- -

Source

- -

- [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] -

- - diff --git a/docs/api/it/textures/Data3DTexture.html b/docs/api/it/textures/Data3DTexture.html index 67b3ba015cbefb..3a7560b99b4182 100644 --- a/docs/api/it/textures/Data3DTexture.html +++ b/docs/api/it/textures/Data3DTexture.html @@ -11,7 +11,7 @@

[name]

-

Crea una texture tridimensionale. Questo tipo di texture può solo essere utilizzata in un contesto di rendering WebGL 2.

+

Crea una texture tridimensionale.

Costruttore

diff --git a/docs/api/it/textures/DataArrayTexture.html b/docs/api/it/textures/DataArrayTexture.html index 075df901760139..59bda67494337d 100644 --- a/docs/api/it/textures/DataArrayTexture.html +++ b/docs/api/it/textures/DataArrayTexture.html @@ -13,7 +13,6 @@

[name]

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.

Costruttore

diff --git a/docs/api/it/textures/DepthTexture.html b/docs/api/it/textures/DepthTexture.html index 7e463baaeb8127..0decd4225c351c 100644 --- a/docs/api/it/textures/DepthTexture.html +++ b/docs/api/it/textures/DepthTexture.html @@ -13,8 +13,6 @@

[name]

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].

Esempi

diff --git a/docs/api/ko/constants/Textures.html b/docs/api/ko/constants/Textures.html index 3e4e62177f844d..3be8bfc0b7a844 100644 --- a/docs/api/ko/constants/Textures.html +++ b/docs/api/ko/constants/Textures.html @@ -157,23 +157,19 @@

포맷

[page:constant RedIntegerFormat] green 및 blue 요소를 버리고 red 요소만 읽어들입니다. texel은 부동 소수점 대신 정수로 읽어들입니다. - (WebGL 2 렌더링 시에만 사용 가능).

[page:constant RGFormat] alpha, blue 요소를 버리고 red, green 요소만 읽어들입니다. - (WebGL 2 렌더링 시에만 사용 가능).

[page:constant RGIntegerFormat] alpha, blue 요소를 버리고 red, green 요소만 읽어들입니다. texel은 부동 소수점 대신 정수로 읽어들입니다. - (WebGL 2 렌더링 시에만 사용 가능).

[page:constant RGBAFormat]는 기본값이며 red, green, blue 및 alpha 요소를 읽어들입니다.

[page:constant RGBAIntegerFormat]는 기본값이며 red, green, blue 및 alpha 요소를 읽어들입니다. texel은 부동 소수점 대신 정수로 읽어들입니다. - (WebGL 2 렌더링 시에만 사용 가능).

[page:constant LuminanceFormat]은 각 요소(element)를 단일 휘도 요소(component)로 읽어들입니다. @@ -335,9 +331,6 @@

내부 포맷

- - 주의: WebGL 2 렌더링의 경우에만 텍스쳐 내부 포맷 변경이 텍스쳐에 영향을 줄 것입니다.

- 텍스쳐의 [page:Texture.internalFormat internalFormat] 프로퍼티와 함께 사용되며, 텍스쳐 혹은 *texels*의 요소들이 GPU에 어떻게 저장될지 정의합니다.

diff --git a/docs/api/ko/core/Uniform.html b/docs/api/ko/core/Uniform.html index 691472c7f42799..90384bca23c9cd 100644 --- a/docs/api/ko/core/Uniform.html +++ b/docs/api/ko/core/Uniform.html @@ -46,7 +46,7 @@

유니폼 타입

[page:Number] - uint (WebGL 2) + uint [page:Number] diff --git a/docs/api/pt-br/constants/Textures.html b/docs/api/pt-br/constants/Textures.html index 43b5f6c28f539e..a8c7e639e235b0 100644 --- a/docs/api/pt-br/constants/Textures.html +++ b/docs/api/pt-br/constants/Textures.html @@ -160,23 +160,19 @@

Formatos

[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).

[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).

[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).

[page:constant RGBAFormat] é o padrão e lê os componentes vermelho, verde, azul e alfa.

[page:constant RGBAIntegerFormat] é o padrão e lê os componentes vermelho, verde, azul e alfa. Os texels são lidos como inteiros em vez de ponto flutuante. - (só pode ser usado com um contexto de renderização WebGL 2).

[page:constant LuminanceFormat] lê cada elemento como um único componente de luminância. @@ -346,10 +342,6 @@

Formatos Internos

- - Atenção: alterar o formato interno de uma textura afetará a - textura apenas quando for usado um contexto de renderização WebGL 2.

- 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.

diff --git a/docs/api/zh/constants/Textures.html b/docs/api/zh/constants/Textures.html index 893a4f5d06873a..9d367be95d38f6 100644 --- a/docs/api/zh/constants/Textures.html +++ b/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).

[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).

[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).

[page:constant RGBAFormat] 是默认值,它将读取红、绿、蓝和Alpha分量。

[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).

[page:constant LuminanceFormat] 将每个元素作为单独的亮度分量来读取。 @@ -329,10 +325,6 @@

Internal Formats

- - Heads up: changing the internal format of a texture will only affect the - texture when using a WebGL 2 rendering context.

- 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.

diff --git a/docs/api/zh/core/Uniform.html b/docs/api/zh/core/Uniform.html index aac957e75bb94c..54fa7d3795eee2 100644 --- a/docs/api/zh/core/Uniform.html +++ b/docs/api/zh/core/Uniform.html @@ -47,7 +47,7 @@

Uniform 种类

[page:Number] - uint (WebGL 2) + uint [page:Number] diff --git a/docs/api/zh/materials/ShaderMaterial.html b/docs/api/zh/materials/ShaderMaterial.html index c73a8e82442410..a421589cda159e 100644 --- a/docs/api/zh/materials/ShaderMaterial.html +++ b/docs/api/zh/materials/ShaderMaterial.html @@ -280,10 +280,6 @@

[property:Object extensions]

一个有如下属性的对象: this.extensions = { - derivatives: false, // set to use derivatives - fragDepth: false, // set to use fragment depth values - drawBuffers: false, // set to use draw buffers - shaderTextureLOD: false, // set to use shader texture LOD clipCullDistance: false, // set to use vertex shader clipping multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID }; @@ -305,8 +301,7 @@

[property:String fragmentShader]

[property:String glslVersion]

- 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*.

[property:String index0AttributeName]

diff --git a/docs/api/zh/objects/SkinnedMesh.html b/docs/api/zh/objects/SkinnedMesh.html index c042369e4253bf..115f01e3428038 100644 --- a/docs/api/zh/objects/SkinnedMesh.html +++ b/docs/api/zh/objects/SkinnedMesh.html @@ -12,9 +12,7 @@

蒙皮网格([name])

- 具有[page:Skeleton](骨架)和[page:Bone bones](骨骼)的网格,可用于给几何体上的顶点添加动画。

- - [name] can only be used with WebGL 2. + 具有[page:Skeleton](骨架)和[page:Bone bones](骨骼)的网格,可用于给几何体上的顶点添加动画。

diff --git a/docs/api/zh/renderers/WebGL1Renderer.html b/docs/api/zh/renderers/WebGL1Renderer.html deleted file mode 100644 index 205808bbceca0a..00000000000000 --- a/docs/api/zh/renderers/WebGL1Renderer.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - [page:WebGLRenderer] → - -

[name]

- -

- 自r118起,[page:WebGLRenderer]会自动使用 WebGL 2 渲染上下文。当升级一个已存在的项目到 => r118 , - 应用程序可能会因为下列两种原因而损坏: - -

- - 如果你不能够花时间来升级你的代码,但仍然想要使用最新版本,那你就可以使用[name]。 - 这一版本的渲染器会强制使用 WebGL 1 渲染上下文。 -

- -

构造函数

- -

[name]( [param:Object parameters] )

-

- Creates a new [name]. -

- -

属性

-

See the base [page:WebGLRenderer] class for common properties.

- -

[property:Boolean isWebGL1Renderer]

-

- Read-only flag to check if a given object is of type [name]. -

- - -

方法

-

See the base [page:WebGLRenderer] class for common methods.

- -

源码

- -

- [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] -

- - diff --git a/docs/api/zh/renderers/WebGLRenderTarget.html b/docs/api/zh/renderers/WebGLRenderTarget.html index 0bc5f9b38f27fa..ad22de11fb6a71 100644 --- a/docs/api/zh/renderers/WebGLRenderTarget.html +++ b/docs/api/zh/renderers/WebGLRenderTarget.html @@ -104,7 +104,7 @@

[property:DepthTexture depthTexture]

[property:Number samples]

- 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*.

方法

diff --git a/docs/api/zh/textures/Data3DTexture.html b/docs/api/zh/textures/Data3DTexture.html index 759488c485ebe9..087d15a7eb2bfd 100644 --- a/docs/api/zh/textures/Data3DTexture.html +++ b/docs/api/zh/textures/Data3DTexture.html @@ -11,7 +11,7 @@

[name]

-

创建一个三维的纹理贴图。这种纹理贴图只能被用于WebGL 2渲染环境中。

+

创建一个三维的纹理贴图。

构造函数

diff --git a/docs/api/zh/textures/DataArrayTexture.html b/docs/api/zh/textures/DataArrayTexture.html index 46829d2a3b3104..dc63b1c12edc0b 100644 --- a/docs/api/zh/textures/DataArrayTexture.html +++ b/docs/api/zh/textures/DataArrayTexture.html @@ -12,7 +12,7 @@

数据数组纹理([name])

- 直接从原始数据、宽度、高度和深度创建纹理数组。这种类型的纹理只能与 WebGL 2 渲染上下文一起使用。 + 直接从原始数据、宽度、高度和深度创建纹理数组。

diff --git a/docs/api/zh/textures/DepthTexture.html b/docs/api/zh/textures/DepthTexture.html index a5d2b276436f7c..bcea8fb5c807fc 100644 --- a/docs/api/zh/textures/DepthTexture.html +++ b/docs/api/zh/textures/DepthTexture.html @@ -13,7 +13,6 @@

深度纹理([name])

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.

例子

diff --git a/docs/list.json b/docs/list.json index 7e9de78832faa5..807ff542572637 100644 --- a/docs/list.json +++ b/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", diff --git a/examples/jsm/loaders/KTX2Loader.js b/examples/jsm/loaders/KTX2Loader.js index 64ea89132bace2..d7113fe49753e0 100644 --- a/examples/jsm/loaders/KTX2Loader.js +++ b/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; } diff --git a/examples/jsm/misc/GPUComputationRenderer.js b/examples/jsm/misc/GPUComputationRenderer.js index 1f1eec51daa37a..45cbdc0bfcb13a 100644 --- a/examples/jsm/misc/GPUComputationRenderer.js +++ b/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.'; diff --git a/examples/jsm/postprocessing/GlitchPass.js b/examples/jsm/postprocessing/GlitchPass.js index 5b044da97851b1..3b7c865cfbfdc9 100644 --- a/examples/jsm/postprocessing/GlitchPass.js +++ b/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; diff --git a/examples/jsm/postprocessing/SSAOPass.js b/examples/jsm/postprocessing/SSAOPass.js index f011e1aac340a8..0242c383b8c48f 100644 --- a/examples/jsm/postprocessing/SSAOPass.js +++ b/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(); diff --git a/examples/jsm/renderers/webgl/utils/WebGLUtils.js b/examples/jsm/renderers/webgl/utils/WebGLUtils.js index 70965baf66fb2d..795b19a1099dff 100644 --- a/examples/jsm/renderers/webgl/utils/WebGLUtils.js +++ b/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 { diff --git a/examples/webaudio_visualizer.html b/examples/webaudio_visualizer.html index cb99c5c24dfd5e..e8464e4c0da680 100644 --- a/examples/webaudio_visualizer.html +++ b/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 ) } }; diff --git a/examples/webgl_buffergeometry_instancing.html b/examples/webgl_buffergeometry_instancing.html index a5c0d493c91114..33f0fee74f137c 100644 --- a/examples/webgl_buffergeometry_instancing.html +++ b/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 } ); diff --git a/examples/webgl_buffergeometry_instancing_billboards.html b/examples/webgl_buffergeometry_instancing_billboards.html index 8abdae2673c619..1d2f0d95481d2b 100644 --- a/examples/webgl_buffergeometry_instancing_billboards.html +++ b/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 ); diff --git a/examples/webgl_buffergeometry_instancing_interleaved.html b/examples/webgl_buffergeometry_instancing_interleaved.html index cd81bf5a4addad..13d484933c4cef 100644 --- a/examples/webgl_buffergeometry_instancing_interleaved.html +++ b/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 ); diff --git a/examples/webgl_depth_texture.html b/examples/webgl_depth_texture.html index e953f874551a54..85fbc6797ced49 100644 --- a/examples/webgl_depth_texture.html +++ b/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 ); diff --git a/examples/webgl_gpgpu_birds.html b/examples/webgl_gpgpu_birds.html index 42c19a6c77c1cf..26eda603bf97de 100644 --- a/examples/webgl_gpgpu_birds.html +++ b/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 ); diff --git a/examples/webgl_gpgpu_birds_gltf.html b/examples/webgl_gpgpu_birds_gltf.html index cdfd8af26fe493..3450aa85000345 100644 --- a/examples/webgl_gpgpu_birds_gltf.html +++ b/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 ); diff --git a/examples/webgl_gpgpu_protoplanet.html b/examples/webgl_gpgpu_protoplanet.html index 86b745b051fcf3..8414d123ba763f 100644 --- a/examples/webgl_gpgpu_protoplanet.html +++ b/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(); diff --git a/examples/webgl_gpgpu_water.html b/examples/webgl_gpgpu_water.html index b7485a7831a771..955dcd4554cecb 100644 --- a/examples/webgl_gpgpu_water.html +++ b/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 ); diff --git a/examples/webgl_materials_toon.html b/examples/webgl_materials_toon.html index a9fece0c6e3a38..df9e918e84c614 100644 --- a/examples/webgl_materials_toon.html +++ b/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 ) { diff --git a/examples/webgl_postprocessing_3dlut.html b/examples/webgl_postprocessing_3dlut.html index 5ec591f6e2a0e3..c5c6137eb2de64 100644 --- a/examples/webgl_postprocessing_3dlut.html +++ b/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 ); diff --git a/src/Three.js b/src/Three.js index 6c0f476f9fc0c1..759afba97789ef 100644 --- a/src/Three.js +++ b/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'; diff --git a/src/constants.js b/src/constants.js index 5257bc1bab534b..cf737a784f49a6 100644 --- a/src/constants.js +++ b/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; diff --git a/src/materials/ShaderMaterial.js b/src/materials/ShaderMaterial.js index d40e9870cc225c..ca3dbbe9f4a6c2 100644 --- a/src/materials/ShaderMaterial.js +++ b/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 }; diff --git a/src/renderers/WebGL1Renderer.js b/src/renderers/WebGL1Renderer.js deleted file mode 100644 index e6cc82999521ff..00000000000000 --- a/src/renderers/WebGL1Renderer.js +++ /dev/null @@ -1,7 +0,0 @@ -import { WebGLRenderer } from './WebGLRenderer.js'; - -class WebGL1Renderer extends WebGLRenderer {} - -WebGL1Renderer.prototype.isWebGL1Renderer = true; - -export { WebGL1Renderer }; diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 1a4a49a7e2740c..289b696ac38878 100644 --- a/src/renderers/WebGLRenderer.js +++ b/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; diff --git a/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js index 1ab95c428e95d7..bb21631cc92f72 100644 --- a/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +++ b/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. diff --git a/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js index 4b4fedba663b00..553e8bd84f2f45 100644 --- a/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +++ b/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; diff --git a/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js index d1ebc03c9c8288..57798de714bdea 100644 --- a/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +++ b/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 `; diff --git a/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js b/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js index e1b4d21e074820..c1007510f4f532 100644 --- a/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +++ b/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 `; diff --git a/src/renderers/webgl/WebGLAttributes.js b/src/renderers/webgl/WebGLAttributes.js index bf473c56df8c38..4733ef99f27697 100644 --- a/src/renderers/webgl/WebGLAttributes.js +++ b/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 diff --git a/src/renderers/webgl/WebGLBindingStates.js b/src/renderers/webgl/WebGLBindingStates.js index 0d0571561070c0..d63aeb7f35281a 100644 --- a/src/renderers/webgl/WebGLBindingStates.js +++ b/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 ) { diff --git a/src/renderers/webgl/WebGLBufferRenderer.js b/src/renderers/webgl/WebGLBufferRenderer.js index 3589f73645b604..79c931faf1307d 100644 --- a/src/renderers/webgl/WebGLBufferRenderer.js +++ b/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 ++ ) { diff --git a/src/renderers/webgl/WebGLCapabilities.js b/src/renderers/webgl/WebGLCapabilities.js index ca4c2dd5aa8edd..bd6b1e428aedb7 100644 --- a/src/renderers/webgl/WebGLCapabilities.js +++ b/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 diff --git a/src/renderers/webgl/WebGLExtensions.js b/src/renderers/webgl/WebGLExtensions.js index a654f74b870495..579244c71b45d6 100644 --- a/src/renderers/webgl/WebGLExtensions.js +++ b/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' ); diff --git a/src/renderers/webgl/WebGLIndexedBufferRenderer.js b/src/renderers/webgl/WebGLIndexedBufferRenderer.js index 4c708b4e1bf918..8315f3da9e647f 100644 --- a/src/renderers/webgl/WebGLIndexedBufferRenderer.js +++ b/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 ++ ) { diff --git a/src/renderers/webgl/WebGLLights.js b/src/renderers/webgl/WebGLLights.js index 5f97910db185b2..1a971f0eb657fd 100644 --- a/src/renderers/webgl/WebGLLights.js +++ b/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; } diff --git a/src/renderers/webgl/WebGLMorphtargets.js b/src/renderers/webgl/WebGLMorphtargets.js index 8e39bcfa99578d..44eb7c87c99655 100644 --- a/src/renderers/webgl/WebGLMorphtargets.js +++ b/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 { diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index 4f2b52a1065ebb..cf8a2a8e188337 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/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 diff --git a/src/renderers/webgl/WebGLPrograms.js b/src/renderers/webgl/WebGLPrograms.js index c58f21532161b7..4b0f07f7028b68 100644 --- a/src/renderers/webgl/WebGLPrograms.js +++ b/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(); diff --git a/src/renderers/webgl/WebGLRenderStates.js b/src/renderers/webgl/WebGLRenderStates.js index dec59885fa115e..23682f254f08e5 100644 --- a/src/renderers/webgl/WebGLRenderStates.js +++ b/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 { diff --git a/src/renderers/webgl/WebGLState.js b/src/renderers/webgl/WebGLState.js index 5f86b2cdf17798..9f21f45001097b 100644 --- a/src/renderers/webgl/WebGLState.js +++ b/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 ); diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index e4c81b2500e466..8844d9f4e7b340 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/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.' ); } diff --git a/src/renderers/webgl/WebGLUniformsGroups.js b/src/renderers/webgl/WebGLUniformsGroups.js index d6ae68334931b2..fd1ba6aa0a1528 100644 --- a/src/renderers/webgl/WebGLUniformsGroups.js +++ b/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 ) { diff --git a/src/renderers/webgl/WebGLUtils.js b/src/renderers/webgl/WebGLUtils.js index 989c84989c9c0b..35891c7d9c5efa 100644 --- a/src/renderers/webgl/WebGLUtils.js +++ b/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) diff --git a/src/renderers/webxr/WebXRManager.js b/src/renderers/webxr/WebXRManager.js index fa9a5738c68302..56a6df92f03b04 100644 --- a/src/renderers/webxr/WebXRManager.js +++ b/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, diff --git a/test/unit/src/constants.tests.js b/test/unit/src/constants.tests.js index f0329609578aaf..313b5f9a2eb02f 100644 --- a/test/unit/src/constants.tests.js +++ b/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' ); - } ); } ); diff --git a/test/unit/src/renderers/WebGL1Renderer.tests.js b/test/unit/src/renderers/WebGL1Renderer.tests.js deleted file mode 100644 index 2ff820f592991e..00000000000000 --- a/test/unit/src/renderers/WebGL1Renderer.tests.js +++ /dev/null @@ -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' ); - - } ); - - } ); - -} ); diff --git a/test/unit/three.source.unit.js b/test/unit/three.source.unit.js index b303c47b387557..22316aa5d2627b 100644 --- a/test/unit/three.source.unit.js +++ b/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';