Fix bloom
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user