diff --git a/docs/api/ar/renderers/WebGLMultipleRenderTargets.html b/docs/api/ar/renderers/WebGLMultipleRenderTargets.html deleted file mode 100644 index 31298f1b2bf47d..00000000000000 --- a/docs/api/ar/renderers/WebGLMultipleRenderTargets.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - [page:WebGLRenderTarget] → - -

[name]

- -

- هدف عرض خاص يتيح لشادر الجزء الكتابة إلى عدة - قوام. هذا النهج مفيد لتقنيات العرض المتقدمة مثل - معالجة ما بعد الإنتاج أو العرض المؤجل. انتبه: [name] يمكن استخدامه فقط - مع سياق عرض WebGL 2. -

- -

أمثلة (Examples)

- -

- [example:webgl2_multiple_rendertargets webgl2 / multiple / rendertargets ] -

- -

المنشئ (Constructor)

- -

- [name]([param:Number width], [param:Number height], [param:Number count], - [param:Object options]) -

- -

- [page:Number width] - عرض هدف العرض. الافتراضي هو `1`.
- [page:Number height] - ارتفاع هدف العرض. الافتراضي هو `1`.
- [page:Number count] - عدد أهداف العرض. الافتراضي هو `1`.
- - options - (كائن اختياري يحمل معلمات القوام لـ - قوام الهدف المُنشأ تلقائيًا وعمق المخزن/مخططات المخزن booleans. لـ - شرح معلمات القوام انظر [page:Texture Texture]. لـ - قائمة بالخيارات الصالحة ، انظر [page:WebGLRenderTarget WebGLRenderTarget]).

-

- -

الخصائص (Properties)

- -

[property:Boolean isWebGLMultipleRenderTargets]

-

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

- -

[property:Array texture]

-

- يتم استبدال خاصية القوام في [name] واستبدالها بمصفوفة. - تحتوي هذه المصفوفة على مراجع [page:WebGLRenderTarget.texture texture] - من أهداف العرض المعنية. -

- -

- خصائص [page:WebGLRenderTarget WebGLRenderTarget] متوفرة على - هذه الفئة. -

- -

الطرق (Methods)

- -

- طرق [page:WebGLRenderTarget WebGLRenderTarget] متوفرة على هذه - فئة. -

- -

المصدر (Source)

- -

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

- - diff --git a/docs/api/en/renderers/WebGLMultipleRenderTargets.html b/docs/api/en/renderers/WebGLMultipleRenderTargets.html deleted file mode 100644 index d024a0b3d85cdf..00000000000000 --- a/docs/api/en/renderers/WebGLMultipleRenderTargets.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - [page:WebGLRenderTarget] → - -

[name]

- -

- A special render target that enables a fragment shader to write to several - textures. This approach is useful for advanced rendering techniques like - post-processing or deferred rendering. Heads up: [name] can only be used - with a WebGL 2 rendering context. -

- -

Examples

- -

- [example:webgl2_multiple_rendertargets webgl2 / multiple / rendertargets ] -

- -

Constructor

- -

- [name]([param:Number width], [param:Number height], [param:Number count], - [param:Object options]) -

- -

- [page:Number width] - The width of the render target. Default is `1`.
- [page:Number height] - The height of the render target. Default is `1`.
- [page:Number count] - The number of render targets. Default is `1`.
- - options - (optional object that holds texture parameters for an - auto-generated target texture and depthBuffer/stencilBuffer booleans. For - an explanation of the texture parameters see [page:Texture Texture]. For a - list of valid options, see [page:WebGLRenderTarget WebGLRenderTarget]).

-

- -

Properties

- -

[property:Boolean isWebGLMultipleRenderTargets]

-

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

- -

[property:Array texture]

-

- The texture property is overwritten in [name] and replaced with an array. - This array holds the [page:WebGLRenderTarget.texture texture] references - of the respective render targets. -

- -

- [page:WebGLRenderTarget WebGLRenderTarget] properties are available on - this class. -

- -

Methods

- -

