Skip to content

Commit 0422b32

Browse files
mvaligurskyMartin Valigursky
andauthored
Extract FramePass base class from RenderPass (#8523)
* refactor: extract FramePass base class from RenderPass Extract generic frame graph scheduling logic into a new FramePass base class. RenderPass now extends FramePass, keeping only GPU render pass specifics. 8 non-render subclasses renamed from RenderPass* to FramePass* and re-parented. CameraComponent.renderPasses renamed to framePasses with deprecated forwarding. Made-with: Cursor * updated comments --------- Co-authored-by: Martin Valigursky <mvaligursky@snapchat.com>
1 parent e76e37e commit 0422b32

22 files changed

+289
-213
lines changed

examples/src/examples/graphics/render-pass.example.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ assetListLoader.load(() => {
163163
tintPass.init(null);
164164

165165
// assign those two passes to the camera to be used instead of its default rendering
166-
cameraEntity.camera.renderPasses = [renderPass, tintPass];
166+
cameraEntity.camera.framePasses = [renderPass, tintPass];
167167

168168
// update things every frame
169169
let angle = 3;

examples/src/examples/test/radix-sort.example.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// @config DESCRIPTION Test example for RenderPassRadixSort - GPU radix sort using mipmap binary search
1+
// @config DESCRIPTION Test example for FramePassRadixSort - GPU radix sort using mipmap binary search
22
// @config HIDDEN
33
import files from 'examples/files';
44
import { data } from 'examples/observer';
@@ -86,15 +86,15 @@ let currentNumElements = 0;
8686
let currentNumBits = 0;
8787
/** @type {pc.Texture|null} */
8888
let keysTexture = null;
89-
/** @type {pc.RenderPassRadixSort|null} */
89+
/** @type {pc.FramePassRadixSort|null} */
9090
let radixSort = null;
9191
/** @type {number[]} */
9292
let originalValues = [];
9393
/** @type {boolean} */
9494
let needsRegen = true;
9595

9696
// Create render pass instance once
97-
radixSort = new pc.RenderPassRadixSort(device);
97+
radixSort = new pc.FramePassRadixSort(device);
9898

9999
// ==================== MATERIALS ====================
100100

src/extras/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ export { GltfExporter } from './exporters/gltf-exporter.js';
1515

1616
// RENDER PASSES
1717
export { SSAOTYPE_NONE, SSAOTYPE_LIGHTING, SSAOTYPE_COMBINE } from './render-passes/constants.js';
18-
export { RenderPassCameraFrame, CameraFrameOptions } from './render-passes/render-pass-camera-frame.js';
18+
export { FramePassCameraFrame, CameraFrameOptions } from './render-passes/frame-pass-camera-frame.js';
1919
export { RenderPassCompose } from './render-passes/render-pass-compose.js';
2020
export { RenderPassDepthAwareBlur } from './render-passes/render-pass-depth-aware-blur.js';
21-
export { RenderPassDof } from './render-passes/render-pass-dof.js';
21+
export { FramePassDof } from './render-passes/frame-pass-dof.js';
2222
export { RenderPassDownsample } from './render-passes/render-pass-downsample.js';
2323
export { RenderPassUpsample } from './render-passes/render-pass-upsample.js';
24-
export { RenderPassBloom } from './render-passes/render-pass-bloom.js';
24+
export { FramePassBloom } from './render-passes/frame-pass-bloom.js';
2525
export { RenderPassPrepass } from './render-passes/render-pass-prepass.js';
2626
export { RenderPassSsao } from './render-passes/render-pass-ssao.js';
2727
export { RenderPassTAA } from './render-passes/render-pass-taa.js';

src/extras/render-passes/camera-frame.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Color } from '../../core/math/color.js';
33
import { math } from '../../core/math/math.js';
44
import { PIXELFORMAT_111110F, PIXELFORMAT_RGBA16F, PIXELFORMAT_RGBA32F } from '../../platform/graphics/constants.js';
55
import { SSAOTYPE_NONE } from './constants.js';
6-
import { CameraFrameOptions, RenderPassCameraFrame } from './render-pass-camera-frame.js';
6+
import { CameraFrameOptions, FramePassCameraFrame } from './frame-pass-camera-frame.js';
77

88
/**
99
* @import { AppBase } from '../../framework/app-base.js'
@@ -364,7 +364,7 @@ class CameraFrame {
364364
options = new CameraFrameOptions();
365365

366366
/**
367-
* @type {RenderPassCameraFrame|null}
367+
* @type {FramePassCameraFrame|null}
368368
* @private
369369
*/
370370
renderPassCamera = null;
@@ -400,15 +400,15 @@ class CameraFrame {
400400

401401
enable() {
402402
this.renderPassCamera = this.createRenderPass();
403-
this.cameraComponent.renderPasses = [this.renderPassCamera];
403+
this.cameraComponent.framePasses = [this.renderPassCamera];
404404
}
405405

406406
disable() {
407407
const cameraComponent = this.cameraComponent;
408-
cameraComponent.renderPasses?.forEach((renderPass) => {
408+
cameraComponent.framePasses?.forEach((renderPass) => {
409409
renderPass.destroy();
410410
});
411-
cameraComponent.renderPasses = [];
411+
cameraComponent.framePasses = [];
412412
cameraComponent.rendering = null;
413413

414414
cameraComponent.jitter = 0;
@@ -420,13 +420,13 @@ class CameraFrame {
420420
}
421421

422422
/**
423-
* Creates a render pass for the camera frame. Override this method to utilize a custom render
424-
* pass, typically one that extends {@link RenderPassCameraFrame}.
423+
* Creates a frame pass for the camera frame. Override this method to utilize a custom frame
424+
* pass, typically one that extends {@link FramePassCameraFrame}.
425425
*
426-
* @returns {RenderPassCameraFrame} - The render pass.
426+
* @returns {FramePassCameraFrame} - The frame pass.
427427
*/
428428
createRenderPass() {
429-
return new RenderPassCameraFrame(this.app, this, this.cameraComponent, this.options);
429+
return new FramePassCameraFrame(this.app, this, this.cameraComponent, this.options);
430430
}
431431

432432
/**

src/extras/render-passes/render-pass-bloom.js renamed to src/extras/render-passes/frame-pass-bloom.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Color } from '../../core/math/color.js';
22
import { Texture } from '../../platform/graphics/texture.js';
33
import { BlendState } from '../../platform/graphics/blend-state.js';
44
import { RenderTarget } from '../../platform/graphics/render-target.js';
5-
import { RenderPass } from '../../platform/graphics/render-pass.js';
5+
import { FramePass } from '../../platform/graphics/frame-pass.js';
66
import { FILTER_LINEAR, ADDRESS_CLAMP_TO_EDGE } from '../../platform/graphics/constants.js';
77

88
import { RenderPassDownsample } from './render-pass-downsample.js';
@@ -20,7 +20,7 @@ import { math } from '../../core/math/math.js';
2020
* @category Graphics
2121
* @ignore
2222
*/
23-
class RenderPassBloom extends RenderPass {
23+
class FramePassBloom extends FramePass {
2424
bloomTexture;
2525

2626
blurLevel = 16;
@@ -156,4 +156,4 @@ class RenderPassBloom extends RenderPass {
156156
}
157157
}
158158

159-
export { RenderPassBloom };
159+
export { FramePassBloom };

src/extras/render-passes/render-pass-camera-frame.js renamed to src/extras/render-passes/frame-pass-camera-frame.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import { LAYERID_SKYBOX, LAYERID_IMMEDIATE, TONEMAP_NONE, GAMMA_NONE } from '../../scene/constants.js';
22
import { ADDRESS_CLAMP_TO_EDGE, FILTER_LINEAR, PIXELFORMAT_RGBA8 } from '../../platform/graphics/constants.js';
33
import { Texture } from '../../platform/graphics/texture.js';
4-
import { RenderPass } from '../../platform/graphics/render-pass.js';
5-
import { RenderPassColorGrab } from '../../scene/graphics/render-pass-color-grab.js';
4+
import { FramePass } from '../../platform/graphics/frame-pass.js';
5+
import { FramePassColorGrab } from '../../scene/graphics/frame-pass-color-grab.js';
66
import { RenderPassForward } from '../../scene/renderer/render-pass-forward.js';
77
import { RenderTarget } from '../../platform/graphics/render-target.js';
88

9-
import { RenderPassBloom } from './render-pass-bloom.js';
9+
import { FramePassBloom } from './frame-pass-bloom.js';
1010
import { RenderPassCompose } from './render-pass-compose.js';
1111
import { RenderPassTAA } from './render-pass-taa.js';
12-
import { RenderPassDof } from './render-pass-dof.js';
12+
import { FramePassDof } from './frame-pass-dof.js';
1313
import { RenderPassPrepass } from './render-pass-prepass.js';
1414
import { RenderPassSsao } from './render-pass-ssao.js';
1515
import { SSAOTYPE_COMBINE, SSAOTYPE_LIGHTING, SSAOTYPE_NONE } from './constants.js';
@@ -22,8 +22,8 @@ import { Color } from '../../core/math/color.js';
2222
*/
2323

2424
/**
25-
* Options used to configure the RenderPassCameraFrame. To modify these options, you must create
26-
* a new instance of the RenderPassCameraFrame with the desired settings.
25+
* Options used to configure the FramePassCameraFrame. To modify these options, you must create
26+
* a new instance of the FramePassCameraFrame with the desired settings.
2727
*
2828
* @ignore
2929
*/
@@ -76,7 +76,7 @@ const _defaultOptions = new CameraFrameOptions();
7676
* @category Graphics
7777
* @ignore
7878
*/
79-
class RenderPassCameraFrame extends RenderPass {
79+
class FramePassCameraFrame extends FramePass {
8080
app;
8181

8282
prePass;
@@ -375,7 +375,7 @@ class RenderPassCameraFrame extends RenderPass {
375375
// grab pass allowing us to copy the render scene into a texture and use for refraction
376376
// the source for the copy is the texture we render the scene to
377377
if (options.sceneColorMap) {
378-
this.colorGrabPass = new RenderPassColorGrab(device);
378+
this.colorGrabPass = new FramePassColorGrab(device);
379379
this.colorGrabPass.source = this.rt;
380380

381381
// if grab pass is used, render the layers after it (otherwise they were already rendered)
@@ -430,13 +430,13 @@ class RenderPassCameraFrame extends RenderPass {
430430

431431
if (this._bloomEnabled) {
432432
// create a bloom pass, which generates bloom texture based on the provided texture
433-
this.bloomPass = new RenderPassBloom(this.device, inputTexture, this.hdrFormat);
433+
this.bloomPass = new FramePassBloom(this.device, inputTexture, this.hdrFormat);
434434
}
435435
}
436436

437437
setupDofPass(options, inputTexture, inputTextureHalf) {
438438
if (options.dofEnabled) {
439-
this.dofPass = new RenderPassDof(this.device, this.cameraComponent, inputTexture, inputTextureHalf, options.dofHighQuality, options.dofNearBlur);
439+
this.dofPass = new FramePassDof(this.device, this.cameraComponent, inputTexture, inputTextureHalf, options.dofHighQuality, options.dofNearBlur);
440440
}
441441
}
442442

@@ -503,4 +503,4 @@ class RenderPassCameraFrame extends RenderPass {
503503
}
504504
}
505505

506-
export { RenderPassCameraFrame, CameraFrameOptions };
506+
export { FramePassCameraFrame, CameraFrameOptions };

src/extras/render-passes/render-pass-dof.js renamed to src/extras/render-passes/frame-pass-dof.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Color } from '../../core/math/color.js';
22
import { Texture } from '../../platform/graphics/texture.js';
33
import { RenderTarget } from '../../platform/graphics/render-target.js';
4-
import { RenderPass } from '../../platform/graphics/render-pass.js';
4+
import { FramePass } from '../../platform/graphics/frame-pass.js';
55
import { FILTER_LINEAR, ADDRESS_CLAMP_TO_EDGE, PIXELFORMAT_RG8, PIXELFORMAT_R8 } from '../../platform/graphics/constants.js';
66

77
import { RenderPassDownsample } from './render-pass-downsample.js';
@@ -19,7 +19,7 @@ import { RenderPassDofBlur } from './render-pass-dof-blur.js';
1919
* @category Graphics
2020
* @ignore
2121
*/
22-
class RenderPassDof extends RenderPass {
22+
class FramePassDof extends FramePass {
2323
focusDistance = 100;
2424

2525
focusRange = 50;
@@ -192,4 +192,4 @@ class RenderPassDof extends RenderPass {
192192
}
193193
}
194194

195-
export { RenderPassDof };
195+
export { FramePassDof };

src/framework/components/camera/component.js

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { PostEffectQueue } from './post-effect-queue.js';
1414
* @import { LayerComposition } from '../../../scene/composition/layer-composition.js'
1515
* @import { Layer } from '../../../scene/layer.js'
1616
* @import { Mat4 } from '../../../core/math/mat4.js'
17-
* @import { RenderPass } from '../../../platform/graphics/render-pass.js'
17+
* @import { FramePass } from '../../../platform/graphics/frame-pass.js'
1818
* @import { RenderTarget } from '../../../platform/graphics/render-target.js'
1919
* @import { FogParams } from '../../../scene/fog-params.js'
2020
* @import { Vec3 } from '../../../core/math/vec3.js'
@@ -205,26 +205,46 @@ class CameraComponent extends Component {
205205
}
206206

207207
/**
208-
* Sets the render passes the camera uses for rendering, instead of its default rendering.
208+
* Sets the frame passes the camera uses for rendering, instead of its default rendering.
209209
* Set this to null to return to the default behavior.
210210
*
211-
* @type {RenderPass[]|null}
211+
* @type {FramePass[]|null}
212212
* @ignore
213213
*/
214-
set renderPasses(passes) {
215-
this._camera.renderPasses = passes || [];
214+
set framePasses(passes) {
215+
this._camera.framePasses = passes || [];
216216
this.dirtyLayerCompositionCameras();
217217
this.system.app.scene.updateShaders = true;
218218
}
219219

220220
/**
221-
* Gets the render passes the camera uses for rendering, instead of its default rendering.
221+
* Gets the frame passes the camera uses for rendering, instead of its default rendering.
222222
*
223-
* @type {RenderPass[]}
223+
* @type {FramePass[]}
224+
* @ignore
225+
*/
226+
get framePasses() {
227+
return this._camera.framePasses;
228+
}
229+
230+
/**
231+
* @type {FramePass[]|null}
232+
* @deprecated Use {@link CameraComponent#framePasses} instead.
233+
* @ignore
234+
*/
235+
set renderPasses(passes) {
236+
Debug.deprecated('CameraComponent#renderPasses is deprecated. Use CameraComponent#framePasses instead.');
237+
this.framePasses = passes;
238+
}
239+
240+
/**
241+
* @type {FramePass[]}
242+
* @deprecated Use {@link CameraComponent#framePasses} instead.
224243
* @ignore
225244
*/
226245
get renderPasses() {
227-
return this._camera.renderPasses;
246+
Debug.deprecated('CameraComponent#renderPasses is deprecated. Use CameraComponent#framePasses instead.');
247+
return this.framePasses;
228248
}
229249

230250
get shaderParams() {
@@ -901,8 +921,8 @@ class CameraComponent extends Component {
901921
set renderTarget(value) {
902922

903923
Debug.call(() => {
904-
if (this._camera.renderPasses.length > 0) {
905-
Debug.warn(`Setting a render target on the camera ${this.entity.name} after the render passes is not supported, set it up first.`);
924+
if (this._camera.framePasses.length > 0) {
925+
Debug.warn(`Setting a render target on the camera ${this.entity.name} after the frame passes is not supported, set it up first.`);
906926
}
907927
});
908928

src/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,9 @@ export { Skeleton } from './scene/animation/skeleton.js';
180180
export { ComputeRadixSort } from './scene/graphics/compute-radix-sort.js';
181181
export { EnvLighting } from './scene/graphics/env-lighting.js';
182182
export { PostEffect } from './scene/graphics/post-effect.js';
183-
export { RenderPassColorGrab } from './scene/graphics/render-pass-color-grab.js';
184-
export { RenderPassRadixSort } from './scene/graphics/render-pass-radix-sort.js';
183+
export { FramePass } from './platform/graphics/frame-pass.js';
184+
export { FramePassColorGrab } from './scene/graphics/frame-pass-color-grab.js';
185+
export { FramePassRadixSort } from './scene/graphics/frame-pass-radix-sort.js';
185186
export { RenderPassShaderQuad } from './scene/graphics/render-pass-shader-quad.js';
186187
export { reprojectTexture } from './scene/graphics/reproject-texture.js';
187188

0 commit comments

Comments
 (0)