Skip to content

Commit

Permalink
Merge pull request #1463 from actnwit/feat/deferred-render-pipeline
Browse files Browse the repository at this point in the history
feat: deferred render pipeline
  • Loading branch information
emadurandal authored Jul 29, 2024
2 parents 80cd837 + 754c565 commit 65b7153
Show file tree
Hide file tree
Showing 65 changed files with 629 additions and 521 deletions.
27 changes: 8 additions & 19 deletions samples/simple/GaussianBlurDepth/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,26 +128,15 @@ function createEntityBoard() {
function createAndSetFramebuffer(
renderPass: Rn.RenderPass,
resolution: number,
textureNum: number,
property: {
level?: number | undefined;
internalFormat?: Rn.TextureParameterEnum | undefined;
format?: Rn.PixelFormatEnum | undefined;
type?: Rn.ComponentTypeEnum | undefined;
magFilter?: Rn.TextureParameterEnum | undefined;
minFilter?: Rn.TextureParameterEnum | undefined;
wrapS?: Rn.TextureParameterEnum | undefined;
wrapT?: Rn.TextureParameterEnum | undefined;
createDepthBuffer?: boolean | undefined;
isMSAA?: boolean | undefined;
} = {}
textureNum: number
) {
const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
resolution,
resolution,
textureNum,
property
);
const framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: resolution,
height: resolution,
textureNum: textureNum,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
renderPass.setFramebuffer(framebuffer);
return framebuffer;
}
Expand Down
27 changes: 8 additions & 19 deletions samples/simple/Gltf2ImporterShadow/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,26 +185,15 @@ function createRenderPassDepth(
function createAndSetFramebuffer(
renderPass: Rn.RenderPass,
resolution: number,
textureNum: number,
property: {
level?: number | undefined;
internalFormat?: Rn.TextureParameterEnum | undefined;
format?: Rn.PixelFormatEnum | undefined;
type?: Rn.ComponentTypeEnum | undefined;
magFilter?: Rn.TextureParameterEnum | undefined;
minFilter?: Rn.TextureParameterEnum | undefined;
wrapS?: Rn.TextureParameterEnum | undefined;
wrapT?: Rn.TextureParameterEnum | undefined;
createDepthBuffer?: boolean | undefined;
isMSAA?: boolean | undefined;
} = {}
textureNum: number
) {
const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
resolution,
resolution,
textureNum,
property
);
const framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: resolution,
height: resolution,
textureNum: textureNum,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
renderPass.setFramebuffer(framebuffer);
return framebuffer;
}
Expand Down
26 changes: 14 additions & 12 deletions samples/simple/GltfImporter-iOS/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,13 @@ const expressionPostEffect = new Rn.Expression();
expressions.push(expressionPostEffect);