- [page:WebGLRenderTarget WebGLRenderTarget] methods are available on this - class. -

- -

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 43d03fd516b818..34eea3fd0fe9ec 100644 --- a/docs/api/en/renderers/WebGLRenderTarget.html +++ b/docs/api/en/renderers/WebGLRenderTarget.html @@ -49,7 +49,8 @@


[page:Boolean depthBuffer] - default is `true`.
[page:Boolean stencilBuffer] - default is `false`.
- [page:Number samples] - default is `0`.

+ [page:Number samples] - default is `0`.
+ [page:Number count] - default is `1`.

Creates a new [name]

@@ -83,6 +84,12 @@

[property:Texture texture]

further processing.

+

[property:Texture textures]

+

+ An array holding the [page:WebGLRenderTarget.texture texture] references + of multiple render targets configured with the [page:Number count] option. +

+

[property:Boolean depthBuffer]

Renders to the depth buffer. Default is true.

diff --git a/docs/api/it/renderers/WebGLMultipleRenderTargets.html b/docs/api/it/renderers/WebGLMultipleRenderTargets.html deleted file mode 100644 index 2815d4ef168e15..00000000000000 --- a/docs/api/it/renderers/WebGLMultipleRenderTargets.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - [page:WebGLRenderTarget] → - -

[name]

- -

- Un target di rendering speciale che consente a un fragment shader di scrivere su più texture. - Questo approccio è utile per le tecniche di rendering avanzate come la post-eleborazione o il rendering differito. - - Attenzione: [name] può solo essere utilizzato in un contesto di rendering WebGL 2. -

- -

Esempi

- -

- [example:webgl2_multiple_rendertargets webgl2 / multiple / rendertargets ] -

- -

Costruttore

- - -

[name]([param:Number width], [param:Number height], [param:Number count], [param:Object options])

- -

- [page:Number width] - La larghezza del target di rendering. Il valore predefinito è `1`.
- [page:Number height] - L'altezza del target di rendering. Il valore predefinito è `1`.
- [page:Number count] - Il numero di target di rendering. Il valore predefinito è `1`.
- - options - (oggetto opzionale che contiene i parametri della texture per una texture target auto generata - e i booleani depthBuffer/stencilBuffer. Per una spiegazione dei parametri della texture consultare [page:Texture Texture]. - Per un elenco di opzioni valide, consultare [page:WebGLRenderTarget WebGLRenderTarget].)

-

- -

Proprietà

- -

[property:Boolean isWebGLMultipleRenderTargets]

-

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

- -

[property:Array texture]

-

- La proprietà texture viene sovrascritta in [name] e sostituita con un array. Questo array contiene i - riferimenti alla [page:WebGLRenderTarget.texture texture] dei rispettivi target di rendering. -

- -

Le proprietà [page:WebGLRenderTarget WebGLRenderTarget] sono disponibili su questa classe.

- -

Metodi

- -

I metodi [page:WebGLRenderTarget WebGLRenderTarget] sono disponibili su questa classe.

- -

Source

- -

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

- - diff --git a/docs/api/it/renderers/WebGLRenderTarget.html b/docs/api/it/renderers/WebGLRenderTarget.html index 8c52cb134d8166..c4904666dbe93e 100644 --- a/docs/api/it/renderers/WebGLRenderTarget.html +++ b/docs/api/it/renderers/WebGLRenderTarget.html @@ -42,7 +42,8 @@

[name]([param:Number width], [param:Number height], [param:Object options])< [page:Constant colorSpace] - il valore predefinito è [page:Textures NoColorSpace].
[page:Boolean depthBuffer] - il valore predefinito è `true`.
[page:Boolean stencilBuffer] - il valore predefinito è `false`.
- [page:Number samples] - il valore predefinito è 0.

+ [page:Number samples] - il valore predefinito è 0.
+ [page:Number count] - default is `1`.

Crea un nuovo [name]

@@ -84,6 +85,12 @@

[property:Texture texture]

Questa istanza della texture contiene i pixel renderizzati. Utilizzalo come input per ulteriori informazioni.

