Update renderpath
This commit is contained in:
@@ -14,20 +14,20 @@ class RenderPathCreator {
|
||||
return path;
|
||||
}
|
||||
|
||||
#if (rp_gi != "Off")
|
||||
static var voxels = "voxels";
|
||||
static var voxelsLast = "voxels";
|
||||
public static var voxelFrame = 0;
|
||||
public static var voxelFreq = 6; // Revoxelizing frequency
|
||||
#end
|
||||
|
||||
#if (rp_renderer == "Forward")
|
||||
static function init() {
|
||||
// #if rp_shadowmap // Auto-created
|
||||
// {
|
||||
// var size = getShadowmapSize();
|
||||
// var t = new RenderTargetRaw();
|
||||
// t.name = "shadowMap";
|
||||
// t.width = size;
|
||||
// t.height = size;
|
||||
// t.format = "DEPTH16";
|
||||
// path.createRenderTarget(t);
|
||||
// }
|
||||
// #end
|
||||
|
||||
#if (rp_shadowmap && kha_webgl)
|
||||
initEmpty();
|
||||
#end
|
||||
|
||||
#if (rp_background == "World")
|
||||
{
|
||||
path.loadShader("shader_datas/world_pass/world_pass");
|
||||
@@ -58,6 +58,23 @@ class RenderPathCreator {
|
||||
path.loadShader("shader_datas/copy_pass/copy_pass");
|
||||
}
|
||||
#end
|
||||
|
||||
#if (rp_supersampling == 4)
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "buf";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.format = 'RGBA32';
|
||||
t.displayp = getDisplayp();
|
||||
var ss = getSuperSampling();
|
||||
if (ss != 1) t.scale = ss;
|
||||
t.depth_buffer = "main";
|
||||
path.createRenderTarget(t);
|
||||
|
||||
path.loadShader("shader_datas/supersample_resolve/supersample_resolve");
|
||||
}
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
@@ -70,6 +87,105 @@ class RenderPathCreator {
|
||||
#if (rp_gi != "Off")
|
||||
{
|
||||
initGI();
|
||||
#if arm_voxelgi_temporal
|
||||
{
|
||||
initGI("voxelsB");
|
||||
}
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
#if ((rp_antialiasing == "SMAA") || (rp_antialiasing == "TAA"))
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bufa";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.displayp = getDisplayp();
|
||||
t.format = "RGBA32";
|
||||
var ss = getSuperSampling();
|
||||
if (ss != 1) t.scale = ss;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bufb";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.displayp = getDisplayp();
|
||||
t.format = "RGBA32";
|
||||
var ss = getSuperSampling();
|
||||
if (ss != 1) t.scale = ss;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
path.loadShader("shader_datas/smaa_edge_detect/smaa_edge_detect");
|
||||
path.loadShader("shader_datas/smaa_blend_weight/smaa_blend_weight");
|
||||
path.loadShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend");
|
||||
|
||||
#if (rp_antialiasing == "TAA")
|
||||
{
|
||||
path.loadShader("shader_datas/taa_pass/taa_pass");
|
||||
}
|
||||
#end
|
||||
#end
|
||||
|
||||
#if rp_volumetriclight
|
||||
{
|
||||
path.loadShader("shader_datas/volumetric_light_quad/volumetric_light_quad");
|
||||
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_pass/blur_bilat_pass_y_blend");
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bufvola";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.displayp = getDisplayp();
|
||||
t.format = "R8";
|
||||
var ss = getSuperSampling();
|
||||
if (ss != 1) t.scale = ss;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bufvolb";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.displayp = getDisplayp();
|
||||
t.format = "R8";
|
||||
var ss = getSuperSampling();
|
||||
if (ss != 1) t.scale = ss;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
#if rp_bloom
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bloomtex";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.scale = 0.25;
|
||||
t.format = getHdrFormat();
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bloomtex2";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.scale = 0.25;
|
||||
t.format = getHdrFormat();
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
|
||||
{
|
||||
path.loadShader("shader_datas/bloom_pass/bloom_pass");
|
||||
path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x");
|
||||
path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y");
|
||||
path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y_blend");
|
||||
}
|
||||
#end
|
||||
}
|
||||
@@ -81,7 +197,7 @@ class RenderPathCreator {
|
||||
var faces = path.getLamp(path.currentLampIndex).data.raw.shadowmap_cube ? 6 : 1;
|
||||
for (i in 0...faces) {
|
||||
if (faces > 1) path.currentFace = i;
|
||||
path.setTarget("shadowMap");
|
||||
path.setTarget(getShadowMap());
|
||||
path.clearTarget(null, 1.0);
|
||||
path.drawMeshes("shadowmap");
|
||||
}
|
||||
@@ -91,19 +207,30 @@ class RenderPathCreator {
|
||||
|
||||
#if (rp_gi != "Off")
|
||||
{
|
||||
if (path.voxelize()) {
|
||||
path.clearImage("voxels", 0x00000000);
|
||||
var voxelize = path.voxelize();
|
||||
|
||||
#if arm_voxelgi_temporal
|
||||
voxelize = ++voxelFrame % voxelFreq == 0;
|
||||
|
||||
if (voxelize) {
|
||||
voxels = voxels == "voxels" ? "voxelsB" : "voxels";
|
||||
voxelsLast = voxels == "voxels" ? "voxelsB" : "voxels";
|
||||
}
|
||||
#end
|
||||
|
||||
if (voxelize) {
|
||||
path.clearImage(voxels, 0x00000000);
|
||||
path.setTarget("");
|
||||
var res = getVoxelRes();
|
||||
path.setViewport(res, res);
|
||||
path.bindTarget("voxels", "voxels");
|
||||
path.bindTarget(voxels, "voxels");
|
||||
#if rp_shadowmap
|
||||
{
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
}
|
||||
#end
|
||||
path.drawMeshes("voxel");
|
||||
path.generateMipmaps("voxels");
|
||||
path.generateMipmaps(voxels);
|
||||
}
|
||||
}
|
||||
#end
|
||||
@@ -136,13 +263,18 @@ class RenderPathCreator {
|
||||
|
||||
#if rp_shadowmap
|
||||
{
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
}
|
||||
#end
|
||||
|
||||
#if (rp_gi != "Off")
|
||||
{
|
||||
path.bindTarget("voxels", "voxels");
|
||||
path.bindTarget(voxels, "voxels");
|
||||
#if arm_voxelgi_temporal
|
||||
{
|
||||
path.bindTarget(voxelsLast, "voxelsLast");
|
||||
}
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
@@ -173,9 +305,92 @@ class RenderPathCreator {
|
||||
|
||||
#if rp_render_to_texture
|
||||
{
|
||||
path.setTarget("");
|
||||
#if rp_volumetriclight
|
||||
{
|
||||
path.setTarget("bufvola");
|
||||
path.bindTarget("_main", "gbufferD");
|
||||
bindShadowMap();
|
||||
if (path.lampIsSun()) {
|
||||
path.drawShader("shader_datas/volumetric_light_quad/volumetric_light_quad");
|
||||
}
|
||||
else {
|
||||
path.drawLampVolume("shader_datas/volumetric_light/volumetric_light");
|
||||
}
|
||||
|
||||
path.setTarget("bufvolb");
|
||||
path.bindTarget("bufvola", "tex");
|
||||
path.drawShader("shader_datas/blur_bilat_pass/blur_bilat_pass_x");
|
||||
|
||||
path.setTarget("lbuf");
|
||||
path.bindTarget("bufvolb", "tex");
|
||||
path.drawShader("shader_datas/blur_bilat_pass/blur_bilat_pass_y_blend");
|
||||
}
|
||||
#end
|
||||
|
||||
#if rp_bloom
|
||||
{
|
||||
path.setTarget("bloomtex");
|
||||
path.bindTarget("lbuf", "tex");
|
||||
path.drawShader("shader_datas/bloom_pass/bloom_pass");
|
||||
|
||||
path.setTarget("bloomtex2");
|
||||
path.bindTarget("bloomtex", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x");
|
||||
|
||||
path.setTarget("bloomtex");
|
||||
path.bindTarget("bloomtex2", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y");
|
||||
|
||||
path.setTarget("bloomtex2");
|
||||
path.bindTarget("bloomtex", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x");
|
||||
|
||||
path.setTarget("bloomtex");
|
||||
path.bindTarget("bloomtex2", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y");
|
||||
|
||||
path.setTarget("bloomtex2");
|
||||
path.bindTarget("bloomtex", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x");
|
||||
|
||||
path.setTarget("bloomtex");
|
||||
path.bindTarget("bloomtex2", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y");
|
||||
|
||||
path.setTarget("bloomtex2");
|
||||
path.bindTarget("bloomtex", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x");
|
||||
|
||||
path.setTarget("lbuf");
|
||||
path.bindTarget("bloomtex2", "tex");
|
||||
path.drawShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y_blend");
|
||||
}
|
||||
#end
|
||||
|
||||
#if (rp_supersampling == 4)
|
||||
var framebuffer = "buf";
|
||||
#else
|
||||
var framebuffer = "";
|
||||
#end
|
||||
|
||||
#if ((rp_antialiasing == "Off") || (rp_antialiasing == "FXAA"))
|
||||
{
|
||||
path.setTarget(framebuffer);
|
||||
}
|
||||
#else
|
||||
{
|
||||
path.setTarget("buf");
|
||||
}
|
||||
#end
|
||||
|
||||
path.bindTarget("lbuf", "tex");
|
||||
|
||||
#if rp_compositordepth
|
||||
{
|
||||
path.bindTarget("_main", "gbufferD");
|
||||
}
|
||||
#end
|
||||
|
||||
#if rp_compositornodes
|
||||
{
|
||||
path.drawShader("shader_datas/compositor_pass/compositor_pass");
|
||||
@@ -185,6 +400,57 @@ class RenderPathCreator {
|
||||
path.drawShader("shader_datas/copy_pass/copy_pass");
|
||||
}
|
||||
#end
|
||||
|
||||
#if ((rp_antialiasing == "SMAA") || (rp_antialiasing == "TAA"))
|
||||
{
|
||||
path.setTarget("bufa");
|
||||
path.clearTarget(0x00000000);
|
||||
path.bindTarget("lbuf", "colorTex");
|
||||
path.drawShader("shader_datas/smaa_edge_detect/smaa_edge_detect");
|
||||
|
||||
path.setTarget("bufb");
|
||||
path.clearTarget(0x00000000);
|
||||
path.bindTarget("bufa", "edgesTex");
|
||||
path.drawShader("shader_datas/smaa_blend_weight/smaa_blend_weight");
|
||||
|
||||
// #if (rp_antialiasing == "TAA")
|
||||
// path.setTarget("bufa");
|
||||
// #else
|
||||
path.setTarget(framebuffer);
|
||||
// #end
|
||||
path.bindTarget("lbuf", "colorTex");
|
||||
path.bindTarget("bufb", "blendTex");
|
||||
// #if (rp_antialiasing == "TAA")
|
||||
// {
|
||||
// path.bindTarget("gbuffer2", "sveloc");
|
||||
// }
|
||||
// #end
|
||||
path.drawShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend");
|
||||
|
||||
// #if (rp_antialiasing == "TAA")
|
||||
// {
|
||||
// path.setTarget(framebuffer);
|
||||
// path.bindTarget("bufa", "tex");
|
||||
// path.bindTarget("taa", "tex2");
|
||||
// path.bindTarget("gbuffer2", "sveloc");
|
||||
// path.drawShader("shader_datas/taa_pass/taa_pass");
|
||||
|
||||
// path.setTarget("taa");
|
||||
// path.bindTarget("bufa", "tex");
|
||||
// path.drawShader("shader_datas/copy_pass/copy_pass");
|
||||
// }
|
||||
// #end
|
||||
}
|
||||
#end
|
||||
|
||||
#if (rp_supersampling == 4)
|
||||
{
|
||||
var final = "";
|
||||
path.setTarget(final);
|
||||
path.bindTarget(framebuffer, "tex");
|
||||
path.drawShader("shader_datas/supersample_resolve/supersample_resolve");
|
||||
}
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
@@ -203,6 +469,11 @@ class RenderPathCreator {
|
||||
|
||||
#if (rp_renderer == "Deferred")
|
||||
static function init() {
|
||||
|
||||
#if (rp_shadowmap && kha_webgl)
|
||||
initEmpty();
|
||||
#end
|
||||
|
||||
#if (rp_background == "World")
|
||||
{
|
||||
path.loadShader("shader_datas/world_pass/world_pass");
|
||||
@@ -218,6 +489,11 @@ class RenderPathCreator {
|
||||
#if (rp_gi != "Off")
|
||||
{
|
||||
initGI();
|
||||
#if arm_voxelgi_temporal
|
||||
{
|
||||
initGI("voxelsB");
|
||||
}
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
@@ -394,8 +670,30 @@ class RenderPathCreator {
|
||||
{
|
||||
path.loadShader("shader_datas/volumetric_light_quad/volumetric_light_quad");
|
||||
path.loadShader("shader_datas/volumetric_light/volumetric_light");
|
||||
path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
|
||||
path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_y_blend_add");
|
||||
path.loadShader("shader_datas/blur_bilat_pass/blur_bilat_pass_x");
|
||||
path.loadShader("shader_datas/blur_bilat_pass/blur_bilat_pass_y_blend");
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bufvola";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.displayp = getDisplayp();
|
||||
t.format = "R8";
|
||||
// var ss = getSuperSampling();
|
||||
t.scale = 0.5;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
{
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "bufvolb";
|
||||
t.width = 0;
|
||||
t.height = 0;
|
||||
t.displayp = getDisplayp();
|
||||
t.format = "R8";
|
||||
// var ss = getSuperSampling();
|
||||
t.scale = 0.5;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
@@ -553,7 +851,7 @@ class RenderPathCreator {
|
||||
var faces = l.data.raw.shadowmap_cube ? 6 : 1;
|
||||
for (j in 0...faces) {
|
||||
if (faces > 1) path.currentFace = j;
|
||||
path.setTarget("shadowMap");
|
||||
path.setTarget(getShadowMap());
|
||||
path.clearTarget(null, 1.0);
|
||||
path.drawMeshes("shadowmap");
|
||||
}
|
||||
@@ -563,7 +861,7 @@ class RenderPathCreator {
|
||||
#if rp_soft_shadows
|
||||
|
||||
path.setTarget("visa"); // Merge using min blend
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
path.drawShader("shader_datas/dilate_pass/dilate_pass_x");
|
||||
|
||||
path.setTarget("visb");
|
||||
@@ -573,7 +871,7 @@ class RenderPathCreator {
|
||||
path.setTarget("visa", ["dist"]);
|
||||
//if (i == 0) path.clearTarget(0x00000000);
|
||||
path.bindTarget("visb", "dilate");
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
//path.bindTarget("_main", "gbufferD");
|
||||
path.bindTarget("gbuffer0", "gbuffer0");
|
||||
path.drawShader("shader_datas/visibility_pass/visibility_pass");
|
||||
@@ -702,19 +1000,30 @@ class RenderPathCreator {
|
||||
}
|
||||
#end
|
||||
|
||||
if (path.voxelize()) {
|
||||
path.clearImage("voxels", 0x00000000);
|
||||
var voxelize = path.voxelize();
|
||||
|
||||
#if arm_voxelgi_temporal
|
||||
voxelize = ++voxelFrame % voxelFreq == 0;
|
||||
|
||||
if (voxelize) {
|
||||
voxels = voxels == "voxels" ? "voxelsB" : "voxels";
|
||||
voxelsLast = voxels == "voxels" ? "voxelsB" : "voxels";
|
||||
}
|
||||
#end
|
||||
|
||||
if (voxelize) {
|
||||
path.clearImage(voxels, 0x00000000);
|
||||
path.setTarget("");
|
||||
var res = getVoxelRes();
|
||||
path.setViewport(res, res);
|
||||
path.bindTarget("voxels", "voxels");
|
||||
path.bindTarget(voxels, "voxels");
|
||||
#if ((rp_shadowmap) && (rp_gi == "Voxel GI"))
|
||||
{
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
}
|
||||
#end
|
||||
path.drawMeshes("voxel");
|
||||
path.generateMipmaps("voxels");
|
||||
path.generateMipmaps(voxels);
|
||||
}
|
||||
}
|
||||
#end
|
||||
@@ -731,7 +1040,12 @@ class RenderPathCreator {
|
||||
#end
|
||||
#if (rp_gi != "Off")
|
||||
{
|
||||
path.bindTarget("voxels", "voxels");
|
||||
path.bindTarget(voxels, "voxels");
|
||||
#if arm_voxelgi_temporal
|
||||
{
|
||||
path.bindTarget(voxelsLast, "voxelsLast");
|
||||
}
|
||||
#end
|
||||
}
|
||||
#end
|
||||
path.drawShader("shader_datas/deferred_indirect/deferred_indirect");
|
||||
@@ -762,7 +1076,7 @@ class RenderPathCreator {
|
||||
#if rp_soft_shadows
|
||||
path.bindTarget("visa", "svisibility");
|
||||
#else
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
#end
|
||||
}
|
||||
}
|
||||
@@ -770,7 +1084,7 @@ class RenderPathCreator {
|
||||
|
||||
#if ((rp_voxelgi_shadows) || (rp_voxelgi_refraction))
|
||||
{
|
||||
path.bindTarget("voxels", "voxels");
|
||||
path.bindTarget(voxels, "voxels");
|
||||
}
|
||||
#end
|
||||
|
||||
@@ -783,24 +1097,23 @@ class RenderPathCreator {
|
||||
|
||||
#if rp_volumetriclight
|
||||
{
|
||||
path.setTarget("buf");
|
||||
path.setTarget("bufvola");
|
||||
path.bindTarget("_main", "gbufferD");
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
if (path.lampIsSun()) {
|
||||
path.drawShader("shader_datas/volumetric_light_quad/volumetric_light_quad");
|
||||
}
|
||||
else {
|
||||
path.drawLampVolume("shader_datas/volumetric_light/volumetric_light");
|
||||
}
|
||||
path.setTarget("gbuffer1");
|
||||
path.bindTarget("buf", "tex");
|
||||
path.bindTarget("gbuffer0", "gbuffer0");
|
||||
path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
|
||||
|
||||
path.setTarget("bufvolb");
|
||||
path.bindTarget("bufvola", "tex");
|
||||
path.drawShader("shader_datas/blur_bilat_pass/blur_bilat_pass_x");
|
||||
|
||||
path.setTarget("tex");
|
||||
path.bindTarget("gbuffer1", "tex");
|
||||
path.bindTarget("gbuffer0", "gbuffer0");
|
||||
path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_y_blend_add");
|
||||
path.bindTarget("bufvolb", "tex");
|
||||
path.drawShader("shader_datas/blur_bilat_pass/blur_bilat_pass_y_blend");
|
||||
}
|
||||
#end
|
||||
}
|
||||
@@ -966,7 +1279,13 @@ class RenderPathCreator {
|
||||
path.setTarget("buf");
|
||||
}
|
||||
#end
|
||||
|
||||
path.bindTarget("tex", "tex");
|
||||
#if rp_compositordepth
|
||||
{
|
||||
path.bindTarget("_main", "gbufferD");
|
||||
}
|
||||
#end
|
||||
|
||||
#if rp_compositornodes
|
||||
{
|
||||
@@ -1005,6 +1324,11 @@ class RenderPathCreator {
|
||||
#end
|
||||
path.bindTarget("buf", "colorTex");
|
||||
path.bindTarget("bufb", "blendTex");
|
||||
#if (rp_antialiasing == "TAA")
|
||||
{
|
||||
path.bindTarget("gbuffer2", "sveloc");
|
||||
}
|
||||
#end
|
||||
path.drawShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend");
|
||||
|
||||
#if (rp_antialiasing == "TAA")
|
||||
@@ -1046,9 +1370,6 @@ class RenderPathCreator {
|
||||
#end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// #if (rp_renderer == "Deferred Plus")
|
||||
// static function init() {
|
||||
|
||||
@@ -1060,8 +1381,79 @@ class RenderPathCreator {
|
||||
// #end
|
||||
|
||||
|
||||
static function bindShadowMap() {
|
||||
var target = shadowMapName();
|
||||
if (target == "shadowMapCube") {
|
||||
#if kha_webgl
|
||||
// Bind empty map to non-cubemap sampler to keep webgl happy
|
||||
path.bindTarget("arm_empty", "shadowMap");
|
||||
#end
|
||||
path.bindTarget("shadowMapCube", "shadowMapCube");
|
||||
}
|
||||
else {
|
||||
#if kha_webgl
|
||||
// Bind empty map to cubemap sampler
|
||||
path.bindTarget("arm_empty_cube", "shadowMapCube");
|
||||
#end
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
}
|
||||
}
|
||||
|
||||
static function shadowMapName():String {
|
||||
return path.getLamp(path.currentLampIndex).data.raw.shadowmap_cube ? "shadowMapCube" : "shadowMap";
|
||||
}
|
||||
|
||||
static function getShadowMap():String {
|
||||
var target = shadowMapName();
|
||||
var rt = path.renderTargets.get(target);
|
||||
// Create shadowmap on the fly
|
||||
if (rt == null) {
|
||||
if (path.getLamp(path.currentLampIndex).data.raw.shadowmap_cube) {
|
||||
// Cubemap size
|
||||
var size = Std.int(path.getLamp(path.currentLampIndex).data.raw.shadowmap_size);
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = target;
|
||||
t.width = size;
|
||||
t.height = size;
|
||||
t.format = "DEPTH16";
|
||||
t.is_cubemap = true;
|
||||
rt = path.createRenderTarget(t);
|
||||
}
|
||||
else { // Non-cube sm
|
||||
var sizew = path.getLamp(path.currentLampIndex).data.raw.shadowmap_size;
|
||||
var sizeh = sizew;
|
||||
#if arm_csm // Cascades - atlas on x axis
|
||||
sizew = sizeh * iron.object.LampObject.cascadeCount;
|
||||
#end
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = target;
|
||||
t.width = sizew;
|
||||
t.height = sizeh;
|
||||
t.format = "DEPTH16";
|
||||
rt = path.createRenderTarget(t);
|
||||
}
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
#if (rp_shadowmap && kha_webgl)
|
||||
static function initEmpty() {
|
||||
// Bind empty when requested target is not found
|
||||
var tempty = new RenderTargetRaw();
|
||||
tempty.name = "arm_empty";
|
||||
tempty.width = 1;
|
||||
tempty.height = 1;
|
||||
tempty.format = "DEPTH16";
|
||||
path.createRenderTarget(tempty);
|
||||
var temptyCube = new RenderTargetRaw();
|
||||
temptyCube.name = "arm_empty_cube";
|
||||
temptyCube.width = 1;
|
||||
temptyCube.height = 1;
|
||||
temptyCube.format = "DEPTH16";
|
||||
temptyCube.is_cubemap = true;
|
||||
path.createRenderTarget(temptyCube);
|
||||
}
|
||||
#end
|
||||
|
||||
#if (rp_translucency)
|
||||
static function initTranslucency() {
|
||||
@@ -1100,7 +1492,7 @@ class RenderPathCreator {
|
||||
path.setTarget("accum", ["revealage"]);
|
||||
#if rp_shadowmap
|
||||
{
|
||||
path.bindTarget("shadowMap", "shadowMap");
|
||||
bindShadowMap();
|
||||
}
|
||||
#end
|
||||
path.drawMeshes("translucent");
|
||||
@@ -1120,9 +1512,9 @@ class RenderPathCreator {
|
||||
#end
|
||||
|
||||
#if (rp_gi != "Off")
|
||||
static function initGI() {
|
||||
static function initGI(tname = "voxels") {
|
||||
var t = new RenderTargetRaw();
|
||||
t.name = "voxels";
|
||||
t.name = tname;
|
||||
#if (rp_gi == "Voxel AO")
|
||||
{
|
||||
t.format = "R8";
|
||||
@@ -1142,6 +1534,7 @@ class RenderPathCreator {
|
||||
t.height = res;
|
||||
t.depth = Std.int(res * resZ);
|
||||
t.is_image = true;
|
||||
t.mipmaps = true;
|
||||
path.createRenderTarget(t);
|
||||
}
|
||||
#end
|
||||
@@ -1192,8 +1585,10 @@ class RenderPathCreator {
|
||||
#end
|
||||
}
|
||||
|
||||
static inline function getSuperSampling():Int {
|
||||
#if (rp_supersampling == 2)
|
||||
static inline function getSuperSampling():Float {
|
||||
#if (rp_supersampling == 1.5)
|
||||
return 1.5;
|
||||
#elseif (rp_supersampling == 2)
|
||||
return 2;
|
||||
#elseif (rp_supersampling == 4)
|
||||
return 4;
|
||||
|
||||
Reference in New Issue
Block a user