// gamma correction
const gammaTargetFramebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
displayResolution,
displayResolution,
1,
{}
);
const gammaTargetFramebuffer = Rn.RenderableHelper.createFrameBuffer({
width: displayResolution,
height: displayResolution,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
for (const renderPass of vrmExpression.renderPasses) {
renderPass.setFramebuffer(gammaTargetFramebuffer);
renderPass.toClearColorBuffer = false;
Expand All @@ -91,12 +92,13 @@ setTextureParameterForMeshComponents(
);

// fxaa
const fxaaTargetFramebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
displayResolution,
displayResolution,
1,
{}
);
const fxaaTargetFramebuffer = Rn.RenderableHelper.createFrameBuffer({
width: displayResolution,
height: displayResolution,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
gammaCorrectionRenderPass.setFramebuffer(fxaaTargetFramebuffer);

const fxaaRenderPass = createRenderPassSharingEntitiesAndCamera(gammaCorrectionRenderPass);
Expand Down
13 changes: 7 additions & 6 deletions samples/simple/ShadowMapping/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,13 @@ controller.registerEventListeners(document.getElementById('world'));

// prepare render passes
const renderPassDepth = createRenderPassDepth(cameraComponentDepth, entitiesRenderTarget);
const framebufferDepth = Rn.RenderableHelper.createTexturesForRenderTarget(
resolutionDepthCamera,
resolutionDepthCamera,
1,
{}
);
const framebufferDepth = Rn.RenderableHelper.createFrameBuffer({
width: resolutionDepthCamera,
height: resolutionDepthCamera,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
renderPassDepth.setFramebuffer(framebufferDepth);

const renderPassMain = createRenderPassMain(
Expand Down
13 changes: 7 additions & 6 deletions samples/simple/SkinShader/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ const setupRenderPassEntityUidOutput = function (
renderPass.setMaterial(entityUidOutputMaterial);
renderPass.cameraComponent = cameraComponent;

const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
canvas.clientWidth,
canvas.clientHeight,
1,
{}
);
const framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: canvas.clientWidth,
height: canvas.clientHeight,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
renderPass.setFramebuffer(framebuffer);
renderPass.clearColor = Rn.Vector4.fromCopyArray([0, 0, 0, 1]);
renderPass.toClearColorBuffer = true;
Expand Down
27 changes: 8 additions & 19 deletions samples/test_e2e/ColorGradingUsingLUTs/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ await Rn.System.init({
const cameraComponentMain = createEntityMainCamera().getCamera();
const renderPassMain = createRenderPassMain(cameraComponentMain);
const resolution = rnCanvasElement.width;
createAndSetFramebuffer(renderPassMain, resolution, 1, {});
createAndSetFramebuffer(renderPassMain, resolution, 1);

const cameraComponentPostEffect = createEntityPostEffectCamera().getCamera();
const renderPassColorGrading = createRenderPassColorGrading(
Expand Down Expand Up @@ -86,26 +86,15 @@ function createEntityColoredBoard(diffuseColor: Rn.Vector4) {
function createAndSetFramebuffer(
renderPass: Rn.RenderPass,
resolution: number,
textureNum: number,
property: {
level?: number | undefined;
internalFormat?: Rn.TextureParameterEnum | undefined;
format?: Rn.PixelFormatEnum | undefined;
type?: Rn.ComponentTypeEnum | undefined;
magFilter?: Rn.TextureParameterEnum | undefined;
minFilter?: Rn.TextureParameterEnum | undefined;
wrapS?: Rn.TextureParameterEnum | undefined;
wrapT?: Rn.TextureParameterEnum | undefined;
createDepthBuffer?: boolean | undefined;
isMSAA?: boolean | undefined;
}
textureNum: number
) {
const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
resolution,
resolution,
const framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: resolution,
height: resolution,
textureNum,
property
);
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
renderPass.setFramebuffer(framebuffer);
return framebuffer;
}
Expand Down
13 changes: 7 additions & 6 deletions samples/test_e2e/FXAA/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ await Rn.System.init({

// setup the Main RenderPass
renderPassMain = await setupRenderPassMain();
framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
canvas!.clientWidth,
canvas!.clientHeight,
1,
{}
);
framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: canvas.clientWidth,
height: canvas.clientHeight,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
// renderPassMain.setFramebuffer(framebuffer);

// setup the FXAA RenderPass
Expand Down
29 changes: 9 additions & 20 deletions samples/test_e2e/GaussianBlur/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ await Rn.System.init({
const cameraComponentMain = createEntityMainCamera().getCamera();
const renderPassMain = createRenderPassMain(cameraComponentMain);
const resolution = rnCanvasElement.width;
createAndSetFramebuffer(renderPassMain, resolution, 1, {});
createAndSetFramebuffer(renderPassMain, resolution, 1);

const renderPassGaussianBlurH = createRenderPassGaussianBlur(renderPassMain, true);
createAndSetFramebuffer(renderPassGaussianBlurH, resolution, 1, {});
createAndSetFramebuffer(renderPassGaussianBlurH, resolution, 1);

const renderPassGaussianBlurHV = createRenderPassGaussianBlur(renderPassGaussianBlurH, false);

Expand Down Expand Up @@ -90,26 +90,15 @@ function createEntityColoredBoard(boardColor: Rn.Vector4) {
function createAndSetFramebuffer(
renderPass: Rn.RenderPass,
resolution: number,
textureNum: number,
property: {
level?: number | undefined;
internalFormat?: Rn.TextureParameterEnum | undefined;
format?: Rn.PixelFormatEnum | undefined;
type?: Rn.ComponentTypeEnum | undefined;
magFilter?: Rn.TextureParameterEnum | undefined;
minFilter?: Rn.TextureParameterEnum | undefined;
wrapS?: Rn.TextureParameterEnum | undefined;
wrapT?: Rn.TextureParameterEnum | undefined;
createDepthBuffer?: boolean | undefined;
isMSAA?: boolean | undefined;
}
textureNum: number
) {
const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
resolution,
resolution,
const framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: resolution,
height: resolution,
textureNum,
property
);
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
renderPass.setFramebuffer(framebuffer);
return framebuffer;
}
Expand Down
15 changes: 7 additions & 8 deletions samples/test_e2e/Gltf2Importer-GlareEffect/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ const renderPassMain = await createRenderPassMain(cameraComponentMain, [
entityEnvironmentCube,
]);
createAndSetFramebuffer(renderPassMain, rnCanvasElement.width, rnCanvasElement.height, 1, {
internalFormat: Rn.TextureParameter.RGBA16F,
format: Rn.PixelFormat.RGBA,
type: Rn.ComponentType.Float,
internalFormat: Rn.TextureFormat.RGBA16F,
});
renderPassMain.clearColor = Rn.Vector4.fromCopyArray([0.0, 0.0, 0.0, 1.0]);

Expand Down Expand Up @@ -182,12 +180,13 @@ function createAndSetFramebuffer(
isMSAA?: boolean | undefined;
}
) {
const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
resolutionWidth,
resolutionHeight,
const framebuffer = Rn.RenderableHelper.createFrameBuffer({
width: resolutionWidth,
height: resolutionHeight,
textureNum,
property
);
textureFormats: [property.internalFormat],
createDepthBuffer: true,
});
renderPass.setFramebuffer(framebuffer);
return framebuffer;
}
Expand Down
27 changes: 15 additions & 12 deletions samples/test_e2e/Gltf2Importer-MSAA/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,20 +139,23 @@ function createAndSetFrameBufferAndMSAAFramebuffer(
renderPass: Rn.RenderPass,
resolutionFramebuffer: number
) {
const framebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(
resolutionFramebuffer,
resolutionFramebuffer,
0,
{ isMSAA: true }
);
const framebuffer = Rn.RenderableHelper.createFrameBufferMSAA({
width: resolutionFramebuffer,
height: resolutionFramebuffer,
colorBufferNum: 1,
colorFormats: [Rn.TextureFormat.RGBA8],
sampleCountMSAA: 4,
depthBufferFormat: Rn.TextureFormat.Depth32F,
});
renderPass.setFramebuffer(framebuffer);

const framebufferMSAA = Rn.RenderableHelper.createTexturesForRenderTarget(
resolutionFramebuffer,
resolutionFramebuffer,
1,
{ createDepthBuffer: false }
);
const framebufferMSAA = Rn.RenderableHelper.createFrameBuffer({
width: resolutionFramebuffer,
height: resolutionFramebuffer,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: false,
});
renderPass.setResolveFramebuffer(framebufferMSAA);
}

Expand Down
8 changes: 7 additions & 1 deletion samples/test_e2e/GltfImporter-draco-extension/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,13 @@ const expressionPostEffect = new Rn.Expression();
expressions.push(expressionPostEffect);

// gamma correction
const gammaTargetFramebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(600, 600, 1, {});
const gammaTargetFramebuffer = Rn.RenderableHelper.createFrameBuffer({
width: 600,
height: 600,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
const mainRenderPass = mainExpression.renderPasses[0];
mainRenderPass.setFramebuffer(gammaTargetFramebuffer);
mainRenderPass.toClearColorBuffer = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ const gltfInfo = [
{name: 'IridescentDishWithOlives', format: 'glb'},
{name: 'ABeautifulGame', format: 'gltf'},
{name: 'AlphaBlendModeTest', format: 'glb'},
{name: 'AnimatedMorphCube', format: 'glb'},
{name: 'AnisotropyBarnLamp', format: 'glb'},
{name: 'AnisotropyDiscTest', format: 'glb'},
];

doGltfTests('GltfImporter-forward-render-pipeline', modes, gltfInfo, 0.03);
11 changes: 11 additions & 0 deletions samples/test_e2e/GltfImporter-forward-render-pipeline/2.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const doGltfTests =
require('../common/testFunc').doGltfTests;

const modes = ['uniform', 'datatexture', 'webgpu'];
const gltfInfo = [
{name: 'AnimatedMorphCube', format: 'glb'},
{name: 'AnisotropyBarnLamp', format: 'glb'},
{name: 'AnisotropyDiscTest', format: 'glb'},
];

doGltfTests('GltfImporter-forward-render-pipeline', modes, gltfInfo, 0.03);
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ <h2>Rendering Test Image</h2>
</section>
<section class="correct">
<h2>Correct PNG Image</h2>
<img src="__image_snapshots__/test-js-gltf-importer-forward-render-pipeline-datatexture-1-snap.png" />
<img src="__image_snapshots__/1-test-js-gltf-importer-forward-render-pipeline-iridescent-dish-with-olives-datatexture-1-snap.png" />
</section>
</main>
<script src="../../assets/navigate.js"></script>
Expand Down
8 changes: 7 additions & 1 deletion samples/test_e2e/GltfImporter-ibl-1-webgl2/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,13 @@ expressions.push(expressionPostEffect);

// gamma correction (and super sampling)
const mainRenderPass = mainExpression.renderPasses[0];
const gammaTargetFramebuffer = Rn.RenderableHelper.createTexturesForRenderTarget(600, 600, 1, {});
const gammaTargetFramebuffer = Rn.RenderableHelper.createFrameBuffer({
width: 600,
height: 600,
textureNum: 1,
textureFormats: [Rn.TextureFormat.RGBA8],
createDepthBuffer: true,
});
mainRenderPass.setFramebuffer(gammaTargetFramebuffer);
mainRenderPass.toClearColorBuffer = true;
mainRenderPass.toClearDepthBuffer = true;
Expand Down
Loading

0 comments on commit 65b7153

Please sign in to comment.