From 50d05fc2345833cad0ae74a88f983053d8943c31 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Wed, 20 Feb 2019 11:36:49 +0100 Subject: [PATCH] WebGLRenderer: Add activeCubeFace/activeMipMapLevel to setRenderTarget() --- docs/api/en/renderers/WebGLRenderTargetCube.html | 6 ------ docs/api/en/renderers/WebGLRenderer.html | 6 ++++-- docs/api/zh/renderers/WebGLRenderTargetCube.html | 5 ----- docs/api/zh/renderers/WebGLRenderer.html | 6 ++++-- .../js/loaders/EquirectangularToCubeGenerator.js | 4 +--- examples/js/pmrem/PMREMGenerator.js | 3 +-- src/cameras/CubeCamera.js | 14 ++++++-------- src/renderers/WebGLRenderTargetCube.d.ts | 2 -- src/renderers/WebGLRenderTargetCube.js | 3 --- src/renderers/WebGLRenderer.d.ts | 14 +++++++------- src/renderers/WebGLRenderer.js | 6 +++--- 11 files changed, 26 insertions(+), 43 deletions(-) diff --git a/docs/api/en/renderers/WebGLRenderTargetCube.html b/docs/api/en/renderers/WebGLRenderTargetCube.html index 4140fb00c3..7a0b6c444d 100644 --- a/docs/api/en/renderers/WebGLRenderTargetCube.html +++ b/docs/api/en/renderers/WebGLRenderTargetCube.html @@ -50,12 +50,6 @@

Properties

-

[property:integer activeCubeFace]

-

- The activeCubeFace property corresponds to a cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) and is - used and set internally by the [page:CubeCamera]. -

-

See [page:WebGLRenderTarget] for inherited properties

diff --git a/docs/api/en/renderers/WebGLRenderer.html b/docs/api/en/renderers/WebGLRenderer.html index 598b44c724..2eee5a60bd 100644 --- a/docs/api/en/renderers/WebGLRenderer.html +++ b/docs/api/en/renderers/WebGLRenderer.html @@ -434,9 +434,11 @@

[method:null setPixelRatio]( [param:number value] )

Sets device pixel ratio. This is usually used for HiDPI device to prevent bluring output canvas.

-

[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget] )

+

[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget], [param:Integer activeCubeFace], [param:Integer activeMipMapLevel] )

- renderTarget -- The [page:WebGLRenderTarget renderTarget] that needs to be activated (optional).

+ renderTarget -- The [page:WebGLRenderTarget renderTarget] that needs to be activated (optional).
+ activeCubeFace -- Specifies the active cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) of [page:WebGLRenderTargetCube] (optional).
+ activeMipMapLevel -- Specifies the active mipmap level (optional).

This method sets the active rendertarget. If the parameter is omitted the canvas is set as the active rendertarget.

diff --git a/docs/api/zh/renderers/WebGLRenderTargetCube.html b/docs/api/zh/renderers/WebGLRenderTargetCube.html index 4426ed2c57..26c8b9fbcf 100644 --- a/docs/api/zh/renderers/WebGLRenderTargetCube.html +++ b/docs/api/zh/renderers/WebGLRenderTargetCube.html @@ -47,11 +47,6 @@

属性

-

[property:integer activeCubeFace]

-

- activeCubeFace属性对应立方体的面(PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) 并由[page:CubeCamera]内部使用和设置 -

-

继承属性,请参阅[page:WebGLRenderTarget]

diff --git a/docs/api/zh/renderers/WebGLRenderer.html b/docs/api/zh/renderers/WebGLRenderer.html index ddf6a9cb74..83d95dae67 100644 --- a/docs/api/zh/renderers/WebGLRenderer.html +++ b/docs/api/zh/renderers/WebGLRenderer.html @@ -387,9 +387,11 @@

[method:null setPixelRatio]( [param:number value] )

设置设备像素比。通常用于避免HiDPI设备上绘图模糊

-

[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget] )

+