+

[property:Texture textures]

+

+ An array holding the [page:WebGLRenderTarget.texture texture] references + of multiple render targets configured with the [page:Number count] option. +

+

[property:Boolean depthBuffer]

Effettua il rendering al buffer di profondità. L'impostazione predefinita è `true`. diff --git a/docs/api/zh/renderers/WebGLMultipleRenderTargets.html b/docs/api/zh/renderers/WebGLMultipleRenderTargets.html deleted file mode 100644 index a266b8bba9fcf5..00000000000000 --- a/docs/api/zh/renderers/WebGLMultipleRenderTargets.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - [page:WebGLRenderTarget] → - -

[name]

- -

- 一个特殊的渲染目标,使片段着色器能够写入多个纹理。这种方法对于高级渲染技术很有用,例如后处理或延迟渲染。 - - 注意:[name]只能与 WebGL 2 渲染上下文一起使用。 -

- -

例子(Examples)

- -

- [example:webgl2_multiple_rendertargets webgl2 / multiple / rendertargets ] -

- -

构造器(Constructor)

- - -

[name]([param:Number width], [param:Number height], [param:Number count])

- -

- [page:Number width] - 渲染目标的宽度。默认为`1`。
- [page:Number height] - 渲染目标的高度。默认为`1`。
- [page:Number count] - 渲染目标的数量。默认为`1`。 -

- -

特性(Properties)

- -

[property:Boolean isWebGLMultipleRenderTargets]

-

- 只读标志,用于检查给定对象是否属于[name]类型。 -

- -

[property:Array texture]

-

- 纹理属性在[name]中被覆盖并替换为数组。该数组包含各个渲染目标的[page:WebGLRenderTarget.texture 纹理]引用。 -

- -

[page:WebGLRenderTarget WebGLRenderTarget]属性在此类上可用。

- -

方法(Methods)

- -

[page:WebGLRenderTarget WebGLRenderTarget]方法在此类上可用。

- -

源代码(Source)

- -

