2
0
Эх сурвалжийг харах

WebGLShadowMap: Fix rendering with WebGLRenderTargetCube.

Mugen87 6 жил өмнө
parent
commit
d311942498

+ 6 - 0
docs/api/en/renderers/WebGLRenderer.html

@@ -351,6 +351,12 @@
 		<h3>[method:WebGLContextAttributes getContextAttributes]()</h3>
 		<p>Returns an object that describes the attributes set on the WebGL context when it was created.</p>
 
+		<h3>[method:Integer getActiveCubeFace]()</h3>
+		<p>Returns the current active cube face.</p>
+
+		<h3>[method:Integer getActiveMipMapLevel]()</h3>
+		<p>Returns the current active mipmap level.</p>
+
 		<h3>[method:RenderTarget getRenderTarget]()</h3>
 		<p>Returns the current [page:RenderTarget RenderTarget] if there are; returns *null* otherwise.</p>
 

+ 10 - 0
src/renderers/WebGLRenderer.d.ts

@@ -354,6 +354,16 @@ export class WebGLRenderer implements Renderer {
 		camera: Camera
 	): void;
 
+	/**
+	 * Returns the current active cube face.
+	 */
+	getActiveCubeFace(): number;
+
+	/**
+	 * Returns the current active mipmap level.
+	 */
+	getActiveMipMapLevel(): number;
+
 	/**
    * Returns the current render target. If no render target is set, null is returned.
    */

+ 16 - 0
src/renderers/WebGLRenderer.js

@@ -135,6 +135,8 @@ function WebGLRenderer( parameters ) {
 
 		_framebuffer = null,
 
+		_currentActiveCubeFace = 0,
+		_currentActiveMipmapLevel = 0,
 		_currentRenderTarget = null,
 		_currentFramebuffer = null,
 		_currentMaterialId = - 1,
@@ -2420,6 +2422,18 @@ function WebGLRenderer( parameters ) {
 
 	};
 
+	this.getActiveCubeFace = function () {
+
+		return _currentActiveCubeFace;
+
+	};
+
+	this.getActiveMipMapLevel = function () {
+
+		return _currentActiveMipmapLevel;
+
+	};
+
 	this.getRenderTarget = function () {
 
 		return _currentRenderTarget;
@@ -2429,6 +2443,8 @@ function WebGLRenderer( parameters ) {
 	this.setRenderTarget = function ( renderTarget, activeCubeFace, activeMipMapLevel ) {
 
 		_currentRenderTarget = renderTarget;
+		_currentActiveCubeFace = activeCubeFace;
+		_currentActiveMipmapLevel = activeMipMapLevel;
 
 		if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {
 

+ 3 - 1
src/renderers/webgl/WebGLShadowMap.js

@@ -101,6 +101,8 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
 		if ( lights.length === 0 ) return;
 
 		var currentRenderTarget = _renderer.getRenderTarget();
+		var activeCubeFace = _renderer.getActiveCubeFace();
+		var activeMipMapLevel = _renderer.getActiveMipMapLevel();
 
 		var _state = _renderer.state;
 
@@ -258,7 +260,7 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
 
 		scope.needsUpdate = false;
 
-		_renderer.setRenderTarget( currentRenderTarget );
+		_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipMapLevel );
 
 	};