From 81a6080898b463437f9da9b9da87c653d1eba53e Mon Sep 17 00:00:00 2001 From: aardgoose Date: Fri, 22 Sep 2023 08:36:19 +0100 Subject: [PATCH] wip shador --- .../jsm/nodes/lighting/AnalyticLightNode.js | 6 +++ examples/jsm/renderers/common/Renderer.js | 4 +- examples/jsm/renderers/webgl/WebGLBackend.js | 45 ++++++++++--------- .../jsm/renderers/webgpu/WebGPURenderer.js | 2 +- 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/examples/jsm/nodes/lighting/AnalyticLightNode.js b/examples/jsm/nodes/lighting/AnalyticLightNode.js index b3c75f7801cdc2..d72da74bf301e5 100644 --- a/examples/jsm/nodes/lighting/AnalyticLightNode.js +++ b/examples/jsm/nodes/lighting/AnalyticLightNode.js @@ -79,6 +79,12 @@ class AnalyticLightNode extends LightingNode { shadowCoord.z.add( bias ).mul( 2 ).sub( 1 ) // WebGPU: Convertion [ 0, 1 ] to [ - 1, 1 ] ); + shadowCoord = vec3( + shadowCoord.x, + shadowCoord.y.oneMinus(), // WebGPU: Flip Y + shadowCoord.z//.add( bias ) // .mul( 2 ).sub( 1 ) // WebGPU: Convertion [ 0, 1 ] to [ - 1, 1 ] + ); + const textureCompare = ( depthTexture, shadowCoord, compare ) => texture( depthTexture, shadowCoord ).compare( compare ); //const textureCompare = ( depthTexture, shadowCoord, compare ) => compare.step( texture( depthTexture, shadowCoord ) ); diff --git a/examples/jsm/renderers/common/Renderer.js b/examples/jsm/renderers/common/Renderer.js index 50df1a7bbfa408..70f28ad8d4cbf3 100644 --- a/examples/jsm/renderers/common/Renderer.js +++ b/examples/jsm/renderers/common/Renderer.js @@ -189,7 +189,7 @@ class Renderer { const renderContext = this._renderContexts.get( scene, camera, renderTarget ); const activeCubeFace = this._activeCubeFace; const activeMipmapLevel = this._activeMipmapLevel; - + this._lastRenderContext = this._currentRenderContext; this._currentRenderContext = renderContext; nodeFrame.renderId ++; @@ -327,12 +327,12 @@ class Renderer { // finish render pass + this._currentRenderContext = previousRenderState; this.backend.finishRender( renderContext ); // restore render tree nodeFrame.renderId = previousRenderId; - this._currentRenderContext = previousRenderState; this._lastRenderContext = renderContext; diff --git a/examples/jsm/renderers/webgl/WebGLBackend.js b/examples/jsm/renderers/webgl/WebGLBackend.js index 32e81b5ec22353..520aac032028e0 100644 --- a/examples/jsm/renderers/webgl/WebGLBackend.js +++ b/examples/jsm/renderers/webgl/WebGLBackend.js @@ -63,7 +63,7 @@ class WebGLBackend extends Backend { const glContext = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgl2' ); this.gl = new Proxy( glContext, debugHandler ); -// this.gl = glContext; + this.gl = glContext; this.extensions = new WebGLExtensions( this ); this.attributeUtils = new WebGLAttributeUtils( this ); @@ -135,21 +135,23 @@ class WebGLBackend extends Backend { finishRender( renderContext ) { - console.log( renderContext ); - const gl = this.gl; + const lastRenderContext = this.renderer._lastRenderContext; - const fb = this.get( renderContext ).framebuffer; + if ( lastRenderContext !== renderContext && lastRenderContext !== null) { - if ( fb === undefined ) return; + this._setFramebuffer( lastRenderContext ); - //console.warn( 'Abstract class.' ); - gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb ); + if ( lastRenderContext.viewport ) { + + this.updateViewport( lastRenderContext ); + + } else { - if ( renderContext.depthTexture !== null ) { + const gl = this.gl; - const { textureGPU } = this.get( renderContext.depthTexture ); + gl.viewport( 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight ); - gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, null, 0 ); + } } @@ -225,15 +227,6 @@ class WebGLBackend extends Backend { } else if ( binding.isSampledTexture ) { - const t = this.get( bindingData.textureGPU ); - -// if ( t.fb ) { - -// gl.bindFramebuffer( gl.READ_FRAMEBUFFER, t.fb ); -// gl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, null, 0 ); - -// } - gl.activeTexture( gl.TEXTURE0 + index ); gl.bindTexture( bindingData.glTextureType, bindingData.textureGPU ); @@ -249,7 +242,6 @@ class WebGLBackend extends Backend { let { vaoGPU } = this.get( renderObject ); - if ( vaoGPU === undefined ) { vaoGPU = this.createVao( renderObject ); @@ -891,16 +883,25 @@ if ( error < 100 ) { console.log( this.get( texture ), texture ); error++ } } else { + gl.activeTexture( gl.TEXTURE0 + 0 ); + gl.bindTexture( gl.TEXTURE_2D, null ); + + gl.activeTexture( gl.TEXTURE0 + 1 ); + gl.bindTexture( gl.TEXTURE_2D, null ); + gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb ); +/* if ( renderContext.depthTexture !== null ) { -console.log( 'rebind'); + //console.log( 'rebind'); + const { textureGPU } = this.get( renderContext.depthTexture ); + gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, textureGPU, 0 ); } - +*/ } } else { diff --git a/examples/jsm/renderers/webgpu/WebGPURenderer.js b/examples/jsm/renderers/webgpu/WebGPURenderer.js index c518a7e3270b86..da8d491cabe4f2 100644 --- a/examples/jsm/renderers/webgpu/WebGPURenderer.js +++ b/examples/jsm/renderers/webgpu/WebGPURenderer.js @@ -22,7 +22,7 @@ class WebGPURenderer extends Renderer { let BackendClass; - if ( ! WebGPU.isAvailable() ) { + if ( !WebGPU.isAvailable() ) { BackendClass = WebGPUBackend;