- [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 212aa3fb73b021..0bc5f9b38f27fa 100644 --- a/docs/api/zh/renderers/WebGLRenderTarget.html +++ b/docs/api/zh/renderers/WebGLRenderTarget.html @@ -38,7 +38,8 @@

[name]([param:Number width], [param:Number height], [param:Object options])< [page:Constant colorSpace] - 默认是[page:Textures NoColorSpace].
[page:Boolean depthBuffer] - 默认是`true`.
[page:Boolean stencilBuffer] - 默认是`false`.
- [page:Number samples] - 默认是`0`.

+ [page:Number samples] - 默认是`0`.
+ [page:Number count] - default is `1`.

创建一个新[name]

@@ -80,6 +81,12 @@

[property:Texture texture]

纹理实例保存这渲染的像素,用作进一步处理的输入值

+

[property:Texture textures]

+

+ An array holding the [page:WebGLRenderTarget.texture texture] references + of multiple render targets configured with the [page:Number count] option. +

+

[property:Boolean depthBuffer]

渲染到深度缓冲区。默认true. diff --git a/docs/list.json b/docs/list.json index 7e33832bf8bfb1..7e9de78832faa5 100644 --- a/docs/list.json +++ b/docs/list.json @@ -278,7 +278,6 @@ }, "Renderers": { - "WebGLMultipleRenderTargets": "api/en/renderers/WebGLMultipleRenderTargets", "WebGLRenderer": "api/en/renderers/WebGLRenderer", "WebGL1Renderer": "api/en/renderers/WebGL1Renderer", "WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget", @@ -720,7 +719,6 @@ }, "Renderers": { - "WebGLMultipleRenderTargets": "api/ar/renderers/WebGLMultipleRenderTargets", "WebGLRenderer": "api/ar/renderers/WebGLRenderer", "WebGL1Renderer": "api/ar/renderers/WebGL1Renderer", "WebGLRenderTarget": "api/ar/renderers/WebGLRenderTarget", @@ -1028,7 +1026,6 @@ }, "渲染器": { - "WebGLMultipleRenderTargets": "api/zh/renderers/WebGLMultipleRenderTargets", "WebGLRenderer": "api/zh/renderers/WebGLRenderer", "WebGL1Renderer": "api/zh/renderers/WebGL1Renderer", "WebGLRenderTarget": "api/zh/renderers/WebGLRenderTarget", @@ -1665,7 +1662,6 @@ }, "Renderers": { - "WebGLMultipleRenderTargets": "api/it/renderers/WebGLMultipleRenderTargets", "WebGLRenderer": "api/it/renderers/WebGLRenderer", "WebGL1Renderer": "api/it/renderers/WebGL1Renderer", "WebGLRenderTarget": "api/it/renderers/WebGLRenderTarget", @@ -2193,7 +2189,6 @@ }, "Renderers": { - "WebGLMultipleRenderTargets": "api/en/renderers/WebGLMultipleRenderTargets", "WebGLRenderer": "api/en/renderers/WebGLRenderer", "WebGL1Renderer": "api/en/renderers/WebGL1Renderer", "WebGLRenderTarget": "api/en/renderers/WebGLRenderTarget", diff --git a/examples/webgl2_multiple_rendertargets.html b/examples/webgl2_multiple_rendertargets.html index be5ee3a3b5f5bc..21596e161d7542 100644 --- a/examples/webgl2_multiple_rendertargets.html +++ b/examples/webgl2_multiple_rendertargets.html @@ -157,23 +157,20 @@ // Create a multi render target with Float buffers - renderTarget = new THREE.WebGLMultipleRenderTargets( + renderTarget = new THREE.WebGLRenderTarget( window.innerWidth * window.devicePixelRatio, window.innerHeight * window.devicePixelRatio, - 2 + { + count: 2, + minFilter: THREE.NearestFilter, + magFilter: THREE.NearestFilter + } ); - for ( let i = 0, il = renderTarget.texture.length; i < il; i ++ ) { - - renderTarget.texture[ i ].minFilter = THREE.NearestFilter; - renderTarget.texture[ i ].magFilter = THREE.NearestFilter; - - } - // Name our G-Buffer attachments for debugging - renderTarget.texture[ 0 ].name = 'diffuse'; - renderTarget.texture[ 1 ].name = 'normal'; + renderTarget.textures[ 0 ].name = 'diffuse'; + renderTarget.textures[ 1 ].name = 'normal'; // Scene setup @@ -216,8 +213,8 @@ vertexShader: document.querySelector( '#render-vert' ).textContent.trim(), fragmentShader: document.querySelector( '#render-frag' ).textContent.trim(), uniforms: { - tDiffuse: { value: renderTarget.texture[ 0 ] }, - tNormal: { value: renderTarget.texture[ 1 ] }, + tDiffuse: { value: renderTarget.textures[ 0 ] }, + tNormal: { value: renderTarget.textures[ 1 ] }, }, glslVersion: THREE.GLSL3 } ) diff --git a/src/Three.Legacy.js b/src/Three.Legacy.js index 8b137891791fe9..a7da2f2dcb82e0 100644 --- a/src/Three.Legacy.js +++ b/src/Three.Legacy.js @@ -1 +1,21 @@ +import { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js'; +export class WebGLMultipleRenderTargets extends WebGLRenderTarget { // @deprecated, r162 + + constructor( width = 1, height = 1, count = 1, options = {} ) { + + console.warn( 'THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.' ); + + super( width, height, { ...options, count } ); + + this.isWebGLMultipleRenderTargets = true; + + } + + get texture() { + + return this.textures; + + } + +} diff --git a/src/Three.js b/src/Three.js index aa29f27e2c4ace..6c0f476f9fc0c1 100644 --- a/src/Three.js +++ b/src/Three.js @@ -2,7 +2,6 @@ import { REVISION } from './constants.js'; export { WebGLArrayRenderTarget } from './renderers/WebGLArrayRenderTarget.js'; export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js'; -export { WebGLMultipleRenderTargets } from './renderers/WebGLMultipleRenderTargets.js'; export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js'; export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js'; export { WebGLRenderer } from './renderers/WebGLRenderer.js'; diff --git a/src/core/RenderTarget.js b/src/core/RenderTarget.js index 3b8758e0aa03b8..22f9325d09f6f6 100644 --- a/src/core/RenderTarget.js +++ b/src/core/RenderTarget.js @@ -35,15 +35,25 @@ class RenderTarget extends EventDispatcher { depthBuffer: true, stencilBuffer: false, depthTexture: null, - samples: 0 + samples: 0, + count: 1 }, options ); - this.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace ); - this.texture.isRenderTargetTexture = true; + const texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace ); - this.texture.flipY = false; - this.texture.generateMipmaps = options.generateMipmaps; - this.texture.internalFormat = options.internalFormat; + texture.flipY = false; + texture.generateMipmaps = options.generateMipmaps; + texture.internalFormat = options.internalFormat; + + this.textures = []; + + const count = options.count; + for ( let i = 0; i < count; i ++ ) { + + this.textures[ i ] = texture.clone(); + this.textures[ i ].isRenderTargetTexture = true; + + } this.depthBuffer = options.depthBuffer; this.stencilBuffer = options.stencilBuffer; @@ -54,6 +64,18 @@ class RenderTarget extends EventDispatcher { } + get texture() { + + return this.textures[ 0 ]; + + } + + set texture( value ) { + + this.textures[ 0 ] = value; + + } + setSize( width, height, depth = 1 ) { if ( this.width !== width || this.height !== height || this.depth !== depth ) { @@ -62,9 +84,13 @@ class RenderTarget extends EventDispatcher { this.height = height; this.depth = depth; - this.texture.image.width = width; - this.texture.image.height = height; - this.texture.image.depth = depth; + for ( let i = 0, il = this.textures.length; i < il; i ++ ) { + + this.textures[ i ].image.width = width; + this.textures[ i ].image.height = height; + this.textures[ i ].image.depth = depth; + + } this.dispose(); @@ -92,8 +118,14 @@ class RenderTarget extends EventDispatcher { this.viewport.copy( source.viewport ); - this.texture = source.texture.clone(); - this.texture.isRenderTargetTexture = true; + this.textures.length = 0; + + for ( let i = 0, il = source.textures.length; i < il; i ++ ) { + + this.textures[ i ] = source.textures[ i ].clone(); + this.textures[ i ].isRenderTargetTexture = true; + + } // ensure image object is not shared, see #20328 diff --git a/src/renderers/WebGLMultipleRenderTargets.js b/src/renderers/WebGLMultipleRenderTargets.js deleted file mode 100644 index 5d06373b8ce6c1..00000000000000 --- a/src/renderers/WebGLMultipleRenderTargets.js +++ /dev/null @@ -1,82 +0,0 @@ -import { WebGLRenderTarget } from './WebGLRenderTarget.js'; - -class WebGLMultipleRenderTargets extends WebGLRenderTarget { - - constructor( width = 1, height = 1, count = 1, options = {} ) { - - super( width, height, options ); - - this.isWebGLMultipleRenderTargets = true; - - const texture = this.texture; - - this.texture = []; - - for ( let i = 0; i < count; i ++ ) { - - this.texture[ i ] = texture.clone(); - this.texture[ i ].isRenderTargetTexture = true; - - } - - } - - setSize( width, height, depth = 1 ) { - - if ( this.width !== width || this.height !== height || this.depth !== depth ) { - - this.width = width; - this.height = height; - this.depth = depth; - - for ( let i = 0, il = this.texture.length; i < il; i ++ ) { - - this.texture[ i ].image.width = width; - this.texture[ i ].image.height = height; - this.texture[ i ].image.depth = depth; - - } - - this.dispose(); - - } - - this.viewport.set( 0, 0, width, height ); - this.scissor.set( 0, 0, width, height ); - - } - - copy( source ) { - - this.dispose(); - - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - - this.scissor.copy( source.scissor ); - this.scissorTest = source.scissorTest; - - this.viewport.copy( source.viewport ); - - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - - if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone(); - - this.texture.length = 0; - - for ( let i = 0, il = source.texture.length; i < il; i ++ ) { - - this.texture[ i ] = source.texture[ i ].clone(); - this.texture[ i ].isRenderTargetTexture = true; - - } - - return this; - - } - -} - -export { WebGLMultipleRenderTargets }; diff --git a/src/renderers/webgl/WebGLState.js b/src/renderers/webgl/WebGLState.js index 707a9dec629a25..0a9c48afb79a4e 100644 --- a/src/renderers/webgl/WebGLState.js +++ b/src/renderers/webgl/WebGLState.js @@ -493,33 +493,19 @@ function WebGLState( gl, extensions, capabilities ) { } - if ( renderTarget.isWebGLMultipleRenderTargets ) { + const textures = renderTarget.textures; - const textures = renderTarget.texture; + if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) { - if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) { + for ( let i = 0, il = textures.length; i < il; i ++ ) { - for ( let i = 0, il = textures.length; i < il; i ++ ) { - - drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i; - - } - - drawBuffers.length = textures.length; - - needsUpdate = true; + drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i; } - } else { + drawBuffers.length = textures.length; - if ( drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) { - - drawBuffers[ 0 ] = gl.COLOR_ATTACHMENT0; - - needsUpdate = true; - - } + needsUpdate = true; } diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index b515e5fa20cd2b..ca95568625850e 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -320,18 +320,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, function deallocateRenderTarget( renderTarget ) { - const texture = renderTarget.texture; - const renderTargetProperties = properties.get( renderTarget ); - const textureProperties = properties.get( texture ); - - if ( textureProperties.__webglTexture !== undefined ) { - - _gl.deleteTexture( textureProperties.__webglTexture ); - - info.memory.textures --; - - } if ( renderTarget.depthTexture ) { @@ -386,27 +375,24 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - if ( renderTarget.isWebGLMultipleRenderTargets ) { - - for ( let i = 0, il = texture.length; i < il; i ++ ) { + const textures = renderTarget.textures; - const attachmentProperties = properties.get( texture[ i ] ); - - if ( attachmentProperties.__webglTexture ) { + for ( let i = 0, il = textures.length; i < il; i ++ ) { - _gl.deleteTexture( attachmentProperties.__webglTexture ); + const attachmentProperties = properties.get( textures[ i ] ); - info.memory.textures --; + if ( attachmentProperties.__webglTexture ) { - } + _gl.deleteTexture( attachmentProperties.__webglTexture ); - properties.remove( texture[ i ] ); + info.memory.textures --; } + properties.remove( textures[ i ] ); + } - properties.remove( texture ); properties.remove( renderTarget ); } @@ -1536,7 +1522,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } else { - const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ]; + const textures = renderTarget.textures; for ( let i = 0; i < textures.length; i ++ ) { @@ -1700,7 +1686,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); - if ( renderTarget.isWebGLMultipleRenderTargets !== true ) { + const textures = renderTarget.textures; + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + const isMultipleRenderTargets = ( textures.length > 1 ); + const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + if ( ! isMultipleRenderTargets ) { if ( textureProperties.__webglTexture === undefined ) { @@ -1713,10 +1705,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); - const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true ); - const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; - // Setup framebuffer if ( isCube ) { @@ -1765,8 +1753,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( capabilities.drawBuffers ) { - const textures = renderTarget.texture; - for ( let i = 0, il = textures.length; i < il; i ++ ) { const attachmentProperties = properties.get( textures[ i ] ); @@ -1791,8 +1777,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) { - const textures = isMultipleRenderTargets ? texture : [ texture ]; - renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); renderTargetProperties.__webglColorRenderbuffer = []; @@ -1865,8 +1849,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } else if ( isMultipleRenderTargets ) { - const textures = renderTarget.texture; - for ( let i = 0, il = textures.length; i < il; i ++ ) { const attachment = textures[ i ]; @@ -1945,7 +1927,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; - const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ]; + const textures = renderTarget.textures; for ( let i = 0, il = textures.length; i < il; i ++ ) { @@ -1970,14 +1952,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) { - const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ]; + const textures = renderTarget.textures; const width = renderTarget.width; const height = renderTarget.height; let mask = _gl.COLOR_BUFFER_BIT; const invalidationArray = []; const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; const renderTargetProperties = properties.get( renderTarget ); - const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true ); + const isMultipleRenderTargets = ( textures.length > 1 ); // If MRT we need to remove FBO attachments if ( isMultipleRenderTargets ) { diff --git a/test/unit/src/renderers/WebGLMultipleRenderTargets.tests.js b/test/unit/src/renderers/WebGLMultipleRenderTargets.tests.js deleted file mode 100644 index 367d75888424da..00000000000000 --- a/test/unit/src/renderers/WebGLMultipleRenderTargets.tests.js +++ /dev/null @@ -1,59 +0,0 @@ -/* global QUnit */ - -import { WebGLMultipleRenderTargets } from '../../../../src/renderers/WebGLMultipleRenderTargets.js'; - -import { WebGLRenderTarget } from '../../../../src/renderers/WebGLRenderTarget.js'; - -export default QUnit.module( 'Renderers', () => { - - QUnit.module( 'WebGLMultipleRenderTargets', () => { - - // INHERITANCE - QUnit.test( 'Extending', ( assert ) => { - - const object = new WebGLMultipleRenderTargets(); - assert.strictEqual( - object instanceof WebGLRenderTarget, true, - 'WebGLMultipleRenderTargets extends from WebGLRenderTarget' - ); - - } ); - - // INSTANCING - QUnit.test( 'Instancing', ( assert ) => { - - const object = new WebGLMultipleRenderTargets(); - assert.ok( object, 'Can instantiate a WebGLMultipleRenderTargets.' ); - - } ); - - // PROPERTIES - QUnit.todo( 'texture', ( assert ) => { - - // must be Array of texture - assert.ok( false, 'everything\'s gonna be alright' ); - - } ); - - // PUBLIC - QUnit.todo( 'isWebGLMultipleRenderTargets', ( assert ) => { - - assert.ok( false, 'everything\'s gonna be alright' ); - - } ); - - QUnit.todo( 'setSize', ( assert ) => { - - assert.ok( false, 'everything\'s gonna be alright' ); - - } ); - - QUnit.todo( 'copy', ( assert ) => { - - assert.ok( false, 'everything\'s gonna be alright' ); - - } ); - - } ); - -} ); diff --git a/test/unit/src/renderers/WebGLRenderTarget.tests.js b/test/unit/src/renderers/WebGLRenderTarget.tests.js index d6055a9f5b1172..8b303640f50bbc 100644 --- a/test/unit/src/renderers/WebGLRenderTarget.tests.js +++ b/test/unit/src/renderers/WebGLRenderTarget.tests.js @@ -94,6 +94,12 @@ export default QUnit.module( 'Renderers', () => { } ); + QUnit.todo( 'textures', ( assert ) => { + + assert.ok( false, 'everything\'s gonna be alright' ); + + } ); + // PUBLIC QUnit.todo( 'isWebGLRenderTarget', ( assert ) => { diff --git a/test/unit/three.source.unit.js b/test/unit/three.source.unit.js index ebcf83101af21c..b303c47b387557 100644 --- a/test/unit/three.source.unit.js +++ b/test/unit/three.source.unit.js @@ -233,7 +233,6 @@ import './src/renderers/WebGL1Renderer.tests.js'; import './src/renderers/WebGL3DRenderTarget.tests.js'; import './src/renderers/WebGLArrayRenderTarget.tests.js'; import './src/renderers/WebGLCubeRenderTarget.tests.js'; -import './src/renderers/WebGLMultipleRenderTargets.tests.js'; import './src/renderers/WebGLRenderer.tests.js'; import './src/renderers/WebGLRenderTarget.tests.js';