Fix bloom

This commit is contained in:
luboslenco
2025-01-15 19:52:36 +01:00
parent 52f4ef920c
commit 4f0cf401d6
5 changed files with 47 additions and 46 deletions
+6 -5
View File
@@ -147,7 +147,7 @@ function uniforms_bind_render_target(rt: render_target_t, context: shader_contex
if (starts_with(rt.name, "bloom")) {
// Use bilinear filter for bloom mips to get correct blur
g4_set_tex_params(context._.tex_units[j], tex_addressing_t.CLAMP, tex_addressing_t.CLAMP, tex_filter_t.LINEAR, tex_filter_t.LINEAR, mip_map_filter_t.LINEAR);
g4_set_tex_params(context._.tex_units[j], tex_addressing_t.CLAMP, tex_addressing_t.CLAMP, tex_filter_t.LINEAR, tex_filter_t.LINEAR, mip_map_filter_t.NONE);
continue;
}
@@ -572,16 +572,17 @@ function uniforms_set_obj_const(obj: object_t, loc: kinc_const_loc_t, c: shader_
g4_set_floats(loc, fa);
}
else if (c.type == "int") {
let i: i32 = 0;
let i: i32 = INT_MAX;
if (c.link == "_uid") {
i = obj.uid;
}
else if (uniforms_i32_links != null) {
i = uniforms_i32_links(obj, current_material(obj), c.link);
if (i == 0) {
return; // TODO: return when uniform is not found
}
}
if (i == INT_MAX) {
return;
}
g4_set_int(loc, i);
+38 -35
View File
@@ -209,46 +209,49 @@ function render_path_base_commands(draw_commands: ()=>void) {
render_path_base_end();
}
function render_path_base_draw_bloom(tex: string = "tex") {
if (config_raw.rp_bloom != false) {
if (render_path_base_bloom_mipmaps == null) {
render_path_base_bloom_mipmaps = [];
function render_path_base_draw_bloom(tex: string) {
if (config_raw.rp_bloom == false) {
return;
}
let prev_scale: f32 = 1.0;
for (let i: i32 = 0; i < 10; ++i) {
let t: render_target_t = render_target_create();
t.name = "bloom_mip_" + i;
t.width = 0;
t.height = 0;
t.scale = (prev_scale *= 0.5);
t.format = "RGBA64";
array_push(render_path_base_bloom_mipmaps, render_path_create_render_target(t));
}
if (render_path_base_bloom_mipmaps == null) {
render_path_base_bloom_mipmaps = [];
render_path_load_shader("shader_datas/bloom_pass/bloom_downsample_pass");
render_path_load_shader("shader_datas/bloom_pass/bloom_upsample_pass");
let prev_scale: f32 = 1.0;
for (let i: i32 = 0; i < 10; ++i) {
let t: render_target_t = render_target_create();
t.name = "bloom_mip_" + i;
t.width = 0;
t.height = 0;
prev_scale *= 0.5;
t.scale = prev_scale;
t.format = "RGBA64";
array_push(render_path_base_bloom_mipmaps, render_path_create_render_target(t));
}
let bloom_radius: f32 = 6.5;
let min_dim: f32 = math_min(render_path_current_w, render_path_current_h);
let log_min_dim: f32 = math_max(1.0, math_log2(min_dim) + (bloom_radius - 8.0));
let num_mips: i32 = math_floor(log_min_dim);
render_path_base_bloom_sample_scale = 0.5 + log_min_dim - num_mips;
render_path_load_shader("shader_datas/bloom_pass/bloom_downsample_pass");
render_path_load_shader("shader_datas/bloom_pass/bloom_upsample_pass");
}
for (let i: i32 = 0; i < num_mips; ++i) {
render_path_base_bloom_current_mip = i;
render_path_set_target(render_path_base_bloom_mipmaps[i].name);
render_path_clear_target();
render_path_bind_target(i == 0 ? tex : render_path_base_bloom_mipmaps[i - 1].name, "tex");
render_path_draw_shader("shader_datas/bloom_pass/bloom_downsample_pass");
}
for (let i: i32 = 0; i < num_mips; ++i) {
let mip_level: i32 = num_mips - 1 - i;
render_path_base_bloom_current_mip = mip_level;
render_path_set_target(mip_level == 0 ? tex : render_path_base_bloom_mipmaps[mip_level - 1].name);
render_path_bind_target(render_path_base_bloom_mipmaps[mip_level].name, "tex");
render_path_draw_shader("shader_datas/bloom_pass/bloom_upsample_pass");
}
let bloom_radius: f32 = 6.5;
let min_dim: f32 = math_min(render_path_current_w, render_path_current_h);
let log_min_dim: f32 = math_max(1.0, math_log2(min_dim) + (bloom_radius - 8.0));
let num_mips: i32 = math_floor(log_min_dim);
render_path_base_bloom_sample_scale = 0.5 + log_min_dim - num_mips;
for (let i: i32 = 0; i < num_mips; ++i) {
render_path_base_bloom_current_mip = i;
render_path_set_target(render_path_base_bloom_mipmaps[i].name);
render_path_clear_target(0x00000000);
render_path_bind_target(i == 0 ? tex : render_path_base_bloom_mipmaps[i - 1].name, "tex");
render_path_draw_shader("shader_datas/bloom_pass/bloom_downsample_pass");
}
for (let i: i32 = 0; i < num_mips; ++i) {
let mip_level: i32 = num_mips - 1 - i;
render_path_base_bloom_current_mip = mip_level;
render_path_set_target(mip_level == 0 ? tex : render_path_base_bloom_mipmaps[mip_level - 1].name);
render_path_bind_target(render_path_base_bloom_mipmaps[mip_level].name, "tex");
render_path_draw_shader("shader_datas/bloom_pass/bloom_upsample_pass");
}
}
+1 -1
View File
@@ -178,7 +178,7 @@ function render_path_deferred_draw_deferred() {
render_path_base_draw_voxels();
///end
render_path_base_draw_deferred_light();
render_path_base_draw_bloom();
render_path_base_draw_bloom("tex");
// draw_motion_blur();
// draw_histogram();
+1 -4
View File
@@ -227,10 +227,7 @@ function render_path_raytrace_draw(use_live_layer: bool) {
///end
render_path_raytrace_commands(use_live_layer);
if (config_raw.rp_bloom != false) {
render_path_base_draw_bloom("buf");
}
render_path_base_draw_bloom("buf");
render_path_set_target("buf");
render_path_draw_meshes("overlay");
render_path_set_target("buf");
+1 -1
View File
@@ -15,7 +15,7 @@ function uniforms_ext_i32_link(object: object_t, mat: material_data_t, link: str
if (link == "_bloom_current_mip") {
return render_path_base_bloom_current_mip;
}
return 0;
return INT_MAX;
}
function uniforms_ext_f32_link(object: object_t, mat: material_data_t, link: string): f32 {