[method:null setRenderTarget]( [param:WebGLRenderTarget renderTarget], [param:Integer activeCubeFace], [param:Integer activeMipMapLevel] )

- renderTarget -- 需要被激活的[page:WebGLRenderTarget renderTarget](可选).

+ renderTarget -- 需要被激活的[page:WebGLRenderTarget renderTarget](可选).
+ activeCubeFace -- Specifies the active cube side (PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5) of [page:WebGLRenderTargetCube] (optional).
+ activeMipMapLevel -- Specifies the active mipmap level (optional).

该方法设置活跃rendertarget. 参数缺省则将canvas设置成活跃rendertarget

diff --git a/examples/js/loaders/EquirectangularToCubeGenerator.js b/examples/js/loaders/EquirectangularToCubeGenerator.js index 2859da711d..2ee867448c 100644 --- a/examples/js/loaders/EquirectangularToCubeGenerator.js +++ b/examples/js/loaders/EquirectangularToCubeGenerator.js @@ -162,15 +162,13 @@ THREE.EquirectangularToCubeGenerator = ( function () { for ( var i = 0; i < 6; i ++ ) { - this.renderTarget.activeCubeFace = i; - var v = this.views[ i ]; camera.position.set( 0, 0, 0 ); camera.up.set( v.u[ 0 ], v.u[ 1 ], v.u[ 2 ] ); camera.lookAt( v.t[ 0 ], v.t[ 1 ], v.t[ 2 ] ); - renderer.setRenderTarget( this.renderTarget ); + renderer.setRenderTarget( this.renderTarget, i ); renderer.clear(); renderer.render( scene, camera ); diff --git a/examples/js/pmrem/PMREMGenerator.js b/examples/js/pmrem/PMREMGenerator.js index 73e49669f8..8fcc3a4128 100644 --- a/examples/js/pmrem/PMREMGenerator.js +++ b/examples/js/pmrem/PMREMGenerator.js @@ -135,9 +135,8 @@ THREE.PMREMGenerator = ( function () { renderToCubeMapTargetFace: function ( renderer, renderTarget, faceIndex ) { - renderTarget.activeCubeFace = faceIndex; shader.uniforms[ 'faceIndex' ].value = faceIndex; - renderer.setRenderTarget( renderTarget ); + renderer.setRenderTarget( renderTarget, faceIndex ); renderer.clear(); renderer.render( scene, camera ); diff --git a/src/cameras/CubeCamera.js b/src/cameras/CubeCamera.js index ae3ae3ecf2..d03cb61f5f 100644 --- a/src/cameras/CubeCamera.js +++ b/src/cameras/CubeCamera.js @@ -65,26 +65,24 @@ function CubeCamera( near, far, cubeResolution, options ) { renderTarget.texture.generateMipmaps = false; - renderTarget.activeCubeFace = 0; - renderer.setRenderTarget( renderTarget ); - + renderer.setRenderTarget( renderTarget, 0 ); renderer.render( scene, cameraPX ); - renderTarget.activeCubeFace = 1; + renderer.setRenderTarget( renderTarget, 1 ); renderer.render( scene, cameraNX ); - renderTarget.activeCubeFace = 2; + renderer.setRenderTarget( renderTarget, 2 ); renderer.render( scene, cameraPY ); - renderTarget.activeCubeFace = 3; + renderer.setRenderTarget( renderTarget, 3 ); renderer.render( scene, cameraNY ); - renderTarget.activeCubeFace = 4; + renderer.setRenderTarget( renderTarget, 4 ); renderer.render( scene, cameraPZ ); renderTarget.texture.generateMipmaps = generateMipmaps; - renderTarget.activeCubeFace = 5; + renderer.setRenderTarget( renderTarget, 5 ); renderer.render( scene, cameraNZ ); renderer.setRenderTarget( currentRenderTarget ); diff --git a/src/renderers/WebGLRenderTargetCube.d.ts b/src/renderers/WebGLRenderTargetCube.d.ts index 877effb866..e26cf2b42e 100644 --- a/src/renderers/WebGLRenderTargetCube.d.ts +++ b/src/renderers/WebGLRenderTargetCube.d.ts @@ -10,6 +10,4 @@ export class WebGLRenderTargetCube extends WebGLRenderTarget { options?: WebGLRenderTargetOptions ); - activeCubeFace: number; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5 - activeMipMapLevel: number; } diff --git a/src/renderers/WebGLRenderTargetCube.js b/src/renderers/WebGLRenderTargetCube.js index 6662016939..b4c92a6f34 100644 --- a/src/renderers/WebGLRenderTargetCube.js +++ b/src/renderers/WebGLRenderTargetCube.js @@ -8,9 +8,6 @@ function WebGLRenderTargetCube( width, height, options ) { WebGLRenderTarget.call( this, width, height, options ); - this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5 - this.activeMipMapLevel = 0; - } WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype ); diff --git a/src/renderers/WebGLRenderer.d.ts b/src/renderers/WebGLRenderer.d.ts index 7a678b05c6..5f93afcc90 100644 --- a/src/renderers/WebGLRenderer.d.ts +++ b/src/renderers/WebGLRenderer.d.ts @@ -321,13 +321,13 @@ export class WebGLRenderer implements Renderer { /** * Render a scene using a camera. - * The render is done to a previously specified {@link WebGLRenderTarget#renderTarget .renderTarget} set by calling + * The render is done to a previously specified {@link WebGLRenderTarget#renderTarget .renderTarget} set by calling * {@link WebGLRenderer#setRenderTarget .setRenderTarget} or to the canvas as usual. - * - * By default render buffers are cleared before rendering but you can prevent this by setting the property - * {@link WebGLRenderer#autoClear autoClear} to false. If you want to prevent only certain buffers being cleared - * you can set either the {@link WebGLRenderer#autoClearColor autoClearColor}, - * {@link WebGLRenderer#autoClearStencil autoClearStencil} or {@link WebGLRenderer#autoClearDepth autoClearDepth} + * + * By default render buffers are cleared before rendering but you can prevent this by setting the property + * {@link WebGLRenderer#autoClear autoClear} to false. If you want to prevent only certain buffers being cleared + * you can set either the {@link WebGLRenderer#autoClearColor autoClearColor}, + * {@link WebGLRenderer#autoClearStencil autoClearStencil} or {@link WebGLRenderer#autoClearDepth autoClearDepth} * properties to false. To forcibly clear one ore more buffers call {@link WebGLRenderer#clear .clear}. */ render( @@ -346,7 +346,7 @@ export class WebGLRenderer implements Renderer { * @deprecated Use {@link WebGLRenderer#getRenderTarget .getRenderTarget()} instead. */ getCurrentRenderTarget(): RenderTarget; - setRenderTarget(renderTarget?: RenderTarget): void; + setRenderTarget(renderTarget?: RenderTarget, activeCubeFace?: number, activeMipMapLevel?: number): void; readRenderTargetPixels( renderTarget: RenderTarget, x: number, diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 3967a1950e..018662d2c0 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -2548,7 +2548,7 @@ function WebGLRenderer( parameters ) { }; - this.setRenderTarget = function ( renderTarget ) { + this.setRenderTarget = function ( renderTarget, activeCubeFace, activeMipMapLevel ) { _currentRenderTarget = renderTarget; @@ -2567,7 +2567,7 @@ function WebGLRenderer( parameters ) { if ( renderTarget.isWebGLRenderTargetCube ) { - framebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ]; + framebuffer = __webglFramebuffer[ activeCubeFace || 0 ]; isCube = true; } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { @@ -2606,7 +2606,7 @@ function WebGLRenderer( parameters ) { if ( isCube ) { var textureProperties = properties.get( renderTarget.texture ); - _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace || 0, textureProperties.__webglTexture, activeMipMapLevel || 0 ); } -- GitLab