Skip to content

Commit b59b5e7

Browse files
authored
WebGPURenderer: Introduce initRenderTarget(). (mrdoob#32867)
1 parent 526100b commit b59b5e7

4 files changed

Lines changed: 57 additions & 6 deletions

File tree

examples/jsm/tsl/display/TRAANode.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -376,13 +376,10 @@ class TRAANode extends TempNode {
376376

377377
if ( needsRestart === true ) {
378378

379-
// bind and clear render target to make sure they are initialized after the resize which triggers a dispose()
379+
// make sure render targets are initialized after the resize which triggers a dispose()
380380

381-
renderer.setRenderTarget( this._historyRenderTarget );
382-
renderer.clear();
383-
384-
renderer.setRenderTarget( this._resolveRenderTarget );
385-
renderer.clear();
381+
renderer.initRenderTarget( this._historyRenderTarget );
382+
renderer.initRenderTarget( this._resolveRenderTarget );
386383

387384
// make sure to reset the history with the contents of the beauty buffer otherwise subsequent frames after the
388385
// resize will fade from a darker color to the correct one because the history was cleared with black.

src/renderers/common/Backend.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,14 @@ class Backend {
691691

692692
}
693693

694+
/**
695+
* Initializes the render target defined in the given render context.
696+
*
697+
* @abstract
698+
* @param {RenderContext} renderContext - The render context.
699+
*/
700+
initRenderTarget( /*renderContext*/ ) {}
701+
694702
/**
695703
* Sets a dictionary for the given object into the
696704
* internal data structure.

src/renderers/common/Renderer.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2689,6 +2689,37 @@ class Renderer {
26892689

26902690
}
26912691

2692+
/**
2693+
* Initializes the given render target.
2694+
*
2695+
* @param {RenderTarget} renderTarget - The render target to intialize.
2696+
*/
2697+
initRenderTarget( renderTarget ) {
2698+
2699+
if ( this._initialized === false ) {
2700+
2701+
throw new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
2702+
2703+
}
2704+
2705+
this._textures.updateRenderTarget( renderTarget );
2706+
2707+
const renderTargetData = this._textures.get( renderTarget );
2708+
2709+
const renderContext = this._renderContexts.get( renderTarget );
2710+
2711+
renderContext.textures = renderTargetData.textures;
2712+
renderContext.depthTexture = renderTargetData.depthTexture;
2713+
renderContext.width = renderTargetData.width;
2714+
renderContext.height = renderTargetData.height;
2715+
renderContext.renderTarget = renderTarget;
2716+
renderContext.depth = renderTarget.depthBuffer;
2717+
renderContext.stencil = renderTarget.stencilBuffer;
2718+
2719+
this.backend.initRenderTarget( renderContext );
2720+
2721+
}
2722+
26922723
/**
26932724
* Copies the current bound framebuffer into the given texture.
26942725
*

src/renderers/webgl-fallback/WebGLBackend.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,6 +2011,21 @@ class WebGLBackend extends Backend {
20112011

20122012
}
20132013

2014+
/**
2015+
* Initializes the render target defined in the given render context.
2016+
*
2017+
* @param {RenderContext} renderContext - The render context.
2018+
*/
2019+
initRenderTarget( renderContext ) {
2020+
2021+
const { gl, state } = this;
2022+
2023+
this._setFramebuffer( renderContext );
2024+
2025+
state.bindFramebuffer( gl.FRAMEBUFFER, null );
2026+
2027+
}
2028+
20142029
/**
20152030
* Configures the active framebuffer from the given render context.
20162031
*

0 commit comments

Comments
 (0)