diff --git a/armorcore/sources/ts/uniforms.ts b/armorcore/sources/ts/uniforms.ts index 07f879f9..4ca204af 100644 --- a/armorcore/sources/ts/uniforms.ts +++ b/armorcore/sources/ts/uniforms.ts @@ -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); diff --git a/base/sources/render_path_base.ts b/base/sources/render_path_base.ts index d4d66c8e..52ca2698 100644 --- a/base/sources/render_path_base.ts +++ b/base/sources/render_path_base.ts @@ -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"); } } diff --git a/base/sources/render_path_deferred.ts b/base/sources/render_path_deferred.ts index 5184f0c6..dfb1850f 100644 --- a/base/sources/render_path_deferred.ts +++ b/base/sources/render_path_deferred.ts @@ -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(); diff --git a/base/sources/render_path_raytrace.ts b/base/sources/render_path_raytrace.ts index 6ea6841a..1fb62d00 100644 --- a/base/sources/render_path_raytrace.ts +++ b/base/sources/render_path_raytrace.ts @@ -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"); diff --git a/base/sources/uniforms_ext.ts b/base/sources/uniforms_ext.ts index 62168338..2efef9c1 100644 --- a/base/sources/uniforms_ext.ts +++ b/base/sources/uniforms_ext.ts @@ -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 {