Next patch

This commit is contained in:
2026-02-24 21:30:00 -08:00
parent d45c632dcd
commit cd3090817a
33 changed files with 4490 additions and 398 deletions

View File

@ -29,7 +29,12 @@ class RenderPathForward {
}
#else
{
path.setTarget("");
var isVR = iron.RenderPath.isVRPresenting() || iron.RenderPath.isVRSimulateMode();
if (isVR) {
path.setTarget("lbuffer0");
} else {
path.setTarget("");
}
}
#end
}
@ -251,25 +256,18 @@ class RenderPathForward {
#end
#end
#if (rp_volumetriclight || rp_ssgi != "Off")
#if rp_volumetriclight
{
#if (rp_volumetriclight)
path.loadShader("shader_datas/volumetric_light/volumetric_light");
path.loadShader("shader_datas/blur_bilat_pass/blur_bilat_pass_x");
path.loadShader("shader_datas/blur_bilat_blend_pass/blur_bilat_blend_pass_y");
#end
var t = new RenderTargetRaw();
t.name = "singlea";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
#if (rp_ssgi == "SSGI")
t.format = "RGBA32";
#else
t.format = "R8";
#end
t.scale = Inc.getSuperSampling();
path.createRenderTarget(t);
@ -278,11 +276,51 @@ class RenderPathForward {
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
#if (rp_ssgi == "SSGI")
t.format = "RGBA32";
#else
t.format = "R8";
#end
t.scale = Inc.getSuperSampling();
path.createRenderTarget(t);
}
#end
#if rp_ssao
{
var t = new RenderTargetRaw();
t.name = "singlea";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
t.format = "R8";
t.scale = Inc.getSuperSampling();
path.createRenderTarget(t);
var t = new RenderTargetRaw();
t.name = "singleb";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
t.format = "R8";
t.scale = Inc.getSuperSampling();
path.createRenderTarget(t);
}
#end
#if rp_ssgi
{
var t = new RenderTargetRaw();
t.name = "ssgi_a";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
t.format = "RGBA32";
t.scale = Inc.getSuperSampling();
path.createRenderTarget(t);
var t = new RenderTargetRaw();
t.name = "ssgi_b";
t.width = 0;
t.height = 0;
t.displayp = Inc.getDisplayp();
t.format = "RGBA32";
t.scale = Inc.getSuperSampling();
path.createRenderTarget(t);
}
@ -308,7 +346,15 @@ class RenderPathForward {
}
#end
#if (rp_ssr_half || rp_ssgi_half || (rp_voxels != "Off"))
#if rp_fsr1
{
path.loadShader("shader_datas/fsr1_easu_pass/fsr1_easu_pass");
path.loadShader("shader_datas/fsr1_rcas_pass/fsr1_rcas_pass");
path.loadShader("shader_datas/copy_pass/copy_pass");
}
#end
#if (rp_ssr_half || rp_ssao_half || rp_ssgi_half || (rp_voxels != "Off"))
{
path.loadShader("shader_datas/downsample_depth/downsample_depth");
var t = new RenderTargetRaw();
@ -422,14 +468,21 @@ class RenderPathForward {
#if (rp_ssrefr || lnx_voxelgi_refract)
{
path.setTarget("gbuffer_refraction"); // Only clear gbuffer0
path.clearTarget(0xffffff00);
path.setTarget("gbuffer_refraction");
path.clearTarget(0xffff00ff);
}
#end
#if rp_depthprepass
{
path.drawMeshes("depth");
#if rp_stereo
var isVR = iron.RenderPath.isVRPresenting() || iron.RenderPath.isVRSimulateMode();
if (!isVR) {
#end
path.drawMeshes("depth");
#if rp_stereo
}
#end
}
#end
@ -461,16 +514,23 @@ class RenderPathForward {
#if rp_stereo
{
path.drawStereo(drawMeshes);
if (iron.RenderPath.isVRPresenting()) {
#if (kha_webgl && lnx_vr)
// split-screen lbuffer0 to XR framebuffer
path.compositeToXR("lbuffer0");
#end
return;
}
}
#else
{
RenderPathCreator.drawMeshes();
drawMeshes();
}
#end
#if (rp_render_to_texture || rp_voxels != "Off")
{
#if (rp_ssr_half || rp_ssgi_half || rp_voxels != "Off")
#if (rp_ssr_half || rp_ssao_half || rp_ssgi_half || rp_voxels != "Off")
path.setTarget("half");
path.bindTarget("_main", "texdepth");
path.drawShader("shader_datas/downsample_depth/downsample_depth");
@ -515,8 +575,7 @@ class RenderPathForward {
path.drawMeshes("refraction");
path.setTarget("lbuffer0");
path.setTarget("bufa");
path.bindTarget("lbuffer0", "tex");
path.bindTarget("refr", "tex1");
path.bindTarget("_main", "gbufferD");
@ -525,6 +584,9 @@ class RenderPathForward {
path.bindTarget("gbuffer_refraction", "gbuffer_refraction");
path.drawShader("shader_datas/ssrefr_pass/ssrefr_pass");
path.setTarget("lbuffer0");
path.bindTarget("bufa", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
}
}
#end
@ -595,7 +657,7 @@ class RenderPathForward {
path.drawMeshes("refraction");
path.setTarget("lbuffer0");
path.setTarget("bufa");
path.bindTarget("lbuffer0", "tex");
path.bindTarget("refr", "tex1");
path.bindTarget("_main", "gbufferD");
@ -604,6 +666,9 @@ class RenderPathForward {
path.bindTarget("gbuffer_refraction", "gbuffer_refraction");
path.drawShader("shader_datas/ssrefr_pass/ssrefr_pass");
path.setTarget("lbuffer0");
path.bindTarget("bufa", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
}
}
#end
@ -614,6 +679,18 @@ class RenderPathForward {
}
#end
#if rp_chromatic_aberration
{
path.setTarget("bufa");
path.bindTarget("lbuffer0", "tex");
path.drawShader("shader_datas/chromatic_aberration_pass/chromatic_aberration_pass");
path.setTarget("lbuffer0");
path.bindTarget("bufa", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
}
#end
#if rp_volumetriclight
{
path.setTarget("singlea");
@ -654,18 +731,6 @@ class RenderPathForward {
}
#end
#if rp_chromatic_aberration
{
path.setTarget("bufa");
path.bindTarget("lbuffer0", "tex");
path.drawShader("shader_datas/chromatic_aberration_pass/chromatic_aberration_pass");
path.setTarget("lbuffer0");
path.bindTarget("bufa", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
}
#end
#if (rp_supersampling == 4)
var framebuffer = "buf";
#else
@ -685,6 +750,7 @@ class RenderPathForward {
}
#end
path.setTarget(target);
path.clearTarget(0x00000000);
#if rp_compositordepth
{
@ -732,6 +798,40 @@ class RenderPathForward {
}
#end
#if rp_fsr1
{
// FSR1 RCAS sharpening pass applied after AA, expects sRGB [0-1] input
#if ((rp_antialiasing == "SMAA") || (rp_antialiasing == "TAA"))
#if (rp_supersampling == 4)
var fsrSource = "buf";
var fsrDest = "buf";
#else
// SMAA outputs to framebuffer which needs an intermediate buffer
path.setTarget("bufb");
path.bindTarget(framebuffer != "" ? framebuffer : "buf", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
var fsrSource = "bufb";
var fsrDest = "";
#end
#else
#if (rp_supersampling == 4)
var fsrSource = "buf";
var fsrDest = "buf";
#else
path.setTarget("bufa");
path.bindTarget(target != "" ? target : "buf", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
var fsrSource = "bufa";
var fsrDest = "";
#end
#end
path.setTarget(fsrDest);
path.bindTarget(fsrSource, "tex");
path.drawShader("shader_datas/fsr1_rcas_pass/fsr1_rcas_pass");
}
#end
#if (rp_supersampling == 4)
{
var finalTarget = "";